From 1fded56b375bf7a4687af1cdb182899614c1b2a8 Mon Sep 17 00:00:00 2001
From: Robin Dunn <robin@alldunn.com>
Date: Wed, 2 Jul 2003 23:13:10 +0000
Subject: [PATCH] wxPython Merge #2 of 2.4 branch --> HEAD  (branch tag:
 wxPy_2_4_merge_2)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21593 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 wxPython/.cvsignore                           |    2 +
 wxPython/BUILD.win32.txt                      |    1 +
 wxPython/CHANGES.txt                          |   80 +-
 wxPython/MANIFEST.in                          |    2 +
 wxPython/contrib/dllwidget/dllwidget_.py      |   10 +-
 wxPython/contrib/gizmos/gizmos.cpp            | 4423 ++++++++++++++
 wxPython/contrib/gizmos/gizmos.i              |  525 ++
 wxPython/contrib/gizmos/gizmos.py             |  499 +-
 wxPython/contrib/gizmos/treelistctrl.cpp      | 4764 +++++++++++++++
 wxPython/contrib/gizmos/treelistctrl.h        |  509 ++
 wxPython/contrib/glcanvas/gtk/glcanvas.py     |   34 +-
 wxPython/contrib/glcanvas/mac/glcanvas.py     |   24 +-
 wxPython/contrib/glcanvas/msw/glcanvas.py     |   34 +-
 wxPython/contrib/iewin/iewin.py               |   42 +-
 wxPython/contrib/ogl/oglbasic.py              |  468 +-
 wxPython/contrib/ogl/oglcanvas.py             |   94 +-
 wxPython/contrib/ogl/oglhelpers.h             |    5 +-
 wxPython/contrib/ogl/oglshapes.py             |  690 +--
 wxPython/contrib/ogl/oglshapes2.py            |  440 +-
 wxPython/contrib/stc/gtk/stc_.cpp             | 1070 +++-
 wxPython/contrib/stc/gtk/stc_.py              |  900 +--
 wxPython/contrib/stc/mac/stc_.cpp             | 1070 +++-
 wxPython/contrib/stc/mac/stc_.py              |  900 +--
 wxPython/contrib/stc/msw/stc_.cpp             | 1070 +++-
 wxPython/contrib/stc/msw/stc_.py              |  900 +--
 wxPython/contrib/stc/stc_.i                   |    8 +
 wxPython/contrib/xrc/xrc.py                   |  240 +-
 wxPython/demo/About.py                        |   32 +-
 wxPython/demo/AnalogClockWindow.py            |   79 +
 wxPython/demo/ColourDB.py                     |    7 +
 wxPython/demo/ContextHelp.py                  |    7 +
 wxPython/demo/DragAndDrop.py                  |   37 +-
 wxPython/demo/FancyText.py                    |    8 +
 wxPython/demo/FileBrowseButton.py             |    9 +
 wxPython/demo/FontEnumerator.py               |   18 +-
 wxPython/demo/GridDragAndDrop.py              |  104 +
 wxPython/demo/GridSimple.py                   |    5 +
 wxPython/demo/ImageBrowser.py                 |   15 +-
 wxPython/demo/LayoutAnchors.py                |    5 +-
 wxPython/demo/Layoutf.py                      |    9 +
 wxPython/demo/Main.py                         |  398 +-
 wxPython/demo/MaskedEditControls.py           |  540 ++
 wxPython/demo/NewNamespace.py                 |   47 +
 wxPython/demo/OOR.py                          |    9 +
 wxPython/demo/PopupMenu.py                    |  148 +
 wxPython/demo/PrintFramework.py               |   11 +-
 wxPython/demo/PyCrust.py                      |   10 +-
 wxPython/demo/PyCrustWithFilling.py           |   28 -
 wxPython/demo/PyShell.py                      |   23 +
 wxPython/demo/PythonEvents.py                 |    7 +
 wxPython/demo/ShapedWindow.py                 |  122 +
 wxPython/demo/Sizers.py                       |   12 +-
 wxPython/demo/SlashDot.py                     |  379 --
 wxPython/demo/TablePrint.py                   |    9 +
 wxPython/demo/Threads.py                      |    8 +
 wxPython/demo/URLDragAndDrop.py               |    9 +
 wxPython/demo/Unicode.py                      |    9 +
 wxPython/demo/XMLtreeview.py                  |    8 +
 wxPython/demo/bmp_source/Tux.png              |  Bin 0 -> 31315 bytes
 wxPython/demo/data/stc.h.html                 |  584 +-
 wxPython/demo/data/wxPackage.html             |  290 +
 wxPython/demo/demoMainLoop.py                 |   56 +-
 wxPython/demo/encode_bitmaps.py               |    1 +
 wxPython/demo/images.py                       | 1317 +++-
 wxPython/demo/infoframe.py                    |    8 +-
 wxPython/demo/run.py                          |   34 +-
 wxPython/demo/simple.py                       |   31 +-
 wxPython/demo/template.py                     |    6 +-
 wxPython/demo/wxCalendar.py                   |   28 +-
 wxPython/demo/wxCalendarCtrl.py               |   14 +-
 wxPython/demo/wxCheckBox.py                   |   10 +-
 wxPython/demo/wxCheckListBox.py               |   10 +-
 wxPython/demo/wxChoice.py                     |   10 +
 wxPython/demo/wxColourDialog.py               |   10 +
 wxPython/demo/wxComboBox.py                   |    6 +
 wxPython/demo/wxEditableListBox.py            |    9 +
 wxPython/demo/wxFileDialog.py                 |   23 +-
 wxPython/demo/wxFileDialog_Save.py            |   44 +
 wxPython/demo/wxFindReplaceDialog.py          |    9 +
 wxPython/demo/wxFloatBar.py                   |   13 +-
 wxPython/demo/wxFrame.py                      |    9 +
 wxPython/demo/wxGauge.py                      |    9 +
 wxPython/demo/wxGenericDirCtrl.py             |    7 +
 wxPython/demo/wxGrid.py                       |    6 +-
 wxPython/demo/wxGrid_MegaExample.py           |  451 ++
 wxPython/demo/wxImageFromStream.py            |    9 +
 wxPython/demo/wxJoystick.py                   |    9 +
 wxPython/demo/wxLEDNumberCtrl.py              |    8 +
 wxPython/demo/wxLayoutConstraints.py          |   30 +-
 wxPython/demo/wxListCtrl.py                   |   28 +-
 wxPython/demo/wxListCtrl_virtual.py           |    2 +-
 wxPython/demo/wxMDIWindows.py                 |    9 +
 wxPython/demo/wxMVCTree.py                    |   22 +-
 wxPython/demo/wxMenu.py                       |   71 +-
 wxPython/demo/wxMessageDialog.py              |   37 +-
 wxPython/demo/wxMimeTypesManager.py           |    8 +
 wxPython/demo/wxMiniFrame.py                  |    9 +
 wxPython/demo/wxMultipleChoiceDialog.py       |    9 +
 wxPython/demo/wxNotebook.py                   |   17 +-
 wxPython/demo/wxOGL.py                        |    2 +-
 wxPython/demo/wxPageSetupDialog.py            |   10 +-
 wxPython/demo/wxPlotCanvas.py                 |    8 +
 wxPython/demo/wxPrintDialog.py                |   24 +-
 wxPython/demo/wxProcess.py                    |    9 +
 wxPython/demo/wxProgressDialog.py             |    9 +-
 wxPython/demo/wxRightTextCtrl.py              |    7 +
 wxPython/demo/wxSashWindow.py                 |   16 +-
 wxPython/demo/wxScrolledMessageDialog.py      |   10 +-
 wxPython/demo/wxScrolledPanel.py              |    8 +-
 wxPython/demo/wxScrolledWindow.py             |   31 +-
 wxPython/demo/wxSingleChoiceDialog.py         |   18 +-
 wxPython/demo/wxSpinButton.py                 |    7 +
 wxPython/demo/wxSpinCtrl.py                   |    9 +
 wxPython/demo/wxSplitterWindow.py             |   46 +-
 wxPython/demo/wxStaticBitmap.py               |   10 +-
 wxPython/demo/wxStaticText.py                 |    5 +-
 wxPython/demo/wxStatusBar.py                  |   15 +-
 wxPython/demo/wxStyledTextCtrl_1.py           |    5 +-
 wxPython/demo/wxStyledTextCtrl_2.py           |   38 +-
 wxPython/demo/wxTextEntryDialog.py            |   11 +-
 wxPython/demo/wxTimeCtrl.py                   |  289 +-
 wxPython/demo/wxTimer.py                      |   17 +-
 wxPython/demo/wxToggleButton.py               |    9 +
 wxPython/demo/wxToolBar.py                    |   12 +-
 wxPython/demo/wxTreeCtrl.py                   |    2 +-
 wxPython/demo/wxTreeListCtrl.py               |  103 +
 wxPython/demo/wxWave.py                       |    9 +
 wxPython/demo/wxXmlResourceHandler.py         |    2 +-
 wxPython/distrib/README.1st.txt               |   19 +-
 wxPython/distrib/README.viewdocs.txt          |    2 +-
 wxPython/distrib/mac/wxPythonOSX/build        |    3 +
 .../mac/wxPythonOSX/resources/Welcome.txt     |    4 +-
 .../mac/wxPythonOSX/resources/postflight      |    8 +-
 wxPython/distrib/make_installer.py            |  138 +-
 wxPython/distrib/make_static_setup.py         |  111 +
 wxPython/distrib/makerpm                      |    8 +-
 wxPython/distrib/wxPythonFull.spec.in         |   66 +-
 wxPython/distrib/wx_conv.py                   |  220 +
 wxPython/distrib/wx_create.py                 |  116 +
 wxPython/docs/PyManual.txt                    |  225 +
 wxPython/docs/default.css                     |  208 +
 wxPython/docs/docutils.conf                   |    6 +
 wxPython/docs/screenshots/hello-linux.png     |  Bin 0 -> 62715 bytes
 wxPython/docs/screenshots/hello-mac.png       |  Bin 0 -> 61195 bytes
 wxPython/docs/screenshots/hello-win98.png     |  Bin 0 -> 49310 bytes
 wxPython/docs/wxPackage.txt                   |  180 +
 wxPython/docs/wxPythonDocs.txt                |   77 +
 wxPython/docs/wxPythonExamples.txt            |  118 +
 wxPython/docs/wxPythonManual.txt              | 1040 ++++
 wxPython/docs/wxPythonTutorial.txt            |   43 +
 wxPython/samples/doodle/doodle.py             |   65 +-
 wxPython/samples/doodle/sample.ddl            |  257 +
 wxPython/samples/doodle/superdoodle.py        |  195 +-
 wxPython/{demo => samples/hangman}/hangman.py |    0
 .../samples/wx_examples/basic/__init__.py     |    1 +
 wxPython/samples/wx_examples/basic/app.py     |   27 +
 wxPython/samples/wx_examples/basic/frame.py   |   33 +
 .../samples/wx_examples/hello/__init__.py     |    1 +
 wxPython/samples/wx_examples/hello/hello.py   |   38 +
 .../samples/wx_examples/hello/wxPython.jpg    |  Bin 0 -> 14557 bytes
 wxPython/scripts/CreateBatchFiles.py          |   16 +-
 wxPython/scripts/helpviewer.bat               |    2 +-
 wxPython/scripts/img2png.bat                  |    2 +-
 wxPython/scripts/img2py.bat                   |    2 +-
 wxPython/scripts/img2xpm.bat                  |    2 +-
 wxPython/scripts/pyalacarte                   |    4 +
 wxPython/scripts/pyalacarte.bat               |    3 +
 wxPython/scripts/pyalamode                    |    4 +
 wxPython/scripts/pyalamode.bat                |    3 +
 wxPython/scripts/pycrust                      |    2 +-
 wxPython/scripts/pycrust.bat                  |    2 +-
 wxPython/scripts/pycwrap                      |    7 -
 wxPython/scripts/pycwrap.bat                  |    3 -
 wxPython/scripts/pyshell                      |    2 +-
 wxPython/scripts/pyshell.bat                  |    2 +-
 wxPython/scripts/pywrap                       |    4 +
 wxPython/scripts/pywrap.bat                   |    3 +
 wxPython/scripts/xrced.bat                    |    2 +-
 wxPython/setup.py                             |  206 +-
 wxPython/src/__init__.py                      |    3 +-
 wxPython/src/__version__.py                   |   13 +-
 wxPython/src/_defs.i                          |    2 +
 wxPython/src/_extras.py                       |  162 +-
 wxPython/src/controls.i                       |   25 +-
 wxPython/src/controls2.i                      |   83 +-
 wxPython/src/drawlist.cpp                     |    1 -
 wxPython/src/fonts.i                          |    6 +-
 wxPython/src/gdi.i                            |   57 +-
 wxPython/src/grid.i                           |   11 +-
 wxPython/src/gtk/calendar.py                  |  108 +-
 wxPython/src/gtk/clip_dnd.py                  |  200 +-
 wxPython/src/gtk/cmndlgs.py                   |  206 +-
 wxPython/src/gtk/controls.cpp                 |   36 +-
 wxPython/src/gtk/controls.py                  |  589 +-
 wxPython/src/gtk/controls2.cpp                |  288 +-
 wxPython/src/gtk/controls2.py                 |  569 +-
 wxPython/src/gtk/events.py                    |  450 +-
 wxPython/src/gtk/filesys.py                   |   86 +-
 wxPython/src/gtk/fonts.py                     |  198 +-
 wxPython/src/gtk/frames.cpp                   |   37 +
 wxPython/src/gtk/frames.py                    |  131 +-
 wxPython/src/gtk/gdi.cpp                      |  231 +-
 wxPython/src/gtk/gdi.py                       |  581 +-
 wxPython/src/gtk/grid.cpp                     |  232 +-
 wxPython/src/gtk/grid.py                      |  894 +--
 wxPython/src/gtk/help.cpp                     |   12 +-
 wxPython/src/gtk/help.py                      |   48 +-
 wxPython/src/gtk/html.cpp                     |   73 +-
 wxPython/src/gtk/html.py                      |  367 +-
 wxPython/src/gtk/htmlhelp.py                  |  126 +-
 wxPython/src/gtk/image.py                     |  193 +-
 wxPython/src/gtk/mdi.py                       |   46 +-
 wxPython/src/gtk/misc.py                      |  224 +-
 wxPython/src/gtk/misc2.cpp                    |    6 +-
 wxPython/src/gtk/misc2.py                     |  513 +-
 wxPython/src/gtk/printfw.cpp                  | 4262 +++++++++----
 wxPython/src/gtk/printfw.py                   |  633 +-
 wxPython/src/gtk/sizers.cpp                   | 1326 +---
 wxPython/src/gtk/sizers.py                    |  421 +-
 wxPython/src/gtk/stattool.py                  |  194 +-
 wxPython/src/gtk/streams.py                   |   40 +-
 wxPython/src/gtk/utils.py                     |  402 +-
 wxPython/src/gtk/windows.cpp                  |   99 +
 wxPython/src/gtk/windows.py                   |  669 ++-
 wxPython/src/gtk/windows2.cpp                 |    2 +-
 wxPython/src/gtk/windows2.py                  |  252 +-
 wxPython/src/gtk/windows3.cpp                 |    2 -
 wxPython/src/gtk/windows3.py                  |  152 +-
 wxPython/src/gtk/wizard.py                    |  104 +-
 wxPython/src/gtk/wx.cpp                       |   16 +-
 wxPython/src/gtk/wx.py                        |  221 +-
 wxPython/src/help.i                           |    4 +-
 wxPython/src/helpers.cpp                      |   40 +-
 wxPython/src/helpers.h                        |  216 +-
 wxPython/src/html.i                           |   12 +-
 wxPython/src/image.i                          |    2 +
 wxPython/src/misc2.i                          |   16 +-
 wxPython/src/my_typemaps.i                    |    1 +
 wxPython/src/printfw.i                        |  383 +-
 wxPython/src/pytree.h                         |   47 +
 wxPython/src/sizers.i                         |  379 +-
 wxPython/src/windows.i                        |   16 +-
 wxPython/src/windows2.i                       |    2 +-
 wxPython/src/windows3.i                       |   36 +-
 wxPython/src/wx.i                             |   16 +-
 wxPython/tests/.cvsignore                     |   13 -
 wxPython/tests/README.txt                     |   12 -
 wxPython/tests/TstLstIcon.py                  |  108 -
 wxPython/tests/alternateThread.py             |   52 -
 wxPython/tests/atom.bmp                       |  Bin 630 -> 0 bytes
 wxPython/tests/bitmaps/copy.bmp               |  Bin 238 -> 0 bytes
 wxPython/tests/bitmaps/mondrian.ico           |  Bin 766 -> 0 bytes
 wxPython/tests/bitmaps/new.bmp                |  Bin 238 -> 0 bytes
 wxPython/tests/bitmaps/open.bmp               |  Bin 238 -> 0 bytes
 wxPython/tests/bitmaps/paste.bmp              |  Bin 238 -> 0 bytes
 wxPython/tests/bitmaps/smiles.bmp             |  Bin 246 -> 0 bytes
 wxPython/tests/bitmaps/smiles.ico             |  Bin 766 -> 0 bytes
 wxPython/tests/bitmaps/test2.bmp              |  Bin 12342 -> 0 bytes
 wxPython/tests/bitmaps/tog1.bmp               |  Bin 238 -> 0 bytes
 wxPython/tests/bitmaps/tog2.bmp               |  Bin 238 -> 0 bytes
 wxPython/tests/blit.py                        |   54 -
 wxPython/tests/dynamicform.py                 |   62 -
 wxPython/tests/fs_test.py                     |   41 -
 wxPython/tests/getvalues.py                   |   48 -
 wxPython/tests/grid.py                        |   24 -
 wxPython/tests/gridtest.py                    |  219 -
 wxPython/tests/hangman.py                     |  390 --
 wxPython/tests/hook.py                        |   45 -
 wxPython/tests/info.bmp                       |  Bin 370 -> 0 bytes
 wxPython/tests/leave.py                       |   26 -
 wxPython/tests/listGetItem.py                 |   61 -
 wxPython/tests/memleak.py                     |  157 -
 wxPython/tests/menu_replace.py                |   43 -
 wxPython/tests/og.py                          |   69 -
 wxPython/tests/paul.py                        |   28 -
 wxPython/tests/popup.py                       |  123 -
 wxPython/tests/pytree.py                      |  203 -
 wxPython/tests/query.bmp                      |  Bin 630 -> 0 bytes
 wxPython/tests/runner.py                      |   36 -
 wxPython/tests/scroll_paint.py                |   38 -
 wxPython/tests/spies.py                       |  136 -
 wxPython/tests/spies2.py                      |   69 -
 wxPython/tests/ste.py                         |   24 -
 wxPython/tests/table.bmp                      |  Bin 630 -> 0 bytes
 wxPython/tests/tabs.py                        |   37 -
 wxPython/tests/test1.py                       |   83 -
 wxPython/tests/test2.py                       |  212 -
 wxPython/tests/test3.py                       |  216 -
 wxPython/tests/test4.py                       | 1121 ----
 wxPython/tests/test5.py                       |   91 -
 wxPython/tests/test6.py                       |   81 -
 wxPython/tests/test7.py                       |  123 -
 wxPython/tests/test8.py                       |   85 -
 wxPython/tests/testDlg.py                     |   49 -
 wxPython/tests/testTree.py                    |  116 -
 wxPython/tests/testi.py                       |   25 -
 wxPython/tests/thrtest.py                     |   39 -
 wxPython/tests/thtest.py                      |   29 -
 wxPython/tests/txml.py                        |   87 -
 wxPython/tests/val.py                         |  107 -
 wxPython/tests/wxFrame1.py                    |   81 -
 wxPython/tests/wxPlotCanvas.py                |  459 --
 wxPython/tests/wxSlash.py                     |  359 --
 wxPython/tests/zigron.py                      |   75 -
 wxPython/wx/__init__.py                       |   73 +
 wxPython/wx/calendar.py                       |   11 +
 wxPython/wx/dllwidget.py                      |   11 +
 wxPython/wx/gizmos.py                         |   11 +
 wxPython/wx/glcanvas.py                       |   11 +
 wxPython/wx/grid.py                           |   11 +
 wxPython/wx/help.py                           |   11 +
 wxPython/wx/html.py                           |   11 +
 wxPython/wx/iewin.py                          |   11 +
 wxPython/wx/lib/CDate.py                      |   11 +
 wxPython/wx/lib/ClickableHtmlWindow.py        |   11 +
 wxPython/wx/lib/ErrorDialogs.py               |   11 +
 wxPython/wx/lib/ErrorDialogs_wdr.py           |   11 +
 wxPython/wx/lib/PythonBitmaps.py              |   11 +
 wxPython/wx/lib/__init__.py                   |    1 +
 wxPython/wx/lib/activexwrapper.py             |   11 +
 wxPython/wx/lib/analogclock.py                |   11 +
 wxPython/wx/lib/anchors.py                    |   11 +
 wxPython/wx/lib/buttons.py                    |   11 +
 wxPython/wx/lib/calendar.py                   |   11 +
 wxPython/wx/lib/colourchooser/__init__.py     |    1 +
 wxPython/wx/lib/colourchooser/canvas.py       |   11 +
 wxPython/wx/lib/colourchooser/intl.py         |   11 +
 wxPython/wx/lib/colourchooser/pycolourbox.py  |   11 +
 .../wx/lib/colourchooser/pycolourchooser.py   |   11 +
 .../wx/lib/colourchooser/pycolourslider.py    |   11 +
 wxPython/wx/lib/colourchooser/pypalette.py    |   11 +
 wxPython/wx/lib/colourdb.py                   |   11 +
 wxPython/wx/lib/colourselect.py               |   11 +
 wxPython/wx/lib/dialogs.py                    |   11 +
 wxPython/wx/lib/editor/__init__.py            |    1 +
 wxPython/wx/lib/editor/editor.py              |   11 +
 wxPython/wx/lib/editor/images.py              |   11 +
 wxPython/wx/lib/editor/selection.py           |   11 +
 wxPython/wx/lib/evtmgr.py                     |   11 +
 wxPython/wx/lib/fancytext.py                  |   11 +
 wxPython/wx/lib/filebrowsebutton.py           |   11 +
 wxPython/wx/lib/floatbar.py                   |   11 +
 wxPython/wx/lib/gridmovers.py                 |   11 +
 wxPython/wx/lib/grids.py                      |   11 +
 wxPython/wx/lib/imagebrowser.py               |   11 +
 wxPython/wx/lib/imageutils.py                 |   11 +
 wxPython/wx/lib/infoframe.py                  |   11 +
 wxPython/wx/lib/intctrl.py                    |   11 +
 wxPython/wx/lib/layoutf.py                    |   11 +
 wxPython/wx/lib/maskededit.py                 |   11 +
 wxPython/wx/lib/mixins/__init__.py            |    1 +
 wxPython/wx/lib/mixins/grid.py                |   11 +
 wxPython/wx/lib/mixins/imagelist.py           |   11 +
 wxPython/wx/lib/mixins/listctrl.py            |   11 +
 wxPython/wx/lib/mixins/rubberband.py          |   11 +
 wxPython/wx/lib/multisash.py                  |   11 +
 wxPython/wx/lib/mvctree.py                    |   11 +
 wxPython/wx/lib/popupctl.py                   |   11 +
 wxPython/wx/lib/printout.py                   |   11 +
 wxPython/wx/lib/pubsub.py                     |   11 +
 wxPython/wx/lib/pyshell.py                    |   11 +
 wxPython/wx/lib/rcsizer.py                    |   11 +
 wxPython/wx/lib/rightalign.py                 |   11 +
 wxPython/wx/lib/rpcMixin.py                   |   11 +
 wxPython/wx/lib/scrolledpanel.py              |   11 +
 wxPython/wx/lib/sheet.py                      |   11 +
 wxPython/wx/lib/shell.py                      |   11 +
 wxPython/wx/lib/splashscreen.py               |   11 +
 wxPython/wx/lib/stattext.py                   |   11 +
 wxPython/wx/lib/throbber.py                   |   11 +
 wxPython/wx/lib/timectrl.py                   |   11 +
 wxPython/wx/lib/vtk.py                        |   11 +
 wxPython/wx/lib/wxPlotCanvas.py               |   11 +
 wxPython/wx/lib/wxpTag.py                     |   11 +
 wxPython/wx/ogl.py                            |   11 +
 wxPython/wx/py/PyAlaCarte.py                  |   11 +
 wxPython/wx/py/PyAlaMode.py                   |   11 +
 wxPython/wx/py/PyCrust.py                     |   11 +
 wxPython/wx/py/PyFilling.py                   |   11 +
 wxPython/wx/py/PyShell.py                     |   11 +
 wxPython/wx/py/PyWrap.py                      |   11 +
 wxPython/wx/py/__init__.py                    |    3 +
 wxPython/wx/py/buffer.py                      |   11 +
 wxPython/wx/py/crust.py                       |   11 +
 wxPython/wx/py/dispatcher.py                  |   11 +
 wxPython/wx/py/document.py                    |   11 +
 wxPython/wx/py/editor.py                      |   11 +
 wxPython/wx/py/editwindow.py                  |   11 +
 wxPython/wx/py/filling.py                     |   11 +
 wxPython/wx/py/frame.py                       |   11 +
 wxPython/wx/py/images.py                      |   11 +
 wxPython/wx/py/interpreter.py                 |   11 +
 wxPython/wx/py/introspect.py                  |   11 +
 wxPython/wx/py/pseudo.py                      |   11 +
 wxPython/wx/py/shell.py                       |   11 +
 wxPython/wx/py/version.py                     |   11 +
 wxPython/wx/stc.py                            |   11 +
 wxPython/wx/tools/XRCed/__init__.py           |    1 +
 wxPython/wx/tools/XRCed/encode_bitmaps.py     |   11 +
 wxPython/wx/tools/XRCed/globals.py            |   11 +
 wxPython/wx/tools/XRCed/images.py             |   11 +
 wxPython/wx/tools/XRCed/panel.py              |   11 +
 wxPython/wx/tools/XRCed/params.py             |   11 +
 wxPython/wx/tools/XRCed/tools.py              |   11 +
 wxPython/wx/tools/XRCed/tree.py               |   11 +
 wxPython/wx/tools/XRCed/undo.py               |   11 +
 wxPython/wx/tools/XRCed/xrced.py              |   11 +
 wxPython/wx/tools/XRCed/xxx.py                |   11 +
 wxPython/wx/tools/__init__.py                 |    1 +
 wxPython/wx/tools/dbg.py                      |   11 +
 wxPython/wx/tools/helpviewer.py               |   11 +
 wxPython/wx/tools/img2img.py                  |   11 +
 wxPython/wx/tools/img2png.py                  |   11 +
 wxPython/wx/tools/img2py.py                   |   11 +
 wxPython/wx/tools/img2xpm.py                  |   11 +
 wxPython/wx/wizard.py                         |   11 +
 wxPython/wx/xrc.py                            |   11 +
 wxPython/wxPython/lib/PyCrust/.cvsignore      |    3 -
 wxPython/wxPython/lib/PyCrust/CHANGES.txt     |  512 --
 wxPython/wxPython/lib/PyCrust/PyCrustApp.py   |   66 +-
 wxPython/wxPython/lib/PyCrust/PyFillingApp.py |   41 +-
 wxPython/wxPython/lib/PyCrust/PyShellApp.py   |   67 +-
 wxPython/wxPython/lib/PyCrust/__init__.py     |    6 +-
 wxPython/wxPython/lib/PyCrust/crust.py        |  169 +-
 wxPython/wxPython/lib/PyCrust/filling.py      |  435 +-
 wxPython/wxPython/lib/PyCrust/shell.py        | 1186 +---
 wxPython/wxPython/lib/PyCrust/shellmenu.py    |  226 -
 wxPython/wxPython/lib/PyCrust/wrap.py         |   51 +-
 wxPython/wxPython/lib/PyCrust/wxd/Sizers.py   |  488 --
 wxPython/wxPython/lib/analogclock.py          |  201 +
 wxPython/wxPython/lib/calendar.py             |   10 +-
 wxPython/wxPython/lib/dialogs.py              |    7 +-
 wxPython/wxPython/lib/evtmgr.py               |    7 +-
 wxPython/wxPython/lib/imagebrowser.py         |    1 +
 wxPython/wxPython/lib/infoframe.py            |    4 +-
 wxPython/wxPython/lib/intctrl.py              |   60 +-
 wxPython/wxPython/lib/maskededit.py           | 5348 +++++++++++++++++
 wxPython/wxPython/lib/mixins/rubberband.py    |   19 +-
 wxPython/wxPython/lib/popupctl.py             |    8 +-
 wxPython/wxPython/lib/pubsub.py               |    2 +-
 wxPython/wxPython/lib/rightalign.py           |    9 +
 wxPython/wxPython/lib/scrolledpanel.py        |   18 +-
 wxPython/wxPython/lib/stattext.py             |   20 +-
 wxPython/wxPython/lib/timectrl.py             | 1550 +++--
 wxPython/wxPython/py/CHANGES.txt              |  594 ++
 .../{lib/PyCrust/PyCrust.ico => py/Py.ico}    |  Bin
 wxPython/wxPython/py/PyAlaCarte.py            |   43 +
 wxPython/wxPython/py/PyAlaMode.py             |   43 +
 wxPython/wxPython/py/PyAlaModeTest.py         |   42 +
 wxPython/wxPython/py/PyCrust.ico              |  Bin 0 -> 4710 bytes
 wxPython/wxPython/py/PyCrust.py               |   78 +
 wxPython/wxPython/py/PyCrust_16.png           |  Bin 0 -> 706 bytes
 wxPython/wxPython/py/PyCrust_32.png           |  Bin 0 -> 1273 bytes
 wxPython/wxPython/py/PyFilling.py             |   43 +
 wxPython/wxPython/py/PyShell.py               |   79 +
 wxPython/wxPython/py/PyWrap.py                |   56 +
 .../wxPython/{lib/PyCrust => py}/README.txt   |    0
 wxPython/wxPython/py/__init__.py              |   20 +
 wxPython/wxPython/py/buffer.py                |  144 +
 wxPython/wxPython/py/crust.py                 |  221 +
 .../{lib/PyCrust => py}/dispatcher.py         |    0
 wxPython/wxPython/py/document.py              |   49 +
 wxPython/wxPython/py/editor.py                |  839 +++
 wxPython/wxPython/py/editwindow.py            |  199 +
 wxPython/wxPython/py/filling.py               |  337 ++
 wxPython/wxPython/py/frame.py                 |  348 ++
 .../wxPython/{lib/PyCrust => py}/images.py    |   39 +-
 .../{lib/PyCrust => py}/interpreter.py        |    6 +-
 .../{lib/PyCrust => py}/introspect.py         |   18 +-
 .../wxPython/{lib/PyCrust => py}/pseudo.py    |    0
 wxPython/wxPython/py/shell.py                 | 1039 ++++
 .../wxPython/py/tests/test_interpreter.py     |   82 +
 wxPython/wxPython/py/tests/test_introspect.py |  862 +++
 wxPython/wxPython/py/tests/test_pseudo.py     |   81 +
 wxPython/wxPython/py/tests/test_version.py    |   49 +
 wxPython/wxPython/py/tests/testall.py         |   25 +
 .../wxPython/{lib/PyCrust => py}/version.py   |    8 +-
 .../{lib/PyCrust => py}/wxd/Accelerators.py   |    0
 .../wxPython/{lib/PyCrust => py}/wxd/App.py   |    0
 .../wxPython/{lib/PyCrust => py}/wxd/Base.py  |    0
 .../{lib/PyCrust => py}/wxd/ClipDragDrop.py   |    0
 .../{lib/PyCrust => py}/wxd/Config.py         |    0
 .../{lib/PyCrust => py}/wxd/Controls.py       |   35 +-
 .../{lib/PyCrust => py}/wxd/DataStructures.py |    0
 .../{lib/PyCrust => py}/wxd/DateTime.py       |    0
 .../{lib/PyCrust => py}/wxd/Dialogs.py        |    0
 .../{lib/PyCrust => py}/wxd/Drawing.py        |    0
 .../{lib/PyCrust => py}/wxd/Errors.py         |    0
 .../{lib/PyCrust => py}/wxd/EventFunctions.py |    7 +
 .../{lib/PyCrust => py}/wxd/Events.py         |    0
 .../{lib/PyCrust => py}/wxd/FileSystem.py     |    0
 .../{lib/PyCrust => py}/wxd/Frames.py         |  109 +-
 .../{lib/PyCrust => py}/wxd/Functions.py      |    0
 .../wxPython/{lib/PyCrust => py}/wxd/Help.py  |    0
 .../{lib/PyCrust => py}/wxd/ImageHandlers.py  |    0
 .../{lib/PyCrust => py}/wxd/Joystick.py       |    0
 .../PyCrust => py}/wxd/LayoutConstraints.py   |    0
 .../{lib/PyCrust => py}/wxd/Logging.py        |    0
 .../wxPython/{lib/PyCrust => py}/wxd/Menus.py |    0
 .../{lib/PyCrust => py}/wxd/MimeTypes.py      |    0
 .../wxPython/{lib/PyCrust => py}/wxd/Misc.py  |    0
 .../wxPython/{lib/PyCrust => py}/wxd/Panel.py |    0
 .../{lib/PyCrust => py}/wxd/Parameters.py     |    1 +
 .../{lib/PyCrust => py}/wxd/Printing.py       |    0
 .../{lib/PyCrust => py}/wxd/Process.py        |    0
 .../{lib/PyCrust => py}/wxd/SashSplitter.py   |    0
 wxPython/wxPython/py/wxd/Sizers.py            |  605 ++
 .../{lib/PyCrust => py}/wxd/Streams.py        |    0
 .../PyCrust => py}/wxd/StyledTextConstants.py |    0
 .../{lib/PyCrust => py}/wxd/Threading.py      |    0
 .../{lib/PyCrust => py}/wxd/ToolBar.py        |    0
 .../wxPython/{lib/PyCrust => py}/wxd/Tree.py  |   57 +-
 .../{lib/PyCrust => py}/wxd/Validators.py     |    0
 .../{lib/PyCrust => py}/wxd/Window.py         |    0
 .../{lib/PyCrust => py}/wxd/__init__.py       |    0
 .../wxPython/{lib/PyCrust => py}/wxd/d_stc.py |    0
 .../wxPython/{lib/PyCrust => py}/wxd/d_wx.py  |    0
 .../{lib/PyCrust => py}/wxd/decorator.py      |    3 +-
 .../wxPython/{lib/PyCrust => py}/wxd/gen.py   |    0
 wxPython/wxPython/py/wxd/genapi.py            |  133 +
 .../wxPython/{lib/PyCrust => py}/wxd/stc_.py  |    0
 .../wxPython/{lib/PyCrust => py}/wxd/wx_.py   |    4 +
 wxPython/wxPython/tools/XRCed/CHANGES.txt     |   37 +
 wxPython/wxPython/tools/XRCed/XRCed_16.png    |  Bin 0 -> 542 bytes
 wxPython/wxPython/tools/XRCed/XRCed_32.png    |  Bin 0 -> 677 bytes
 wxPython/wxPython/tools/XRCed/globals.py      |    4 +-
 wxPython/wxPython/tools/XRCed/params.py       |  108 +-
 .../tools/XRCed/src-images/TreeToolBar.png    |  Bin 194 -> 185 bytes
 wxPython/wxPython/tools/XRCed/tools.py        |    1 +
 wxPython/wxPython/tools/XRCed/tree.py         |  163 +-
 wxPython/wxPython/tools/XRCed/xrced.py        |  105 +-
 wxPython/wxPython/tools/XRCed/xrced.xrc       |   50 +
 wxPython/wxPython/tools/XRCed/xxx.py          |   51 +-
 wxPython/wxSWIG/Modules/pycpp.cxx             |   10 +-
 wxPython/wxSWIG/Modules/python.cxx            |    2 +-
 535 files changed, 49070 insertions(+), 20238 deletions(-)
 create mode 100644 wxPython/contrib/gizmos/treelistctrl.cpp
 create mode 100644 wxPython/contrib/gizmos/treelistctrl.h
 create mode 100644 wxPython/demo/AnalogClockWindow.py
 create mode 100644 wxPython/demo/GridDragAndDrop.py
 create mode 100644 wxPython/demo/MaskedEditControls.py
 create mode 100644 wxPython/demo/NewNamespace.py
 create mode 100644 wxPython/demo/PopupMenu.py
 delete mode 100644 wxPython/demo/PyCrustWithFilling.py
 create mode 100644 wxPython/demo/PyShell.py
 create mode 100644 wxPython/demo/ShapedWindow.py
 delete mode 100644 wxPython/demo/SlashDot.py
 create mode 100644 wxPython/demo/bmp_source/Tux.png
 create mode 100644 wxPython/demo/data/wxPackage.html
 create mode 100644 wxPython/demo/wxFileDialog_Save.py
 create mode 100644 wxPython/demo/wxGrid_MegaExample.py
 create mode 100644 wxPython/demo/wxTreeListCtrl.py
 create mode 100644 wxPython/distrib/make_static_setup.py
 create mode 100644 wxPython/distrib/wx_conv.py
 create mode 100644 wxPython/distrib/wx_create.py
 create mode 100644 wxPython/docs/PyManual.txt
 create mode 100644 wxPython/docs/default.css
 create mode 100644 wxPython/docs/docutils.conf
 create mode 100644 wxPython/docs/screenshots/hello-linux.png
 create mode 100644 wxPython/docs/screenshots/hello-mac.png
 create mode 100644 wxPython/docs/screenshots/hello-win98.png
 create mode 100644 wxPython/docs/wxPackage.txt
 create mode 100644 wxPython/docs/wxPythonDocs.txt
 create mode 100644 wxPython/docs/wxPythonExamples.txt
 create mode 100644 wxPython/docs/wxPythonManual.txt
 create mode 100644 wxPython/docs/wxPythonTutorial.txt
 rename wxPython/{demo => samples/hangman}/hangman.py (100%)
 create mode 100644 wxPython/samples/wx_examples/basic/__init__.py
 create mode 100755 wxPython/samples/wx_examples/basic/app.py
 create mode 100755 wxPython/samples/wx_examples/basic/frame.py
 create mode 100644 wxPython/samples/wx_examples/hello/__init__.py
 create mode 100755 wxPython/samples/wx_examples/hello/hello.py
 create mode 100644 wxPython/samples/wx_examples/hello/wxPython.jpg
 create mode 100755 wxPython/scripts/pyalacarte
 create mode 100755 wxPython/scripts/pyalacarte.bat
 create mode 100755 wxPython/scripts/pyalamode
 create mode 100755 wxPython/scripts/pyalamode.bat
 delete mode 100755 wxPython/scripts/pycwrap
 delete mode 100755 wxPython/scripts/pycwrap.bat
 create mode 100755 wxPython/scripts/pywrap
 create mode 100755 wxPython/scripts/pywrap.bat
 create mode 100644 wxPython/src/pytree.h
 delete mode 100644 wxPython/tests/.cvsignore
 delete mode 100644 wxPython/tests/README.txt
 delete mode 100644 wxPython/tests/TstLstIcon.py
 delete mode 100644 wxPython/tests/alternateThread.py
 delete mode 100644 wxPython/tests/atom.bmp
 delete mode 100644 wxPython/tests/bitmaps/copy.bmp
 delete mode 100644 wxPython/tests/bitmaps/mondrian.ico
 delete mode 100644 wxPython/tests/bitmaps/new.bmp
 delete mode 100644 wxPython/tests/bitmaps/open.bmp
 delete mode 100644 wxPython/tests/bitmaps/paste.bmp
 delete mode 100644 wxPython/tests/bitmaps/smiles.bmp
 delete mode 100644 wxPython/tests/bitmaps/smiles.ico
 delete mode 100644 wxPython/tests/bitmaps/test2.bmp
 delete mode 100644 wxPython/tests/bitmaps/tog1.bmp
 delete mode 100644 wxPython/tests/bitmaps/tog2.bmp
 delete mode 100644 wxPython/tests/blit.py
 delete mode 100644 wxPython/tests/dynamicform.py
 delete mode 100644 wxPython/tests/fs_test.py
 delete mode 100644 wxPython/tests/getvalues.py
 delete mode 100644 wxPython/tests/grid.py
 delete mode 100644 wxPython/tests/gridtest.py
 delete mode 100644 wxPython/tests/hangman.py
 delete mode 100644 wxPython/tests/hook.py
 delete mode 100644 wxPython/tests/info.bmp
 delete mode 100644 wxPython/tests/leave.py
 delete mode 100644 wxPython/tests/listGetItem.py
 delete mode 100644 wxPython/tests/memleak.py
 delete mode 100644 wxPython/tests/menu_replace.py
 delete mode 100644 wxPython/tests/og.py
 delete mode 100644 wxPython/tests/paul.py
 delete mode 100644 wxPython/tests/popup.py
 delete mode 100644 wxPython/tests/pytree.py
 delete mode 100644 wxPython/tests/query.bmp
 delete mode 100644 wxPython/tests/runner.py
 delete mode 100644 wxPython/tests/scroll_paint.py
 delete mode 100644 wxPython/tests/spies.py
 delete mode 100644 wxPython/tests/spies2.py
 delete mode 100644 wxPython/tests/ste.py
 delete mode 100644 wxPython/tests/table.bmp
 delete mode 100644 wxPython/tests/tabs.py
 delete mode 100644 wxPython/tests/test1.py
 delete mode 100644 wxPython/tests/test2.py
 delete mode 100644 wxPython/tests/test3.py
 delete mode 100644 wxPython/tests/test4.py
 delete mode 100644 wxPython/tests/test5.py
 delete mode 100644 wxPython/tests/test6.py
 delete mode 100644 wxPython/tests/test7.py
 delete mode 100644 wxPython/tests/test8.py
 delete mode 100644 wxPython/tests/testDlg.py
 delete mode 100644 wxPython/tests/testTree.py
 delete mode 100644 wxPython/tests/testi.py
 delete mode 100644 wxPython/tests/thrtest.py
 delete mode 100644 wxPython/tests/thtest.py
 delete mode 100644 wxPython/tests/txml.py
 delete mode 100644 wxPython/tests/val.py
 delete mode 100644 wxPython/tests/wxFrame1.py
 delete mode 100644 wxPython/tests/wxPlotCanvas.py
 delete mode 100644 wxPython/tests/wxSlash.py
 delete mode 100644 wxPython/tests/zigron.py
 create mode 100644 wxPython/wx/__init__.py
 create mode 100644 wxPython/wx/calendar.py
 create mode 100644 wxPython/wx/dllwidget.py
 create mode 100644 wxPython/wx/gizmos.py
 create mode 100644 wxPython/wx/glcanvas.py
 create mode 100644 wxPython/wx/grid.py
 create mode 100644 wxPython/wx/help.py
 create mode 100644 wxPython/wx/html.py
 create mode 100644 wxPython/wx/iewin.py
 create mode 100644 wxPython/wx/lib/CDate.py
 create mode 100644 wxPython/wx/lib/ClickableHtmlWindow.py
 create mode 100644 wxPython/wx/lib/ErrorDialogs.py
 create mode 100644 wxPython/wx/lib/ErrorDialogs_wdr.py
 create mode 100644 wxPython/wx/lib/PythonBitmaps.py
 create mode 100644 wxPython/wx/lib/__init__.py
 create mode 100644 wxPython/wx/lib/activexwrapper.py
 create mode 100644 wxPython/wx/lib/analogclock.py
 create mode 100644 wxPython/wx/lib/anchors.py
 create mode 100644 wxPython/wx/lib/buttons.py
 create mode 100644 wxPython/wx/lib/calendar.py
 create mode 100644 wxPython/wx/lib/colourchooser/__init__.py
 create mode 100644 wxPython/wx/lib/colourchooser/canvas.py
 create mode 100644 wxPython/wx/lib/colourchooser/intl.py
 create mode 100644 wxPython/wx/lib/colourchooser/pycolourbox.py
 create mode 100644 wxPython/wx/lib/colourchooser/pycolourchooser.py
 create mode 100644 wxPython/wx/lib/colourchooser/pycolourslider.py
 create mode 100644 wxPython/wx/lib/colourchooser/pypalette.py
 create mode 100644 wxPython/wx/lib/colourdb.py
 create mode 100644 wxPython/wx/lib/colourselect.py
 create mode 100644 wxPython/wx/lib/dialogs.py
 create mode 100644 wxPython/wx/lib/editor/__init__.py
 create mode 100644 wxPython/wx/lib/editor/editor.py
 create mode 100644 wxPython/wx/lib/editor/images.py
 create mode 100644 wxPython/wx/lib/editor/selection.py
 create mode 100644 wxPython/wx/lib/evtmgr.py
 create mode 100644 wxPython/wx/lib/fancytext.py
 create mode 100644 wxPython/wx/lib/filebrowsebutton.py
 create mode 100644 wxPython/wx/lib/floatbar.py
 create mode 100644 wxPython/wx/lib/gridmovers.py
 create mode 100644 wxPython/wx/lib/grids.py
 create mode 100644 wxPython/wx/lib/imagebrowser.py
 create mode 100644 wxPython/wx/lib/imageutils.py
 create mode 100644 wxPython/wx/lib/infoframe.py
 create mode 100644 wxPython/wx/lib/intctrl.py
 create mode 100644 wxPython/wx/lib/layoutf.py
 create mode 100644 wxPython/wx/lib/maskededit.py
 create mode 100644 wxPython/wx/lib/mixins/__init__.py
 create mode 100644 wxPython/wx/lib/mixins/grid.py
 create mode 100644 wxPython/wx/lib/mixins/imagelist.py
 create mode 100644 wxPython/wx/lib/mixins/listctrl.py
 create mode 100644 wxPython/wx/lib/mixins/rubberband.py
 create mode 100644 wxPython/wx/lib/multisash.py
 create mode 100644 wxPython/wx/lib/mvctree.py
 create mode 100644 wxPython/wx/lib/popupctl.py
 create mode 100644 wxPython/wx/lib/printout.py
 create mode 100644 wxPython/wx/lib/pubsub.py
 create mode 100644 wxPython/wx/lib/pyshell.py
 create mode 100644 wxPython/wx/lib/rcsizer.py
 create mode 100644 wxPython/wx/lib/rightalign.py
 create mode 100644 wxPython/wx/lib/rpcMixin.py
 create mode 100644 wxPython/wx/lib/scrolledpanel.py
 create mode 100644 wxPython/wx/lib/sheet.py
 create mode 100644 wxPython/wx/lib/shell.py
 create mode 100644 wxPython/wx/lib/splashscreen.py
 create mode 100644 wxPython/wx/lib/stattext.py
 create mode 100644 wxPython/wx/lib/throbber.py
 create mode 100644 wxPython/wx/lib/timectrl.py
 create mode 100644 wxPython/wx/lib/vtk.py
 create mode 100644 wxPython/wx/lib/wxPlotCanvas.py
 create mode 100644 wxPython/wx/lib/wxpTag.py
 create mode 100644 wxPython/wx/ogl.py
 create mode 100644 wxPython/wx/py/PyAlaCarte.py
 create mode 100644 wxPython/wx/py/PyAlaMode.py
 create mode 100644 wxPython/wx/py/PyCrust.py
 create mode 100644 wxPython/wx/py/PyFilling.py
 create mode 100644 wxPython/wx/py/PyShell.py
 create mode 100644 wxPython/wx/py/PyWrap.py
 create mode 100644 wxPython/wx/py/__init__.py
 create mode 100644 wxPython/wx/py/buffer.py
 create mode 100644 wxPython/wx/py/crust.py
 create mode 100644 wxPython/wx/py/dispatcher.py
 create mode 100644 wxPython/wx/py/document.py
 create mode 100644 wxPython/wx/py/editor.py
 create mode 100644 wxPython/wx/py/editwindow.py
 create mode 100644 wxPython/wx/py/filling.py
 create mode 100644 wxPython/wx/py/frame.py
 create mode 100644 wxPython/wx/py/images.py
 create mode 100644 wxPython/wx/py/interpreter.py
 create mode 100644 wxPython/wx/py/introspect.py
 create mode 100644 wxPython/wx/py/pseudo.py
 create mode 100644 wxPython/wx/py/shell.py
 create mode 100644 wxPython/wx/py/version.py
 create mode 100644 wxPython/wx/stc.py
 create mode 100644 wxPython/wx/tools/XRCed/__init__.py
 create mode 100644 wxPython/wx/tools/XRCed/encode_bitmaps.py
 create mode 100644 wxPython/wx/tools/XRCed/globals.py
 create mode 100644 wxPython/wx/tools/XRCed/images.py
 create mode 100644 wxPython/wx/tools/XRCed/panel.py
 create mode 100644 wxPython/wx/tools/XRCed/params.py
 create mode 100644 wxPython/wx/tools/XRCed/tools.py
 create mode 100644 wxPython/wx/tools/XRCed/tree.py
 create mode 100644 wxPython/wx/tools/XRCed/undo.py
 create mode 100644 wxPython/wx/tools/XRCed/xrced.py
 create mode 100644 wxPython/wx/tools/XRCed/xxx.py
 create mode 100644 wxPython/wx/tools/__init__.py
 create mode 100644 wxPython/wx/tools/dbg.py
 create mode 100644 wxPython/wx/tools/helpviewer.py
 create mode 100644 wxPython/wx/tools/img2img.py
 create mode 100644 wxPython/wx/tools/img2png.py
 create mode 100644 wxPython/wx/tools/img2py.py
 create mode 100644 wxPython/wx/tools/img2xpm.py
 create mode 100644 wxPython/wx/wizard.py
 create mode 100644 wxPython/wx/xrc.py
 delete mode 100644 wxPython/wxPython/lib/PyCrust/.cvsignore
 delete mode 100644 wxPython/wxPython/lib/PyCrust/CHANGES.txt
 delete mode 100644 wxPython/wxPython/lib/PyCrust/shellmenu.py
 delete mode 100644 wxPython/wxPython/lib/PyCrust/wxd/Sizers.py
 create mode 100644 wxPython/wxPython/lib/analogclock.py
 create mode 100644 wxPython/wxPython/lib/maskededit.py
 create mode 100644 wxPython/wxPython/py/CHANGES.txt
 rename wxPython/wxPython/{lib/PyCrust/PyCrust.ico => py/Py.ico} (100%)
 create mode 100755 wxPython/wxPython/py/PyAlaCarte.py
 create mode 100755 wxPython/wxPython/py/PyAlaMode.py
 create mode 100755 wxPython/wxPython/py/PyAlaModeTest.py
 create mode 100644 wxPython/wxPython/py/PyCrust.ico
 create mode 100755 wxPython/wxPython/py/PyCrust.py
 create mode 100644 wxPython/wxPython/py/PyCrust_16.png
 create mode 100644 wxPython/wxPython/py/PyCrust_32.png
 create mode 100755 wxPython/wxPython/py/PyFilling.py
 create mode 100755 wxPython/wxPython/py/PyShell.py
 create mode 100755 wxPython/wxPython/py/PyWrap.py
 rename wxPython/wxPython/{lib/PyCrust => py}/README.txt (100%)
 create mode 100644 wxPython/wxPython/py/__init__.py
 create mode 100644 wxPython/wxPython/py/buffer.py
 create mode 100644 wxPython/wxPython/py/crust.py
 rename wxPython/wxPython/{lib/PyCrust => py}/dispatcher.py (100%)
 create mode 100644 wxPython/wxPython/py/document.py
 create mode 100644 wxPython/wxPython/py/editor.py
 create mode 100644 wxPython/wxPython/py/editwindow.py
 create mode 100644 wxPython/wxPython/py/filling.py
 create mode 100644 wxPython/wxPython/py/frame.py
 rename wxPython/wxPython/{lib/PyCrust => py}/images.py (87%)
 rename wxPython/wxPython/{lib/PyCrust => py}/interpreter.py (96%)
 rename wxPython/wxPython/{lib/PyCrust => py}/introspect.py (96%)
 rename wxPython/wxPython/{lib/PyCrust => py}/pseudo.py (100%)
 create mode 100644 wxPython/wxPython/py/shell.py
 create mode 100644 wxPython/wxPython/py/tests/test_interpreter.py
 create mode 100644 wxPython/wxPython/py/tests/test_introspect.py
 create mode 100644 wxPython/wxPython/py/tests/test_pseudo.py
 create mode 100644 wxPython/wxPython/py/tests/test_version.py
 create mode 100644 wxPython/wxPython/py/tests/testall.py
 rename wxPython/wxPython/{lib/PyCrust => py}/version.py (52%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Accelerators.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/App.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Base.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/ClipDragDrop.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Config.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Controls.py (97%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/DataStructures.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/DateTime.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Dialogs.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Drawing.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Errors.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/EventFunctions.py (98%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Events.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/FileSystem.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Frames.py (67%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Functions.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Help.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/ImageHandlers.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Joystick.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/LayoutConstraints.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Logging.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Menus.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/MimeTypes.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Misc.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Panel.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Parameters.py (98%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Printing.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Process.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/SashSplitter.py (100%)
 create mode 100644 wxPython/wxPython/py/wxd/Sizers.py
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Streams.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/StyledTextConstants.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Threading.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/ToolBar.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Tree.py (82%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Validators.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/Window.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/__init__.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/d_stc.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/d_wx.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/decorator.py (98%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/gen.py (100%)
 create mode 100644 wxPython/wxPython/py/wxd/genapi.py
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/stc_.py (100%)
 rename wxPython/wxPython/{lib/PyCrust => py}/wxd/wx_.py (89%)
 create mode 100644 wxPython/wxPython/tools/XRCed/XRCed_16.png
 create mode 100644 wxPython/wxPython/tools/XRCed/XRCed_32.png

diff --git a/wxPython/.cvsignore b/wxPython/.cvsignore
index 38dfbf734e..6e3d362030 100644
--- a/wxPython/.cvsignore
+++ b/wxPython/.cvsignore
@@ -5,8 +5,10 @@ MANIFEST
 _build_dmg
 _build_rpm
 build
+build-dbg
 build-gtk
 build-gtk2
+build-gtk2-dbg.unicode
 build-gtk2.unicode
 build-pkg
 build-pkg-debug
diff --git a/wxPython/BUILD.win32.txt b/wxPython/BUILD.win32.txt
index f0cde57a6b..bbec92c2c7 100644
--- a/wxPython/BUILD.win32.txt
+++ b/wxPython/BUILD.win32.txt
@@ -119,6 +119,7 @@ C. Change to the %WXWIN%\include\wx\msw directory and copy setup0.h to
          wxUSE_TREELAYOUT		0
 	 wxUSE_MS_HTML_HELP		0
          wxUSE_POSTSCRIPT		1
+	 wxUSE_DYNLIB_CLASS		1
 
 
     ** NEW **
diff --git a/wxPython/CHANGES.txt b/wxPython/CHANGES.txt
index 1f94276ec2..5d81424b18 100644
--- a/wxPython/CHANGES.txt
+++ b/wxPython/CHANGES.txt
@@ -2,10 +2,85 @@ CHANGES.txt for wxPython
 
 ----------------------------------------------------------------------
 
-?????
+2.4.1.x
 -------
 
-Added wxScrolledPanel from Wil Sadkin
+Use wxSTC in the demo for displaying the soucre code of the samples.
+
+
+
+
+
+2.4.1.2
+-------
+
+Added wxScrolledPanel from Will Sadkin
+
+Added SetShape method to top level windows (e.g. wxFrame.)
+
+Changed wxSWIG to not generate Python code using apply, (since it will
+be deprecated in the future) wxSWIG will use spam(*args, **kw) syntax
+instead.  Also changed the generated __repr__ methods to be a bit more
+informative.
+
+Made the version number information more robust and uh, informative.
+Also added asserts to check that the major.minor versions of wxPython
+and wxWindows match.
+
+Added the new wx "renamer" package that will dynamically import from
+the wxPython package and rename wxFooBar --> FooBar.  That means that
+people can do imports without "import *" and can use names like
+wx.Frame instead of wx.wxFrame.  This is phase 1 of a full transition
+to the new namespace.
+
+Updated Scintilla to 1.52.  I also changed it to use wxListCtrl
+instead of wxListBox for the AutoComplete window, added the ability to
+use custom bitmaps in the margin and in the AutoComplete windows, and
+worked out how to do proper clipping of child windows on wxGTK.
+
+Patrick O'Brien's PyCrust package has been renamed to Py and now
+includes several new tools.  As part of the change the location of the
+pacakge has changed as well, it is now accessible as "from wxPython
+import py" (or "from wx import py" using the new namespace.)  There
+are still some transition modules in the wxPython.lib.PyCrust package
+that will issue a warning and then import what is needed from the new
+package.  These will be removed in a future release.
+
+Added __nonzero__ method to wxTreeItemId, wxBitmap, wxImage, wxFont,
+and most other classes that have an Ok or IsOK method.  This allows
+code like "if obj: ..." to be the same as "if obj.IsOk(): ..."
+
+Toolbars on wxMac can now have controls on them.
+
+Added wxPython.lib.analogclock module based on samples that were
+passed back and forth on wxPython-users a while back.
+
+Added masked edit controls (wxPython.lib.maskededit) by Jeff Childers
+and Will Sadkin.  Updated wxTimeCtrl to use MaskedEdit.
+
+When the __class__ of a dead object is replaced with _wxPyDeadObject
+the __del__ of the original class is now called first.
+
+Added wxTreeListCtrl.  (Looks like a wxTreeCtrl embedded in a
+wxListCtrl, but actually is just giving multiple columns to a
+wxTreeCtrl.)
+
+Added wxFutureCall, a subclass of wxTimer that makes it easy to delay
+a call to any Python callable object.
+
+Added wxPy versions of wxPrintPreview, wxPreviewFrame, and
+wxPreviewControlBar so they can be derived from in Python and be able
+to override the C++ virtual methods.
+
+Simplified how the wxSizer methods are wrapped, changed the name of
+the "option" parameter to "proportion" to match the docs ("option" is
+still accepted for compatibility, but this will go away in a future
+release,) SetItemMinSize can now take a wxSize (or 2-tuple) parameter,
+and Spacers can be specified with a wxSize (or 2-tuple) parameter
+
+Added wxCursorFromBits.
+
+
 
 
 
@@ -411,6 +486,7 @@ Added wxTimeCtrl from Will Sadkin.
 
 
 
+
 2.3.2.1
 -------
 Changed (again) how the Python global interpreter lock is handled as
diff --git a/wxPython/MANIFEST.in b/wxPython/MANIFEST.in
index 0dbd7d830c..d515a5580b 100644
--- a/wxPython/MANIFEST.in
+++ b/wxPython/MANIFEST.in
@@ -1,3 +1,5 @@
+# This is way out of date.  (It's not activly used anymore...)
+
 include *.txt
 include my_distutils.py
 ## include my_install_data.py
diff --git a/wxPython/contrib/dllwidget/dllwidget_.py b/wxPython/contrib/dllwidget/dllwidget_.py
index f0e64379fc..39ace44c84 100644
--- a/wxPython/contrib/dllwidget/dllwidget_.py
+++ b/wxPython/contrib/dllwidget/dllwidget_.py
@@ -47,19 +47,19 @@ class wxDllWidgetPtr(wxPanelPtr):
         self.this = this
         self.thisown = 0
     def Ok(self, *_args, **_kwargs):
-        val = apply(dllwidget_c.wxDllWidget_Ok,(self,) + _args, _kwargs)
+        val = dllwidget_c.wxDllWidget_Ok(self, *_args, **_kwargs)
         return val
     def SendCommand(self, *_args, **_kwargs):
-        val = apply(dllwidget_c.wxDllWidget_SendCommand,(self,) + _args, _kwargs)
+        val = dllwidget_c.wxDllWidget_SendCommand(self, *_args, **_kwargs)
         return val
     def GetWidgetWindow(self, *_args, **_kwargs):
-        val = apply(dllwidget_c.wxDllWidget_GetWidgetWindow,(self,) + _args, _kwargs)
+        val = dllwidget_c.wxDllWidget_GetWidgetWindow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxDllWidget instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDllWidget instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDllWidget(wxDllWidgetPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(dllwidget_c.new_wxDllWidget,_args,_kwargs)
+        self.this = dllwidget_c.new_wxDllWidget(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
diff --git a/wxPython/contrib/gizmos/gizmos.cpp b/wxPython/contrib/gizmos/gizmos.cpp
index 0abd1ec076..82418d6b0a 100644
--- a/wxPython/contrib/gizmos/gizmos.cpp
+++ b/wxPython/contrib/gizmos/gizmos.cpp
@@ -59,7 +59,12 @@ extern PyObject *SWIG_newvarlink(void);
 #include <wx/gizmos/editlbox.h>
 #include <wx/gizmos/splittree.h>
 #include <wx/gizmos/ledctrl.h>
+
 #include <wx/listctrl.h>
+#include <wx/treectrl.h>
+#include <wx/imaglist.h>
+#include "treelistctrl.h"
+#include "pytree.h"
 
 
 static PyObject* t_output_helper(PyObject* target, PyObject* o) {
@@ -91,6 +96,8 @@ static PyObject* t_output_helper(PyObject* target, PyObject* o) {
     // Put some wx default wxChar* values into wxStrings.
     static const wxString wxPyDynamicSashNameStr(wxT("dynamicSashWindow"));
     static const wxString wxPyEditableListBoxNameStr(wxT("editableListBox"));
+    static const wxString wxPyTreeListCtrlNameStr(wxT("treelistctrl"));
+    static const wxString wxPyEmptyString(wxT(""));
 
     typedef wxTreeCtrl wxPyTreeCtrl;
 
@@ -123,6 +130,43 @@ public:
 
     PYPRIVATE;
 };
+ // C++ version of Python aware control
+class wxPyTreeListCtrl : public wxTreeListCtrl {
+    DECLARE_ABSTRACT_CLASS(wxPyTreeListCtrl);
+public:
+    wxPyTreeListCtrl() : wxTreeListCtrl() {}
+    wxPyTreeListCtrl(wxWindow *parent, wxWindowID id,
+                     const wxPoint& pos,
+                     const wxSize& size,
+                     long style,
+                     const wxValidator &validator,
+                     const wxString& name) :
+        wxTreeListCtrl(parent, id, pos, size, style, validator, name) {}
+
+    int OnCompareItems(const wxTreeItemId& item1,
+                       const wxTreeItemId& item2) {
+        int rval = 0;
+        bool found;
+        wxPyBeginBlockThreads();
+        if ((found = wxPyCBH_findCallback(m_myInst, "OnCompareItems"))) {
+            PyObject *o1 = wxPyConstructObject((void*)&item1, wxT("wxTreeItemId"), 0);
+            PyObject *o2 = wxPyConstructObject((void*)&item2, wxT("wxTreeItemId"), 0);
+            rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OO)",o1,o2));
+            Py_DECREF(o1);
+            Py_DECREF(o2);
+        }
+        wxPyEndBlockThreads();
+        if (! found)
+            rval = wxTreeListCtrl::OnCompareItems(item1, item2);
+        return rval;
+    }
+    PYPRIVATE;
+};
+
+IMPLEMENT_ABSTRACT_CLASS(wxPyTreeListCtrl, wxTreeListCtrl)
+
+
+    static const long longzero = 0;
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -1904,7 +1948,4376 @@ static PyObject *_wrap_wxLEDNumberCtrl_SetValue(PyObject *self, PyObject *args,
     return _resultobj;
 }
 
+static void *SwigwxTreeListColumnInfoTowxObject(void *ptr) {
+    wxTreeListColumnInfo *src;
+    wxObject *dest;
+    src = (wxTreeListColumnInfo *) ptr;
+    dest = (wxObject *) src;
+    return (void *) dest;
+}
+
+#define new_wxTreeListColumnInfo(_swigarg0,_swigarg1,_swigarg2,_swigarg3) (new wxTreeListColumnInfo(_swigarg0,_swigarg1,_swigarg2,_swigarg3))
+static PyObject *_wrap_new_wxTreeListColumnInfo(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeListColumnInfo * _result;
+    wxString * _arg0 = (wxString *) &wxPyEmptyString;
+    int  _arg1 = (int ) -1;
+    size_t  _arg2 = (size_t ) 100;
+    wxTreeListColumnAlign  _arg3 = (wxTreeListColumnAlign ) (wxTL_ALIGN_LEFT);
+    PyObject * _obj0 = 0;
+    char *_kwnames[] = { "text","image","width","alignment", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"|Oiii:new_wxTreeListColumnInfo",_kwnames,&_obj0,&_arg1,&_arg2,&_arg3)) 
+        return NULL;
+    if (_obj0)
+{
+    _arg0 = wxString_in_helper(_obj0);
+    if (_arg0 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxTreeListColumnInfo *)new_wxTreeListColumnInfo(*_arg0,_arg1,_arg2,_arg3);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxTreeListColumnInfo_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+{
+    if (_obj0)
+        delete _arg0;
+}
+    return _resultobj;
+}
+
+#define wxTreeListColumnInfo_GetAlignment(_swigobj)  (_swigobj->GetAlignment())
+static PyObject *_wrap_wxTreeListColumnInfo_GetAlignment(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeListColumnAlign  _result;
+    wxTreeListColumnInfo * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListColumnInfo_GetAlignment",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeListColumnInfo_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListColumnInfo_GetAlignment. Expected _wxTreeListColumnInfo_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxTreeListColumnAlign )wxTreeListColumnInfo_GetAlignment(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListColumnInfo_GetText(_swigobj)  (_swigobj->GetText())
+static PyObject *_wrap_wxTreeListColumnInfo_GetText(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxString * _result;
+    wxTreeListColumnInfo * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListColumnInfo_GetText",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeListColumnInfo_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListColumnInfo_GetText. Expected _wxTreeListColumnInfo_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxString (wxTreeListColumnInfo_GetText(_arg0));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{
+#if wxUSE_UNICODE
+    _resultobj = PyUnicode_FromWideChar(_result->c_str(), _result->Len());
+#else
+    _resultobj = PyString_FromStringAndSize(_result->c_str(), _result->Len());
+#endif
+}
+{
+    delete _result;
+}
+    return _resultobj;
+}
+
+#define wxTreeListColumnInfo_GetImage(_swigobj)  (_swigobj->GetImage())
+static PyObject *_wrap_wxTreeListColumnInfo_GetImage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    wxTreeListColumnInfo * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListColumnInfo_GetImage",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeListColumnInfo_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListColumnInfo_GetImage. Expected _wxTreeListColumnInfo_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxTreeListColumnInfo_GetImage(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListColumnInfo_GetSelectedImage(_swigobj)  (_swigobj->GetSelectedImage())
+static PyObject *_wrap_wxTreeListColumnInfo_GetSelectedImage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    wxTreeListColumnInfo * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListColumnInfo_GetSelectedImage",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeListColumnInfo_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListColumnInfo_GetSelectedImage. Expected _wxTreeListColumnInfo_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxTreeListColumnInfo_GetSelectedImage(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListColumnInfo_GetWidth(_swigobj)  (_swigobj->GetWidth())
+static PyObject *_wrap_wxTreeListColumnInfo_GetWidth(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    size_t  _result;
+    wxTreeListColumnInfo * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListColumnInfo_GetWidth",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeListColumnInfo_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListColumnInfo_GetWidth. Expected _wxTreeListColumnInfo_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (size_t )wxTreeListColumnInfo_GetWidth(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListColumnInfo_SetAlignment(_swigobj,_swigarg0)  (_swigobj->SetAlignment(_swigarg0))
+static PyObject *_wrap_wxTreeListColumnInfo_SetAlignment(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeListColumnInfo * _arg0;
+    wxTreeListColumnAlign  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","alignment", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxTreeListColumnInfo_SetAlignment",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeListColumnInfo_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListColumnInfo_SetAlignment. Expected _wxTreeListColumnInfo_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListColumnInfo_SetAlignment(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListColumnInfo_SetText(_swigobj,_swigarg0)  (_swigobj->SetText(_swigarg0))
+static PyObject *_wrap_wxTreeListColumnInfo_SetText(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeListColumnInfo * _arg0;
+    wxString * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","text", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListColumnInfo_SetText",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeListColumnInfo_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListColumnInfo_SetText. Expected _wxTreeListColumnInfo_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = wxString_in_helper(_obj1);
+    if (_arg1 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListColumnInfo_SetText(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+{
+    if (_obj1)
+        delete _arg1;
+}
+    return _resultobj;
+}
+
+#define wxTreeListColumnInfo_SetImage(_swigobj,_swigarg0)  (_swigobj->SetImage(_swigarg0))
+static PyObject *_wrap_wxTreeListColumnInfo_SetImage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeListColumnInfo * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","image", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxTreeListColumnInfo_SetImage",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeListColumnInfo_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListColumnInfo_SetImage. Expected _wxTreeListColumnInfo_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListColumnInfo_SetImage(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListColumnInfo_SetSelectedImage(_swigobj,_swigarg0)  (_swigobj->SetSelectedImage(_swigarg0))
+static PyObject *_wrap_wxTreeListColumnInfo_SetSelectedImage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeListColumnInfo * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","image", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxTreeListColumnInfo_SetSelectedImage",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeListColumnInfo_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListColumnInfo_SetSelectedImage. Expected _wxTreeListColumnInfo_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListColumnInfo_SetSelectedImage(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListColumnInfo_SetWidth(_swigobj,_swigarg0)  (_swigobj->SetWidth(_swigarg0))
+static PyObject *_wrap_wxTreeListColumnInfo_SetWidth(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeListColumnInfo * _arg0;
+    size_t  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","with", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxTreeListColumnInfo_SetWidth",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeListColumnInfo_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListColumnInfo_SetWidth. Expected _wxTreeListColumnInfo_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListColumnInfo_SetWidth(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+static void *SwigwxPyTreeListCtrlTowxControl(void *ptr) {
+    wxPyTreeListCtrl *src;
+    wxControl *dest;
+    src = (wxPyTreeListCtrl *) ptr;
+    dest = (wxControl *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPyTreeListCtrlTowxWindow(void *ptr) {
+    wxPyTreeListCtrl *src;
+    wxWindow *dest;
+    src = (wxPyTreeListCtrl *) ptr;
+    dest = (wxWindow *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPyTreeListCtrlTowxEvtHandler(void *ptr) {
+    wxPyTreeListCtrl *src;
+    wxEvtHandler *dest;
+    src = (wxPyTreeListCtrl *) ptr;
+    dest = (wxEvtHandler *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPyTreeListCtrlTowxObject(void *ptr) {
+    wxPyTreeListCtrl *src;
+    wxObject *dest;
+    src = (wxPyTreeListCtrl *) ptr;
+    dest = (wxObject *) src;
+    return (void *) dest;
+}
+
+#define new_wxTreeListCtrl(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6) (new wxPyTreeListCtrl(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6))
+static PyObject *_wrap_new_wxTreeListCtrl(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _result;
+    wxWindow * _arg0;
+    wxWindowID  _arg1 = (wxWindowID ) -1;
+    wxPoint * _arg2 = (wxPoint *) &wxDefaultPosition;
+    wxSize * _arg3 = (wxSize *) &wxDefaultSize;
+    long  _arg4 = (long ) wxTR_DEFAULT_STYLE;
+    wxValidator * _arg5 = (wxValidator *) &wxDefaultValidator;
+    wxString * _arg6 = (wxString *) &wxPyTreeListCtrlNameStr;
+    PyObject * _argo0 = 0;
+    wxPoint  temp;
+    PyObject * _obj2 = 0;
+    wxSize  temp0;
+    PyObject * _obj3 = 0;
+    PyObject * _argo5 = 0;
+    PyObject * _obj6 = 0;
+    char *_kwnames[] = { "parent","id","pos","size","style","validator","name", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O|iOOlOO:new_wxTreeListCtrl",_kwnames,&_argo0,&_arg1,&_obj2,&_obj3,&_arg4,&_argo5,&_obj6)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxTreeListCtrl. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+    if (_obj2)
+{
+    _arg2 = &temp;
+    if (! wxPoint_helper(_obj2, &_arg2))
+        return NULL;
+}
+    if (_obj3)
+{
+    _arg3 = &temp0;
+    if (! wxSize_helper(_obj3, &_arg3))
+        return NULL;
+}
+    if (_argo5) {
+        if (SWIG_GetPtrObj(_argo5,(void **) &_arg5,"_wxValidator_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 6 of new_wxTreeListCtrl. Expected _wxValidator_p.");
+        return NULL;
+        }
+    }
+    if (_obj6)
+{
+    _arg6 = wxString_in_helper(_obj6);
+    if (_arg6 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxPyTreeListCtrl *)new_wxTreeListCtrl(_arg0,_arg1,*_arg2,*_arg3,_arg4,*_arg5,*_arg6);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPyTreeListCtrl_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+{
+    if (_obj6)
+        delete _arg6;
+}
+    return _resultobj;
+}
+
+#define new_wxPreTreeListCtrl() (new wxPyTreeListCtrl())
+static PyObject *_wrap_new_wxPreTreeListCtrl(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _result;
+    char *_kwnames[] = {  NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,":new_wxPreTreeListCtrl",_kwnames)) 
+        return NULL;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxPyTreeListCtrl *)new_wxPreTreeListCtrl();
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPyTreeListCtrl_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_Create(_swigobj,_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6)  (_swigobj->Create(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6))
+static PyObject *_wrap_wxTreeListCtrl_Create(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPyTreeListCtrl * _arg0;
+    wxWindow * _arg1;
+    wxWindowID  _arg2 = (wxWindowID ) -1;
+    wxPoint * _arg3 = (wxPoint *) &wxDefaultPosition;
+    wxSize * _arg4 = (wxSize *) &wxDefaultSize;
+    long  _arg5 = (long ) wxTR_DEFAULT_STYLE;
+    wxValidator * _arg6 = (wxValidator *) &wxDefaultValidator;
+    wxString * _arg7 = (wxString *) &wxPyTreeListCtrlNameStr;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    wxPoint  temp;
+    PyObject * _obj3 = 0;
+    wxSize  temp0;
+    PyObject * _obj4 = 0;
+    PyObject * _argo6 = 0;
+    PyObject * _obj7 = 0;
+    char *_kwnames[] = { "self","parent","id","pos","size","style","validator","name", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|iOOlOO:wxTreeListCtrl_Create",_kwnames,&_argo0,&_argo1,&_arg2,&_obj3,&_obj4,&_arg5,&_argo6,&_obj7)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_Create. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_Create. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+    if (_obj3)
+{
+    _arg3 = &temp;
+    if (! wxPoint_helper(_obj3, &_arg3))
+        return NULL;
+}
+    if (_obj4)
+{
+    _arg4 = &temp0;
+    if (! wxSize_helper(_obj4, &_arg4))
+        return NULL;
+}
+    if (_argo6) {
+        if (SWIG_GetPtrObj(_argo6,(void **) &_arg6,"_wxValidator_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 7 of wxTreeListCtrl_Create. Expected _wxValidator_p.");
+        return NULL;
+        }
+    }
+    if (_obj7)
+{
+    _arg7 = wxString_in_helper(_obj7);
+    if (_arg7 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxTreeListCtrl_Create(_arg0,_arg1,_arg2,*_arg3,*_arg4,_arg5,*_arg6,*_arg7);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+{
+    if (_obj7)
+        delete _arg7;
+}
+    return _resultobj;
+}
+
+#define wxTreeListCtrl__setCallbackInfo(_swigobj,_swigarg0,_swigarg1)  (_swigobj->_setCallbackInfo(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl__setCallbackInfo(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _arg1;
+    PyObject * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","self","_class", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxTreeListCtrl__setCallbackInfo",_kwnames,&_argo0,&_obj1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl__setCallbackInfo. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+  _arg1 = _obj1;
+}
+{
+  _arg2 = _obj2;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl__setCallbackInfo(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetCount(_swigobj)  (_swigobj->GetCount())
+static PyObject *_wrap_wxTreeListCtrl_GetCount(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    size_t  _result;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_GetCount",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetCount. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (size_t )wxTreeListCtrl_GetCount(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetIndent(_swigobj)  (_swigobj->GetIndent())
+static PyObject *_wrap_wxTreeListCtrl_GetIndent(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    unsigned int  _result;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_GetIndent",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetIndent. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (unsigned int )wxTreeListCtrl_GetIndent(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetIndent(_swigobj,_swigarg0)  (_swigobj->SetIndent(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_SetIndent(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    unsigned int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","indent", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxTreeListCtrl_SetIndent",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetIndent. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetIndent(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetSpacing(_swigobj)  (_swigobj->GetSpacing())
+static PyObject *_wrap_wxTreeListCtrl_GetSpacing(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    unsigned int  _result;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_GetSpacing",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetSpacing. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (unsigned int )wxTreeListCtrl_GetSpacing(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetSpacing(_swigobj,_swigarg0)  (_swigobj->SetSpacing(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_SetSpacing(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    unsigned int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","spacing", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxTreeListCtrl_SetSpacing",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetSpacing. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetSpacing(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetLineSpacing(_swigobj)  (_swigobj->GetLineSpacing())
+static PyObject *_wrap_wxTreeListCtrl_GetLineSpacing(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    unsigned int  _result;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_GetLineSpacing",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetLineSpacing. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (unsigned int )wxTreeListCtrl_GetLineSpacing(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetLineSpacing(_swigobj,_swigarg0)  (_swigobj->SetLineSpacing(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_SetLineSpacing(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    unsigned int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","spacing", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxTreeListCtrl_SetLineSpacing",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetLineSpacing. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetLineSpacing(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetImageList(_swigobj)  (_swigobj->GetImageList())
+static PyObject *_wrap_wxTreeListCtrl_GetImageList(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxImageList * _result;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_GetImageList",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetImageList. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxImageList *)wxTreeListCtrl_GetImageList(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{ _resultobj = wxPyMake_wxObject(_result); }
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetStateImageList(_swigobj)  (_swigobj->GetStateImageList())
+static PyObject *_wrap_wxTreeListCtrl_GetStateImageList(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxImageList * _result;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_GetStateImageList",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetStateImageList. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxImageList *)wxTreeListCtrl_GetStateImageList(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{ _resultobj = wxPyMake_wxObject(_result); }
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetButtonsImageList(_swigobj)  (_swigobj->GetButtonsImageList())
+static PyObject *_wrap_wxTreeListCtrl_GetButtonsImageList(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxImageList * _result;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_GetButtonsImageList",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetButtonsImageList. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxImageList *)wxTreeListCtrl_GetButtonsImageList(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{ _resultobj = wxPyMake_wxObject(_result); }
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetImageList(_swigobj,_swigarg0)  (_swigobj->SetImageList(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_SetImageList(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxImageList * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","imageList", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_SetImageList",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetImageList. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxImageList_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_SetImageList. Expected _wxImageList_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetImageList(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetStateImageList(_swigobj,_swigarg0)  (_swigobj->SetStateImageList(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_SetStateImageList(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxImageList * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","imageList", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_SetStateImageList",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetStateImageList. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxImageList_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_SetStateImageList. Expected _wxImageList_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetStateImageList(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetButtonsImageList(_swigobj,_swigarg0)  (_swigobj->SetButtonsImageList(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_SetButtonsImageList(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxImageList * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","imageList", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_SetButtonsImageList",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetButtonsImageList. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxImageList_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_SetButtonsImageList. Expected _wxImageList_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetButtonsImageList(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_AssignImageList(_swigobj,_swigarg0)  (_swigobj->AssignImageList(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_AssignImageList(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxImageList * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","imageList", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_AssignImageList",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_AssignImageList. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxImageList_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_AssignImageList. Expected _wxImageList_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_AssignImageList(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_AssignStateImageList(_swigobj,_swigarg0)  (_swigobj->AssignStateImageList(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_AssignStateImageList(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxImageList * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","imageList", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_AssignStateImageList",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_AssignStateImageList. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxImageList_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_AssignStateImageList. Expected _wxImageList_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_AssignStateImageList(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_AssignButtonsImageList(_swigobj,_swigarg0)  (_swigobj->AssignButtonsImageList(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_AssignButtonsImageList(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxImageList * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","imageList", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_AssignButtonsImageList",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_AssignButtonsImageList. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxImageList_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_AssignButtonsImageList. Expected _wxImageList_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_AssignButtonsImageList(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_AddColumn(_swigobj,_swigarg0)  (_swigobj->AddColumn(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_AddColumn(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxString * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","text", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_AddColumn",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_AddColumn. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = wxString_in_helper(_obj1);
+    if (_arg1 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_AddColumn(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+{
+    if (_obj1)
+        delete _arg1;
+}
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_AddColumnInfo(_swigobj,_swigarg0)  (_swigobj->AddColumn(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_AddColumnInfo(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeListColumnInfo * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","col", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_AddColumnInfo",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_AddColumnInfo. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeListColumnInfo_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_AddColumnInfo. Expected _wxTreeListColumnInfo_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_AddColumnInfo(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_InsertColumn(_swigobj,_swigarg0,_swigarg1)  (_swigobj->InsertColumn(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_InsertColumn(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    size_t  _arg1;
+    wxString * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","before","text", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxTreeListCtrl_InsertColumn",_kwnames,&_argo0,&_arg1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_InsertColumn. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg2 = wxString_in_helper(_obj2);
+    if (_arg2 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_InsertColumn(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+{
+    if (_obj2)
+        delete _arg2;
+}
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_InsertColumnInfo(_swigobj,_swigarg0,_swigarg1)  (_swigobj->InsertColumn(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_InsertColumnInfo(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    size_t  _arg1;
+    wxTreeListColumnInfo * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","before","col", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxTreeListCtrl_InsertColumnInfo",_kwnames,&_argo0,&_arg1,&_argo2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_InsertColumnInfo. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxTreeListColumnInfo_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxTreeListCtrl_InsertColumnInfo. Expected _wxTreeListColumnInfo_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_InsertColumnInfo(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_RemoveColumn(_swigobj,_swigarg0)  (_swigobj->RemoveColumn(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_RemoveColumn(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    size_t  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","column", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxTreeListCtrl_RemoveColumn",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_RemoveColumn. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_RemoveColumn(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetColumnCount(_swigobj)  (_swigobj->GetColumnCount())
+static PyObject *_wrap_wxTreeListCtrl_GetColumnCount(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    size_t  _result;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_GetColumnCount",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetColumnCount. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (size_t )wxTreeListCtrl_GetColumnCount(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetColumnWidth(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetColumnWidth(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_SetColumnWidth(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    size_t  _arg1;
+    size_t  _arg2;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","column","width", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oii:wxTreeListCtrl_SetColumnWidth",_kwnames,&_argo0,&_arg1,&_arg2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetColumnWidth. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetColumnWidth(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetColumnWidth(_swigobj,_swigarg0)  (_swigobj->GetColumnWidth(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetColumnWidth(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    wxPyTreeListCtrl * _arg0;
+    size_t  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","column", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxTreeListCtrl_GetColumnWidth",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetColumnWidth. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxTreeListCtrl_GetColumnWidth(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetMainColumn(_swigobj,_swigarg0)  (_swigobj->SetMainColumn(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_SetMainColumn(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    size_t  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","column", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxTreeListCtrl_SetMainColumn",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetMainColumn. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetMainColumn(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetMainColumn(_swigobj)  (_swigobj->GetMainColumn())
+static PyObject *_wrap_wxTreeListCtrl_GetMainColumn(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    size_t  _result;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_GetMainColumn",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetMainColumn. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (size_t )wxTreeListCtrl_GetMainColumn(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetColumnText(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetColumnText(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_SetColumnText(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    size_t  _arg1;
+    wxString * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","column","text", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxTreeListCtrl_SetColumnText",_kwnames,&_argo0,&_arg1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetColumnText. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg2 = wxString_in_helper(_obj2);
+    if (_arg2 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetColumnText(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+{
+    if (_obj2)
+        delete _arg2;
+}
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetColumnText(_swigobj,_swigarg0)  (_swigobj->GetColumnText(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetColumnText(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxString * _result;
+    wxPyTreeListCtrl * _arg0;
+    size_t  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","column", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxTreeListCtrl_GetColumnText",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetColumnText. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxString (wxTreeListCtrl_GetColumnText(_arg0,_arg1));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{
+#if wxUSE_UNICODE
+    _resultobj = PyUnicode_FromWideChar(_result->c_str(), _result->Len());
+#else
+    _resultobj = PyString_FromStringAndSize(_result->c_str(), _result->Len());
+#endif
+}
+{
+    delete _result;
+}
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetColumn(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetColumn(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_SetColumn(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    size_t  _arg1;
+    wxTreeListColumnInfo * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","column","info", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxTreeListCtrl_SetColumn",_kwnames,&_argo0,&_arg1,&_argo2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetColumn. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxTreeListColumnInfo_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxTreeListCtrl_SetColumn. Expected _wxTreeListColumnInfo_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetColumn(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetColumn(_swigobj,_swigarg0)  (_swigobj->GetColumn(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetColumn(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeListColumnInfo * _result;
+    wxPyTreeListCtrl * _arg0;
+    size_t  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","column", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxTreeListCtrl_GetColumn",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetColumn. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListColumnInfo & _result_ref = wxTreeListCtrl_GetColumn(_arg0,_arg1);
+    _result = (wxTreeListColumnInfo *) &_result_ref;
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxTreeListColumnInfo_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetColumnAlignment(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetColumnAlignment(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_SetColumnAlignment(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    size_t  _arg1;
+    wxTreeListColumnAlign  _arg2;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","column","align", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oii:wxTreeListCtrl_SetColumnAlignment",_kwnames,&_argo0,&_arg1,&_arg2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetColumnAlignment. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetColumnAlignment(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetColumnAlignment(_swigobj,_swigarg0)  (_swigobj->GetColumnAlignment(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetColumnAlignment(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeListColumnAlign  _result;
+    wxPyTreeListCtrl * _arg0;
+    size_t  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","column", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxTreeListCtrl_GetColumnAlignment",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetColumnAlignment. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxTreeListColumnAlign )wxTreeListCtrl_GetColumnAlignment(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetColumnImage(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetColumnImage(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_SetColumnImage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    size_t  _arg1;
+    int  _arg2;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","column","image", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oii:wxTreeListCtrl_SetColumnImage",_kwnames,&_argo0,&_arg1,&_arg2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetColumnImage. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetColumnImage(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetColumnImage(_swigobj,_swigarg0)  (_swigobj->GetColumnImage(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetColumnImage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    wxPyTreeListCtrl * _arg0;
+    size_t  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","column", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxTreeListCtrl_GetColumnImage",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetColumnImage. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxTreeListCtrl_GetColumnImage(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+static wxString  wxPyTreeListCtrl_GetItemText(wxPyTreeListCtrl *self,const wxTreeItemId & item,int  column) {
+            if (column < 0) column = self->GetMainColumn();
+            return self->GetItemText(item, column);
+        }
+static PyObject *_wrap_wxTreeListCtrl_GetItemText(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxString * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    int  _arg2 = (int ) -1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item","column", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|i:wxTreeListCtrl_GetItemText",_kwnames,&_argo0,&_argo1,&_arg2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetItemText. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetItemText. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxString (wxPyTreeListCtrl_GetItemText(_arg0,*_arg1,_arg2));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{
+#if wxUSE_UNICODE
+    _resultobj = PyUnicode_FromWideChar(_result->c_str(), _result->Len());
+#else
+    _resultobj = PyString_FromStringAndSize(_result->c_str(), _result->Len());
+#endif
+}
+{
+    delete _result;
+}
+    return _resultobj;
+}
+
+static int  wxPyTreeListCtrl_GetItemImage(wxPyTreeListCtrl *self,const wxTreeItemId & item,int  column,wxTreeItemIcon  which) {
+            if (column < 0) column = self->GetMainColumn();
+            return self->GetItemImage(item, column, which);
+        }
+static PyObject *_wrap_wxTreeListCtrl_GetItemImage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    int  _arg2 = (int ) -1;
+    wxTreeItemIcon  _arg3 = (wxTreeItemIcon ) wxTreeItemIcon_Normal;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item","column","which", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|ii:wxTreeListCtrl_GetItemImage",_kwnames,&_argo0,&_argo1,&_arg2,&_arg3)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetItemImage. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetItemImage. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxPyTreeListCtrl_GetItemImage(_arg0,*_arg1,_arg2,_arg3);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+static void  wxPyTreeListCtrl_SetItemText(wxPyTreeListCtrl *self,const wxTreeItemId & item,const wxString & text,int  column) {
+            if (column < 0) column = self->GetMainColumn();
+            self->SetItemText(item, column, text);
+        }
+static PyObject *_wrap_wxTreeListCtrl_SetItemText(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    wxString * _arg2;
+    int  _arg3 = (int ) -1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","item","text","column", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO|i:wxTreeListCtrl_SetItemText",_kwnames,&_argo0,&_argo1,&_obj2,&_arg3)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetItemText. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_SetItemText. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    _arg2 = wxString_in_helper(_obj2);
+    if (_arg2 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPyTreeListCtrl_SetItemText(_arg0,*_arg1,*_arg2,_arg3);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+{
+    if (_obj2)
+        delete _arg2;
+}
+    return _resultobj;
+}
+
+static void  wxPyTreeListCtrl_SetItemImage(wxPyTreeListCtrl *self,const wxTreeItemId & item,int  image,int  column,wxTreeItemIcon  which) {
+            if (column < 0) column = self->GetMainColumn();
+            self->SetItemImage(item, column, image, which);
+        }
+static PyObject *_wrap_wxTreeListCtrl_SetItemImage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    int  _arg2;
+    int  _arg3 = (int ) -1;
+    wxTreeItemIcon  _arg4 = (wxTreeItemIcon ) wxTreeItemIcon_Normal;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item","image","column","which", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOi|ii:wxTreeListCtrl_SetItemImage",_kwnames,&_argo0,&_argo1,&_arg2,&_arg3,&_arg4)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetItemImage. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_SetItemImage. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPyTreeListCtrl_SetItemImage(_arg0,*_arg1,_arg2,_arg3,_arg4);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+static wxPyTreeItemData * wxPyTreeListCtrl_GetItemData(wxPyTreeListCtrl *self,const wxTreeItemId & item) {
+            wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
+            if (data == NULL) {
+                data = new wxPyTreeItemData();
+                data->SetId(item); // set the id
+                self->SetItemData(item, data);
+            }
+            return data;
+        }
+static PyObject *_wrap_wxTreeListCtrl_GetItemData(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeItemData * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_GetItemData",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetItemData. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetItemData. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxPyTreeItemData *)wxPyTreeListCtrl_GetItemData(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPyTreeItemData_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
+static void  wxPyTreeListCtrl_SetItemData(wxPyTreeListCtrl *self,const wxTreeItemId & item,wxPyTreeItemData * data) {
+            data->SetId(item); // set the id
+            self->SetItemData(item, data);
+        }
+static PyObject *_wrap_wxTreeListCtrl_SetItemData(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    wxPyTreeItemData * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","item","data", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxTreeListCtrl_SetItemData",_kwnames,&_argo0,&_argo1,&_argo2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetItemData. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_SetItemData. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (_argo2 == Py_None) { _arg2 = NULL; }
+        else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxPyTreeItemData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxTreeListCtrl_SetItemData. Expected _wxPyTreeItemData_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPyTreeListCtrl_SetItemData(_arg0,*_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+static PyObject * wxPyTreeListCtrl_GetPyData(wxPyTreeListCtrl *self,const wxTreeItemId & item) {
+            wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
+            if (data == NULL) {
+                data = new wxPyTreeItemData();
+                data->SetId(item); // set the id
+                self->SetItemData(item, data);
+            }
+            return data->GetData();
+        }
+static PyObject *_wrap_wxTreeListCtrl_GetPyData(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    PyObject * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_GetPyData",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetPyData. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetPyData. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (PyObject *)wxPyTreeListCtrl_GetPyData(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{
+  _resultobj = _result;
+}
+    return _resultobj;
+}
+
+static void  wxPyTreeListCtrl_SetPyData(wxPyTreeListCtrl *self,const wxTreeItemId & item,PyObject * obj) {
+            wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
+            if (data == NULL) {
+                data = new wxPyTreeItemData(obj);
+                data->SetId(item); // set the id
+                self->SetItemData(item, data);
+            } else
+                data->SetData(obj);
+        }
+static PyObject *_wrap_wxTreeListCtrl_SetPyData(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","item","obj", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxTreeListCtrl_SetPyData",_kwnames,&_argo0,&_argo1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetPyData. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_SetPyData. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+  _arg2 = _obj2;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPyTreeListCtrl_SetPyData(_arg0,*_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetItemHasChildren(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetItemHasChildren(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_SetItemHasChildren(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    bool  _arg2 = (bool ) TRUE;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    int tempbool2 = (int) TRUE;
+    char *_kwnames[] = { "self","item","has", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|i:wxTreeListCtrl_SetItemHasChildren",_kwnames,&_argo0,&_argo1,&tempbool2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetItemHasChildren. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_SetItemHasChildren. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+    _arg2 = (bool ) tempbool2;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetItemHasChildren(_arg0,*_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetItemBold(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetItemBold(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_SetItemBold(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    bool  _arg2 = (bool ) TRUE;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    int tempbool2 = (int) TRUE;
+    char *_kwnames[] = { "self","item","bold", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|i:wxTreeListCtrl_SetItemBold",_kwnames,&_argo0,&_argo1,&tempbool2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetItemBold. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_SetItemBold. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+    _arg2 = (bool ) tempbool2;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetItemBold(_arg0,*_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetItemTextColour(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetItemTextColour(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_SetItemTextColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    wxColour * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    wxColour  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","item","col", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxTreeListCtrl_SetItemTextColour",_kwnames,&_argo0,&_argo1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetItemTextColour. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_SetItemTextColour. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    _arg2 = &temp;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetItemTextColour(_arg0,*_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetItemBackgroundColour(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetItemBackgroundColour(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_SetItemBackgroundColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    wxColour * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    wxColour  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","item","col", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxTreeListCtrl_SetItemBackgroundColour",_kwnames,&_argo0,&_argo1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetItemBackgroundColour. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_SetItemBackgroundColour. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    _arg2 = &temp;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetItemBackgroundColour(_arg0,*_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetItemFont(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetItemFont(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_SetItemFont(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    wxFont * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","item","font", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxTreeListCtrl_SetItemFont",_kwnames,&_argo0,&_argo1,&_argo2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetItemFont. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_SetItemFont. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxFont_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxTreeListCtrl_SetItemFont. Expected _wxFont_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetItemFont(_arg0,*_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetItemBold(_swigobj,_swigarg0)  (_swigobj->GetItemBold(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetItemBold(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_GetItemBold",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetItemBold. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetItemBold. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxTreeListCtrl_GetItemBold(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetItemTextColour(_swigobj,_swigarg0)  (_swigobj->GetItemTextColour(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetItemTextColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxColour * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_GetItemTextColour",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetItemTextColour. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetItemTextColour. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxColour (wxTreeListCtrl_GetItemTextColour(_arg0,*_arg1));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxColour_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetItemBackgroundColour(_swigobj,_swigarg0)  (_swigobj->GetItemBackgroundColour(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetItemBackgroundColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxColour * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_GetItemBackgroundColour",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetItemBackgroundColour. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetItemBackgroundColour. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxColour (wxTreeListCtrl_GetItemBackgroundColour(_arg0,*_arg1));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxColour_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetItemFont(_swigobj,_swigarg0)  (_swigobj->GetItemFont(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetItemFont(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxFont * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_GetItemFont",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetItemFont. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetItemFont. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxFont (wxTreeListCtrl_GetItemFont(_arg0,*_arg1));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxFont_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_IsVisible(_swigobj,_swigarg0)  (_swigobj->IsVisible(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_IsVisible(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_IsVisible",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_IsVisible. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_IsVisible. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxTreeListCtrl_IsVisible(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_ItemHasChildren(_swigobj,_swigarg0)  (_swigobj->ItemHasChildren(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_ItemHasChildren(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_ItemHasChildren",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_ItemHasChildren. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_ItemHasChildren. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxTreeListCtrl_ItemHasChildren(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_IsExpanded(_swigobj,_swigarg0)  (_swigobj->IsExpanded(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_IsExpanded(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_IsExpanded",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_IsExpanded. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_IsExpanded. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxTreeListCtrl_IsExpanded(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_IsSelected(_swigobj,_swigarg0)  (_swigobj->IsSelected(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_IsSelected(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_IsSelected",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_IsSelected. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_IsSelected. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxTreeListCtrl_IsSelected(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_IsBold(_swigobj,_swigarg0)  (_swigobj->IsBold(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_IsBold(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_IsBold",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_IsBold. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_IsBold. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxTreeListCtrl_IsBold(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetChildrenCount(_swigobj,_swigarg0,_swigarg1)  (_swigobj->GetChildrenCount(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_GetChildrenCount(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    size_t  _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    bool  _arg2 = (bool ) TRUE;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    int tempbool2 = (int) TRUE;
+    char *_kwnames[] = { "self","item","recursively", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|i:wxTreeListCtrl_GetChildrenCount",_kwnames,&_argo0,&_argo1,&tempbool2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetChildrenCount. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetChildrenCount. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+    _arg2 = (bool ) tempbool2;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (size_t )wxTreeListCtrl_GetChildrenCount(_arg0,*_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetRootItem(_swigobj)  (_swigobj->GetRootItem())
+static PyObject *_wrap_wxTreeListCtrl_GetRootItem(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_GetRootItem",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetRootItem. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_GetRootItem(_arg0));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetSelection(_swigobj)  (_swigobj->GetSelection())
+static PyObject *_wrap_wxTreeListCtrl_GetSelection(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_GetSelection",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetSelection. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_GetSelection(_arg0));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+    return _resultobj;
+}
+
+static PyObject * wxPyTreeListCtrl_GetSelections(wxPyTreeListCtrl *self) {
+            wxPyBeginBlockThreads();
+            PyObject*           rval = PyList_New(0);
+            wxArrayTreeItemIds  array;
+            size_t              num, x;
+            num = self->GetSelections(array);
+            for (x=0; x < num; x++) {
+                wxTreeItemId *tii = new wxTreeItemId(array.Item(x));
+                PyObject* item = wxPyConstructObject((void*)tii, wxT("wxTreeItemId"), TRUE);
+                PyList_Append(rval, item);
+            }
+            wxPyEndBlockThreads();
+            return rval;
+        }
+static PyObject *_wrap_wxTreeListCtrl_GetSelections(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    PyObject * _result;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_GetSelections",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetSelections. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (PyObject *)wxPyTreeListCtrl_GetSelections(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{
+  _resultobj = _result;
+}
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetItemParent(_swigobj,_swigarg0)  (_swigobj->GetParent(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetItemParent(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_GetItemParent",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetItemParent. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetItemParent. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_GetItemParent(_arg0,*_arg1));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetFirstChild(_swigobj,_swigarg0,_swigarg1)  (_swigobj->GetFirstChild(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_GetFirstChild(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    long * _arg2 = (long *) &longzero;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    long  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","item","INOUT", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|O:wxTreeListCtrl_GetFirstChild",_kwnames,&_argo0,&_argo1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetFirstChild. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetFirstChild. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+    if (_obj2)
+{
+  temp = (long) PyInt_AsLong(_obj2);
+  _arg2 = &temp;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_GetFirstChild(_arg0,*_arg1,*_arg2));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg2));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetNextChild(_swigobj,_swigarg0,_swigarg1)  (_swigobj->GetNextChild(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_GetNextChild(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    long * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    long  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","item","INOUT", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxTreeListCtrl_GetNextChild",_kwnames,&_argo0,&_argo1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetNextChild. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetNextChild. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+  temp = (long) PyInt_AsLong(_obj2);
+  _arg2 = &temp;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_GetNextChild(_arg0,*_arg1,*_arg2));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg2));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetLastChild(_swigobj,_swigarg0)  (_swigobj->GetLastChild(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetLastChild(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_GetLastChild",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetLastChild. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetLastChild. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_GetLastChild(_arg0,*_arg1));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetNextSibling(_swigobj,_swigarg0)  (_swigobj->GetNextSibling(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetNextSibling(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_GetNextSibling",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetNextSibling. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetNextSibling. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_GetNextSibling(_arg0,*_arg1));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetPrevSibling(_swigobj,_swigarg0)  (_swigobj->GetPrevSibling(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetPrevSibling(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_GetPrevSibling",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetPrevSibling. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetPrevSibling. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_GetPrevSibling(_arg0,*_arg1));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetFirstVisibleItem(_swigobj)  (_swigobj->GetFirstVisibleItem())
+static PyObject *_wrap_wxTreeListCtrl_GetFirstVisibleItem(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_GetFirstVisibleItem",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetFirstVisibleItem. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_GetFirstVisibleItem(_arg0));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetNextVisible(_swigobj,_swigarg0)  (_swigobj->GetNextVisible(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetNextVisible(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_GetNextVisible",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetNextVisible. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetNextVisible. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_GetNextVisible(_arg0,*_arg1));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetPrevVisible(_swigobj,_swigarg0)  (_swigobj->GetPrevVisible(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetPrevVisible(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_GetPrevVisible",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetPrevVisible. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetPrevVisible. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_GetPrevVisible(_arg0,*_arg1));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetNext(_swigobj,_swigarg0)  (_swigobj->GetNext(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetNext(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_GetNext",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetNext. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetNext. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_GetNext(_arg0,*_arg1));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_AddRoot(_swigobj,_swigarg0,_swigarg1,_swigarg2,_swigarg3)  (_swigobj->AddRoot(_swigarg0,_swigarg1,_swigarg2,_swigarg3))
+static PyObject *_wrap_wxTreeListCtrl_AddRoot(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxString * _arg1;
+    int  _arg2 = (int ) -1;
+    int  _arg3 = (int ) -1;
+    wxPyTreeItemData * _arg4 = (wxPyTreeItemData *) NULL;
+    PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
+    PyObject * _argo4 = 0;
+    char *_kwnames[] = { "self","text","image","selectedImage","data", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|iiO:wxTreeListCtrl_AddRoot",_kwnames,&_argo0,&_obj1,&_arg2,&_arg3,&_argo4)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_AddRoot. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = wxString_in_helper(_obj1);
+    if (_arg1 == NULL)
+        return NULL;
+}
+    if (_argo4) {
+        if (_argo4 == Py_None) { _arg4 = NULL; }
+        else if (SWIG_GetPtrObj(_argo4,(void **) &_arg4,"_wxPyTreeItemData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 5 of wxTreeListCtrl_AddRoot. Expected _wxPyTreeItemData_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_AddRoot(_arg0,*_arg1,_arg2,_arg3,_arg4));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+{
+    if (_obj1)
+        delete _arg1;
+}
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_PrependItem(_swigobj,_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4)  (_swigobj->PrependItem(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4))
+static PyObject *_wrap_wxTreeListCtrl_PrependItem(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    wxString * _arg2;
+    int  _arg3 = (int ) -1;
+    int  _arg4 = (int ) -1;
+    wxPyTreeItemData * _arg5 = (wxPyTreeItemData *) NULL;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    PyObject * _obj2 = 0;
+    PyObject * _argo5 = 0;
+    char *_kwnames[] = { "self","parent","text","image","selectedImage","data", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO|iiO:wxTreeListCtrl_PrependItem",_kwnames,&_argo0,&_argo1,&_obj2,&_arg3,&_arg4,&_argo5)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_PrependItem. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_PrependItem. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    _arg2 = wxString_in_helper(_obj2);
+    if (_arg2 == NULL)
+        return NULL;
+}
+    if (_argo5) {
+        if (_argo5 == Py_None) { _arg5 = NULL; }
+        else if (SWIG_GetPtrObj(_argo5,(void **) &_arg5,"_wxPyTreeItemData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 6 of wxTreeListCtrl_PrependItem. Expected _wxPyTreeItemData_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_PrependItem(_arg0,*_arg1,*_arg2,_arg3,_arg4,_arg5));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+{
+    if (_obj2)
+        delete _arg2;
+}
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_InsertItem(_swigobj,_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5)  (_swigobj->InsertItem(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5))
+static PyObject *_wrap_wxTreeListCtrl_InsertItem(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    wxTreeItemId * _arg2;
+    wxString * _arg3;
+    int  _arg4 = (int ) -1;
+    int  _arg5 = (int ) -1;
+    wxPyTreeItemData * _arg6 = (wxPyTreeItemData *) NULL;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    PyObject * _argo2 = 0;
+    PyObject * _obj3 = 0;
+    PyObject * _argo6 = 0;
+    char *_kwnames[] = { "self","parent","idPrevious","text","image","selectedImage","data", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOOO|iiO:wxTreeListCtrl_InsertItem",_kwnames,&_argo0,&_argo1,&_argo2,&_obj3,&_arg4,&_arg5,&_argo6)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_InsertItem. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_InsertItem. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxTreeListCtrl_InsertItem. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    _arg3 = wxString_in_helper(_obj3);
+    if (_arg3 == NULL)
+        return NULL;
+}
+    if (_argo6) {
+        if (_argo6 == Py_None) { _arg6 = NULL; }
+        else if (SWIG_GetPtrObj(_argo6,(void **) &_arg6,"_wxPyTreeItemData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 7 of wxTreeListCtrl_InsertItem. Expected _wxPyTreeItemData_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_InsertItem(_arg0,*_arg1,*_arg2,*_arg3,_arg4,_arg5,_arg6));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+{
+    if (_obj3)
+        delete _arg3;
+}
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_InsertItemBefore(_swigobj,_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5)  (_swigobj->InsertItem(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5))
+static PyObject *_wrap_wxTreeListCtrl_InsertItemBefore(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    size_t  _arg2;
+    wxString * _arg3;
+    int  _arg4 = (int ) -1;
+    int  _arg5 = (int ) -1;
+    wxPyTreeItemData * _arg6 = (wxPyTreeItemData *) NULL;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    PyObject * _obj3 = 0;
+    PyObject * _argo6 = 0;
+    char *_kwnames[] = { "self","parent","index","text","image","selectedImage","data", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOiO|iiO:wxTreeListCtrl_InsertItemBefore",_kwnames,&_argo0,&_argo1,&_arg2,&_obj3,&_arg4,&_arg5,&_argo6)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_InsertItemBefore. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_InsertItemBefore. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    _arg3 = wxString_in_helper(_obj3);
+    if (_arg3 == NULL)
+        return NULL;
+}
+    if (_argo6) {
+        if (_argo6 == Py_None) { _arg6 = NULL; }
+        else if (SWIG_GetPtrObj(_argo6,(void **) &_arg6,"_wxPyTreeItemData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 7 of wxTreeListCtrl_InsertItemBefore. Expected _wxPyTreeItemData_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_InsertItemBefore(_arg0,*_arg1,_arg2,*_arg3,_arg4,_arg5,_arg6));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+{
+    if (_obj3)
+        delete _arg3;
+}
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_AppendItem(_swigobj,_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4)  (_swigobj->AppendItem(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4))
+static PyObject *_wrap_wxTreeListCtrl_AppendItem(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    wxString * _arg2;
+    int  _arg3 = (int ) -1;
+    int  _arg4 = (int ) -1;
+    wxPyTreeItemData * _arg5 = (wxPyTreeItemData *) NULL;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    PyObject * _obj2 = 0;
+    PyObject * _argo5 = 0;
+    char *_kwnames[] = { "self","parent","text","image","selectedImage","data", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO|iiO:wxTreeListCtrl_AppendItem",_kwnames,&_argo0,&_argo1,&_obj2,&_arg3,&_arg4,&_argo5)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_AppendItem. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_AppendItem. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    _arg2 = wxString_in_helper(_obj2);
+    if (_arg2 == NULL)
+        return NULL;
+}
+    if (_argo5) {
+        if (_argo5 == Py_None) { _arg5 = NULL; }
+        else if (SWIG_GetPtrObj(_argo5,(void **) &_arg5,"_wxPyTreeItemData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 6 of wxTreeListCtrl_AppendItem. Expected _wxPyTreeItemData_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_AppendItem(_arg0,*_arg1,*_arg2,_arg3,_arg4,_arg5));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+{
+    if (_obj2)
+        delete _arg2;
+}
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_Delete(_swigobj,_swigarg0)  (_swigobj->Delete(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_Delete(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_Delete",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_Delete. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_Delete. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_Delete(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_DeleteChildren(_swigobj,_swigarg0)  (_swigobj->DeleteChildren(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_DeleteChildren(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_DeleteChildren",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_DeleteChildren. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_DeleteChildren. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_DeleteChildren(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_DeleteAllItems(_swigobj)  (_swigobj->DeleteAllItems())
+static PyObject *_wrap_wxTreeListCtrl_DeleteAllItems(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_DeleteAllItems",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_DeleteAllItems. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_DeleteAllItems(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_Expand(_swigobj,_swigarg0)  (_swigobj->Expand(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_Expand(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_Expand",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_Expand. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_Expand. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_Expand(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_ExpandAll(_swigobj,_swigarg0)  (_swigobj->ExpandAll(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_ExpandAll(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_ExpandAll",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_ExpandAll. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_ExpandAll. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_ExpandAll(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_Collapse(_swigobj,_swigarg0)  (_swigobj->Collapse(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_Collapse(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_Collapse",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_Collapse. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_Collapse. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_Collapse(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_CollapseAndReset(_swigobj,_swigarg0)  (_swigobj->CollapseAndReset(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_CollapseAndReset(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_CollapseAndReset",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_CollapseAndReset. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_CollapseAndReset. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_CollapseAndReset(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_Toggle(_swigobj,_swigarg0)  (_swigobj->Toggle(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_Toggle(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_Toggle",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_Toggle. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_Toggle. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_Toggle(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_Unselect(_swigobj)  (_swigobj->Unselect())
+static PyObject *_wrap_wxTreeListCtrl_Unselect(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_Unselect",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_Unselect. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_Unselect(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_UnselectAll(_swigobj)  (_swigobj->UnselectAll())
+static PyObject *_wrap_wxTreeListCtrl_UnselectAll(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_UnselectAll",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_UnselectAll. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_UnselectAll(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SelectItem(_swigobj,_swigarg0,_swigarg1,_swigarg2)  (_swigobj->SelectItem(_swigarg0,_swigarg1,_swigarg2))
+static PyObject *_wrap_wxTreeListCtrl_SelectItem(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    bool  _arg2 = (bool ) TRUE;
+    bool  _arg3 = (bool ) FALSE;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    int tempbool2 = (int) TRUE;
+    int tempbool3 = (int) FALSE;
+    char *_kwnames[] = { "self","item","unselect_others","extended_select", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|ii:wxTreeListCtrl_SelectItem",_kwnames,&_argo0,&_argo1,&tempbool2,&tempbool3)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SelectItem. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_SelectItem. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+    _arg2 = (bool ) tempbool2;
+    _arg3 = (bool ) tempbool3;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SelectItem(_arg0,*_arg1,_arg2,_arg3);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_EnsureVisible(_swigobj,_swigarg0)  (_swigobj->EnsureVisible(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_EnsureVisible(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_EnsureVisible",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_EnsureVisible. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_EnsureVisible. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_EnsureVisible(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_ScrollTo(_swigobj,_swigarg0)  (_swigobj->ScrollTo(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_ScrollTo(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_ScrollTo",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_ScrollTo. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_ScrollTo. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_ScrollTo(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_HitTest(_swigobj,_swigarg0,_swigarg1,_swigarg2)  (_swigobj->HitTest(_swigarg0,_swigarg1,_swigarg2))
+static PyObject *_wrap_wxTreeListCtrl_HitTest(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeItemId * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxPoint * _arg1;
+    int * _arg2;
+    int  temp;
+    int * _arg3;
+    int  temp0;
+    PyObject * _argo0 = 0;
+    wxPoint  temp1;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","point", NULL };
+    char _ptemp[128];
+
+    self = self;
+{
+  _arg2 = &temp;
+}
+{
+  _arg3 = &temp0;
+}
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_HitTest",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_HitTest. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = &temp1;
+    if (! wxPoint_helper(_obj1, &_arg1))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxTreeItemId (wxTreeListCtrl_HitTest(_arg0,*_arg1,*_arg2,*_arg3));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg2));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg3));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+    return _resultobj;
+}
+
+static PyObject * wxPyTreeListCtrl_GetBoundingRect(wxPyTreeListCtrl *self,const wxTreeItemId & item,bool  textOnly) {
+            wxRect rect;
+            if (self->GetBoundingRect(item, rect, textOnly)) {
+                wxPyBeginBlockThreads();
+                wxRect* r = new wxRect(rect);
+                PyObject* val = wxPyConstructObject((void*)r, wxT("wxRect"), 1);
+                wxPyEndBlockThreads();
+                return val;
+            }
+            else {
+                Py_INCREF(Py_None);
+                return Py_None;
+            }
+        }
+static PyObject *_wrap_wxTreeListCtrl_GetBoundingRect(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    PyObject * _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    bool  _arg2 = (bool ) FALSE;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    int tempbool2 = (int) FALSE;
+    char *_kwnames[] = { "self","item","textOnly", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|i:wxTreeListCtrl_GetBoundingRect",_kwnames,&_argo0,&_argo1,&tempbool2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetBoundingRect. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetBoundingRect. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+    _arg2 = (bool ) tempbool2;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (PyObject *)wxPyTreeListCtrl_GetBoundingRect(_arg0,*_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{
+  _resultobj = _result;
+}
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_EditLabel(_swigobj,_swigarg0)  (_swigobj->EditLabel(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_EditLabel(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_EditLabel",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_EditLabel. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_EditLabel. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_EditLabel(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_Edit(_swigobj,_swigarg0)  (_swigobj->Edit(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_Edit(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_Edit",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_Edit. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_Edit. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_Edit(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SortChildren(_swigobj,_swigarg0)  (_swigobj->SortChildren(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_SortChildren(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_SortChildren",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SortChildren. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_SortChildren. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SortChildren(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetItemSelectedImage(_swigobj,_swigarg0)  (_swigobj->GetItemSelectedImage(_swigarg0))
+static PyObject *_wrap_wxTreeListCtrl_GetItemSelectedImage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeListCtrl_GetItemSelectedImage",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetItemSelectedImage. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_GetItemSelectedImage. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxTreeListCtrl_GetItemSelectedImage(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_SetItemSelectedImage(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetItemSelectedImage(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxTreeListCtrl_SetItemSelectedImage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyTreeListCtrl * _arg0;
+    wxTreeItemId * _arg1;
+    int  _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item","image", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOi:wxTreeListCtrl_SetItemSelectedImage",_kwnames,&_argo0,&_argo1,&_arg2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_SetItemSelectedImage. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeListCtrl_SetItemSelectedImage. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeListCtrl_SetItemSelectedImage(_arg0,*_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetHeaderWindow(_swigobj)  (_swigobj->GetHeaderWindow())
+static PyObject *_wrap_wxTreeListCtrl_GetHeaderWindow(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxWindow * _result;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_GetHeaderWindow",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetHeaderWindow. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxWindow *)wxTreeListCtrl_GetHeaderWindow(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{ _resultobj = wxPyMake_wxObject(_result); }
+    return _resultobj;
+}
+
+#define wxTreeListCtrl_GetMainWindow(_swigobj)  (_swigobj->GetMainWindow())
+static PyObject *_wrap_wxTreeListCtrl_GetMainWindow(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxWindow * _result;
+    wxPyTreeListCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxTreeListCtrl_GetMainWindow",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyTreeListCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeListCtrl_GetMainWindow. Expected _wxPyTreeListCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxWindow *)wxTreeListCtrl_GetMainWindow(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{ _resultobj = wxPyMake_wxObject(_result); }
+    return _resultobj;
+}
+
 static PyMethodDef gizmoscMethods[] = {
+	 { "wxTreeListCtrl_GetMainWindow", (PyCFunction) _wrap_wxTreeListCtrl_GetMainWindow, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetHeaderWindow", (PyCFunction) _wrap_wxTreeListCtrl_GetHeaderWindow, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetItemSelectedImage", (PyCFunction) _wrap_wxTreeListCtrl_SetItemSelectedImage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetItemSelectedImage", (PyCFunction) _wrap_wxTreeListCtrl_GetItemSelectedImage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SortChildren", (PyCFunction) _wrap_wxTreeListCtrl_SortChildren, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_Edit", (PyCFunction) _wrap_wxTreeListCtrl_Edit, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_EditLabel", (PyCFunction) _wrap_wxTreeListCtrl_EditLabel, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetBoundingRect", (PyCFunction) _wrap_wxTreeListCtrl_GetBoundingRect, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_HitTest", (PyCFunction) _wrap_wxTreeListCtrl_HitTest, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_ScrollTo", (PyCFunction) _wrap_wxTreeListCtrl_ScrollTo, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_EnsureVisible", (PyCFunction) _wrap_wxTreeListCtrl_EnsureVisible, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SelectItem", (PyCFunction) _wrap_wxTreeListCtrl_SelectItem, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_UnselectAll", (PyCFunction) _wrap_wxTreeListCtrl_UnselectAll, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_Unselect", (PyCFunction) _wrap_wxTreeListCtrl_Unselect, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_Toggle", (PyCFunction) _wrap_wxTreeListCtrl_Toggle, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_CollapseAndReset", (PyCFunction) _wrap_wxTreeListCtrl_CollapseAndReset, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_Collapse", (PyCFunction) _wrap_wxTreeListCtrl_Collapse, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_ExpandAll", (PyCFunction) _wrap_wxTreeListCtrl_ExpandAll, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_Expand", (PyCFunction) _wrap_wxTreeListCtrl_Expand, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_DeleteAllItems", (PyCFunction) _wrap_wxTreeListCtrl_DeleteAllItems, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_DeleteChildren", (PyCFunction) _wrap_wxTreeListCtrl_DeleteChildren, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_Delete", (PyCFunction) _wrap_wxTreeListCtrl_Delete, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_AppendItem", (PyCFunction) _wrap_wxTreeListCtrl_AppendItem, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_InsertItemBefore", (PyCFunction) _wrap_wxTreeListCtrl_InsertItemBefore, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_InsertItem", (PyCFunction) _wrap_wxTreeListCtrl_InsertItem, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_PrependItem", (PyCFunction) _wrap_wxTreeListCtrl_PrependItem, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_AddRoot", (PyCFunction) _wrap_wxTreeListCtrl_AddRoot, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetNext", (PyCFunction) _wrap_wxTreeListCtrl_GetNext, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetPrevVisible", (PyCFunction) _wrap_wxTreeListCtrl_GetPrevVisible, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetNextVisible", (PyCFunction) _wrap_wxTreeListCtrl_GetNextVisible, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetFirstVisibleItem", (PyCFunction) _wrap_wxTreeListCtrl_GetFirstVisibleItem, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetPrevSibling", (PyCFunction) _wrap_wxTreeListCtrl_GetPrevSibling, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetNextSibling", (PyCFunction) _wrap_wxTreeListCtrl_GetNextSibling, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetLastChild", (PyCFunction) _wrap_wxTreeListCtrl_GetLastChild, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetNextChild", (PyCFunction) _wrap_wxTreeListCtrl_GetNextChild, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetFirstChild", (PyCFunction) _wrap_wxTreeListCtrl_GetFirstChild, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetItemParent", (PyCFunction) _wrap_wxTreeListCtrl_GetItemParent, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetSelections", (PyCFunction) _wrap_wxTreeListCtrl_GetSelections, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetSelection", (PyCFunction) _wrap_wxTreeListCtrl_GetSelection, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetRootItem", (PyCFunction) _wrap_wxTreeListCtrl_GetRootItem, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetChildrenCount", (PyCFunction) _wrap_wxTreeListCtrl_GetChildrenCount, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_IsBold", (PyCFunction) _wrap_wxTreeListCtrl_IsBold, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_IsSelected", (PyCFunction) _wrap_wxTreeListCtrl_IsSelected, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_IsExpanded", (PyCFunction) _wrap_wxTreeListCtrl_IsExpanded, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_ItemHasChildren", (PyCFunction) _wrap_wxTreeListCtrl_ItemHasChildren, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_IsVisible", (PyCFunction) _wrap_wxTreeListCtrl_IsVisible, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetItemFont", (PyCFunction) _wrap_wxTreeListCtrl_GetItemFont, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetItemBackgroundColour", (PyCFunction) _wrap_wxTreeListCtrl_GetItemBackgroundColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetItemTextColour", (PyCFunction) _wrap_wxTreeListCtrl_GetItemTextColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetItemBold", (PyCFunction) _wrap_wxTreeListCtrl_GetItemBold, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetItemFont", (PyCFunction) _wrap_wxTreeListCtrl_SetItemFont, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetItemBackgroundColour", (PyCFunction) _wrap_wxTreeListCtrl_SetItemBackgroundColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetItemTextColour", (PyCFunction) _wrap_wxTreeListCtrl_SetItemTextColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetItemBold", (PyCFunction) _wrap_wxTreeListCtrl_SetItemBold, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetItemHasChildren", (PyCFunction) _wrap_wxTreeListCtrl_SetItemHasChildren, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetPyData", (PyCFunction) _wrap_wxTreeListCtrl_SetPyData, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetPyData", (PyCFunction) _wrap_wxTreeListCtrl_GetPyData, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetItemData", (PyCFunction) _wrap_wxTreeListCtrl_SetItemData, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetItemData", (PyCFunction) _wrap_wxTreeListCtrl_GetItemData, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetItemImage", (PyCFunction) _wrap_wxTreeListCtrl_SetItemImage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetItemText", (PyCFunction) _wrap_wxTreeListCtrl_SetItemText, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetItemImage", (PyCFunction) _wrap_wxTreeListCtrl_GetItemImage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetItemText", (PyCFunction) _wrap_wxTreeListCtrl_GetItemText, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetColumnImage", (PyCFunction) _wrap_wxTreeListCtrl_GetColumnImage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetColumnImage", (PyCFunction) _wrap_wxTreeListCtrl_SetColumnImage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetColumnAlignment", (PyCFunction) _wrap_wxTreeListCtrl_GetColumnAlignment, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetColumnAlignment", (PyCFunction) _wrap_wxTreeListCtrl_SetColumnAlignment, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetColumn", (PyCFunction) _wrap_wxTreeListCtrl_GetColumn, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetColumn", (PyCFunction) _wrap_wxTreeListCtrl_SetColumn, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetColumnText", (PyCFunction) _wrap_wxTreeListCtrl_GetColumnText, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetColumnText", (PyCFunction) _wrap_wxTreeListCtrl_SetColumnText, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetMainColumn", (PyCFunction) _wrap_wxTreeListCtrl_GetMainColumn, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetMainColumn", (PyCFunction) _wrap_wxTreeListCtrl_SetMainColumn, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetColumnWidth", (PyCFunction) _wrap_wxTreeListCtrl_GetColumnWidth, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetColumnWidth", (PyCFunction) _wrap_wxTreeListCtrl_SetColumnWidth, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetColumnCount", (PyCFunction) _wrap_wxTreeListCtrl_GetColumnCount, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_RemoveColumn", (PyCFunction) _wrap_wxTreeListCtrl_RemoveColumn, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_InsertColumnInfo", (PyCFunction) _wrap_wxTreeListCtrl_InsertColumnInfo, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_InsertColumn", (PyCFunction) _wrap_wxTreeListCtrl_InsertColumn, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_AddColumnInfo", (PyCFunction) _wrap_wxTreeListCtrl_AddColumnInfo, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_AddColumn", (PyCFunction) _wrap_wxTreeListCtrl_AddColumn, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_AssignButtonsImageList", (PyCFunction) _wrap_wxTreeListCtrl_AssignButtonsImageList, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_AssignStateImageList", (PyCFunction) _wrap_wxTreeListCtrl_AssignStateImageList, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_AssignImageList", (PyCFunction) _wrap_wxTreeListCtrl_AssignImageList, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetButtonsImageList", (PyCFunction) _wrap_wxTreeListCtrl_SetButtonsImageList, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetStateImageList", (PyCFunction) _wrap_wxTreeListCtrl_SetStateImageList, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetImageList", (PyCFunction) _wrap_wxTreeListCtrl_SetImageList, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetButtonsImageList", (PyCFunction) _wrap_wxTreeListCtrl_GetButtonsImageList, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetStateImageList", (PyCFunction) _wrap_wxTreeListCtrl_GetStateImageList, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetImageList", (PyCFunction) _wrap_wxTreeListCtrl_GetImageList, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetLineSpacing", (PyCFunction) _wrap_wxTreeListCtrl_SetLineSpacing, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetLineSpacing", (PyCFunction) _wrap_wxTreeListCtrl_GetLineSpacing, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetSpacing", (PyCFunction) _wrap_wxTreeListCtrl_SetSpacing, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetSpacing", (PyCFunction) _wrap_wxTreeListCtrl_GetSpacing, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_SetIndent", (PyCFunction) _wrap_wxTreeListCtrl_SetIndent, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetIndent", (PyCFunction) _wrap_wxTreeListCtrl_GetIndent, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_GetCount", (PyCFunction) _wrap_wxTreeListCtrl_GetCount, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl__setCallbackInfo", (PyCFunction) _wrap_wxTreeListCtrl__setCallbackInfo, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListCtrl_Create", (PyCFunction) _wrap_wxTreeListCtrl_Create, METH_VARARGS | METH_KEYWORDS },
+	 { "new_wxPreTreeListCtrl", (PyCFunction) _wrap_new_wxPreTreeListCtrl, METH_VARARGS | METH_KEYWORDS },
+	 { "new_wxTreeListCtrl", (PyCFunction) _wrap_new_wxTreeListCtrl, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListColumnInfo_SetWidth", (PyCFunction) _wrap_wxTreeListColumnInfo_SetWidth, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListColumnInfo_SetSelectedImage", (PyCFunction) _wrap_wxTreeListColumnInfo_SetSelectedImage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListColumnInfo_SetImage", (PyCFunction) _wrap_wxTreeListColumnInfo_SetImage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListColumnInfo_SetText", (PyCFunction) _wrap_wxTreeListColumnInfo_SetText, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListColumnInfo_SetAlignment", (PyCFunction) _wrap_wxTreeListColumnInfo_SetAlignment, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListColumnInfo_GetWidth", (PyCFunction) _wrap_wxTreeListColumnInfo_GetWidth, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListColumnInfo_GetSelectedImage", (PyCFunction) _wrap_wxTreeListColumnInfo_GetSelectedImage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListColumnInfo_GetImage", (PyCFunction) _wrap_wxTreeListColumnInfo_GetImage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListColumnInfo_GetText", (PyCFunction) _wrap_wxTreeListColumnInfo_GetText, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeListColumnInfo_GetAlignment", (PyCFunction) _wrap_wxTreeListColumnInfo_GetAlignment, METH_VARARGS | METH_KEYWORDS },
+	 { "new_wxTreeListColumnInfo", (PyCFunction) _wrap_new_wxTreeListColumnInfo, METH_VARARGS | METH_KEYWORDS },
 	 { "wxLEDNumberCtrl_SetValue", (PyCFunction) _wrap_wxLEDNumberCtrl_SetValue, METH_VARARGS | METH_KEYWORDS },
 	 { "wxLEDNumberCtrl_SetDrawFaded", (PyCFunction) _wrap_wxLEDNumberCtrl_SetDrawFaded, METH_VARARGS | METH_KEYWORDS },
 	 { "wxLEDNumberCtrl_SetAlignment", (PyCFunction) _wrap_wxLEDNumberCtrl_SetAlignment, METH_VARARGS | METH_KEYWORDS },
@@ -2009,6 +6422,8 @@ static struct { char *n1; char *n2; void *(*pcnv)(void *); } _swig_mapping[] = {
     { "_unsigned_short","_WXTYPE",0},
     { "_unsigned_short","_short",0},
     { "_wxSplitterWindow","_wxThinSplitterWindow",SwigwxThinSplitterWindowTowxSplitterWindow},
+    { "_wxObject","_wxPyTreeListCtrl",SwigwxPyTreeListCtrlTowxObject},
+    { "_wxObject","_wxTreeListColumnInfo",SwigwxTreeListColumnInfoTowxObject},
     { "_wxObject","_wxLEDNumberCtrl",SwigwxLEDNumberCtrlTowxObject},
     { "_wxObject","_wxSplitterScrolledWindow",SwigwxSplitterScrolledWindowTowxObject},
     { "_wxObject","_wxThinSplitterWindow",SwigwxThinSplitterWindowTowxObject},
@@ -2022,6 +6437,7 @@ static struct { char *n1; char *n2; void *(*pcnv)(void *); } _swig_mapping[] = {
     { "_signed_short","_short",0},
     { "_wxScrolledWindow","_wxSplitterScrolledWindow",SwigwxSplitterScrolledWindowTowxScrolledWindow},
     { "_unsigned_char","_byte",0},
+    { "_wxControl","_wxPyTreeListCtrl",SwigwxPyTreeListCtrlTowxControl},
     { "_wxControl","_wxLEDNumberCtrl",SwigwxLEDNumberCtrlTowxControl},
     { "_wxControl","_wxRemotelyScrolledTreeCtrl",SwigwxRemotelyScrolledTreeCtrlTowxControl},
     { "_unsigned_int","_wxCoord",0},
@@ -2072,6 +6488,7 @@ static struct { char *n1; char *n2; void *(*pcnv)(void *); } _swig_mapping[] = {
     { "_wxCoord","_size_t",0},
     { "_wxCoord","_time_t",0},
     { "_wxCoord","_wxPrintQuality",0},
+    { "_wxEvtHandler","_wxPyTreeListCtrl",SwigwxPyTreeListCtrlTowxEvtHandler},
     { "_wxEvtHandler","_wxLEDNumberCtrl",SwigwxLEDNumberCtrlTowxEvtHandler},
     { "_wxEvtHandler","_wxSplitterScrolledWindow",SwigwxSplitterScrolledWindowTowxEvtHandler},
     { "_wxEvtHandler","_wxThinSplitterWindow",SwigwxThinSplitterWindowTowxEvtHandler},
@@ -2079,6 +6496,7 @@ static struct { char *n1; char *n2; void *(*pcnv)(void *); } _swig_mapping[] = {
     { "_wxEvtHandler","_wxRemotelyScrolledTreeCtrl",SwigwxRemotelyScrolledTreeCtrlTowxEvtHandler},
     { "_wxEvtHandler","_wxEditableListBox",SwigwxEditableListBoxTowxEvtHandler},
     { "_wxEvtHandler","_wxDynamicSashWindow",SwigwxDynamicSashWindowTowxEvtHandler},
+    { "_wxWindow","_wxPyTreeListCtrl",SwigwxPyTreeListCtrlTowxWindow},
     { "_wxWindow","_wxLEDNumberCtrl",SwigwxLEDNumberCtrlTowxWindow},
     { "_wxWindow","_wxSplitterScrolledWindow",SwigwxSplitterScrolledWindowTowxWindow},
     { "_wxWindow","_wxThinSplitterWindow",SwigwxThinSplitterWindowTowxWindow},
@@ -2109,12 +6527,17 @@ SWIGEXPORT(void) initgizmosc() {
 	 PyDict_SetItemString(d,"wxLED_ALIGN_CENTER", PyInt_FromLong((long) wxLED_ALIGN_CENTER));
 	 PyDict_SetItemString(d,"wxLED_ALIGN_MASK", PyInt_FromLong((long) wxLED_ALIGN_MASK));
 	 PyDict_SetItemString(d,"wxLED_DRAW_FADED", PyInt_FromLong((long) wxLED_DRAW_FADED));
+	 PyDict_SetItemString(d,"wxTL_ALIGN_LEFT", PyInt_FromLong((long) wxTL_ALIGN_LEFT));
+	 PyDict_SetItemString(d,"wxTL_ALIGN_RIGHT", PyInt_FromLong((long) wxTL_ALIGN_RIGHT));
+	 PyDict_SetItemString(d,"wxTL_ALIGN_CENTER", PyInt_FromLong((long) wxTL_ALIGN_CENTER));
+	 PyDict_SetItemString(d,"wxTREE_HITTEST_ONITEMCOLUMN", PyInt_FromLong((long) wxTREE_HITTEST_ONITEMCOLUMN));
 
 
     wxClassInfo::CleanUpClasses();
     wxClassInfo::InitializeClasses();
 
     wxPyPtrTypeMap_Add("wxTreeCompanionWindow", "wxPyTreeCompanionWindow");
+    wxPyPtrTypeMap_Add("wxTreeListCtrl", "wxPyTreeListCtrl");
 {
    int i;
    for (i = 0; _swig_mapping[i].n1; i++)
diff --git a/wxPython/contrib/gizmos/gizmos.i b/wxPython/contrib/gizmos/gizmos.i
index 1af639a5b7..e677f65e8c 100644
--- a/wxPython/contrib/gizmos/gizmos.i
+++ b/wxPython/contrib/gizmos/gizmos.i
@@ -19,7 +19,12 @@
 #include <wx/gizmos/editlbox.h>
 #include <wx/gizmos/splittree.h>
 #include <wx/gizmos/ledctrl.h>
+
 #include <wx/listctrl.h>
+#include <wx/treectrl.h>
+#include <wx/imaglist.h>
+#include "treelistctrl.h"
+#include "pytree.h"
 %}
 
 //---------------------------------------------------------------------------
@@ -32,6 +37,8 @@
 %extern _defs.i
 %extern events.i
 %extern controls.i
+%extern controls2.i
+%extern gdi.i
 
 
 //----------------------------------------------------------------------
@@ -40,6 +47,8 @@
     // Put some wx default wxChar* values into wxStrings.
     static const wxString wxPyDynamicSashNameStr(wxT("dynamicSashWindow"));
     static const wxString wxPyEditableListBoxNameStr(wxT("editableListBox"));
+    static const wxString wxPyTreeListCtrlNameStr(wxT("treelistctrl"));
+    static const wxString wxPyEmptyString(wxT(""));
 %}
 
 ///----------------------------------------------------------------------
@@ -390,6 +399,521 @@ public:
 
 };
 
+
+
+//----------------------------------------------------------------------------
+// wxTreeListCtrl - the multicolumn tree control
+//----------------------------------------------------------------------------
+
+enum wxTreeListColumnAlign {
+    wxTL_ALIGN_LEFT,
+    wxTL_ALIGN_RIGHT,
+    wxTL_ALIGN_CENTER
+};
+
+
+
+enum {
+    wxTREE_HITTEST_ONITEMCOLUMN
+};
+
+
+
+
+class wxTreeListColumnInfo: public wxObject {
+public:
+    wxTreeListColumnInfo(const wxString& text = wxPyEmptyString,
+			 int image = -1,
+			 size_t width = 100,
+			 wxTreeListColumnAlign alignment = wxTL_ALIGN_LEFT);
+
+    wxTreeListColumnAlign GetAlignment() const;
+    wxString GetText() const;
+    int GetImage() const;
+    int GetSelectedImage() const;
+    size_t GetWidth() const;
+
+    void SetAlignment(wxTreeListColumnAlign alignment);
+    void SetText(const wxString& text);
+    void SetImage(int image);
+    void SetSelectedImage(int image);
+    void SetWidth(size_t with);
+};
+
+
+
+
+%{ // C++ version of Python aware control
+class wxPyTreeListCtrl : public wxTreeListCtrl {
+    DECLARE_ABSTRACT_CLASS(wxPyTreeListCtrl);
+public:
+    wxPyTreeListCtrl() : wxTreeListCtrl() {}
+    wxPyTreeListCtrl(wxWindow *parent, wxWindowID id,
+                     const wxPoint& pos,
+                     const wxSize& size,
+                     long style,
+                     const wxValidator &validator,
+                     const wxString& name) :
+        wxTreeListCtrl(parent, id, pos, size, style, validator, name) {}
+
+    int OnCompareItems(const wxTreeItemId& item1,
+                       const wxTreeItemId& item2) {
+        int rval = 0;
+        bool found;
+        wxPyBeginBlockThreads();
+        if ((found = wxPyCBH_findCallback(m_myInst, "OnCompareItems"))) {
+            PyObject *o1 = wxPyConstructObject((void*)&item1, wxT("wxTreeItemId"), 0);
+            PyObject *o2 = wxPyConstructObject((void*)&item2, wxT("wxTreeItemId"), 0);
+            rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OO)",o1,o2));
+            Py_DECREF(o1);
+            Py_DECREF(o2);
+        }
+        wxPyEndBlockThreads();
+        if (! found)
+            rval = wxTreeListCtrl::OnCompareItems(item1, item2);
+        return rval;
+    }
+    PYPRIVATE;
+};
+
+IMPLEMENT_ABSTRACT_CLASS(wxPyTreeListCtrl, wxTreeListCtrl)
+
+%}
+
+
+
+
+// These are for the GetFirstChild/GetNextChild methods below
+%{
+    static const long longzero = 0;
+%}
+%typemap(python, in)     long& INOUT = long* INOUT;
+%typemap(python, argout) long& INOUT = long* INOUT;
+
+
+%name(wxTreeListCtrl) class wxPyTreeListCtrl : public wxControl
+{
+public:
+    wxPyTreeListCtrl(wxWindow *parent, wxWindowID id = -1,
+                   const wxPoint& pos = wxDefaultPosition,
+                   const wxSize& size = wxDefaultSize,
+                   long style = wxTR_DEFAULT_STYLE,
+                   const wxValidator &validator = wxDefaultValidator,
+                   const wxString& name = wxPyTreeListCtrlNameStr );
+    %name(wxPreTreeListCtrl)wxPyTreeListCtrl();
+
+    bool Create(wxWindow *parent, wxWindowID id = -1,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize,
+                long style = wxTR_DEFAULT_STYLE,
+                const wxValidator &validator = wxDefaultValidator,
+                const wxString& name = wxPyTreeListCtrlNameStr );
+
+    void _setCallbackInfo(PyObject* self, PyObject* _class);
+    %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxTreeListCtrl)"
+
+    %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
+    %pragma(python) addtomethod = "wxPreTreeListCtrl:val._setOORInfo(val)"
+
+
+
+    // get the total number of items in the control
+    size_t GetCount() const;
+
+    // indent is the number of pixels the children are indented relative to
+    // the parents position. SetIndent() also redraws the control
+    // immediately.
+    unsigned int GetIndent() const;
+    void SetIndent(unsigned int indent);
+
+    // spacing is the number of pixels between the start and the Text
+    unsigned int GetSpacing() const;
+    void SetSpacing(unsigned int spacing);
+
+    // line spacing is the space above and below the text on each line
+    unsigned int GetLineSpacing() const;
+    void SetLineSpacing(unsigned int spacing);
+
+    // image list: these functions allow to associate an image list with
+    // the control and retrieve it. Note that when assigned with
+    // SetImageList, the control does _not_ delete
+    // the associated image list when it's deleted in order to allow image
+    // lists to be shared between different controls. If you use
+    // AssignImageList, the control _does_ delete the image list.
+    //
+    // The normal image list is for the icons which correspond to the
+    // normal tree item state (whether it is selected or not).
+    // Additionally, the application might choose to show a state icon
+    // which corresponds to an app-defined item state (for example,
+    // checked/unchecked) which are taken from the state image list.
+    wxImageList *GetImageList() const;
+    wxImageList *GetStateImageList() const;
+    wxImageList *GetButtonsImageList() const;
+
+    void SetImageList(wxImageList *imageList);
+    void SetStateImageList(wxImageList *imageList);
+    void SetButtonsImageList(wxImageList *imageList);
+    void AssignImageList(wxImageList *imageList);
+    void AssignStateImageList(wxImageList *imageList);
+    void AssignButtonsImageList(wxImageList *imageList);
+
+
+
+    // adds a column
+    void AddColumn(const wxString& text);
+    %name(AddColumnInfo) void AddColumn(const wxTreeListColumnInfo& col);
+
+    // inserts a column before the given one
+    void InsertColumn(size_t before, const wxString& text);
+    %name(InsertColumnInfo) void InsertColumn(size_t before, const wxTreeListColumnInfo& col);
+
+    // deletes the given column - does not delete the corresponding column
+    // of each item
+    void RemoveColumn(size_t column);
+
+    // returns the number of columns in the ctrl
+    size_t GetColumnCount() const;
+
+    void SetColumnWidth(size_t column, size_t width);
+    int GetColumnWidth(size_t column) const;
+
+    // tells which column is the "main" one, i.e. the "threaded" one
+    void SetMainColumn(size_t column);
+    size_t GetMainColumn() const;
+
+    void SetColumnText(size_t column, const wxString& text);
+    wxString GetColumnText(size_t column) const;
+
+    void SetColumn(size_t column, const wxTreeListColumnInfo& info);
+    wxTreeListColumnInfo& GetColumn(size_t column);
+
+    // other column-related methods
+    void SetColumnAlignment(size_t column, wxTreeListColumnAlign align);
+    wxTreeListColumnAlign GetColumnAlignment(size_t column) const;
+
+    void SetColumnImage(size_t column, int image);
+    int GetColumnImage(size_t column) const;
+
+
+    %addmethods {
+        // retrieves item's label of the given column (main column by default)
+        wxString GetItemText(const wxTreeItemId& item, int column = -1) {
+            if (column < 0) column = self->GetMainColumn();
+            return self->GetItemText(item, column);
+        }
+
+        // get one of the images associated with the item (normal by default)
+        int GetItemImage(const wxTreeItemId& item, int column = -1,
+                         wxTreeItemIcon which = wxTreeItemIcon_Normal) {
+            if (column < 0) column = self->GetMainColumn();
+            return self->GetItemImage(item, column, which);
+        }
+
+        // set item's label (main column by default)
+        void SetItemText(const wxTreeItemId& item, const wxString& text, int column = -1) {
+            if (column < 0) column = self->GetMainColumn();
+            self->SetItemText(item, column, text);
+        }
+
+        // set one of the images associated with the item (normal by default)
+        // the which parameter is ignored for all columns but the main one
+        void SetItemImage(const wxTreeItemId& item, int image, int column = -1,
+                          wxTreeItemIcon which = wxTreeItemIcon_Normal) {
+            if (column < 0) column = self->GetMainColumn();
+            self->SetItemImage(item, column, image, which);
+        }
+
+
+        // [Get|Set]ItemData substitutes.  Automatically create wxPyTreeItemData
+        // if needed.
+        wxPyTreeItemData* GetItemData(const wxTreeItemId& item) {
+            wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
+            if (data == NULL) {
+                data = new wxPyTreeItemData();
+                data->SetId(item); // set the id
+                self->SetItemData(item, data);
+            }
+            return data;
+        }
+
+        void SetItemData(const wxTreeItemId& item, wxPyTreeItemData* data) {
+            data->SetId(item); // set the id
+            self->SetItemData(item, data);
+        }
+
+        // [Get|Set]PyData are short-cuts.  Also made somewhat crash-proof by
+        // automatically creating data classes.
+        PyObject* GetPyData(const wxTreeItemId& item) {
+            wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
+            if (data == NULL) {
+                data = new wxPyTreeItemData();
+                data->SetId(item); // set the id
+                self->SetItemData(item, data);
+            }
+            return data->GetData();
+        }
+
+        void SetPyData(const wxTreeItemId& item, PyObject* obj) {
+            wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item);
+            if (data == NULL) {
+                data = new wxPyTreeItemData(obj);
+                data->SetId(item); // set the id
+                self->SetItemData(item, data);
+            } else
+                data->SetData(obj);
+        }
+    }
+
+
+    // force appearance of [+] button near the item. This is useful to
+    // allow the user to expand the items which don't have any children now
+    // - but instead add them only when needed, thus minimizing memory
+    // usage and loading time.
+    void SetItemHasChildren(const wxTreeItemId& item, bool has = TRUE);
+
+    // the item will be shown in bold
+    void SetItemBold(const wxTreeItemId& item, bool bold = TRUE);
+
+    // set the item's text colour
+    void SetItemTextColour(const wxTreeItemId& item, const wxColour& col);
+
+    // set the item's background colour
+    void SetItemBackgroundColour(const wxTreeItemId& item,
+				 const wxColour& col);
+
+    // set the item's font (should be of the same height for all items)
+    void SetItemFont(const wxTreeItemId& item, const wxFont& font);
+
+
+    bool GetItemBold(const wxTreeItemId& item) const;
+    wxColour GetItemTextColour(const wxTreeItemId& item) const;
+    wxColour GetItemBackgroundColour(const wxTreeItemId& item) const;
+    wxFont GetItemFont(const wxTreeItemId& item) const;
+
+    // is the item visible (it might be outside the view or not expanded)?
+    bool IsVisible(const wxTreeItemId& item) const;
+
+    // does the item has any children?
+    bool ItemHasChildren(const wxTreeItemId& item) const;
+
+    // is the item expanded (only makes sense if HasChildren())?
+    bool IsExpanded(const wxTreeItemId& item) const;
+
+    // is this item currently selected (the same as has focus)?
+    bool IsSelected(const wxTreeItemId& item) const;
+
+    // is item text in bold font?
+    bool IsBold(const wxTreeItemId& item) const;
+
+    // if 'recursively' is FALSE, only immediate children count, otherwise
+    // the returned number is the number of all items in this branch
+    size_t GetChildrenCount(const wxTreeItemId& item, bool recursively = TRUE);
+
+
+    // wxTreeItemId.IsOk() will return FALSE if there is no such item
+
+    // get the root tree item
+    wxTreeItemId GetRootItem() const;
+
+    // get the item currently selected (may return NULL if no selection)
+    wxTreeItemId GetSelection() const;
+
+    // get the items currently selected, return the number of such item
+    //size_t GetSelections(wxArrayTreeItemIds&) const;
+    %addmethods {
+        PyObject* GetSelections() {
+            wxPyBeginBlockThreads();
+            PyObject*           rval = PyList_New(0);
+            wxArrayTreeItemIds  array;
+            size_t              num, x;
+            num = self->GetSelections(array);
+            for (x=0; x < num; x++) {
+                wxTreeItemId *tii = new wxTreeItemId(array.Item(x));
+                PyObject* item = wxPyConstructObject((void*)tii, wxT("wxTreeItemId"), TRUE);
+                PyList_Append(rval, item);
+            }
+            wxPyEndBlockThreads();
+            return rval;
+        }
+    }
+
+
+    // get the parent of this item (may return NULL if root)
+    %name(GetItemParent)wxTreeItemId GetParent(const wxTreeItemId& item) const;
+
+    // for this enumeration function you must pass in a "cookie" parameter
+    // which is opaque for the application but is necessary for the library
+    // to make these functions reentrant (i.e. allow more than one
+    // enumeration on one and the same object simultaneously). Of course,
+    // the "cookie" passed to GetFirstChild() and GetNextChild() should be
+    // the same!
+
+    // get the first child of this item
+    wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& INOUT = longzero) const;
+
+    // get the next child
+    wxTreeItemId GetNextChild(const wxTreeItemId& item, long& INOUT) const;
+
+    // get the last child of this item - this method doesn't use cookies
+    wxTreeItemId GetLastChild(const wxTreeItemId& item) const;
+
+    // get the next sibling of this item
+    wxTreeItemId GetNextSibling(const wxTreeItemId& item) const;
+
+    // get the previous sibling
+    wxTreeItemId GetPrevSibling(const wxTreeItemId& item) const;
+
+    // get first visible item
+    wxTreeItemId GetFirstVisibleItem() const;
+
+    // get the next visible item: item must be visible itself!
+    // see IsVisible() and wxTreeCtrl::GetFirstVisibleItem()
+    wxTreeItemId GetNextVisible(const wxTreeItemId& item) const;
+
+    // get the previous visible item: item must be visible itself!
+    wxTreeItemId GetPrevVisible(const wxTreeItemId& item) const;
+
+    // Only for internal use right now, but should probably be public
+    wxTreeItemId GetNext(const wxTreeItemId& item) const;
+
+
+    // add the root node to the tree
+    wxTreeItemId AddRoot(const wxString& text,
+                         int image = -1, int selectedImage = -1,
+                         wxPyTreeItemData *data = NULL);
+
+    // insert a new item in as the first child of the parent
+    wxTreeItemId PrependItem(const wxTreeItemId& parent,
+                             const wxString& text,
+                             int image = -1, int selectedImage = -1,
+                             wxPyTreeItemData *data = NULL);
+
+    // insert a new item after a given one
+    wxTreeItemId InsertItem(const wxTreeItemId& parent,
+                            const wxTreeItemId& idPrevious,
+                            const wxString& text,
+                            int image = -1, int selectedImage = -1,
+                            wxPyTreeItemData *data = NULL);
+
+    // insert a new item before the one with the given index
+    %name(InsertItemBefore)
+        wxTreeItemId InsertItem(const wxTreeItemId& parent,
+                                size_t index,
+                                const wxString& text,
+                                int image = -1, int selectedImage = -1,
+                                wxPyTreeItemData *data = NULL);
+
+    // insert a new item in as the last child of the parent
+    wxTreeItemId AppendItem(const wxTreeItemId& parent,
+                            const wxString& text,
+                            int image = -1, int selectedImage = -1,
+                            wxPyTreeItemData *data = NULL);
+
+    // delete this item and associated data if any
+    void Delete(const wxTreeItemId& item);
+
+    // delete all children (but don't delete the item itself)
+    // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events
+    void DeleteChildren(const wxTreeItemId& item);
+
+    // delete all items from the tree
+    // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events
+    void DeleteAllItems();
+
+    // expand this item
+    void Expand(const wxTreeItemId& item);
+
+    // expand this item and all subitems recursively
+    void ExpandAll(const wxTreeItemId& item);
+
+    // collapse the item without removing its children
+    void Collapse(const wxTreeItemId& item);
+
+    // collapse the item and remove all children
+    void CollapseAndReset(const wxTreeItemId& item);
+
+    // toggles the current state
+    void Toggle(const wxTreeItemId& item);
+
+    // remove the selection from currently selected item (if any)
+    void Unselect();
+    void UnselectAll();
+
+    // select this item
+    void SelectItem(const wxTreeItemId& item, bool unselect_others=TRUE,
+		    bool extended_select=FALSE);
+
+    // make sure this item is visible (expanding the parent item and/or
+    // scrolling to this item if necessary)
+    void EnsureVisible(const wxTreeItemId& item);
+
+    // scroll to this item (but don't expand its parent)
+    void ScrollTo(const wxTreeItemId& item);
+
+    // Returns wxTreeItemId, flags, and column
+    wxTreeItemId HitTest(const wxPoint& point, int& OUTPUT, int& OUTPUT);
+
+    %addmethods {
+        // get the bounding rectangle of the item (or of its label only)
+        PyObject* GetBoundingRect(const wxTreeItemId& item, bool textOnly = FALSE) {
+            wxRect rect;
+            if (self->GetBoundingRect(item, rect, textOnly)) {
+                wxPyBeginBlockThreads();
+                wxRect* r = new wxRect(rect);
+                PyObject* val = wxPyConstructObject((void*)r, wxT("wxRect"), 1);
+                wxPyEndBlockThreads();
+                return val;
+            }
+            else {
+                Py_INCREF(Py_None);
+                return Py_None;
+            }
+        }
+    }
+
+
+    // Start editing the item label: this (temporarily) replaces the item
+    // with a one line edit control. The item will be selected if it hadn't
+    // been before.
+    void EditLabel( const wxTreeItemId& item );
+    void Edit( const wxTreeItemId& item );
+
+    // sort the children of this item using OnCompareItems
+    void SortChildren(const wxTreeItemId& item);
+
+    // get the selected item image
+    int GetItemSelectedImage(const wxTreeItemId& item) const;
+
+    // set the selected item image
+    void SetItemSelectedImage(const wxTreeItemId& item, int image);
+
+
+    wxWindow* GetHeaderWindow() const;
+    wxWindow* GetMainWindow() const;
+
+%pragma(python) addtoclass = "
+    # Redefine some methods that SWIG gets a bit confused on...
+    def GetFirstChild(self, *_args, **_kwargs):
+        val1,val2 = gizmosc.wxTreeListCtrl_GetFirstChild(self, *_args, **_kwargs)
+        val1 = wxTreeItemIdPtr(val1)
+        val1.thisown = 1
+        return (val1,val2)
+    def GetNextChild(self, *_args, **_kwargs):
+        val1,val2 = gizmosc.wxTreeListCtrl_GetNextChild(self, *_args, **_kwargs)
+        val1 = wxTreeItemIdPtr(val1)
+        val1.thisown = 1
+        return (val1,val2)
+    def HitTest(self, *_args, **_kwargs):
+        val1, val2, val3 = gizmosc.wxTreeListCtrl_HitTest(self, *_args, **_kwargs)
+        val1 = wxTreeItemIdPtr(val1)
+        val1.thisown = 1
+        return (val1, val2, val3)
+"
+};
+
+
+
+
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
 
@@ -399,6 +923,7 @@ public:
     wxClassInfo::InitializeClasses();
 
     wxPyPtrTypeMap_Add("wxTreeCompanionWindow", "wxPyTreeCompanionWindow");
+    wxPyPtrTypeMap_Add("wxTreeListCtrl", "wxPyTreeListCtrl");
 %}
 
 
diff --git a/wxPython/contrib/gizmos/gizmos.py b/wxPython/contrib/gizmos/gizmos.py
index dfb3f66d85..9ad14b4827 100644
--- a/wxPython/contrib/gizmos/gizmos.py
+++ b/wxPython/contrib/gizmos/gizmos.py
@@ -54,10 +54,10 @@ class wxDynamicSashSplitEventPtr(wxCommandEventPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxDynamicSashSplitEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDynamicSashSplitEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDynamicSashSplitEvent(wxDynamicSashSplitEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gizmosc.new_wxDynamicSashSplitEvent,_args,_kwargs)
+        self.this = gizmosc.new_wxDynamicSashSplitEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -68,10 +68,10 @@ class wxDynamicSashUnifyEventPtr(wxCommandEventPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxDynamicSashUnifyEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDynamicSashUnifyEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDynamicSashUnifyEvent(wxDynamicSashUnifyEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gizmosc.new_wxDynamicSashUnifyEvent,_args,_kwargs)
+        self.this = gizmosc.new_wxDynamicSashUnifyEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -82,28 +82,28 @@ class wxDynamicSashWindowPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxDynamicSashWindow_Create,(self,) + _args, _kwargs)
+        val = gizmosc.wxDynamicSashWindow_Create(self, *_args, **_kwargs)
         return val
     def GetHScrollBar(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxDynamicSashWindow_GetHScrollBar,(self,) + _args, _kwargs)
+        val = gizmosc.wxDynamicSashWindow_GetHScrollBar(self, *_args, **_kwargs)
         if val: val = wxScrollBarPtr(val) 
         return val
     def GetVScrollBar(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxDynamicSashWindow_GetVScrollBar,(self,) + _args, _kwargs)
+        val = gizmosc.wxDynamicSashWindow_GetVScrollBar(self, *_args, **_kwargs)
         if val: val = wxScrollBarPtr(val) 
         return val
     def __repr__(self):
-        return "<C wxDynamicSashWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDynamicSashWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDynamicSashWindow(wxDynamicSashWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gizmosc.new_wxDynamicSashWindow,_args,_kwargs)
+        self.this = gizmosc.new_wxDynamicSashWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreDynamicSashWindow(*_args,**_kwargs):
-    val = wxDynamicSashWindowPtr(apply(gizmosc.new_wxPreDynamicSashWindow,_args,_kwargs))
+    val = wxDynamicSashWindowPtr(gizmosc.new_wxPreDynamicSashWindow(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -114,34 +114,34 @@ class wxEditableListBoxPtr(wxPanelPtr):
         self.this = this
         self.thisown = 0
     def SetStrings(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxEditableListBox_SetStrings,(self,) + _args, _kwargs)
+        val = gizmosc.wxEditableListBox_SetStrings(self, *_args, **_kwargs)
         return val
     def GetStrings(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxEditableListBox_GetStrings,(self,) + _args, _kwargs)
+        val = gizmosc.wxEditableListBox_GetStrings(self, *_args, **_kwargs)
         return val
     def GetListCtrl(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxEditableListBox_GetListCtrl,(self,) + _args, _kwargs)
+        val = gizmosc.wxEditableListBox_GetListCtrl(self, *_args, **_kwargs)
         return val
     def GetDelButton(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxEditableListBox_GetDelButton,(self,) + _args, _kwargs)
+        val = gizmosc.wxEditableListBox_GetDelButton(self, *_args, **_kwargs)
         return val
     def GetNewButton(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxEditableListBox_GetNewButton,(self,) + _args, _kwargs)
+        val = gizmosc.wxEditableListBox_GetNewButton(self, *_args, **_kwargs)
         return val
     def GetUpButton(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxEditableListBox_GetUpButton,(self,) + _args, _kwargs)
+        val = gizmosc.wxEditableListBox_GetUpButton(self, *_args, **_kwargs)
         return val
     def GetDownButton(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxEditableListBox_GetDownButton,(self,) + _args, _kwargs)
+        val = gizmosc.wxEditableListBox_GetDownButton(self, *_args, **_kwargs)
         return val
     def GetEditButton(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxEditableListBox_GetEditButton,(self,) + _args, _kwargs)
+        val = gizmosc.wxEditableListBox_GetEditButton(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxEditableListBox instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxEditableListBox instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxEditableListBox(wxEditableListBoxPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gizmosc.new_wxEditableListBox,_args,_kwargs)
+        self.this = gizmosc.new_wxEditableListBox(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -153,29 +153,29 @@ class wxRemotelyScrolledTreeCtrlPtr(wxTreeCtrlPtr):
         self.this = this
         self.thisown = 0
     def HideVScrollbar(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxRemotelyScrolledTreeCtrl_HideVScrollbar,(self,) + _args, _kwargs)
+        val = gizmosc.wxRemotelyScrolledTreeCtrl_HideVScrollbar(self, *_args, **_kwargs)
         return val
     def AdjustRemoteScrollbars(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxRemotelyScrolledTreeCtrl_AdjustRemoteScrollbars,(self,) + _args, _kwargs)
+        val = gizmosc.wxRemotelyScrolledTreeCtrl_AdjustRemoteScrollbars(self, *_args, **_kwargs)
         return val
     def GetScrolledWindow(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxRemotelyScrolledTreeCtrl_GetScrolledWindow,(self,) + _args, _kwargs)
+        val = gizmosc.wxRemotelyScrolledTreeCtrl_GetScrolledWindow(self, *_args, **_kwargs)
         if val: val = wxScrolledWindowPtr(val) 
         return val
     def ScrollToLine(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxRemotelyScrolledTreeCtrl_ScrollToLine,(self,) + _args, _kwargs)
+        val = gizmosc.wxRemotelyScrolledTreeCtrl_ScrollToLine(self, *_args, **_kwargs)
         return val
     def SetCompanionWindow(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxRemotelyScrolledTreeCtrl_SetCompanionWindow,(self,) + _args, _kwargs)
+        val = gizmosc.wxRemotelyScrolledTreeCtrl_SetCompanionWindow(self, *_args, **_kwargs)
         return val
     def GetCompanionWindow(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxRemotelyScrolledTreeCtrl_GetCompanionWindow,(self,) + _args, _kwargs)
+        val = gizmosc.wxRemotelyScrolledTreeCtrl_GetCompanionWindow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxRemotelyScrolledTreeCtrl instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxRemotelyScrolledTreeCtrl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxRemotelyScrolledTreeCtrl(wxRemotelyScrolledTreeCtrlPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gizmosc.new_wxRemotelyScrolledTreeCtrl,_args,_kwargs)
+        self.this = gizmosc.new_wxRemotelyScrolledTreeCtrl(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -187,20 +187,20 @@ class wxTreeCompanionWindowPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxTreeCompanionWindow__setCallbackInfo,(self,) + _args, _kwargs)
+        val = gizmosc.wxTreeCompanionWindow__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def GetTreeCtrl(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxTreeCompanionWindow_GetTreeCtrl,(self,) + _args, _kwargs)
+        val = gizmosc.wxTreeCompanionWindow_GetTreeCtrl(self, *_args, **_kwargs)
         if val: val = wxRemotelyScrolledTreeCtrlPtr(val) 
         return val
     def SetTreeCtrl(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxTreeCompanionWindow_SetTreeCtrl,(self,) + _args, _kwargs)
+        val = gizmosc.wxTreeCompanionWindow_SetTreeCtrl(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTreeCompanionWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTreeCompanionWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxTreeCompanionWindow(wxTreeCompanionWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gizmosc.new_wxTreeCompanionWindow,_args,_kwargs)
+        self.this = gizmosc.new_wxTreeCompanionWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxTreeCompanionWindow)
         self._setOORInfo(self)
@@ -213,10 +213,10 @@ class wxThinSplitterWindowPtr(wxSplitterWindowPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxThinSplitterWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxThinSplitterWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxThinSplitterWindow(wxThinSplitterWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gizmosc.new_wxThinSplitterWindow,_args,_kwargs)
+        self.this = gizmosc.new_wxThinSplitterWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -228,10 +228,10 @@ class wxSplitterScrolledWindowPtr(wxScrolledWindowPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxSplitterScrolledWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSplitterScrolledWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSplitterScrolledWindow(wxSplitterScrolledWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gizmosc.new_wxSplitterScrolledWindow,_args,_kwargs)
+        self.this = gizmosc.new_wxSplitterScrolledWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -243,38 +243,439 @@ class wxLEDNumberCtrlPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxLEDNumberCtrl_Create,(self,) + _args, _kwargs)
+        val = gizmosc.wxLEDNumberCtrl_Create(self, *_args, **_kwargs)
         return val
     def GetAlignment(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxLEDNumberCtrl_GetAlignment,(self,) + _args, _kwargs)
+        val = gizmosc.wxLEDNumberCtrl_GetAlignment(self, *_args, **_kwargs)
         return val
     def GetDrawFaded(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxLEDNumberCtrl_GetDrawFaded,(self,) + _args, _kwargs)
+        val = gizmosc.wxLEDNumberCtrl_GetDrawFaded(self, *_args, **_kwargs)
         return val
     def GetValue(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxLEDNumberCtrl_GetValue,(self,) + _args, _kwargs)
+        val = gizmosc.wxLEDNumberCtrl_GetValue(self, *_args, **_kwargs)
         return val
     def SetAlignment(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxLEDNumberCtrl_SetAlignment,(self,) + _args, _kwargs)
+        val = gizmosc.wxLEDNumberCtrl_SetAlignment(self, *_args, **_kwargs)
         return val
     def SetDrawFaded(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxLEDNumberCtrl_SetDrawFaded,(self,) + _args, _kwargs)
+        val = gizmosc.wxLEDNumberCtrl_SetDrawFaded(self, *_args, **_kwargs)
         return val
     def SetValue(self, *_args, **_kwargs):
-        val = apply(gizmosc.wxLEDNumberCtrl_SetValue,(self,) + _args, _kwargs)
+        val = gizmosc.wxLEDNumberCtrl_SetValue(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxLEDNumberCtrl instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxLEDNumberCtrl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxLEDNumberCtrl(wxLEDNumberCtrlPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gizmosc.new_wxLEDNumberCtrl,_args,_kwargs)
+        self.this = gizmosc.new_wxLEDNumberCtrl(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreLEDNumberCtrl(*_args,**_kwargs):
-    val = wxLEDNumberCtrlPtr(apply(gizmosc.new_wxPreLEDNumberCtrl,_args,_kwargs))
+    val = wxLEDNumberCtrlPtr(gizmosc.new_wxPreLEDNumberCtrl(*_args,**_kwargs))
+    val.thisown = 1
+    val._setOORInfo(val)
+    return val
+
+
+class wxTreeListColumnInfoPtr(wxObjectPtr):
+    def __init__(self,this):
+        self.this = this
+        self.thisown = 0
+    def GetAlignment(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListColumnInfo_GetAlignment(self, *_args, **_kwargs)
+        return val
+    def GetText(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListColumnInfo_GetText(self, *_args, **_kwargs)
+        return val
+    def GetImage(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListColumnInfo_GetImage(self, *_args, **_kwargs)
+        return val
+    def GetSelectedImage(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListColumnInfo_GetSelectedImage(self, *_args, **_kwargs)
+        return val
+    def GetWidth(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListColumnInfo_GetWidth(self, *_args, **_kwargs)
+        return val
+    def SetAlignment(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListColumnInfo_SetAlignment(self, *_args, **_kwargs)
+        return val
+    def SetText(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListColumnInfo_SetText(self, *_args, **_kwargs)
+        return val
+    def SetImage(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListColumnInfo_SetImage(self, *_args, **_kwargs)
+        return val
+    def SetSelectedImage(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListColumnInfo_SetSelectedImage(self, *_args, **_kwargs)
+        return val
+    def SetWidth(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListColumnInfo_SetWidth(self, *_args, **_kwargs)
+        return val
+    def __repr__(self):
+        return "<%s.%s instance; proxy of C++ wxTreeListColumnInfo instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+class wxTreeListColumnInfo(wxTreeListColumnInfoPtr):
+    def __init__(self,*_args,**_kwargs):
+        self.this = gizmosc.new_wxTreeListColumnInfo(*_args,**_kwargs)
+        self.thisown = 1
+
+
+
+
+class wxTreeListCtrlPtr(wxControlPtr):
+    def __init__(self,this):
+        self.this = this
+        self.thisown = 0
+    def Create(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_Create(self, *_args, **_kwargs)
+        return val
+    def _setCallbackInfo(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl__setCallbackInfo(self, *_args, **_kwargs)
+        return val
+    def GetCount(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetCount(self, *_args, **_kwargs)
+        return val
+    def GetIndent(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetIndent(self, *_args, **_kwargs)
+        return val
+    def SetIndent(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetIndent(self, *_args, **_kwargs)
+        return val
+    def GetSpacing(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetSpacing(self, *_args, **_kwargs)
+        return val
+    def SetSpacing(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetSpacing(self, *_args, **_kwargs)
+        return val
+    def GetLineSpacing(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetLineSpacing(self, *_args, **_kwargs)
+        return val
+    def SetLineSpacing(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetLineSpacing(self, *_args, **_kwargs)
+        return val
+    def GetImageList(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetImageList(self, *_args, **_kwargs)
+        return val
+    def GetStateImageList(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetStateImageList(self, *_args, **_kwargs)
+        return val
+    def GetButtonsImageList(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetButtonsImageList(self, *_args, **_kwargs)
+        return val
+    def SetImageList(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetImageList(self, *_args, **_kwargs)
+        return val
+    def SetStateImageList(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetStateImageList(self, *_args, **_kwargs)
+        return val
+    def SetButtonsImageList(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetButtonsImageList(self, *_args, **_kwargs)
+        return val
+    def AssignImageList(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_AssignImageList(self, *_args, **_kwargs)
+        return val
+    def AssignStateImageList(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_AssignStateImageList(self, *_args, **_kwargs)
+        return val
+    def AssignButtonsImageList(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_AssignButtonsImageList(self, *_args, **_kwargs)
+        return val
+    def AddColumn(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_AddColumn(self, *_args, **_kwargs)
+        return val
+    def AddColumnInfo(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_AddColumnInfo(self, *_args, **_kwargs)
+        return val
+    def InsertColumn(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_InsertColumn(self, *_args, **_kwargs)
+        return val
+    def InsertColumnInfo(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_InsertColumnInfo(self, *_args, **_kwargs)
+        return val
+    def RemoveColumn(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_RemoveColumn(self, *_args, **_kwargs)
+        return val
+    def GetColumnCount(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetColumnCount(self, *_args, **_kwargs)
+        return val
+    def SetColumnWidth(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetColumnWidth(self, *_args, **_kwargs)
+        return val
+    def GetColumnWidth(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetColumnWidth(self, *_args, **_kwargs)
+        return val
+    def SetMainColumn(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetMainColumn(self, *_args, **_kwargs)
+        return val
+    def GetMainColumn(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetMainColumn(self, *_args, **_kwargs)
+        return val
+    def SetColumnText(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetColumnText(self, *_args, **_kwargs)
+        return val
+    def GetColumnText(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetColumnText(self, *_args, **_kwargs)
+        return val
+    def SetColumn(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetColumn(self, *_args, **_kwargs)
+        return val
+    def GetColumn(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetColumn(self, *_args, **_kwargs)
+        if val: val = wxTreeListColumnInfoPtr(val) 
+        return val
+    def SetColumnAlignment(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetColumnAlignment(self, *_args, **_kwargs)
+        return val
+    def GetColumnAlignment(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetColumnAlignment(self, *_args, **_kwargs)
+        return val
+    def SetColumnImage(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetColumnImage(self, *_args, **_kwargs)
+        return val
+    def GetColumnImage(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetColumnImage(self, *_args, **_kwargs)
+        return val
+    def GetItemText(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetItemText(self, *_args, **_kwargs)
+        return val
+    def GetItemImage(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetItemImage(self, *_args, **_kwargs)
+        return val
+    def SetItemText(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetItemText(self, *_args, **_kwargs)
+        return val
+    def SetItemImage(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetItemImage(self, *_args, **_kwargs)
+        return val
+    def GetItemData(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetItemData(self, *_args, **_kwargs)
+        if val: val = wxTreeItemDataPtr(val) 
+        return val
+    def SetItemData(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetItemData(self, *_args, **_kwargs)
+        return val
+    def GetPyData(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetPyData(self, *_args, **_kwargs)
+        return val
+    def SetPyData(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetPyData(self, *_args, **_kwargs)
+        return val
+    def SetItemHasChildren(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetItemHasChildren(self, *_args, **_kwargs)
+        return val
+    def SetItemBold(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetItemBold(self, *_args, **_kwargs)
+        return val
+    def SetItemTextColour(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetItemTextColour(self, *_args, **_kwargs)
+        return val
+    def SetItemBackgroundColour(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetItemBackgroundColour(self, *_args, **_kwargs)
+        return val
+    def SetItemFont(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetItemFont(self, *_args, **_kwargs)
+        return val
+    def GetItemBold(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetItemBold(self, *_args, **_kwargs)
+        return val
+    def GetItemTextColour(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetItemTextColour(self, *_args, **_kwargs)
+        if val: val = wxColourPtr(val) ; val.thisown = 1
+        return val
+    def GetItemBackgroundColour(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetItemBackgroundColour(self, *_args, **_kwargs)
+        if val: val = wxColourPtr(val) ; val.thisown = 1
+        return val
+    def GetItemFont(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetItemFont(self, *_args, **_kwargs)
+        if val: val = wxFontPtr(val) ; val.thisown = 1
+        return val
+    def IsVisible(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_IsVisible(self, *_args, **_kwargs)
+        return val
+    def ItemHasChildren(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_ItemHasChildren(self, *_args, **_kwargs)
+        return val
+    def IsExpanded(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_IsExpanded(self, *_args, **_kwargs)
+        return val
+    def IsSelected(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_IsSelected(self, *_args, **_kwargs)
+        return val
+    def IsBold(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_IsBold(self, *_args, **_kwargs)
+        return val
+    def GetChildrenCount(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetChildrenCount(self, *_args, **_kwargs)
+        return val
+    def GetRootItem(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetRootItem(self, *_args, **_kwargs)
+        if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
+        return val
+    def GetSelection(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetSelection(self, *_args, **_kwargs)
+        if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
+        return val
+    def GetSelections(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetSelections(self, *_args, **_kwargs)
+        return val
+    def GetItemParent(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetItemParent(self, *_args, **_kwargs)
+        if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
+        return val
+    def GetFirstChild(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetFirstChild(self, *_args, **_kwargs)
+        return val
+    def GetNextChild(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetNextChild(self, *_args, **_kwargs)
+        return val
+    def GetLastChild(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetLastChild(self, *_args, **_kwargs)
+        if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
+        return val
+    def GetNextSibling(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetNextSibling(self, *_args, **_kwargs)
+        if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
+        return val
+    def GetPrevSibling(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetPrevSibling(self, *_args, **_kwargs)
+        if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
+        return val
+    def GetFirstVisibleItem(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetFirstVisibleItem(self, *_args, **_kwargs)
+        if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
+        return val
+    def GetNextVisible(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetNextVisible(self, *_args, **_kwargs)
+        if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
+        return val
+    def GetPrevVisible(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetPrevVisible(self, *_args, **_kwargs)
+        if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
+        return val
+    def GetNext(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetNext(self, *_args, **_kwargs)
+        if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
+        return val
+    def AddRoot(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_AddRoot(self, *_args, **_kwargs)
+        if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
+        return val
+    def PrependItem(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_PrependItem(self, *_args, **_kwargs)
+        if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
+        return val
+    def InsertItem(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_InsertItem(self, *_args, **_kwargs)
+        if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
+        return val
+    def InsertItemBefore(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_InsertItemBefore(self, *_args, **_kwargs)
+        if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
+        return val
+    def AppendItem(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_AppendItem(self, *_args, **_kwargs)
+        if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
+        return val
+    def Delete(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_Delete(self, *_args, **_kwargs)
+        return val
+    def DeleteChildren(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_DeleteChildren(self, *_args, **_kwargs)
+        return val
+    def DeleteAllItems(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_DeleteAllItems(self, *_args, **_kwargs)
+        return val
+    def Expand(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_Expand(self, *_args, **_kwargs)
+        return val
+    def ExpandAll(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_ExpandAll(self, *_args, **_kwargs)
+        return val
+    def Collapse(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_Collapse(self, *_args, **_kwargs)
+        return val
+    def CollapseAndReset(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_CollapseAndReset(self, *_args, **_kwargs)
+        return val
+    def Toggle(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_Toggle(self, *_args, **_kwargs)
+        return val
+    def Unselect(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_Unselect(self, *_args, **_kwargs)
+        return val
+    def UnselectAll(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_UnselectAll(self, *_args, **_kwargs)
+        return val
+    def SelectItem(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SelectItem(self, *_args, **_kwargs)
+        return val
+    def EnsureVisible(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_EnsureVisible(self, *_args, **_kwargs)
+        return val
+    def ScrollTo(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_ScrollTo(self, *_args, **_kwargs)
+        return val
+    def HitTest(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_HitTest(self, *_args, **_kwargs)
+        return val
+    def GetBoundingRect(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetBoundingRect(self, *_args, **_kwargs)
+        return val
+    def EditLabel(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_EditLabel(self, *_args, **_kwargs)
+        return val
+    def Edit(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_Edit(self, *_args, **_kwargs)
+        return val
+    def SortChildren(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SortChildren(self, *_args, **_kwargs)
+        return val
+    def GetItemSelectedImage(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetItemSelectedImage(self, *_args, **_kwargs)
+        return val
+    def SetItemSelectedImage(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_SetItemSelectedImage(self, *_args, **_kwargs)
+        return val
+    def GetHeaderWindow(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetHeaderWindow(self, *_args, **_kwargs)
+        return val
+    def GetMainWindow(self, *_args, **_kwargs):
+        val = gizmosc.wxTreeListCtrl_GetMainWindow(self, *_args, **_kwargs)
+        return val
+    def __repr__(self):
+        return "<%s.%s instance; proxy of C++ wxTreeListCtrl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    
+    # Redefine some methods that SWIG gets a bit confused on...
+    def GetFirstChild(self, *_args, **_kwargs):
+        val1,val2 = gizmosc.wxTreeListCtrl_GetFirstChild(self, *_args, **_kwargs)
+        val1 = wxTreeItemIdPtr(val1)
+        val1.thisown = 1
+        return (val1,val2)
+    def GetNextChild(self, *_args, **_kwargs):
+        val1,val2 = gizmosc.wxTreeListCtrl_GetNextChild(self, *_args, **_kwargs)
+        val1 = wxTreeItemIdPtr(val1)
+        val1.thisown = 1
+        return (val1,val2)
+    def HitTest(self, *_args, **_kwargs):
+        val1, val2, val3 = gizmosc.wxTreeListCtrl_HitTest(self, *_args, **_kwargs)
+        val1 = wxTreeItemIdPtr(val1)
+        val1.thisown = 1
+        return (val1, val2, val3)
+
+class wxTreeListCtrl(wxTreeListCtrlPtr):
+    def __init__(self,*_args,**_kwargs):
+        self.this = gizmosc.new_wxTreeListCtrl(*_args,**_kwargs)
+        self.thisown = 1
+        self._setCallbackInfo(self, wxTreeListCtrl)
+        self._setOORInfo(self)
+
+
+
+def wxPreTreeListCtrl(*_args,**_kwargs):
+    val = wxTreeListCtrlPtr(gizmosc.new_wxPreTreeListCtrl(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -300,6 +701,10 @@ wxLED_ALIGN_RIGHT = gizmosc.wxLED_ALIGN_RIGHT
 wxLED_ALIGN_CENTER = gizmosc.wxLED_ALIGN_CENTER
 wxLED_ALIGN_MASK = gizmosc.wxLED_ALIGN_MASK
 wxLED_DRAW_FADED = gizmosc.wxLED_DRAW_FADED
+wxTL_ALIGN_LEFT = gizmosc.wxTL_ALIGN_LEFT
+wxTL_ALIGN_RIGHT = gizmosc.wxTL_ALIGN_RIGHT
+wxTL_ALIGN_CENTER = gizmosc.wxTL_ALIGN_CENTER
+wxTREE_HITTEST_ONITEMCOLUMN = gizmosc.wxTREE_HITTEST_ONITEMCOLUMN
 
 
 #-------------- USER INCLUDE -----------------------
diff --git a/wxPython/contrib/gizmos/treelistctrl.cpp b/wxPython/contrib/gizmos/treelistctrl.cpp
new file mode 100644
index 0000000000..a559d95415
--- /dev/null
+++ b/wxPython/contrib/gizmos/treelistctrl.cpp
@@ -0,0 +1,4764 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        treelistctrl.cpp (derived by treectlg.h)
+// Purpose:     multi column tree control implementation
+// Author:      Robert Roebling
+// Created:     01/02/97
+// Modified:    Alberto Griggio, 2002
+//              22/10/98 - almost total rewrite, simpler interface (VZ)
+// Id:          $Id$
+// Copyright:   (c) 1998 Robert Roebling, Julian Smart and Markus Holzem
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+// ===========================================================================
+// declarations
+// ===========================================================================
+
+// ---------------------------------------------------------------------------
+// headers
+// ---------------------------------------------------------------------------
+
+#if defined(__GNUG__) && !defined(__APPLE__)
+  #pragma implementation "treelistctrl.h"
+#endif
+
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+
+#include <wx/treebase.h>
+#include <wx/timer.h>
+#include <wx/textctrl.h>
+#include <wx/imaglist.h>
+#include <wx/settings.h>
+#include <wx/dcclient.h>
+#include <wx/dcscreen.h>
+#include <wx/scrolwin.h>
+
+//#include "wx/gizmos/treelistctrl.h"
+#include "treelistctrl.h"
+
+
+#ifdef __WXGTK__
+    #include <gtk/gtk.h>
+    #include <wx/gtk/win_gtk.h>
+#endif
+
+// ---------------------------------------------------------------------------
+// array types
+// ---------------------------------------------------------------------------
+
+class  wxTreeListItem;
+
+WX_DEFINE_ARRAY(wxTreeListItem *, wxArrayTreeListItems);
+
+#include <wx/dynarray.h>
+WX_DECLARE_OBJARRAY(wxTreeListColumnInfo, wxArrayTreeListColumnInfo);
+#include <wx/arrimpl.cpp>
+WX_DEFINE_OBJARRAY(wxArrayTreeListColumnInfo);
+
+#if !wxCHECK_VERSION(2, 3, 3)
+WX_DEFINE_ARRAY(short, wxArrayShort);
+#endif
+
+
+// --------------------------------------------------------------------------
+// constants
+// --------------------------------------------------------------------------
+
+static const int NO_IMAGE = -1;
+
+#define PIXELS_PER_UNIT 10
+
+const wxChar* wxTreeListCtrlNameStr = wxT("treelistctrl");
+
+static wxTreeListColumnInfo wxInvalidTreeListColumnInfo;
+
+
+// ---------------------------------------------------------------------------
+// private classes
+// ---------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+//  wxTreeListHeaderWindow (internal)
+//-----------------------------------------------------------------------------
+
+class  wxTreeListHeaderWindow : public wxWindow
+{
+protected:
+    wxTreeListMainWindow    *m_owner;
+    wxCursor          *m_currentCursor;
+    wxCursor          *m_resizeCursor;
+    bool               m_isDragging;
+
+    // column being resized
+    int m_column;
+
+    // divider line position in logical (unscrolled) coords
+    int m_currentX;
+
+    // minimal position beyond which the divider line can't be dragged in
+    // logical coords
+    int m_minX;
+
+    wxArrayTreeListColumnInfo m_columns;
+
+    // total width of the columns
+    int m_total_col_width;
+
+
+public:
+    wxTreeListHeaderWindow();
+
+    wxTreeListHeaderWindow( wxWindow *win,
+                        wxWindowID id,
+                        wxTreeListMainWindow *owner,
+                        const wxPoint &pos = wxDefaultPosition,
+                        const wxSize &size = wxDefaultSize,
+                        long style = 0,
+                        const wxString &name = wxT("wxtreelistctrlcolumntitles") );
+
+    virtual ~wxTreeListHeaderWindow();
+
+    void DoDrawRect( wxDC *dc, int x, int y, int w, int h );
+    void DrawCurrent();
+    void AdjustDC(wxDC& dc);
+
+    void OnPaint( wxPaintEvent &event );
+    void OnMouse( wxMouseEvent &event );
+    void OnSetFocus( wxFocusEvent &event );
+
+
+    // columns manipulation
+
+    size_t GetColumnCount() const { return m_columns.GetCount(); }
+
+    void AddColumn(const wxTreeListColumnInfo& col);
+
+    void InsertColumn(size_t before, const wxTreeListColumnInfo& col);
+
+    void RemoveColumn(size_t column);
+
+    void SetColumn(size_t column, const wxTreeListColumnInfo& info);
+    const wxTreeListColumnInfo& GetColumn(size_t column) const
+    {
+        wxCHECK_MSG(column < GetColumnCount(), wxInvalidTreeListColumnInfo, wxT("Invalid column"));
+        return m_columns[column];
+    }
+    wxTreeListColumnInfo& GetColumn(size_t column)
+    {
+        wxCHECK_MSG(column < GetColumnCount(), wxInvalidTreeListColumnInfo, wxT("Invalid column"));
+        return m_columns[column];
+    }
+
+    void SetColumnWidth(size_t column, size_t width);
+
+    void SetColumnText(size_t column, const wxString& text)
+    {
+        wxCHECK_RET(column < GetColumnCount(), wxT("Invalid column"));
+        m_columns[column].SetText(text);
+    }
+
+    wxString GetColumnText(size_t column) const
+    {
+        wxCHECK_MSG(column < GetColumnCount(), wxEmptyString, wxT("Invalid column"));
+        return m_columns[column].GetText();
+    }
+
+    int GetColumnWidth(size_t column) const
+    {
+        wxCHECK_MSG(column < GetColumnCount(), -1, wxT("Invalid column"));
+        return m_columns[column].GetWidth();
+    }
+
+    int GetWidth() const { return m_total_col_width; }
+
+    // needs refresh
+    bool m_dirty;
+
+private:
+    // common part of all ctors
+    void Init();
+
+    void SendListEvent(wxEventType type, wxPoint pos);
+
+    DECLARE_DYNAMIC_CLASS(wxTreeListHeaderWindow)
+    DECLARE_EVENT_TABLE()
+};
+
+
+// this is the "true" control
+class  wxTreeListMainWindow: public wxScrolledWindow
+{
+public:
+    // creation
+    // --------
+    wxTreeListMainWindow() { Init(); }
+
+    wxTreeListMainWindow(wxTreeListCtrl *parent, wxWindowID id = -1,
+               const wxPoint& pos = wxDefaultPosition,
+               const wxSize& size = wxDefaultSize,
+               long style = wxTR_DEFAULT_STYLE,
+               const wxValidator &validator = wxDefaultValidator,
+               const wxString& name = wxT("wxtreelistmainwindow"))
+    {
+        Init();
+        Create(parent, id, pos, size, style, validator, name);
+    }
+
+    virtual ~wxTreeListMainWindow();
+
+    bool Create(wxTreeListCtrl *parent, wxWindowID id = -1,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize,
+                long style = wxTR_DEFAULT_STYLE,
+                const wxValidator &validator = wxDefaultValidator,
+                const wxString& name = wxT("wxtreelistctrl"));
+
+    // accessors
+    // ---------
+
+        // get the total number of items in the control
+    size_t GetCount() const;
+
+        // indent is the number of pixels the children are indented relative to
+        // the parents position. SetIndent() also redraws the control
+        // immediately.
+    unsigned int GetIndent() const { return m_indent; }
+    void SetIndent(unsigned int indent);
+
+        // spacing is the number of pixels between the start and the Text
+    unsigned int GetSpacing() const { return m_spacing; }
+    void SetSpacing(unsigned int spacing);
+
+    // see wxTreeListCtrl for the meaning
+    unsigned int GetLineSpacing() const { return m_linespacing; }
+    void SetLineSpacing(unsigned int spacing);
+
+        // image list: these functions allow to associate an image list with
+        // the control and retrieve it. Note that when assigned with
+        // SetImageList, the control does _not_ delete
+        // the associated image list when it's deleted in order to allow image
+        // lists to be shared between different controls. If you use
+        // AssignImageList, the control _does_ delete the image list.
+        //
+        // The normal image list is for the icons which correspond to the
+        // normal tree item state (whether it is selected or not).
+        // Additionally, the application might choose to show a state icon
+        // which corresponds to an app-defined item state (for example,
+        // checked/unchecked) which are taken from the state image list.
+    wxImageList *GetImageList() const;
+    wxImageList *GetStateImageList() const;
+    wxImageList *GetButtonsImageList() const;
+
+    void SetImageList(wxImageList *imageList);
+    void SetStateImageList(wxImageList *imageList);
+    void SetButtonsImageList(wxImageList *imageList);
+    void AssignImageList(wxImageList *imageList);
+    void AssignStateImageList(wxImageList *imageList);
+    void AssignButtonsImageList(wxImageList *imageList);
+
+    // Functions to work with tree ctrl items.
+
+    // accessors
+    // ---------
+
+        // retrieve item's label
+    wxString GetItemText(const wxTreeItemId& item) const
+    { return GetItemText(item, GetMainColumn()); }
+        // get one of the images associated with the item (normal by default)
+    int GetItemImage(const wxTreeItemId& item,
+                     wxTreeItemIcon which = wxTreeItemIcon_Normal) const
+    { return GetItemImage(item, GetMainColumn(), which); }
+
+        // get the data associated with the item
+    wxTreeItemData *GetItemData(const wxTreeItemId& item) const;
+
+    bool GetItemBold(const wxTreeItemId& item) const;
+    wxColour GetItemTextColour(const wxTreeItemId& item) const;
+    wxColour GetItemBackgroundColour(const wxTreeItemId& item) const;
+    wxFont GetItemFont(const wxTreeItemId& item) const;
+
+    // modifiers
+    // ---------
+
+        // set item's label
+    void SetItemText(const wxTreeItemId& item, const wxString& text)
+    { SetItemText(item, GetMainColumn(), text); }
+
+        // get one of the images associated with the item (normal by default)
+    void SetItemImage(const wxTreeItemId& item, int image,
+                      wxTreeItemIcon which = wxTreeItemIcon_Normal)
+    { SetItemImage(item, GetMainColumn(), image, which); }
+
+        // associate some data with the item
+    void SetItemData(const wxTreeItemId& item, wxTreeItemData *data);
+
+        // force appearance of [+] button near the item. This is useful to
+        // allow the user to expand the items which don't have any children now
+        // - but instead add them only when needed, thus minimizing memory
+        // usage and loading time.
+    void SetItemHasChildren(const wxTreeItemId& item, bool has = TRUE);
+
+        // the item will be shown in bold
+    void SetItemBold(const wxTreeItemId& item, bool bold = TRUE);
+
+        // set the item's text colour
+    void SetItemTextColour(const wxTreeItemId& item, const wxColour& col);
+
+        // set the item's background colour
+    void SetItemBackgroundColour(const wxTreeItemId& item,
+                                 const wxColour& col);
+
+        // set the item's font (should be of the same height for all items)
+    void SetItemFont(const wxTreeItemId& item, const wxFont& font);
+
+        // set the window font
+    virtual bool SetFont( const wxFont &font );
+
+       // set the styles.  No need to specify a GetWindowStyle here since
+       // the base wxWindow member function will do it for us
+    void SetWindowStyle(const long styles);
+
+    // item status inquiries
+    // ---------------------
+
+        // is the item visible (it might be outside the view or not expanded)?
+    bool IsVisible(const wxTreeItemId& item) const;
+        // does the item has any children?
+    bool HasChildren(const wxTreeItemId& item) const
+      { return ItemHasChildren(item); }
+    bool ItemHasChildren(const wxTreeItemId& item) const;
+        // is the item expanded (only makes sense if HasChildren())?
+    bool IsExpanded(const wxTreeItemId& item) const;
+        // is this item currently selected (the same as has focus)?
+    bool IsSelected(const wxTreeItemId& item) const;
+        // is item text in bold font?
+    bool IsBold(const wxTreeItemId& item) const;
+        // does the layout include space for a button?
+
+    // number of children
+    // ------------------
+
+        // if 'recursively' is FALSE, only immediate children count, otherwise
+        // the returned number is the number of all items in this branch
+    size_t GetChildrenCount(const wxTreeItemId& item, bool recursively = TRUE);
+
+    // navigation
+    // ----------
+
+    // wxTreeItemId.IsOk() will return FALSE if there is no such item
+
+        // get the root tree item
+    wxTreeItemId GetRootItem() const { return m_anchor; }
+
+        // get the item currently selected (may return NULL if no selection)
+    wxTreeItemId GetSelection() const { return m_current; }
+
+        // get the items currently selected, return the number of such item
+    size_t GetSelections(wxArrayTreeItemIds&) const;
+
+        // get the parent of this item (may return NULL if root)
+    wxTreeItemId GetParent(const wxTreeItemId& item) const;
+
+        // for this enumeration function you must pass in a "cookie" parameter
+        // which is opaque for the application but is necessary for the library
+        // to make these functions reentrant (i.e. allow more than one
+        // enumeration on one and the same object simultaneously). Of course,
+        // the "cookie" passed to GetFirstChild() and GetNextChild() should be
+        // the same!
+
+        // get the first child of this item
+    wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& cookie) const;
+        // get the next child
+    wxTreeItemId GetNextChild(const wxTreeItemId& item, long& cookie) const;
+        // get the last child of this item - this method doesn't use cookies
+    wxTreeItemId GetLastChild(const wxTreeItemId& item) const;
+
+        // get the next sibling of this item
+    wxTreeItemId GetNextSibling(const wxTreeItemId& item) const;
+        // get the previous sibling
+    wxTreeItemId GetPrevSibling(const wxTreeItemId& item) const;
+
+        // get first visible item
+    wxTreeItemId GetFirstVisibleItem() const;
+        // get the next visible item: item must be visible itself!
+        // see IsVisible() and wxTreeCtrl::GetFirstVisibleItem()
+    wxTreeItemId GetNextVisible(const wxTreeItemId& item) const;
+        // get the previous visible item: item must be visible itself!
+    wxTreeItemId GetPrevVisible(const wxTreeItemId& item) const;
+
+        // Only for internal use right now, but should probably be public
+    wxTreeItemId GetNext(const wxTreeItemId& item) const;
+
+    // operations
+    // ----------
+
+        // add the root node to the tree
+    wxTreeItemId AddRoot(const wxString& text,
+                         int image = -1, int selectedImage = -1,
+                         wxTreeItemData *data = NULL);
+
+        // insert a new item in as the first child of the parent
+    wxTreeItemId PrependItem(const wxTreeItemId& parent,
+                             const wxString& text,
+                             int image = -1, int selectedImage = -1,
+                             wxTreeItemData *data = NULL);
+
+        // insert a new item after a given one
+    wxTreeItemId InsertItem(const wxTreeItemId& parent,
+                            const wxTreeItemId& idPrevious,
+                            const wxString& text,
+                            int image = -1, int selectedImage = -1,
+                            wxTreeItemData *data = NULL);
+
+        // insert a new item before the one with the given index
+    wxTreeItemId InsertItem(const wxTreeItemId& parent,
+                            size_t index,
+                            const wxString& text,
+                            int image = -1, int selectedImage = -1,
+                            wxTreeItemData *data = NULL);
+
+        // insert a new item in as the last child of the parent
+    wxTreeItemId AppendItem(const wxTreeItemId& parent,
+                            const wxString& text,
+                            int image = -1, int selectedImage = -1,
+                            wxTreeItemData *data = NULL);
+
+        // delete this item and associated data if any
+    void Delete(const wxTreeItemId& item);
+        // delete all children (but don't delete the item itself)
+        // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events
+    void DeleteChildren(const wxTreeItemId& item);
+        // delete all items from the tree
+        // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events
+    void DeleteAllItems();
+
+        // expand this item
+    void Expand(const wxTreeItemId& item);
+        // expand this item and all subitems recursively
+    void ExpandAll(const wxTreeItemId& item);
+        // collapse the item without removing its children
+    void Collapse(const wxTreeItemId& item);
+        // collapse the item and remove all children
+    void CollapseAndReset(const wxTreeItemId& item);
+        // toggles the current state
+    void Toggle(const wxTreeItemId& item);
+
+        // remove the selection from currently selected item (if any)
+    void Unselect();
+    void UnselectAll();
+        // select this item
+    void SelectItem(const wxTreeItemId& item, bool unselect_others=TRUE,
+                    bool extended_select=FALSE);
+        // make sure this item is visible (expanding the parent item and/or
+        // scrolling to this item if necessary)
+    void EnsureVisible(const wxTreeItemId& item);
+        // scroll to this item (but don't expand its parent)
+    void ScrollTo(const wxTreeItemId& item);
+    void AdjustMyScrollbars();
+
+        // The first function is more portable (because easier to implement
+        // on other platforms), but the second one returns some extra info.
+    wxTreeItemId HitTest(const wxPoint& point)
+        { int dummy; return HitTest(point, dummy); }
+    wxTreeItemId HitTest(const wxPoint& point, int& flags)
+    { int col; return HitTest(point, flags, col); }
+    // ALB
+    wxTreeItemId HitTest(const wxPoint& point, int& flags, int& column);
+
+
+        // get the bounding rectangle of the item (or of its label only)
+    bool GetBoundingRect(const wxTreeItemId& item,
+                         wxRect& rect,
+                         bool textOnly = FALSE) const;
+
+        // Start editing the item label: this (temporarily) replaces the item
+        // with a one line edit control. The item will be selected if it hadn't
+        // been before.
+    void EditLabel( const wxTreeItemId& item ) { Edit( item ); }
+    void Edit( const wxTreeItemId& item );
+
+    // sorting
+        // this function is called to compare 2 items and should return -1, 0
+        // or +1 if the first item is less than, equal to or greater than the
+        // second one. The base class version performs alphabetic comparaison
+        // of item labels (GetText)
+    virtual int OnCompareItems(const wxTreeItemId& item1,
+                               const wxTreeItemId& item2);
+        // sort the children of this item using OnCompareItems
+        //
+        // NB: this function is not reentrant and not MT-safe (FIXME)!
+    void SortChildren(const wxTreeItemId& item);
+
+    // deprecated functions: use Set/GetItemImage directly
+        // get the selected item image
+    int GetItemSelectedImage(const wxTreeItemId& item) const
+        { return GetItemImage(item, wxTreeItemIcon_Selected); }
+        // set the selected item image
+    void SetItemSelectedImage(const wxTreeItemId& item, int image)
+        { SetItemImage(item, image, wxTreeItemIcon_Selected); }
+
+    // implementation only from now on
+
+    // overridden base class virtuals
+    virtual bool SetBackgroundColour(const wxColour& colour);
+    virtual bool SetForegroundColour(const wxColour& colour);
+
+    // callbacks
+    void OnPaint( wxPaintEvent &event );
+    void OnSetFocus( wxFocusEvent &event );
+    void OnKillFocus( wxFocusEvent &event );
+    void OnChar( wxKeyEvent &event );
+    void OnMouse( wxMouseEvent &event );
+    void OnIdle( wxIdleEvent &event );
+    void OnSize(wxSizeEvent& event); // ALB
+    void OnScroll(wxScrollWinEvent& event); // ALB
+
+    // implementation helpers
+    void SendDeleteEvent(wxTreeListItem *itemBeingDeleted);
+
+    void DrawBorder(const wxTreeItemId& item);
+    void DrawLine(const wxTreeItemId& item, bool below);
+
+    size_t GetColumnCount() const
+    { return m_owner->GetHeaderWindow()->GetColumnCount(); }
+
+    void SetMainColumn(size_t column)
+    {
+        if(column < GetColumnCount())
+            m_main_column = column;
+    }
+    size_t GetMainColumn() const { return m_main_column; }
+
+    void SetItemText(const wxTreeItemId& item, size_t column,
+                     const wxString& text);
+    wxString GetItemText(const wxTreeItemId& item, size_t column) const;
+
+    void SetItemImage(const wxTreeItemId& item, size_t column, int image,
+                      wxTreeItemIcon which = wxTreeItemIcon_Normal);
+    int GetItemImage(const wxTreeItemId& item, size_t column,
+                     wxTreeItemIcon which = wxTreeItemIcon_Normal) const;
+protected:
+    wxTreeListCtrl* m_owner; // ALB
+
+    size_t m_main_column; // ALB
+
+    friend class wxTreeListItem;
+    friend class wxTreeListRenameTimer;
+    friend class wxTreeListTextCtrl;
+
+    wxFont               m_normalFont;
+    wxFont               m_boldFont;
+
+    wxTreeListItem   *m_anchor;
+    wxTreeListItem   *m_current, *m_key_current, *m_currentEdit;
+    unsigned short       m_indent;
+    unsigned short       m_spacing;
+    int                  m_lineHeight;
+    unsigned short       m_linespacing;
+    wxPen                m_dottedPen;
+    wxBrush             *m_hilightBrush,
+                        *m_hilightUnfocusedBrush;
+    bool                 m_hasFocus;
+public:
+    bool                 m_dirty;
+protected:
+    bool                 m_ownsImageListNormal,
+                         m_ownsImageListState,
+                         m_ownsImageListButtons;
+    bool                 m_isDragging; // true between BEGIN/END drag events
+    bool                 m_renameAccept;
+    bool                 m_lastOnSame;  // last click on the same item as prev
+    wxImageList         *m_imageListNormal,
+                        *m_imageListState,
+                        *m_imageListButtons;
+
+    int                  m_dragCount;
+    wxPoint              m_dragStart;
+    wxTreeListItem   *m_dropTarget;
+    wxCursor             m_oldCursor;  // cursor is changed while dragging
+    wxTreeListItem   *m_oldSelection;
+
+    wxTimer             *m_renameTimer;
+    wxString             m_renameRes;
+
+    // the common part of all ctors
+    void Init();
+
+    // misc helpers
+    wxTreeItemId DoInsertItem(const wxTreeItemId& parent,
+                              size_t previous,
+                              const wxString& text,
+                              int image, int selectedImage,
+                              wxTreeItemData *data);
+    bool HasButtons(void) const
+        { return (m_imageListButtons != NULL)
+              || HasFlag(wxTR_TWIST_BUTTONS|wxTR_HAS_BUTTONS); }
+
+protected:
+    void CalculateLineHeight();
+    int  GetLineHeight(wxTreeListItem *item) const;
+    void PaintLevel( wxTreeListItem *item, wxDC& dc, int level, int &y,
+                     int x_offset);
+    void PaintItem( wxTreeListItem *item, wxDC& dc);
+
+    void CalculateLevel( wxTreeListItem *item, wxDC &dc, int level, int &y,
+                         int x_offset);
+    void CalculatePositions();
+    void CalculateSize( wxTreeListItem *item, wxDC &dc );
+
+    void RefreshSubtree( wxTreeListItem *item );
+    void RefreshLine( wxTreeListItem *item );
+
+    // redraw all selected items
+    void RefreshSelected();
+
+    // RefreshSelected() recursive helper
+    void RefreshSelectedUnder(wxTreeListItem *item);
+
+    void OnRenameTimer();
+    void OnRenameAccept();
+
+    void FillArray(wxTreeListItem*, wxArrayTreeItemIds&) const;
+    void SelectItemRange( wxTreeListItem *item1, wxTreeListItem *item2 );
+    bool TagAllChildrenUntilLast(wxTreeListItem *crt_item,
+                                 wxTreeListItem *last_item, bool select);
+    bool TagNextChildren(wxTreeListItem *crt_item, wxTreeListItem *last_item,
+                         bool select);
+    void UnselectAllChildren( wxTreeListItem *item );
+
+    void DrawDropEffect(wxTreeListItem *item);
+
+private:
+    DECLARE_EVENT_TABLE()
+    DECLARE_DYNAMIC_CLASS(wxTreeListMainWindow)
+};
+
+
+// timer used for enabling in-place edit
+class  wxTreeListRenameTimer: public wxTimer
+{
+public:
+    wxTreeListRenameTimer( wxTreeListMainWindow *owner );
+
+    void Notify();
+
+private:
+    wxTreeListMainWindow   *m_owner;
+};
+
+// control used for in-place edit
+class  wxTreeListTextCtrl: public wxTextCtrl
+{
+public:
+    wxTreeListTextCtrl( wxWindow *parent,
+                        const wxWindowID id,
+                        bool *accept,
+                        wxString *res,
+                        wxTreeListMainWindow *owner,
+                        const wxString &value = wxEmptyString,
+                        const wxPoint &pos = wxDefaultPosition,
+                        const wxSize &size = wxDefaultSize,
+                        int style = wxSIMPLE_BORDER,
+                        const wxValidator& validator = wxDefaultValidator,
+                        const wxString &name = wxTextCtrlNameStr );
+
+    void OnChar( wxKeyEvent &event );
+    void OnKeyUp( wxKeyEvent &event );
+    void OnKillFocus( wxFocusEvent &event );
+
+private:
+    bool               *m_accept;
+    wxString           *m_res;
+    wxTreeListMainWindow  *m_owner;
+    wxString            m_startValue;
+    bool                m_finished;
+
+    DECLARE_EVENT_TABLE()
+};
+
+// a tree item
+class  wxTreeListItem
+{
+public:
+    // ctors & dtor
+    wxTreeListItem() { m_data = NULL; }
+    wxTreeListItem( wxTreeListMainWindow *owner,
+                    wxTreeListItem *parent,
+                    const wxArrayString& text,
+                    int image,
+                    int selImage,
+                    wxTreeItemData *data );
+
+    ~wxTreeListItem();
+
+    // trivial accessors
+    wxArrayTreeListItems& GetChildren() { return m_children; }
+
+    const wxString GetText() const
+    {
+        if(m_text.GetCount() > 0) return m_text[0];
+        return wxEmptyString;
+    }
+    const wxString GetText(size_t col) const
+    {
+        if(m_text.GetCount() > col) return m_text[col];
+        return wxEmptyString;
+    }
+    int GetImage(wxTreeItemIcon which = wxTreeItemIcon_Normal) const
+        { return m_images[which]; }
+    int GetImage(size_t col, wxTreeItemIcon which=wxTreeItemIcon_Normal) const
+    {
+        if(col == m_owner->GetMainColumn()) return m_images[which];
+        if(col < m_col_images.GetCount()) return m_col_images[col];
+        return NO_IMAGE;
+    }
+    wxTreeItemData *GetData() const { return m_data; }
+
+    // returns the current image for the item (depending on its
+    // selected/expanded/whatever state)
+    int GetCurrentImage() const;
+
+    void SetText( const wxString &text );
+    void SetText(size_t col, const wxString& text) // ALB
+    {
+        if(col < m_text.GetCount())
+            m_text[col] = text;
+        else if(col < m_owner->GetColumnCount()) {
+            int howmany = m_owner->GetColumnCount();
+            for(int i = m_text.GetCount(); i < howmany; ++i)
+                m_text.Add(wxEmptyString);
+            m_text[col] = text;
+        }
+    }
+    void SetImage(int image, wxTreeItemIcon which) { m_images[which] = image; }
+    void SetImage(size_t col, int image, wxTreeItemIcon which)
+    {
+        if(col == m_owner->GetMainColumn()) m_images[which] = image;
+        else if(col < m_col_images.GetCount())
+            m_col_images[col] = image;
+        else if(col < m_owner->GetColumnCount()) {
+            int howmany = m_owner->GetColumnCount();
+            for(int i = m_col_images.GetCount(); i < howmany; ++i)
+                m_col_images.Add(NO_IMAGE);
+            m_col_images[col] = image;
+        }
+    }
+
+    void SetData(wxTreeItemData *data) { m_data = data; }
+
+    void SetHasPlus(bool has = TRUE) { m_hasPlus = has; }
+
+    void SetBold(bool bold) { m_isBold = bold; }
+
+    int GetX() const { return m_x; }
+    int GetY() const { return m_y; }
+
+    void SetX(int x) { m_x = x; }
+    void SetY(int y) { m_y = y; }
+
+    int  GetHeight() const { return m_height; }
+    int  GetWidth()  const { return m_width; }
+
+    void SetHeight(int h) { m_height = h; }
+    void SetWidth(int w) { m_width = w; }
+
+    wxTreeListItem *GetParent() const { return m_parent; }
+
+    // operations
+        // deletes all children notifying the treectrl about it if !NULL
+        // pointer given
+    void DeleteChildren(wxTreeListMainWindow *tree = NULL);
+
+    // get count of all children (and grand children if 'recursively')
+    size_t GetChildrenCount(bool recursively = TRUE) const;
+
+    void Insert(wxTreeListItem *child, size_t index)
+    { m_children.Insert(child, index); }
+
+    void GetSize( int &x, int &y, const wxTreeListMainWindow* );
+
+        // return the item at given position (or NULL if no item), onButton is
+        // TRUE if the point belongs to the item's button, otherwise it lies
+        // on the button's label
+    wxTreeListItem *HitTest( const wxPoint& point,
+                             const wxTreeListMainWindow *,
+                             int &flags,
+                             int level );
+    wxTreeListItem *HitTest( const wxPoint& point,
+                             const wxTreeListMainWindow *,
+                             int &flags, int& column /*ALB*/,
+                             int level );
+
+    void Expand() { m_isCollapsed = FALSE; }
+    void Collapse() { m_isCollapsed = TRUE; }
+
+    void SetHilight( bool set = TRUE ) { m_hasHilight = set; }
+
+    // status inquiries
+    bool HasChildren() const { return !m_children.IsEmpty(); }
+    bool IsSelected()  const { return m_hasHilight != 0; }
+    bool IsExpanded()  const { return !m_isCollapsed; }
+    bool HasPlus()     const { return m_hasPlus || HasChildren(); }
+    bool IsBold()      const { return m_isBold != 0; }
+
+    // attributes
+        // get them - may be NULL
+    wxTreeItemAttr *GetAttributes() const { return m_attr; }
+        // get them ensuring that the pointer is not NULL
+    wxTreeItemAttr& Attr()
+    {
+        if ( !m_attr )
+        {
+            m_attr = new wxTreeItemAttr;
+            m_ownsAttr = TRUE;
+        }
+        return *m_attr;
+    }
+        // set them
+    void SetAttributes(wxTreeItemAttr *attr)
+    {
+        if ( m_ownsAttr ) delete m_attr;
+        m_attr = attr;
+        m_ownsAttr = FALSE;
+    }
+        // set them and delete when done
+    void AssignAttributes(wxTreeItemAttr *attr)
+    {
+        SetAttributes(attr);
+        m_ownsAttr = TRUE;
+    }
+
+private:
+    wxTreeListMainWindow  *m_owner;        // control the item belongs to
+
+    // since there can be very many of these, we save size by chosing
+    // the smallest representation for the elements and by ordering
+    // the members to avoid padding.
+    wxArrayString      m_text;    // labels to be rendered for item
+
+    wxTreeItemData     *m_data;         // user-provided data
+
+    wxArrayTreeListItems m_children; // list of children
+    wxTreeListItem  *m_parent;       // parent of this item
+
+    wxTreeItemAttr     *m_attr;         // attributes???
+
+    // tree ctrl images for the normal, selected, expanded and
+    // expanded+selected states
+    short               m_images[wxTreeItemIcon_Max];
+    wxArrayShort m_col_images; // images for the various columns (!= main)
+
+    wxCoord             m_x;            // (virtual) offset from top
+    wxCoord             m_y;            // (virtual) offset from left
+    short               m_width;        // width of this item
+    unsigned char       m_height;       // height of this item
+
+    // use bitfields to save size
+    int                 m_isCollapsed :1;
+    int                 m_hasHilight  :1; // same as focused
+    int                 m_hasPlus     :1; // used for item which doesn't have
+                                          // children but has a [+] button
+    int                 m_isBold      :1; // render the label in bold font
+    int                 m_ownsAttr    :1; // delete attribute when done
+};
+
+// ===========================================================================
+// implementation
+// ===========================================================================
+
+// ----------------------------------------------------------------------------
+// private functions
+// ----------------------------------------------------------------------------
+
+// translate the key or mouse event flags to the type of selection we're
+// dealing with
+static void EventFlagsToSelType(long style,
+                                bool shiftDown,
+                                bool ctrlDown,
+                                bool &is_multiple,
+                                bool &extended_select,
+                                bool &unselect_others)
+{
+    is_multiple = (style & wxTR_MULTIPLE) != 0;
+    extended_select = shiftDown && is_multiple;
+    unselect_others = !(extended_select || (ctrlDown && is_multiple));
+}
+
+// ---------------------------------------------------------------------------
+// wxTreeListRenameTimer (internal)
+// ---------------------------------------------------------------------------
+
+wxTreeListRenameTimer::wxTreeListRenameTimer( wxTreeListMainWindow *owner )
+{
+    m_owner = owner;
+}
+
+void wxTreeListRenameTimer::Notify()
+{
+    m_owner->OnRenameTimer();
+}
+
+//-----------------------------------------------------------------------------
+// wxTreeListTextCtrl (internal)
+//-----------------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE(wxTreeListTextCtrl,wxTextCtrl)
+    EVT_CHAR           (wxTreeListTextCtrl::OnChar)
+    EVT_KEY_UP         (wxTreeListTextCtrl::OnKeyUp)
+    EVT_KILL_FOCUS     (wxTreeListTextCtrl::OnKillFocus)
+END_EVENT_TABLE()
+
+wxTreeListTextCtrl::wxTreeListTextCtrl( wxWindow *parent,
+                                        const wxWindowID id,
+                                        bool *accept,
+                                        wxString *res,
+                                        wxTreeListMainWindow *owner,
+                                        const wxString &value,
+                                        const wxPoint &pos,
+                                        const wxSize &size,
+                                        int style,
+                                        const wxValidator& validator,
+                                        const wxString &name )
+    : wxTextCtrl( parent, id, value, pos, size, style, validator, name )
+{
+    m_res = res;
+    m_accept = accept;
+    m_owner = owner;
+    (*m_accept) = FALSE;
+    (*m_res) = wxEmptyString;
+    m_startValue = value;
+    m_finished = FALSE;
+}
+
+void wxTreeListTextCtrl::OnChar( wxKeyEvent &event )
+{
+    if (event.m_keyCode == WXK_RETURN)
+    {
+        (*m_accept) = TRUE;
+        (*m_res) = GetValue();
+
+        if ((*m_res) != m_startValue)
+            m_owner->OnRenameAccept();
+
+        if (!wxPendingDelete.Member(this))
+            wxPendingDelete.Append(this);
+
+        m_finished = TRUE;
+        m_owner->SetFocus(); // This doesn't work. TODO.
+
+        return;
+    }
+    if (event.m_keyCode == WXK_ESCAPE)
+    {
+        (*m_accept) = FALSE;
+        (*m_res) = wxEmptyString;
+
+        if (!wxPendingDelete.Member(this))
+            wxPendingDelete.Append(this);
+
+        m_finished = TRUE;
+        m_owner->SetFocus(); // This doesn't work. TODO.
+
+        return;
+    }
+    event.Skip();
+}
+
+void wxTreeListTextCtrl::OnKeyUp( wxKeyEvent &event )
+{
+    if (m_finished)
+    {
+        event.Skip();
+        return;
+    }
+
+    // auto-grow the textctrl:
+    wxSize parentSize = m_owner->GetSize();
+    wxPoint myPos = GetPosition();
+    wxSize mySize = GetSize();
+    int sx, sy;
+    GetTextExtent(GetValue() + _T("M"), &sx, &sy);
+    if (myPos.x + sx > parentSize.x) sx = parentSize.x - myPos.x;
+    if (mySize.x > sx) sx = mySize.x;
+    SetSize(sx, -1);
+
+    event.Skip();
+}
+
+void wxTreeListTextCtrl::OnKillFocus( wxFocusEvent &event )
+{
+    if (m_finished)
+    {
+        event.Skip();
+        return;
+    }
+
+    if (!wxPendingDelete.Member(this))
+        wxPendingDelete.Append(this);
+
+    (*m_accept) = TRUE;
+    (*m_res) = GetValue();
+
+    if ((*m_res) != m_startValue)
+        m_owner->OnRenameAccept();
+}
+
+//-----------------------------------------------------------------------------
+//  wxTreeListHeaderWindow
+//-----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxTreeListHeaderWindow,wxWindow);
+
+BEGIN_EVENT_TABLE(wxTreeListHeaderWindow,wxWindow)
+    EVT_PAINT         (wxTreeListHeaderWindow::OnPaint)
+    EVT_MOUSE_EVENTS  (wxTreeListHeaderWindow::OnMouse)
+    EVT_SET_FOCUS     (wxTreeListHeaderWindow::OnSetFocus)
+END_EVENT_TABLE()
+
+void wxTreeListHeaderWindow::Init()
+{
+    m_currentCursor = (wxCursor *) NULL;
+    m_isDragging = FALSE;
+    m_dirty = FALSE;
+    m_total_col_width = 0;
+}
+
+wxTreeListHeaderWindow::wxTreeListHeaderWindow()
+{
+    Init();
+
+    m_owner = (wxTreeListMainWindow *) NULL;
+    m_resizeCursor = (wxCursor *) NULL;
+}
+
+wxTreeListHeaderWindow::wxTreeListHeaderWindow( wxWindow *win,
+                                                wxWindowID id,
+                                                wxTreeListMainWindow *owner,
+                                                const wxPoint& pos,
+                                                const wxSize& size,
+                                                long style,
+                                                const wxString &name )
+    : wxWindow( win, id, pos, size, style, name )
+{
+    Init();
+
+    m_owner = owner;
+    m_resizeCursor = new wxCursor(wxCURSOR_SIZEWE);
+
+    SetBackgroundColour(wxSystemSettings::GetSystemColour(
+                            wxSYS_COLOUR_BTNFACE));
+}
+
+wxTreeListHeaderWindow::~wxTreeListHeaderWindow()
+{
+    delete m_resizeCursor;
+}
+
+void wxTreeListHeaderWindow::DoDrawRect( wxDC *dc, int x, int y, int w, int h )
+{
+#ifdef __WXGTK__
+    GtkStateType state = m_parent->IsEnabled() ? GTK_STATE_NORMAL
+                                               : GTK_STATE_INSENSITIVE;
+
+    x = dc->XLOG2DEV( x );
+
+    gtk_paint_box (m_wxwindow->style, GTK_PIZZA(m_wxwindow)->bin_window,
+                   state, GTK_SHADOW_OUT,
+                   (GdkRectangle*) NULL, m_wxwindow, "button",
+                   x-1, y-1, w+2, h+2);
+#elif defined( __WXMAC__  )
+    const int m_corner = 1;
+
+    dc->SetBrush( *wxTRANSPARENT_BRUSH );
+
+    dc->SetPen( wxPen(wxSystemSettings::GetSystemColour(
+                          wxSYS_COLOUR_BTNSHADOW), 1, wxSOLID));
+    dc->DrawLine( x+w-m_corner+1, y, x+w, y+h );  // right (outer)
+    dc->DrawRectangle( x, y+h, w+1, 1 );          // bottom (outer)
+
+    wxPen pen( wxColour( 0x88 , 0x88 , 0x88 ), 1, wxSOLID );
+
+    dc->SetPen( pen );
+    dc->DrawLine( x+w-m_corner, y, x+w-1, y+h );  // right (inner)
+    dc->DrawRectangle( x+1, y+h-1, w-2, 1 );      // bottom (inner)
+
+    dc->SetPen( *wxWHITE_PEN );
+    dc->DrawRectangle( x, y, w-m_corner+1, 1 );   // top (outer)
+    dc->DrawRectangle( x, y, 1, h );              // left (outer)
+    dc->DrawLine( x, y+h-1, x+1, y+h-1 );
+    dc->DrawLine( x+w-1, y, x+w-1, y+1 );
+#else // !GTK, !Mac
+    const int m_corner = 1;
+
+    dc->SetBrush( *wxTRANSPARENT_BRUSH );
+
+    dc->SetPen( *wxBLACK_PEN );
+    dc->DrawLine( x+w-m_corner+1, y, x+w, y+h );  // right (outer)
+    dc->DrawRectangle( x, y+h, w+1, 1 );          // bottom (outer)
+
+    wxPen pen(wxSystemSettings::GetSystemColour(
+                  wxSYS_COLOUR_BTNSHADOW ), 1, wxSOLID);
+
+    dc->SetPen( pen );
+    dc->DrawLine( x+w-m_corner, y, x+w-1, y+h );  // right (inner)
+    dc->DrawRectangle( x+1, y+h-1, w-2, 1 );      // bottom (inner)
+
+    dc->SetPen( *wxWHITE_PEN );
+    dc->DrawRectangle( x, y, w-m_corner+1, 1 );   // top (outer)
+    dc->DrawRectangle( x, y, 1, h );              // left (outer)
+    dc->DrawLine( x, y+h-1, x+1, y+h-1 );
+    dc->DrawLine( x+w-1, y, x+w-1, y+1 );
+#endif
+}
+
+// shift the DC origin to match the position of the main window horz
+// scrollbar: this allows us to always use logical coords
+void wxTreeListHeaderWindow::AdjustDC(wxDC& dc)
+{
+    int xpix;
+    m_owner->GetScrollPixelsPerUnit( &xpix, NULL );
+
+    int x;
+    m_owner->GetViewStart( &x, NULL );
+
+    // account for the horz scrollbar offset
+    dc.SetDeviceOrigin( -x * xpix, 0 );
+}
+
+void wxTreeListHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
+{
+    static const int HEADER_OFFSET_X = 1, HEADER_OFFSET_Y = 1;
+#ifdef __WXGTK__
+    wxClientDC dc( this );
+#else
+    wxPaintDC dc( this );
+#endif
+
+    PrepareDC( dc );
+    AdjustDC( dc );
+
+    dc.BeginDrawing();
+
+    dc.SetFont( GetFont() );
+
+    // width and height of the entire header window
+    int w, h;
+    GetClientSize( &w, &h );
+    m_owner->CalcUnscrolledPosition(w, 0, &w, NULL);
+
+    dc.SetBackgroundMode(wxTRANSPARENT);
+
+    // do *not* use the listctrl colour for headers - one day we will have a
+    // function to set it separately
+    //dc.SetTextForeground( *wxBLACK );
+    dc.SetTextForeground(wxSystemSettings::
+                            GetSystemColour( wxSYS_COLOUR_WINDOWTEXT ));
+
+    int x = HEADER_OFFSET_X;
+
+    int numColumns = GetColumnCount();
+    for ( int i = 0; i < numColumns && x < w; i++ )
+    {
+        wxTreeListColumnInfo& column = GetColumn(i);
+        int wCol = column.GetWidth();
+
+        // the width of the rect to draw: make it smaller to fit entirely
+        // inside the column rect
+        int cw = wCol - 2;
+
+        dc.SetPen( *wxWHITE_PEN );
+
+        DoDrawRect( &dc, x, HEADER_OFFSET_Y, cw, h-2 );
+
+        // if we have an image, draw it on the right of the label
+        int image = column.GetImage(); //item.m_image;
+        int ix = -2, iy = 0;
+        wxImageList* imageList = m_owner->GetImageList();
+        if(image != -1) {
+            if(imageList) {
+                imageList->GetSize(image, ix, iy);
+            }
+            //else: ignore the column image
+        }
+
+        // extra margins around the text label
+        static const int EXTRA_WIDTH = 3;
+        static const int EXTRA_HEIGHT = 4;
+
+        int text_width = 0;
+        int text_x = x;
+        int image_offset = cw - ix - 1;
+
+        switch(column.GetAlignment()) {
+        case wxTL_ALIGN_LEFT:
+            text_x += EXTRA_WIDTH;
+            cw -= ix + 2;
+            break;
+        case wxTL_ALIGN_RIGHT:
+            dc.GetTextExtent(column.GetText(), &text_width, NULL);
+            text_x += cw - text_width - EXTRA_WIDTH;
+            image_offset = 0;
+            break;
+        case wxTL_ALIGN_CENTER:
+            dc.GetTextExtent(column.GetText(), &text_width, NULL);
+            text_x += (cw - text_width)/2 + ix + 2;
+            image_offset = (cw - text_width - ix - 2)/2;
+            break;
+        }
+
+        // draw the image
+        if(image != -1 && imageList) {
+            imageList->Draw(image, dc, x + image_offset/*cw - ix - 1*/,
+                            HEADER_OFFSET_Y + (h - 4 - iy)/2,
+                            wxIMAGELIST_DRAW_TRANSPARENT);
+        }
+
+        // draw the text clipping it so that it doesn't overwrite the column
+        // boundary
+        wxDCClipper clipper(dc, x, HEADER_OFFSET_Y, cw, h - 4 );
+
+        dc.DrawText( column.GetText(),
+                     text_x, HEADER_OFFSET_Y + EXTRA_HEIGHT );
+
+        x += wCol;
+    }
+
+    dc.EndDrawing();
+}
+
+void wxTreeListHeaderWindow::DrawCurrent()
+{
+    int x1 = m_currentX;
+    int y1 = 0;
+    ClientToScreen( &x1, &y1 );
+
+    int x2 = m_currentX-1;
+#ifdef __WXMSW__
+    ++x2; // but why ?
+#endif
+    int y2 = 0;
+    m_owner->GetClientSize( NULL, &y2 );
+    m_owner->ClientToScreen( &x2, &y2 );
+
+    wxScreenDC dc;
+    dc.SetLogicalFunction( wxINVERT );
+    dc.SetPen( wxPen( *wxBLACK, 2, wxSOLID ) );
+    dc.SetBrush( *wxTRANSPARENT_BRUSH );
+
+    AdjustDC(dc);
+
+    dc.DrawLine( x1, y1, x2, y2 );
+
+    dc.SetLogicalFunction( wxCOPY );
+
+    dc.SetPen( wxNullPen );
+    dc.SetBrush( wxNullBrush );
+}
+
+void wxTreeListHeaderWindow::OnMouse( wxMouseEvent &event )
+{
+    // we want to work with logical coords
+    int x;
+    m_owner->CalcUnscrolledPosition(event.GetX(), 0, &x, NULL);
+    int y = event.GetY();
+
+    if (m_isDragging)
+    {
+        SendListEvent(wxEVT_COMMAND_LIST_COL_DRAGGING,
+                      event.GetPosition());
+
+        // we don't draw the line beyond our window, but we allow dragging it
+        // there
+        int w = 0;
+        GetClientSize( &w, NULL );
+        m_owner->CalcUnscrolledPosition(w, 0, &w, NULL);
+        w -= 6;
+
+        // erase the line if it was drawn
+        if ( m_currentX < w )
+            DrawCurrent();
+
+        if (event.ButtonUp())
+        {
+            ReleaseMouse();
+            m_isDragging = FALSE;
+            m_dirty = TRUE;
+            SetColumnWidth( m_column, m_currentX - m_minX );
+            Refresh();
+            SendListEvent(wxEVT_COMMAND_LIST_COL_END_DRAG,
+                          event.GetPosition());
+        }
+        else
+        {
+            if (x > m_minX + 7)
+                m_currentX = x;
+            else
+                m_currentX = m_minX + 7;
+
+            // draw in the new location
+            if ( m_currentX < w )
+                DrawCurrent();
+        }
+    }
+    else // not dragging
+    {
+        m_minX = 0;
+        bool hit_border = FALSE;
+
+        // end of the current column
+        int xpos = 0;
+
+        // find the column where this event occured
+        int countCol = GetColumnCount();
+        for (int col = 0; col < countCol; col++)
+        {
+            xpos += GetColumnWidth( col );
+            m_column = col;
+
+            if ( (abs(x-xpos) < 3) && (y < 22) )
+            {
+                // near the column border
+                hit_border = TRUE;
+                break;
+            }
+
+            if ( x < xpos )
+            {
+                // inside the column
+                break;
+            }
+
+            m_minX = xpos;
+        }
+
+        if (event.LeftDown() || event.RightUp())
+        {
+            if (hit_border && event.LeftDown())
+            {
+                m_isDragging = TRUE;
+                m_currentX = x;
+                DrawCurrent();
+                CaptureMouse();
+                SendListEvent(wxEVT_COMMAND_LIST_COL_BEGIN_DRAG,
+                              event.GetPosition());
+            }
+            else // click on a column
+            {
+                SendListEvent( event.LeftDown()
+                               ? wxEVT_COMMAND_LIST_COL_CLICK
+                               : wxEVT_COMMAND_LIST_COL_RIGHT_CLICK,
+                               event.GetPosition());
+            }
+        }
+        else if (event.Moving())
+        {
+            bool setCursor;
+            if (hit_border)
+            {
+                setCursor = m_currentCursor == wxSTANDARD_CURSOR;
+                m_currentCursor = m_resizeCursor;
+            }
+            else
+            {
+                setCursor = m_currentCursor != wxSTANDARD_CURSOR;
+                m_currentCursor = wxSTANDARD_CURSOR;
+            }
+
+            if ( setCursor )
+                SetCursor(*m_currentCursor);
+        }
+    }
+}
+
+void wxTreeListHeaderWindow::OnSetFocus( wxFocusEvent &WXUNUSED(event) )
+{
+    m_owner->SetFocus();
+}
+
+void wxTreeListHeaderWindow::SendListEvent(wxEventType type, wxPoint pos)
+{
+    wxWindow *parent = GetParent();
+    wxListEvent le( type, parent->GetId() );
+    le.SetEventObject( parent );
+    le.m_pointDrag = pos;
+
+    // the position should be relative to the parent window, not
+    // this one for compatibility with MSW and common sense: the
+    // user code doesn't know anything at all about this header
+    // window, so why should it get positions relative to it?
+    le.m_pointDrag.y -= GetSize().y;
+
+    le.m_col = m_column;
+    parent->GetEventHandler()->ProcessEvent( le );
+}
+
+inline
+void wxTreeListHeaderWindow::AddColumn(const wxTreeListColumnInfo& col)
+{
+    m_columns.Add(col);
+    m_total_col_width += col.GetWidth();
+    //m_owner->GetHeaderWindow()->Refresh();
+    //m_dirty = TRUE;
+    m_owner->AdjustMyScrollbars();
+    m_owner->m_dirty = TRUE;
+    Refresh();
+}
+
+inline
+void wxTreeListHeaderWindow::SetColumnWidth(size_t column, size_t width)
+{
+    if(column < GetColumnCount()) {
+        m_total_col_width -= m_columns[column].GetWidth();
+        m_columns[column].SetWidth(width);
+        m_total_col_width += width;
+        m_owner->AdjustMyScrollbars();
+        m_owner->m_dirty = TRUE;
+        //m_dirty = TRUE;
+        Refresh();
+    }
+}
+
+
+inline
+void wxTreeListHeaderWindow::InsertColumn(size_t before,
+                                          const wxTreeListColumnInfo& col)
+{
+    wxCHECK_RET(before < GetColumnCount(), wxT("Invalid column index"));
+    m_columns.Insert(col, before);
+    m_total_col_width += col.GetWidth();
+    //m_dirty = TRUE;
+    //m_owner->GetHeaderWindow()->Refresh();
+    m_owner->AdjustMyScrollbars();
+    m_owner->m_dirty = TRUE;
+    Refresh();
+}
+
+inline
+void wxTreeListHeaderWindow::RemoveColumn(size_t column)
+{
+    wxCHECK_RET(column < GetColumnCount(), wxT("Invalid column"));
+    m_total_col_width -= m_columns[column].GetWidth();
+    m_columns.RemoveAt(column);
+    //m_dirty = TRUE;
+    m_owner->AdjustMyScrollbars();
+    m_owner->m_dirty = TRUE;
+    Refresh();
+}
+
+inline
+void wxTreeListHeaderWindow::SetColumn(size_t column,
+                                       const wxTreeListColumnInfo& info)
+{
+    wxCHECK_RET(column < GetColumnCount(), wxT("Invalid column"));
+    size_t w = m_columns[column].GetWidth();
+    m_columns[column] = info;
+    //m_owner->GetHeaderWindow()->Refresh();
+    //m_dirty = TRUE;
+    if(w != info.GetWidth()) {
+        m_total_col_width += info.GetWidth() - w;
+        m_owner->AdjustMyScrollbars();
+        m_owner->m_dirty = TRUE;
+    }
+    Refresh();
+}
+
+// ---------------------------------------------------------------------------
+// wxTreeListItem
+// ---------------------------------------------------------------------------
+
+wxTreeListItem::wxTreeListItem(wxTreeListMainWindow *owner,
+                                     wxTreeListItem *parent,
+                                     const wxArrayString& text,
+                                     int image, int selImage,
+                                     wxTreeItemData *data)
+                 : m_text(text)
+{
+    m_images[wxTreeItemIcon_Normal] = image;
+    m_images[wxTreeItemIcon_Selected] = selImage;
+    m_images[wxTreeItemIcon_Expanded] = NO_IMAGE;
+    m_images[wxTreeItemIcon_SelectedExpanded] = NO_IMAGE;
+
+    m_data = data;
+    m_x = m_y = 0;
+
+    m_isCollapsed = TRUE;
+    m_hasHilight = FALSE;
+    m_hasPlus = FALSE;
+    m_isBold = FALSE;
+
+    m_owner = owner;
+
+    m_parent = parent;
+
+    m_attr = (wxTreeItemAttr *)NULL;
+    m_ownsAttr = FALSE;
+
+    // We don't know the height here yet.
+    m_width = 0;
+    m_height = 0;
+}
+
+wxTreeListItem::~wxTreeListItem()
+{
+    delete m_data;
+
+    if (m_ownsAttr) delete m_attr;
+
+    wxASSERT_MSG( m_children.IsEmpty(),
+                  wxT("please call DeleteChildren() before deleting the item") );
+}
+
+void wxTreeListItem::DeleteChildren(wxTreeListMainWindow *tree)
+{
+    size_t count = m_children.Count();
+    for ( size_t n = 0; n < count; n++ )
+    {
+        wxTreeListItem *child = m_children[n];
+        if (tree)
+            tree->SendDeleteEvent(child);
+
+        child->DeleteChildren(tree);
+        delete child;
+    }
+
+    m_children.Empty();
+}
+
+void wxTreeListItem::SetText( const wxString &text )
+{
+    if(m_text.GetCount() > 0) m_text[0] = text;
+    else {
+        m_text.Add(text);
+    }
+}
+
+size_t wxTreeListItem::GetChildrenCount(bool recursively) const
+{
+    size_t count = m_children.Count();
+    if ( !recursively )
+        return count;
+
+    size_t total = count;
+    for (size_t n = 0; n < count; ++n)
+    {
+        total += m_children[n]->GetChildrenCount();
+    }
+
+    return total;
+}
+
+void wxTreeListItem::GetSize( int &x, int &y,
+                                 const wxTreeListMainWindow *theButton )
+{
+    int bottomY=m_y+theButton->GetLineHeight(this);
+    if ( y < bottomY ) y = bottomY;
+    int width = m_x +  m_width;
+    if ( x < width ) x = width;
+
+    if (IsExpanded())
+    {
+        size_t count = m_children.Count();
+        for ( size_t n = 0; n < count; ++n )
+        {
+            m_children[n]->GetSize( x, y, theButton );
+        }
+    }
+}
+
+wxTreeListItem *wxTreeListItem::HitTest(const wxPoint& point,
+                                        const wxTreeListMainWindow *theCtrl,
+                                        int &flags,
+                                        int level)
+{
+    // for a hidden root node, don't evaluate it, but do evaluate children
+    if ( !(level == 0 && theCtrl->HasFlag(wxTR_HIDE_ROOT)) )
+    {
+        // evaluate the item
+        int h = theCtrl->GetLineHeight(this);
+        if ((point.y > m_y) && (point.y < m_y + h))
+        {
+            int y_mid = m_y + h/2;
+            if (point.y < y_mid )
+                flags |= wxTREE_HITTEST_ONITEMUPPERPART;
+            else
+                flags |= wxTREE_HITTEST_ONITEMLOWERPART;
+
+            // 5 is the size of the plus sign
+            int xCross = m_x - theCtrl->GetSpacing();
+            if ((point.x > xCross-5) && (point.x < xCross+5) &&
+                (point.y > y_mid-5) && (point.y < y_mid+5) &&
+                HasPlus() && theCtrl->HasButtons() )
+            {
+                flags |= wxTREE_HITTEST_ONITEMBUTTON;
+                return this;
+            }
+
+            if ((point.x >= m_x) && (point.x <= m_x+m_width))
+            {
+                int image_w = -1;
+                int image_h;
+
+                //assuming every image (normal and selected) has the same size!
+                if ( (GetImage() != NO_IMAGE) && theCtrl->m_imageListNormal )
+                    theCtrl->m_imageListNormal->GetSize(GetImage(),
+                                                        image_w, image_h);
+
+                if ((image_w != -1) && (point.x <= m_x + image_w + 1))
+                    flags |= wxTREE_HITTEST_ONITEMICON;
+                else
+                    flags |= wxTREE_HITTEST_ONITEMLABEL;
+
+                return this;
+            }
+
+            if (point.x < m_x)
+                flags |= wxTREE_HITTEST_ONITEMINDENT;
+            if (point.x > m_x+m_width)
+                flags |= wxTREE_HITTEST_ONITEMRIGHT;
+
+            return this;
+        }
+
+        // if children are expanded, fall through to evaluate them
+        if (m_isCollapsed) return (wxTreeListItem*) NULL;
+    }
+
+    // evaluate children
+    size_t count = m_children.Count();
+    for ( size_t n = 0; n < count; n++ )
+    {
+        wxTreeListItem *res = m_children[n]->HitTest(point, theCtrl,
+                                                     flags, level + 1);
+        if ( res != NULL )
+            return res;
+    }
+
+    return (wxTreeListItem*) NULL;
+}
+
+// ALB
+wxTreeListItem *wxTreeListItem::HitTest(const wxPoint& point,
+                                        const wxTreeListMainWindow *theCtrl,
+                                        int &flags, int& column, int level)
+{
+    column = -1;
+    wxTreeListItem* res = HitTest(point, theCtrl, flags, level);
+
+    if(!res) return res;
+    if(flags & wxTREE_HITTEST_ONITEMINDENT) {
+        int x = 0;
+        for(size_t i = 0; i < theCtrl->GetMainColumn(); ++i) {
+            int w = theCtrl->m_owner->GetHeaderWindow()->GetColumnWidth(i);
+            if(point.x >= x && point.x < x+w) {
+                flags ^= wxTREE_HITTEST_ONITEMINDENT;
+                flags |= wxTREE_HITTEST_ONITEMCOLUMN;
+                column = i;
+                return res;
+            }
+        }
+    }
+    else if(flags & wxTREE_HITTEST_ONITEMRIGHT) {
+        int x = 0;
+        size_t i;
+        for(i = 0; i < theCtrl->GetMainColumn()+1; ++i) {
+            x += theCtrl->m_owner->GetHeaderWindow()->GetColumnWidth(i);
+        }
+        for(i = theCtrl->GetMainColumn()+1;
+            i < theCtrl->GetColumnCount(); ++i) {
+            int w = theCtrl->m_owner->GetHeaderWindow()->GetColumnWidth(i);
+            if(point.x >= x && point.x < x+w) {
+                flags ^= wxTREE_HITTEST_ONITEMRIGHT;
+                flags |= wxTREE_HITTEST_ONITEMCOLUMN;
+                column = i;
+                return res;
+            }
+        }
+    }
+
+    return res;
+}
+
+
+int wxTreeListItem::GetCurrentImage() const
+{
+    int image = NO_IMAGE;
+    if ( IsExpanded() )
+    {
+        if ( IsSelected() )
+        {
+            image = GetImage(wxTreeItemIcon_SelectedExpanded);
+        }
+
+        if ( image == NO_IMAGE )
+        {
+            // we usually fall back to the normal item, but try just the
+            // expanded one (and not selected) first in this case
+            image = GetImage(wxTreeItemIcon_Expanded);
+        }
+    }
+    else // not expanded
+    {
+        if ( IsSelected() )
+            image = GetImage(wxTreeItemIcon_Selected);
+    }
+
+    // maybe it doesn't have the specific image we want,
+    // try the default one instead
+    if ( image == NO_IMAGE ) image = GetImage();
+
+    return image;
+}
+
+// ---------------------------------------------------------------------------
+// wxTreeListMainWindow implementation
+// ---------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxTreeListMainWindow, wxScrolledWindow)
+
+BEGIN_EVENT_TABLE(wxTreeListMainWindow, wxScrolledWindow)
+    EVT_PAINT          (wxTreeListMainWindow::OnPaint)
+    EVT_MOUSE_EVENTS   (wxTreeListMainWindow::OnMouse)
+    EVT_CHAR           (wxTreeListMainWindow::OnChar)
+    EVT_SET_FOCUS      (wxTreeListMainWindow::OnSetFocus)
+    EVT_KILL_FOCUS     (wxTreeListMainWindow::OnKillFocus)
+    EVT_IDLE           (wxTreeListMainWindow::OnIdle)
+    //EVT_SIZE           (wxTreeListMainWindow::OnSize)
+    EVT_SCROLLWIN      (wxTreeListMainWindow::OnScroll)
+END_EVENT_TABLE()
+
+
+// ---------------------------------------------------------------------------
+// construction/destruction
+// ---------------------------------------------------------------------------
+
+void wxTreeListMainWindow::Init()
+{
+    m_current = m_key_current = m_anchor = (wxTreeListItem *) NULL;
+    m_hasFocus = FALSE;
+    m_dirty = FALSE;
+
+    m_lineHeight = 10;
+    m_indent = 9;
+    m_spacing = 9;
+    m_linespacing = 4;
+
+    m_hilightBrush = new wxBrush
+                         (
+                            wxSystemSettings::GetSystemColour
+                            (
+                                wxSYS_COLOUR_HIGHLIGHT
+                            ),
+                            wxSOLID
+                         );
+
+    m_hilightUnfocusedBrush = new wxBrush
+                              (
+                                 wxSystemSettings::GetSystemColour
+                                 (
+                                     wxSYS_COLOUR_BTNSHADOW
+                                 ),
+                                 wxSOLID
+                              );
+
+    m_imageListNormal = m_imageListButtons =
+    m_imageListState = (wxImageList *) NULL;
+    m_ownsImageListNormal = m_ownsImageListButtons =
+    m_ownsImageListState = FALSE;
+
+    m_dragCount = 0;
+    m_isDragging = FALSE;
+    m_dropTarget = m_oldSelection = (wxTreeListItem *)NULL;
+
+    m_renameTimer = new wxTreeListRenameTimer( this );
+    m_lastOnSame = FALSE;
+
+    m_normalFont = wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT );
+    m_boldFont = wxFont( m_normalFont.GetPointSize(),
+                         m_normalFont.GetFamily(),
+                         m_normalFont.GetStyle(),
+                         wxBOLD,
+                         m_normalFont.GetUnderlined());
+}
+
+
+static const int HEADER_HEIGHT = 23;
+
+bool wxTreeListMainWindow::Create(wxTreeListCtrl *parent,
+                                  wxWindowID id,
+                                  const wxPoint& pos,
+                                  const wxSize& size,
+                                  long style,
+                                  const wxValidator &validator,
+                                  const wxString& name )
+{
+#ifdef __WXMAC__
+    int major,minor;
+    wxGetOsVersion( &major, &minor );
+
+    if (style & wxTR_HAS_BUTTONS) style |= wxTR_MAC_BUTTONS;
+    if (style & wxTR_HAS_BUTTONS) style &= ~wxTR_HAS_BUTTONS;
+    style &= ~wxTR_LINES_AT_ROOT;
+    style |= wxTR_NO_LINES;
+    if (major < 10)
+        style |= wxTR_ROW_LINES;
+#endif
+
+    wxScrolledWindow::Create( parent, id, pos, size,
+                              style|wxHSCROLL|wxVSCROLL, name );
+
+        // If the tree display has no buttons, but does have
+        // connecting lines, we can use a narrower layout.
+        // It may not be a good idea to force this...
+    if (!HasButtons() && !HasFlag(wxTR_NO_LINES))
+    {
+        m_indent= 10;
+        m_spacing = 10;
+    }
+
+#if wxUSE_VALIDATORS
+    SetValidator( validator );
+#endif
+
+    SetBackgroundColour( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_LISTBOX ) );
+
+// #ifdef __WXMSW__
+//     m_dottedPen = wxPen( "black", 0, wxDOT );  // too slow under XFree86
+// #else
+    m_dottedPen = wxPen( wxT("grey"), 0, 0 );
+// #endif
+
+    // ALB
+    m_owner = parent;
+    m_main_column = 0;
+
+    return TRUE;
+}
+
+wxTreeListMainWindow::~wxTreeListMainWindow()
+{
+    delete m_hilightBrush;
+    delete m_hilightUnfocusedBrush;
+
+    DeleteAllItems();
+
+    delete m_renameTimer;
+    if (m_ownsImageListNormal) delete m_imageListNormal;
+    if (m_ownsImageListState) delete m_imageListState;
+    if (m_ownsImageListButtons) delete m_imageListButtons;
+}
+
+
+
+//-----------------------------------------------------------------------------
+// accessors
+//-----------------------------------------------------------------------------
+
+inline
+size_t wxTreeListMainWindow::GetCount() const
+{
+    return m_anchor == NULL ? 0u : m_anchor->GetChildrenCount();
+}
+
+inline
+void wxTreeListMainWindow::SetIndent(unsigned int indent)
+{
+    m_indent = indent;
+    m_dirty = TRUE;
+}
+
+inline
+void wxTreeListMainWindow::SetSpacing(unsigned int spacing)
+{
+    m_spacing = spacing;
+    m_dirty = TRUE;
+}
+
+inline
+void wxTreeListMainWindow::SetLineSpacing(unsigned int spacing)
+{
+    m_linespacing = spacing;
+    m_dirty = TRUE;
+    CalculateLineHeight();
+}
+
+inline
+size_t wxTreeListMainWindow::GetChildrenCount(const wxTreeItemId& item,
+                                              bool recursively)
+{
+    wxCHECK_MSG( item.IsOk(), 0u, wxT("invalid tree item") );
+
+    return ((wxTreeListItem*) item.m_pItem)->GetChildrenCount(recursively);
+}
+
+void wxTreeListMainWindow::SetWindowStyle(const long styles)
+{
+        // right now, just sets the styles.  Eventually, we may
+        // want to update the inherited styles, but right now
+        // none of the parents has updatable styles
+    m_windowStyle = styles;
+    m_dirty = TRUE;
+}
+
+//-----------------------------------------------------------------------------
+// functions to work with tree items
+//-----------------------------------------------------------------------------
+
+inline
+int wxTreeListMainWindow::GetItemImage(const wxTreeItemId& item, size_t column,
+                                       wxTreeItemIcon which) const
+{
+    wxCHECK_MSG( item.IsOk(), -1, wxT("invalid tree item") );
+
+    return ((wxTreeListItem*) item.m_pItem)->GetImage(column, which);
+}
+
+inline
+wxTreeItemData *wxTreeListMainWindow::GetItemData(const wxTreeItemId& item)
+    const
+{
+    wxCHECK_MSG( item.IsOk(), NULL, wxT("invalid tree item") );
+
+    return ((wxTreeListItem*) item.m_pItem)->GetData();
+}
+
+inline
+bool wxTreeListMainWindow::GetItemBold(const wxTreeItemId& item) const
+{
+    wxCHECK_MSG(item.IsOk(), FALSE, wxT("invalid tree item"));
+    return ((wxTreeListItem *)item.m_pItem)->IsBold();
+}
+
+inline
+wxColour wxTreeListMainWindow::GetItemTextColour(const wxTreeItemId& item)
+    const
+{
+    wxCHECK_MSG( item.IsOk(), wxNullColour, wxT("invalid tree item") );
+
+    wxTreeListItem *pItem = (wxTreeListItem*) item.m_pItem;
+    return pItem->Attr().GetTextColour();
+}
+
+inline
+wxColour wxTreeListMainWindow::GetItemBackgroundColour(
+    const wxTreeItemId& item) const
+{
+    wxCHECK_MSG( item.IsOk(), wxNullColour, wxT("invalid tree item") );
+
+    wxTreeListItem *pItem = (wxTreeListItem*) item.m_pItem;
+    return pItem->Attr().GetBackgroundColour();
+}
+
+inline
+wxFont wxTreeListMainWindow::GetItemFont(const wxTreeItemId& item) const
+{
+    wxCHECK_MSG( item.IsOk(), wxNullFont, wxT("invalid tree item") );
+
+    wxTreeListItem *pItem = (wxTreeListItem*) item.m_pItem;
+    return pItem->Attr().GetFont();
+}
+
+
+
+inline
+void wxTreeListMainWindow::SetItemImage(const wxTreeItemId& item,
+                                        size_t column,
+                                        int image, wxTreeItemIcon which)
+{
+    wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
+
+    wxTreeListItem *pItem = (wxTreeListItem*) item.m_pItem;
+    pItem->SetImage(column, image, which);
+
+    wxClientDC dc(this);
+    CalculateSize(pItem, dc);
+    RefreshLine(pItem);
+}
+
+inline
+void wxTreeListMainWindow::SetItemData(const wxTreeItemId& item,
+                                       wxTreeItemData *data)
+{
+    wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
+
+    ((wxTreeListItem*) item.m_pItem)->SetData(data);
+}
+
+inline
+void wxTreeListMainWindow::SetItemHasChildren(const wxTreeItemId& item,
+                                              bool has)
+{
+    wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
+
+    wxTreeListItem *pItem = (wxTreeListItem*) item.m_pItem;
+    pItem->SetHasPlus(has);
+    RefreshLine(pItem);
+}
+
+inline
+void wxTreeListMainWindow::SetItemBold(const wxTreeItemId& item, bool bold)
+{
+    wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
+
+    // avoid redrawing the tree if no real change
+    wxTreeListItem *pItem = (wxTreeListItem*) item.m_pItem;
+    if ( pItem->IsBold() != bold )
+    {
+        pItem->SetBold(bold);
+        RefreshLine(pItem);
+    }
+}
+
+inline
+void wxTreeListMainWindow::SetItemTextColour(const wxTreeItemId& item,
+                                             const wxColour& col)
+{
+    wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
+
+    wxTreeListItem *pItem = (wxTreeListItem*) item.m_pItem;
+    pItem->Attr().SetTextColour(col);
+    RefreshLine(pItem);
+}
+
+inline
+void wxTreeListMainWindow::SetItemBackgroundColour(const wxTreeItemId& item,
+                                                   const wxColour& col)
+{
+    wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
+
+    wxTreeListItem *pItem = (wxTreeListItem*) item.m_pItem;
+    pItem->Attr().SetBackgroundColour(col);
+    RefreshLine(pItem);
+}
+
+inline
+void wxTreeListMainWindow::SetItemFont(const wxTreeItemId& item,
+                                       const wxFont& font)
+{
+    wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
+
+    wxTreeListItem *pItem = (wxTreeListItem*) item.m_pItem;
+    pItem->Attr().SetFont(font);
+    RefreshLine(pItem);
+}
+
+inline
+bool wxTreeListMainWindow::SetFont( const wxFont &font )
+{
+    wxScrolledWindow::SetFont(font);
+
+    m_normalFont = font ;
+    m_boldFont = wxFont( m_normalFont.GetPointSize(),
+                            m_normalFont.GetFamily(),
+                            m_normalFont.GetStyle(),
+                            wxBOLD,
+                            m_normalFont.GetUnderlined());
+
+    return TRUE;
+}
+
+
+// ----------------------------------------------------------------------------
+// item status inquiries
+// ----------------------------------------------------------------------------
+
+inline
+bool wxTreeListMainWindow::IsVisible(const wxTreeItemId& item) const
+{
+    wxCHECK_MSG( item.IsOk(), FALSE, wxT("invalid tree item") );
+
+    // An item is only visible if it's not a descendant of a collapsed item
+    wxTreeListItem *pItem = (wxTreeListItem*) item.m_pItem;
+    wxTreeListItem* parent = pItem->GetParent();
+    while (parent)
+    {
+        if (!parent->IsExpanded())
+            return FALSE;
+        parent = parent->GetParent();
+    }
+
+    int startX, startY;
+    GetViewStart(& startX, & startY);
+
+    wxSize clientSize = GetClientSize();
+
+    wxRect rect;
+    if (!GetBoundingRect(item, rect))
+        return FALSE;
+    if (rect.GetWidth() == 0 || rect.GetHeight() == 0)
+        return FALSE;
+    if (rect.GetBottom() < 0 || rect.GetTop() > clientSize.y)
+        return FALSE;
+    if (rect.GetRight() < 0 || rect.GetLeft() > clientSize.x)
+        return FALSE;
+
+    return TRUE;
+}
+
+inline
+bool wxTreeListMainWindow::ItemHasChildren(const wxTreeItemId& item) const
+{
+    wxCHECK_MSG( item.IsOk(), FALSE, wxT("invalid tree item") );
+
+    // consider that the item does have children if it has the "+" button: it
+    // might not have them (if it had never been expanded yet) but then it
+    // could have them as well and it's better to err on this side rather than
+    // disabling some operations which are restricted to the items with
+    // children for an item which does have them
+    return ((wxTreeListItem*) item.m_pItem)->HasPlus();
+}
+
+inline
+bool wxTreeListMainWindow::IsExpanded(const wxTreeItemId& item) const
+{
+    wxCHECK_MSG( item.IsOk(), FALSE, wxT("invalid tree item") );
+
+    return ((wxTreeListItem*) item.m_pItem)->IsExpanded();
+}
+
+inline
+bool wxTreeListMainWindow::IsSelected(const wxTreeItemId& item) const
+{
+    wxCHECK_MSG( item.IsOk(), FALSE, wxT("invalid tree item") );
+
+    return ((wxTreeListItem*) item.m_pItem)->IsSelected();
+}
+
+inline
+bool wxTreeListMainWindow::IsBold(const wxTreeItemId& item) const
+{
+    wxCHECK_MSG( item.IsOk(), FALSE, wxT("invalid tree item") );
+
+    return ((wxTreeListItem*) item.m_pItem)->IsBold();
+}
+
+// ----------------------------------------------------------------------------
+// navigation
+// ----------------------------------------------------------------------------
+
+inline
+wxTreeItemId wxTreeListMainWindow::GetParent(const wxTreeItemId& item) const
+{
+    wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
+
+    return ((wxTreeListItem*) item.m_pItem)->GetParent();
+}
+
+inline
+wxTreeItemId wxTreeListMainWindow::GetFirstChild(const wxTreeItemId& item,
+                                                 long& cookie) const
+{
+    wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
+
+    cookie = 0;
+    return GetNextChild(item, cookie);
+}
+
+inline
+wxTreeItemId wxTreeListMainWindow::GetNextChild(const wxTreeItemId& item,
+                                                long& cookie) const
+{
+    wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
+
+    wxArrayTreeListItems& children = ((wxTreeListItem*)
+                                      item.m_pItem)->GetChildren();
+    if ( (size_t)cookie < children.Count() )
+    {
+        return children.Item((size_t)cookie++);
+    }
+    else
+    {
+        // there are no more of them
+        return wxTreeItemId();
+    }
+}
+
+inline
+wxTreeItemId wxTreeListMainWindow::GetLastChild(const wxTreeItemId& item) const
+{
+    wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
+
+    wxArrayTreeListItems& children = ((wxTreeListItem*) item.m_pItem)->GetChildren();
+    return (children.IsEmpty() ? wxTreeItemId() : wxTreeItemId(children.Last()));
+}
+
+inline
+wxTreeItemId wxTreeListMainWindow::GetNextSibling(const wxTreeItemId& item) const
+{
+    wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
+
+    wxTreeListItem *i = (wxTreeListItem*) item.m_pItem;
+    wxTreeListItem *parent = i->GetParent();
+    if ( parent == NULL )
+    {
+        // root item doesn't have any siblings
+        return wxTreeItemId();
+    }
+
+    wxArrayTreeListItems& siblings = parent->GetChildren();
+    int index = siblings.Index(i);
+    wxASSERT( index != wxNOT_FOUND ); // I'm not a child of my parent?
+
+    size_t n = (size_t)(index + 1);
+    return n == siblings.Count() ? wxTreeItemId() : wxTreeItemId(siblings[n]);
+}
+
+inline
+wxTreeItemId wxTreeListMainWindow::GetPrevSibling(const wxTreeItemId& item)
+    const
+{
+    wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
+
+    wxTreeListItem *i = (wxTreeListItem*) item.m_pItem;
+    wxTreeListItem *parent = i->GetParent();
+    if ( parent == NULL )
+    {
+        // root item doesn't have any siblings
+        return wxTreeItemId();
+    }
+
+    wxArrayTreeListItems& siblings = parent->GetChildren();
+    int index = siblings.Index(i);
+    wxASSERT( index != wxNOT_FOUND ); // I'm not a child of my parent?
+
+    return index == 0 ? wxTreeItemId()
+                      : wxTreeItemId(siblings[(size_t)(index - 1)]);
+}
+
+// Only for internal use right now, but should probably be public
+wxTreeItemId wxTreeListMainWindow::GetNext(const wxTreeItemId& item) const
+{
+    wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
+
+    wxTreeListItem *i = (wxTreeListItem*) item.m_pItem;
+
+    // First see if there are any children.
+    wxArrayTreeListItems& children = i->GetChildren();
+    if (children.GetCount() > 0)
+    {
+         return children.Item(0);
+    }
+    else
+    {
+         // Try a sibling of this or ancestor instead
+         wxTreeItemId p = item;
+         wxTreeItemId toFind;
+         do
+         {
+              toFind = GetNextSibling(p);
+              p = GetParent(p);
+         } while (p.IsOk() && !toFind.IsOk());
+         return toFind;
+    }
+}
+
+inline
+wxTreeItemId wxTreeListMainWindow::GetFirstVisibleItem() const
+{
+    wxTreeItemId id = GetRootItem();
+    if (!id.IsOk())
+        return id;
+
+    do
+    {
+        if (IsVisible(id))
+              return id;
+        id = GetNext(id);
+    } while (id.IsOk());
+
+    return wxTreeItemId();
+}
+
+inline
+wxTreeItemId wxTreeListMainWindow::GetNextVisible(const wxTreeItemId& item)
+    const
+{
+    wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
+
+    wxTreeItemId id = item;
+    if (id.IsOk())
+    {
+        while (id = GetNext(id), id.IsOk())
+        {
+            if (IsVisible(id))
+                return id;
+        }
+    }
+    return wxTreeItemId();
+}
+
+inline
+wxTreeItemId wxTreeListMainWindow::GetPrevVisible(const wxTreeItemId& item)
+    const
+{
+    wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
+
+    wxFAIL_MSG(wxT("not implemented"));
+
+    return wxTreeItemId();
+}
+
+// ----------------------------------------------------------------------------
+// operations
+// ----------------------------------------------------------------------------
+
+wxTreeItemId wxTreeListMainWindow::DoInsertItem(const wxTreeItemId& parentId,
+                                      size_t previous,
+                                      const wxString& text,
+                                      int image, int selImage,
+                                      wxTreeItemData *data)
+{
+    wxTreeListItem *parent = (wxTreeListItem*) parentId.m_pItem;
+    if ( !parent )
+    {
+        // should we give a warning here?
+        return AddRoot(text, image, selImage, data);
+    }
+
+    m_dirty = TRUE;     // do this first so stuff below doesn't cause flicker
+
+    // ALB
+    wxArrayString arr;
+    arr.Alloc(GetColumnCount());
+    for(size_t i = 0; i < GetColumnCount(); ++i) {
+        arr.Add(wxEmptyString);
+    }
+    arr[m_main_column] = text;
+    wxTreeListItem *item =
+        new wxTreeListItem( this, parent, arr, image, selImage, data );
+
+    if ( data != NULL )
+    {
+        data->SetId((long)item);
+    }
+
+    parent->Insert( item, previous );
+
+    return item;
+}
+
+wxTreeItemId wxTreeListMainWindow::AddRoot(const wxString& text,
+                                 int image, int selImage,
+                                 wxTreeItemData *data)
+{
+    wxCHECK_MSG(!m_anchor, wxTreeItemId(), wxT("tree can have only one root"));
+    wxCHECK_MSG(GetColumnCount(), wxTreeItemId(), wxT("Add column(s) before adding the root item"));
+
+    m_dirty = TRUE;     // do this first so stuff below doesn't cause flicker
+
+    // ALB
+    wxArrayString arr;
+    arr.Alloc(GetColumnCount());
+    for(size_t i = 0; i < GetColumnCount(); ++i) {
+        arr.Add(wxEmptyString);
+    }
+    arr[m_main_column] = text;
+    m_anchor = new wxTreeListItem( this, (wxTreeListItem *)NULL, arr,
+                                      image, selImage, data);
+    if (HasFlag(wxTR_HIDE_ROOT))
+    {
+        // if root is hidden, make sure we can navigate
+        // into children
+        m_anchor->SetHasPlus();
+        Expand(m_anchor);
+    }
+    if ( data != NULL )
+    {
+        data->SetId((long)m_anchor);
+    }
+
+    if (!HasFlag(wxTR_MULTIPLE))
+    {
+        m_current = m_key_current = m_anchor;
+        m_current->SetHilight( TRUE );
+    }
+
+    return m_anchor;
+}
+
+inline
+wxTreeItemId wxTreeListMainWindow::PrependItem(const wxTreeItemId& parent,
+                                     const wxString& text,
+                                     int image, int selImage,
+                                     wxTreeItemData *data)
+{
+    return DoInsertItem(parent, 0u, text, image, selImage, data);
+}
+
+inline
+wxTreeItemId wxTreeListMainWindow::InsertItem(const wxTreeItemId& parentId,
+                                    const wxTreeItemId& idPrevious,
+                                    const wxString& text,
+                                    int image, int selImage,
+                                    wxTreeItemData *data)
+{
+    wxTreeListItem *parent = (wxTreeListItem*) parentId.m_pItem;
+    if ( !parent )
+    {
+        // should we give a warning here?
+        return AddRoot(text, image, selImage, data);
+    }
+
+    int index = parent->GetChildren().Index((wxTreeListItem*) idPrevious.m_pItem);
+    wxASSERT_MSG( index != wxNOT_FOUND,
+                  wxT("previous item in wxTreeListMainWindow::InsertItem() is not a sibling") );
+
+    return DoInsertItem(parentId, (size_t)++index, text, image, selImage, data);
+}
+
+inline
+wxTreeItemId wxTreeListMainWindow::InsertItem(const wxTreeItemId& parentId,
+                                    size_t before,
+                                    const wxString& text,
+                                    int image, int selImage,
+                                    wxTreeItemData *data)
+{
+    wxTreeListItem *parent = (wxTreeListItem*) parentId.m_pItem;
+    if ( !parent )
+    {
+        // should we give a warning here?
+        return AddRoot(text, image, selImage, data);
+    }
+
+    return DoInsertItem(parentId, before, text, image, selImage, data);
+}
+
+inline
+wxTreeItemId wxTreeListMainWindow::AppendItem(const wxTreeItemId& parentId,
+                                    const wxString& text,
+                                    int image, int selImage,
+                                    wxTreeItemData *data)
+{
+    wxTreeListItem *parent = (wxTreeListItem*) parentId.m_pItem;
+    if ( !parent )
+    {
+        // should we give a warning here?
+        return AddRoot(text, image, selImage, data);
+    }
+
+    return DoInsertItem( parent, parent->GetChildren().Count(), text,
+                         image, selImage, data);
+}
+
+void wxTreeListMainWindow::SendDeleteEvent(wxTreeListItem *item)
+{
+    wxTreeEvent event( wxEVT_COMMAND_TREE_DELETE_ITEM, m_owner->GetId() );
+    event.SetItem((long) item);
+    event.SetEventObject( /*this*/m_owner );
+    m_owner->ProcessEvent( event );
+}
+
+inline
+void wxTreeListMainWindow::DeleteChildren(const wxTreeItemId& itemId)
+{
+    m_dirty = TRUE;     // do this first so stuff below doesn't cause flicker
+
+    wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
+    item->DeleteChildren(this);
+}
+
+inline
+void wxTreeListMainWindow::Delete(const wxTreeItemId& itemId)
+{
+    m_dirty = TRUE;     // do this first so stuff below doesn't cause flicker
+
+    wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
+
+    // don't stay with invalid m_key_current or we will crash in
+    // the next call to OnChar()
+    bool changeKeyCurrent = FALSE;
+    wxTreeListItem *itemKey = m_key_current;
+    while ( itemKey )
+    {
+        if ( itemKey == item )
+        {
+            // m_key_current is a descendant of the item being deleted
+            changeKeyCurrent = TRUE;
+            break;
+        }
+        itemKey = itemKey->GetParent();
+    }
+
+    wxTreeListItem *parent = item->GetParent();
+    if ( parent )
+    {
+        parent->GetChildren().Remove( item );  // remove by value
+    }
+
+    if ( changeKeyCurrent )
+    {
+        // may be NULL or not
+        m_key_current = parent;
+    }
+
+    item->DeleteChildren(this);
+    SendDeleteEvent(item);
+    delete item;
+}
+
+inline
+void wxTreeListMainWindow::DeleteAllItems()
+{
+    if ( m_anchor )
+    {
+        m_dirty = TRUE;
+
+        m_anchor->DeleteChildren(this);
+        delete m_anchor;
+
+        m_anchor = NULL;
+    }
+}
+
+void wxTreeListMainWindow::Expand(const wxTreeItemId& itemId)
+{
+    wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
+
+    wxCHECK_RET( item, _T("invalid item in wxTreeListMainWindow::Expand") );
+
+    if ( !item->HasPlus() )
+        return;
+
+    if ( item->IsExpanded() )
+        return;
+
+    wxTreeEvent event( wxEVT_COMMAND_TREE_ITEM_EXPANDING, m_owner->GetId() );
+    event.SetItem( (long) item );
+    event.SetEventObject( /*this*/m_owner );
+
+    if ( m_owner->ProcessEvent( event ) && !event.IsAllowed() )
+    {
+        // cancelled by program
+        return;
+    }
+
+    item->Expand();
+    CalculatePositions();
+
+    RefreshSubtree(item);
+
+    event.SetEventType(wxEVT_COMMAND_TREE_ITEM_EXPANDED);
+    ProcessEvent( event );
+}
+
+void wxTreeListMainWindow::ExpandAll(const wxTreeItemId& item)
+{
+    Expand(item);
+    if ( IsExpanded(item) )
+    {
+        long cookie;
+        wxTreeItemId child = GetFirstChild(item, cookie);
+        while ( child.IsOk() )
+        {
+            ExpandAll(child);
+
+            child = GetNextChild(item, cookie);
+        }
+    }
+}
+
+void wxTreeListMainWindow::Collapse(const wxTreeItemId& itemId)
+{
+    wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
+
+    if ( !item->IsExpanded() )
+        return;
+
+    wxTreeEvent event( wxEVT_COMMAND_TREE_ITEM_COLLAPSING, m_owner->GetId() );
+    event.SetItem( (long) item );
+    event.SetEventObject( /*this*/m_owner );
+    if ( m_owner->ProcessEvent( event ) && !event.IsAllowed() )
+    {
+        // cancelled by program
+        return;
+    }
+
+    item->Collapse();
+
+#if 0  // TODO why should items be collapsed recursively?
+    wxArrayTreeListItems& children = item->GetChildren();
+    size_t count = children.Count();
+    for ( size_t n = 0; n < count; n++ )
+    {
+        Collapse(children[n]);
+    }
+#endif
+
+    CalculatePositions();
+
+    RefreshSubtree(item);
+
+    event.SetEventType(wxEVT_COMMAND_TREE_ITEM_COLLAPSED);
+    ProcessEvent( event );
+}
+
+void wxTreeListMainWindow::CollapseAndReset(const wxTreeItemId& item)
+{
+    Collapse(item);
+    DeleteChildren(item);
+}
+
+void wxTreeListMainWindow::Toggle(const wxTreeItemId& itemId)
+{
+    wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
+
+    if (item->IsExpanded())
+        Collapse(itemId);
+    else
+        Expand(itemId);
+}
+
+void wxTreeListMainWindow::Unselect()
+{
+    if (m_current)
+    {
+        m_current->SetHilight( FALSE );
+        RefreshLine( m_current );
+    }
+}
+
+void wxTreeListMainWindow::UnselectAllChildren(wxTreeListItem *item)
+{
+    if (item->IsSelected())
+    {
+        item->SetHilight(FALSE);
+        RefreshLine(item);
+    }
+
+    if (item->HasChildren())
+    {
+        wxArrayTreeListItems& children = item->GetChildren();
+        size_t count = children.Count();
+        for ( size_t n = 0; n < count; ++n )
+        {
+            UnselectAllChildren(children[n]);
+        }
+    }
+}
+
+void wxTreeListMainWindow::UnselectAll()
+{
+    UnselectAllChildren((wxTreeListItem*) GetRootItem().m_pItem);
+}
+
+// Recursive function !
+// To stop we must have crt_item<last_item
+// Algorithm :
+// Tag all next children, when no more children,
+// Move to parent (not to tag)
+// Keep going... if we found last_item, we stop.
+bool wxTreeListMainWindow::TagNextChildren(wxTreeListItem *crt_item, wxTreeListItem *last_item, bool select)
+{
+    wxTreeListItem *parent = crt_item->GetParent();
+
+    if (parent == NULL) // This is root item
+        return TagAllChildrenUntilLast(crt_item, last_item, select);
+
+    wxArrayTreeListItems& children = parent->GetChildren();
+    int index = children.Index(crt_item);
+    wxASSERT( index != wxNOT_FOUND ); // I'm not a child of my parent?
+
+    size_t count = children.Count();
+    for (size_t n=(size_t)(index+1); n<count; ++n)
+    {
+        if (TagAllChildrenUntilLast(children[n], last_item, select)) return TRUE;
+    }
+
+    return TagNextChildren(parent, last_item, select);
+}
+
+bool wxTreeListMainWindow::TagAllChildrenUntilLast(wxTreeListItem *crt_item, wxTreeListItem *last_item, bool select)
+{
+    crt_item->SetHilight(select);
+    RefreshLine(crt_item);
+
+    if (crt_item==last_item)
+        return TRUE;
+
+    if (crt_item->HasChildren())
+    {
+        wxArrayTreeListItems& children = crt_item->GetChildren();
+        size_t count = children.Count();
+        for ( size_t n = 0; n < count; ++n )
+        {
+            if (TagAllChildrenUntilLast(children[n], last_item, select))
+                return TRUE;
+        }
+    }
+
+  return FALSE;
+}
+
+void wxTreeListMainWindow::SelectItemRange(wxTreeListItem *item1, wxTreeListItem *item2)
+{
+    // item2 is not necessary after item1
+    wxTreeListItem *first=NULL, *last=NULL;
+
+    // choice first' and 'last' between item1 and item2
+    if (item1->GetY()<item2->GetY())
+    {
+        first=item1;
+        last=item2;
+    }
+    else
+    {
+        first=item2;
+        last=item1;
+    }
+
+    bool select = m_current->IsSelected();
+
+    if ( TagAllChildrenUntilLast(first,last,select) )
+        return;
+
+    TagNextChildren(first,last,select);
+}
+
+void wxTreeListMainWindow::SelectItem(const wxTreeItemId& itemId,
+                            bool unselect_others,
+                            bool extended_select)
+{
+    wxCHECK_RET( itemId.IsOk(), wxT("invalid tree item") );
+
+    bool is_single=!(GetWindowStyleFlag() & wxTR_MULTIPLE);
+    wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
+
+    //wxCHECK_RET( ( (!unselect_others) && is_single),
+    //           wxT("this is a single selection tree") );
+
+    // to keep going anyhow !!!
+    if (is_single)
+    {
+        if (item->IsSelected())
+            return; // nothing to do
+        unselect_others = TRUE;
+        extended_select = FALSE;
+    }
+    else if ( unselect_others && item->IsSelected() )
+    {
+        // selection change if there is more than one item currently selected
+        wxArrayTreeItemIds selected_items;
+        if ( GetSelections(selected_items) == 1 )
+            return;
+    }
+
+    wxTreeEvent event( wxEVT_COMMAND_TREE_SEL_CHANGING, m_owner->GetId() );
+    event.SetItem( (long) item );
+    event.SetOldItem( (long) m_current );
+    event.SetEventObject( /*this*/m_owner );
+    // TODO : Here we don't send any selection mode yet !
+
+    if(m_owner->GetEventHandler()->ProcessEvent( event ) && !event.IsAllowed())
+        return;
+
+    wxTreeItemId parent = GetParent( itemId );
+    while (parent.IsOk())
+    {
+        if (!IsExpanded(parent))
+            Expand( parent );
+
+        parent = GetParent( parent );
+    }
+
+    EnsureVisible( itemId );
+
+    // ctrl press
+    if (unselect_others)
+    {
+        if (is_single) Unselect(); // to speed up thing
+        else UnselectAll();
+    }
+
+    // shift press
+    if (extended_select)
+    {
+        if ( !m_current )
+        {
+            m_current = m_key_current = (wxTreeListItem*) GetRootItem().m_pItem;
+        }
+
+        // don't change the mark (m_current)
+        SelectItemRange(m_current, item);
+    }
+    else
+    {
+        bool select=TRUE; // the default
+
+        // Check if we need to toggle hilight (ctrl mode)
+        if (!unselect_others)
+            select=!item->IsSelected();
+
+        m_current = m_key_current = item;
+        m_current->SetHilight(select);
+        RefreshLine( m_current );
+    }
+
+    event.SetEventType(wxEVT_COMMAND_TREE_SEL_CHANGED);
+    GetEventHandler()->ProcessEvent( event );
+}
+
+void wxTreeListMainWindow::FillArray(wxTreeListItem *item,
+                           wxArrayTreeItemIds &array) const
+{
+    if ( item->IsSelected() )
+        array.Add(wxTreeItemId(item));
+
+    if ( item->HasChildren() )
+    {
+        wxArrayTreeListItems& children = item->GetChildren();
+        size_t count = children.GetCount();
+        for ( size_t n = 0; n < count; ++n )
+            FillArray(children[n], array);
+    }
+}
+
+size_t wxTreeListMainWindow::GetSelections(wxArrayTreeItemIds &array) const
+{
+    array.Empty();
+    wxTreeItemId idRoot = GetRootItem();
+    if ( idRoot.IsOk() )
+    {
+        FillArray((wxTreeListItem*) idRoot.m_pItem, array);
+    }
+    //else: the tree is empty, so no selections
+
+    return array.Count();
+}
+
+void wxTreeListMainWindow::EnsureVisible(const wxTreeItemId& item)
+{
+    if (!item.IsOk()) return;
+
+    wxTreeListItem *gitem = (wxTreeListItem*) item.m_pItem;
+
+    // first expand all parent branches
+    wxTreeListItem *parent = gitem->GetParent();
+    while ( parent )
+    {
+        Expand(parent);
+        parent = parent->GetParent();
+    }
+
+    //if (parent) CalculatePositions();
+
+    ScrollTo(item);
+}
+
+void wxTreeListMainWindow::ScrollTo(const wxTreeItemId &item)
+{
+    if (!item.IsOk()) return;
+
+    // We have to call this here because the label in
+    // question might just have been added and no screen
+    // update taken place.
+    if (m_dirty) wxYieldIfNeeded();
+
+    wxTreeListItem *gitem = (wxTreeListItem*) item.m_pItem;
+
+    // now scroll to the item
+    int item_y = gitem->GetY();
+
+    int start_x = 0;
+    int start_y = 0;
+    GetViewStart( &start_x, &start_y );
+    start_y *= PIXELS_PER_UNIT;
+
+    int client_h = 0;
+    int client_w = 0;
+    GetClientSize( &client_w, &client_h );
+
+    if (item_y < start_y+3)
+    {
+        // going down
+        int x = 0;
+        int y = 0;
+        m_anchor->GetSize( x, y, this );
+        x = m_owner->GetHeaderWindow()->GetWidth(); //m_total_col_width; // ALB
+        y += PIXELS_PER_UNIT+2; // one more scrollbar unit + 2 pixels
+        //x += PIXELS_PER_UNIT+2; // one more scrollbar unit + 2 pixels
+        int x_pos = GetScrollPos( wxHORIZONTAL );
+        // Item should appear at top
+        SetScrollbars( PIXELS_PER_UNIT, PIXELS_PER_UNIT, x/PIXELS_PER_UNIT, y/PIXELS_PER_UNIT, x_pos, item_y/PIXELS_PER_UNIT );
+    }
+    else if (item_y+GetLineHeight(gitem) > start_y+client_h)
+    {
+        // going up
+        int x = 0;
+        int y = 0;
+        m_anchor->GetSize( x, y, this );
+        y += PIXELS_PER_UNIT+2; // one more scrollbar unit + 2 pixels
+        //x += PIXELS_PER_UNIT+2; // one more scrollbar unit + 2 pixels
+        x = m_owner->GetHeaderWindow()->GetWidth(); //m_total_col_width; // ALB
+        item_y += PIXELS_PER_UNIT+2;
+        int x_pos = GetScrollPos( wxHORIZONTAL );
+        // Item should appear at bottom
+        SetScrollbars( PIXELS_PER_UNIT, PIXELS_PER_UNIT, x/PIXELS_PER_UNIT, y/PIXELS_PER_UNIT, x_pos, (item_y+GetLineHeight(gitem)-client_h)/PIXELS_PER_UNIT );
+    }
+}
+
+// FIXME: tree sorting functions are not reentrant and not MT-safe!
+static wxTreeListMainWindow *s_treeBeingSorted = NULL;
+
+static int LINKAGEMODE tree_ctrl_compare_func(wxTreeListItem **item1,
+                                  wxTreeListItem **item2)
+{
+    wxCHECK_MSG( s_treeBeingSorted, 0, wxT("bug in wxTreeListMainWindow::SortChildren()") );
+
+    return s_treeBeingSorted->OnCompareItems(*item1, *item2);
+}
+
+int wxTreeListMainWindow::OnCompareItems(const wxTreeItemId& item1,
+                               const wxTreeItemId& item2)
+{
+    // ALB: delegate to m_owner, to let the user overrride the comparison
+    //return wxStrcmp(GetItemText(item1), GetItemText(item2));
+    return m_owner->OnCompareItems(item1, item2);
+}
+
+void wxTreeListMainWindow::SortChildren(const wxTreeItemId& itemId)
+{
+    wxCHECK_RET( itemId.IsOk(), wxT("invalid tree item") );
+
+    wxTreeListItem *item = (wxTreeListItem*) itemId.m_pItem;
+
+    wxCHECK_RET( !s_treeBeingSorted,
+                 wxT("wxTreeListMainWindow::SortChildren is not reentrant") );
+
+    wxArrayTreeListItems& children = item->GetChildren();
+    if ( children.Count() > 1 )
+    {
+        m_dirty = TRUE;
+
+        s_treeBeingSorted = this;
+        children.Sort(tree_ctrl_compare_func);
+        s_treeBeingSorted = NULL;
+    }
+    //else: don't make the tree dirty as nothing changed
+}
+
+inline
+wxImageList *wxTreeListMainWindow::GetImageList() const
+{
+    return m_imageListNormal;
+}
+
+inline
+wxImageList *wxTreeListMainWindow::GetButtonsImageList() const
+{
+    return m_imageListButtons;
+}
+
+inline
+wxImageList *wxTreeListMainWindow::GetStateImageList() const
+{
+    return m_imageListState;
+}
+
+void wxTreeListMainWindow::CalculateLineHeight()
+{
+    wxClientDC dc(this);
+    m_lineHeight = (int)(dc.GetCharHeight() + m_linespacing*2);
+
+    if ( m_imageListNormal )
+    {
+        // Calculate a m_lineHeight value from the normal Image sizes.
+        // May be toggle off. Then wxTreeListMainWindow will spread when
+        // necessary (which might look ugly).
+        int n = m_imageListNormal->GetImageCount();
+        for (int i = 0; i < n ; i++)
+        {
+            int width = 0, height = 0;
+            m_imageListNormal->GetSize(i, width, height);
+            if (height > m_lineHeight) m_lineHeight = height;
+        }
+    }
+
+    if (m_imageListButtons)
+    {
+        // Calculate a m_lineHeight value from the Button image sizes.
+        // May be toggle off. Then wxTreeListMainWindow will spread when
+        // necessary (which might look ugly).
+        int n = m_imageListButtons->GetImageCount();
+        for (int i = 0; i < n ; i++)
+        {
+            int width = 0, height = 0;
+            m_imageListButtons->GetSize(i, width, height);
+            if (height > m_lineHeight) m_lineHeight = height;
+        }
+    }
+
+    if (m_lineHeight < 30)
+        m_lineHeight += 2;                 // at least 2 pixels
+    else
+        m_lineHeight += m_lineHeight/10;   // otherwise 10% extra spacing
+}
+
+inline
+void wxTreeListMainWindow::SetImageList(wxImageList *imageList)
+{
+    if (m_ownsImageListNormal) delete m_imageListNormal;
+    m_imageListNormal = imageList;
+    m_ownsImageListNormal = FALSE;
+    m_dirty = TRUE;
+    CalculateLineHeight();
+}
+
+inline
+void wxTreeListMainWindow::SetStateImageList(wxImageList *imageList)
+{
+    if (m_ownsImageListState) delete m_imageListState;
+    m_imageListState = imageList;
+    m_ownsImageListState = FALSE;
+}
+
+inline
+void wxTreeListMainWindow::SetButtonsImageList(wxImageList *imageList)
+{
+    if (m_ownsImageListButtons) delete m_imageListButtons;
+    m_imageListButtons = imageList;
+    m_ownsImageListButtons = FALSE;
+    m_dirty = TRUE;
+    CalculateLineHeight();
+}
+
+inline
+void wxTreeListMainWindow::AssignImageList(wxImageList *imageList)
+{
+    SetImageList(imageList);
+    m_ownsImageListNormal = TRUE;
+}
+
+inline
+void wxTreeListMainWindow::AssignStateImageList(wxImageList *imageList)
+{
+    SetStateImageList(imageList);
+    m_ownsImageListState = TRUE;
+}
+
+inline
+void wxTreeListMainWindow::AssignButtonsImageList(wxImageList *imageList)
+{
+    SetButtonsImageList(imageList);
+    m_ownsImageListButtons = TRUE;
+}
+
+// ----------------------------------------------------------------------------
+// helpers
+// ----------------------------------------------------------------------------
+
+void wxTreeListMainWindow::AdjustMyScrollbars()
+{
+    if (m_anchor)
+    {
+        int x = 0, y = 0;
+        m_anchor->GetSize( x, y, this );
+        y += PIXELS_PER_UNIT+2; // one more scrollbar unit + 2 pixels
+        //x += PIXELS_PER_UNIT+2; // one more scrollbar unit + 2 pixels
+        int x_pos = GetScrollPos( wxHORIZONTAL );
+        int y_pos = GetScrollPos( wxVERTICAL );
+        x = m_owner->GetHeaderWindow()->GetWidth() + 2;
+        if(x < GetClientSize().GetWidth()) x_pos = 0;
+        //m_total_col_width + 2; // ALB
+        SetScrollbars( PIXELS_PER_UNIT, PIXELS_PER_UNIT, x/PIXELS_PER_UNIT,
+                       y/PIXELS_PER_UNIT, x_pos, y_pos );
+    }
+    else
+    {
+        SetScrollbars( 0, 0, 0, 0 );
+    }
+}
+
+int wxTreeListMainWindow::GetLineHeight(wxTreeListItem *item) const
+{
+    if (GetWindowStyleFlag() & wxTR_HAS_VARIABLE_ROW_HEIGHT)
+        return item->GetHeight();
+    else
+        return m_lineHeight;
+}
+
+void wxTreeListMainWindow::PaintItem(wxTreeListItem *item, wxDC& dc)
+{
+    // TODO implement "state" icon on items
+
+    wxTreeItemAttr *attr = item->GetAttributes();
+    if ( attr && attr->HasFont() )
+        dc.SetFont(attr->GetFont());
+    else if (item->IsBold())
+        dc.SetFont(m_boldFont);
+
+    long text_w = 0, text_h = 0;
+
+    dc.GetTextExtent( item->GetText(GetMainColumn()), &text_w, &text_h );
+
+    int total_h = GetLineHeight(item);
+
+    if ( item->IsSelected() )
+    {
+        dc.SetBrush(*(m_hasFocus ? m_hilightBrush : m_hilightUnfocusedBrush));
+    }
+    else
+    {
+        wxColour colBg;
+        if ( attr && attr->HasBackgroundColour() )
+            colBg = attr->GetBackgroundColour();
+        else
+            colBg = m_backgroundColour;
+        dc.SetBrush(wxBrush(colBg, wxSOLID));
+    }
+
+    int offset = HasFlag(wxTR_ROW_LINES) ? 1 : 0;
+
+    dc.DrawRectangle(0, item->GetY()+offset,
+                     m_owner->GetHeaderWindow()->GetWidth(),
+                     total_h-offset);
+
+    dc.SetBackgroundMode(wxTRANSPARENT);
+    int extraH = (total_h > text_h) ? (total_h - text_h)/2 : 0;
+    int extra_offset = 0;
+    for(size_t i = 0; i < GetColumnCount(); ++i) {
+        int coord_x = extra_offset, image_x = coord_x;
+        int clip_width = m_owner->GetHeaderWindow()->GetColumnWidth(i);
+        int image_h = 0, image_w = 0; //2;
+        int image = NO_IMAGE;
+
+        if(i == GetMainColumn()) {
+            image = item->GetCurrentImage();
+            coord_x = item->GetX();
+        }
+        else {
+            image = item->GetImage(i);
+        }
+
+        if(image != NO_IMAGE) {
+            if(m_imageListNormal) {
+                m_imageListNormal->GetSize( image, image_w, image_h );
+                image_w += 4;
+            }
+            else {
+                image = NO_IMAGE;
+            }
+        }
+
+        // honor text alignment
+        wxString text = item->GetText(i);
+
+        switch(m_owner->GetHeaderWindow()->GetColumn(i).GetAlignment()) {
+        case wxTL_ALIGN_LEFT:
+            coord_x += image_w + 2;
+            image_x = coord_x - image_w;
+            break;
+        case wxTL_ALIGN_RIGHT:
+            dc.GetTextExtent(text, &text_w, NULL);
+            coord_x += clip_width - text_w - image_w - 2;
+            image_x = coord_x - image_w;
+            break;
+        case wxTL_ALIGN_CENTER:
+            dc.GetTextExtent(text, &text_w, NULL);
+            //coord_x += (clip_width - text_w)/2 + image_w;
+            image_x += (clip_width - text_w - image_w)/2 + 2;
+            coord_x = image_x + image_w;
+        }
+
+        wxDCClipper clipper(dc, /*coord_x,*/ extra_offset,
+                            item->GetY() + extraH, clip_width,
+                            total_h);
+
+        if(image != NO_IMAGE) {
+            m_imageListNormal->Draw( image, dc, image_x,
+                                     item->GetY() +((total_h > image_h)?
+                                                    ((total_h-image_h)/2):0),
+                                     wxIMAGELIST_DRAW_TRANSPARENT );
+        }
+
+        dc.DrawText( text,
+                     (wxCoord)(coord_x /*image_w + item->GetX()*/),
+                     (wxCoord)(item->GetY() + extraH));
+        extra_offset += m_owner->GetHeaderWindow()->GetColumnWidth(i);
+    }
+
+    // restore normal font
+    dc.SetFont( m_normalFont );
+}
+
+// Now y stands for the top of the item, whereas it used to stand for middle !
+void wxTreeListMainWindow::PaintLevel( wxTreeListItem *item, wxDC &dc,
+                                    int level, int &y, int x_offset )
+{
+    int x = level*m_indent + x_offset;
+    if (!HasFlag(wxTR_HIDE_ROOT))
+    {
+        x += m_indent;
+    }
+    else if (level == 0)
+    {
+        // always expand hidden root
+        int origY = y;
+        wxArrayTreeListItems& children = item->GetChildren();
+        int count = children.Count();
+        if (count > 0)
+        {
+            int n = 0, oldY;
+            do {
+                oldY = y;
+                PaintLevel(children[n], dc, 1, y, x_offset);
+            } while (++n < count);
+
+            if (!HasFlag(wxTR_NO_LINES) && HasFlag(wxTR_LINES_AT_ROOT) &&
+                count > 0)
+            {
+                // draw line down to last child
+                origY += GetLineHeight(children[0])>>1;
+                oldY += GetLineHeight(children[n-1])>>1;
+                dc.DrawLine(3, origY, 3, oldY);
+            }
+        }
+        return;
+    }
+
+    item->SetX(x+m_spacing);
+    item->SetY(y);
+
+    int h = GetLineHeight(item);
+    int y_top = y;
+    int y_mid = y_top + (h>>1);
+    y += h;
+
+    int exposed_x = dc.LogicalToDeviceX(0);
+    int exposed_y = dc.LogicalToDeviceY(y_top);
+
+    if (IsExposed(exposed_x, exposed_y, 10000, h))  // 10000 = very much
+    {
+        wxPen *pen =
+#ifndef __WXMAC__
+            // don't draw rect outline if we already have the
+            // background color under Mac
+            (item->IsSelected() && m_hasFocus) ? wxBLACK_PEN :
+#endif // !__WXMAC__
+            wxTRANSPARENT_PEN;
+
+        wxColour colText;
+        if ( item->IsSelected() )
+        {
+            colText = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_HIGHLIGHTTEXT);
+        }
+        else
+        {
+            wxTreeItemAttr *attr = item->GetAttributes();
+            if (attr && attr->HasTextColour())
+                colText = attr->GetTextColour();
+            else
+                //colText = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOWTEXT);
+                colText = GetForegroundColour();
+        }
+
+        // prepare to draw
+        dc.SetTextForeground(colText);
+        dc.SetPen(*pen);
+
+        // draw
+        PaintItem(item, dc);
+
+        if (HasFlag(wxTR_ROW_LINES))
+        {
+            int total_width = m_owner->GetHeaderWindow()->GetWidth();
+            // if the background colour is white, choose a
+            // contrasting color for the lines
+            dc.SetPen(*((GetBackgroundColour() == *wxWHITE)
+                         ? wxMEDIUM_GREY_PEN : wxWHITE_PEN));
+            dc.DrawLine(0, y_top, total_width, y_top);
+            dc.DrawLine(0, y, total_width, y);
+        }
+
+        // restore DC objects
+        dc.SetBrush(*wxWHITE_BRUSH);
+        dc.SetPen(m_dottedPen);
+        dc.SetTextForeground(*wxBLACK);
+
+        size_t clip_width = m_owner->GetHeaderWindow()->GetColumn(
+            m_main_column).GetWidth();
+            //m_columns[m_main_column].GetWidth();
+        if (item->HasPlus() && HasButtons())  // should the item show a button?
+        {
+            // clip to the column width
+            wxDCClipper clipper(dc, x_offset, y_top, clip_width, 10000);
+
+            if (!HasFlag(wxTR_NO_LINES))
+            {
+                if (x > (signed)m_indent)
+                    dc.DrawLine(x - m_indent, y_mid, x - 5, y_mid);
+                else if (HasFlag(wxTR_LINES_AT_ROOT))
+                    dc.DrawLine(3, y_mid, x - 5, y_mid);
+                dc.DrawLine(x + 5, y_mid, x + m_spacing, y_mid);
+            }
+
+            if (m_imageListButtons != NULL)
+            {
+                // draw the image button here
+                int image_h = 0, image_w = 0, image = wxTreeItemIcon_Normal;
+                if (item->IsExpanded()) image = wxTreeItemIcon_Expanded;
+                if (item->IsSelected())
+                    image += wxTreeItemIcon_Selected - wxTreeItemIcon_Normal;
+                m_imageListButtons->GetSize(image, image_w, image_h);
+                int xx = x - (image_w>>1);
+                int yy = y_mid - (image_h>>1);
+                dc.SetClippingRegion(xx, yy, image_w, image_h);
+                m_imageListButtons->Draw(image, dc, xx, yy,
+                                         wxIMAGELIST_DRAW_TRANSPARENT);
+                dc.DestroyClippingRegion();
+            }
+            else if (HasFlag(wxTR_TWIST_BUTTONS))
+            {
+                // draw the twisty button here
+                dc.SetPen(*wxBLACK_PEN);
+                dc.SetBrush(*m_hilightBrush);
+
+                wxPoint button[3];
+
+                if (item->IsExpanded())
+                {
+                    button[0].x = x-5;
+                    button[0].y = y_mid-2;
+                    button[1].x = x+5;
+                    button[1].y = y_mid-2;
+                    button[2].x = x;
+                    button[2].y = y_mid+3;
+                }
+                else
+                {
+                    button[0].y = y_mid-5;
+                    button[0].x = x-2;
+                    button[1].y = y_mid+5;
+                    button[1].x = x-2;
+                    button[2].y = y_mid;
+                    button[2].x = x+3;
+                }
+                dc.DrawPolygon(3, button);
+
+                dc.SetPen(m_dottedPen);
+            }
+            else // if (HasFlag(wxTR_HAS_BUTTONS))
+            {
+                // draw the plus sign here
+                dc.SetPen(*wxGREY_PEN);
+                dc.SetBrush(*wxWHITE_BRUSH);
+                dc.DrawRectangle(x-5, y_mid-4, 11, 9);
+                dc.SetPen(*wxBLACK_PEN);
+                dc.DrawLine(x-2, y_mid, x+3, y_mid);
+                if (!item->IsExpanded())
+                    dc.DrawLine(x, y_mid-2, x, y_mid+3);
+                dc.SetPen(m_dottedPen);
+            }
+        }
+        else if (!HasFlag(wxTR_NO_LINES))  // no button; maybe a line?
+        {
+            // clip to the column width
+            wxDCClipper clipper(dc, x_offset, y_top, clip_width, 10000);
+            // draw the horizontal line here
+            int x_start = x;
+            if (x > (signed)m_indent)
+                x_start -= m_indent;
+            else if (HasFlag(wxTR_LINES_AT_ROOT))
+                x_start = 3;
+            dc.DrawLine(x_start, y_mid, x + m_spacing, y_mid);
+        }
+    }
+
+    if (item->IsExpanded())
+    {
+        wxArrayTreeListItems& children = item->GetChildren();
+        int count = children.Count();
+        if (count > 0)
+        {
+            int n = 0, oldY;
+            ++level;
+            do {
+                oldY = y;
+                PaintLevel(children[n], dc, level, y, x_offset);
+            } while (++n < count);
+
+            if (!HasFlag(wxTR_NO_LINES) && count > 0)
+            {
+                size_t clip_width = m_owner->GetHeaderWindow()->GetColumn(
+                    m_main_column).GetWidth();
+                    //m_columns[m_main_column].GetWidth();
+                // clip to the column width
+                wxDCClipper clipper(dc, x_offset, y_top, clip_width, 10000);
+                // draw line down to last child
+                oldY += GetLineHeight(children[n-1])>>1;
+                if (HasButtons()) y_mid += 5;
+                dc.DrawLine(x, y_mid, x, oldY);
+            }
+        }
+    }
+}
+
+void wxTreeListMainWindow::DrawDropEffect(wxTreeListItem *item)
+{
+    if ( item )
+    {
+        if ( item->HasPlus() )
+        {
+            // it's a folder, indicate it by a border
+            DrawBorder(item);
+        }
+        else
+        {
+            // draw a line under the drop target because the item will be
+            // dropped there
+            DrawLine(item, TRUE /* below */);
+        }
+
+        SetCursor(wxCURSOR_BULLSEYE);
+    }
+    else
+    {
+        // can't drop here
+        SetCursor(wxCURSOR_NO_ENTRY);
+    }
+}
+
+void wxTreeListMainWindow::DrawBorder(const wxTreeItemId &item)
+{
+    wxCHECK_RET( item.IsOk(), _T("invalid item in wxTreeListMainWindow::DrawLine") );
+
+    wxTreeListItem *i = (wxTreeListItem*) item.m_pItem;
+
+    wxClientDC dc(this);
+    PrepareDC( dc );
+    dc.SetLogicalFunction(wxINVERT);
+    dc.SetBrush(*wxTRANSPARENT_BRUSH);
+
+    int w = i->GetWidth() + 2;
+    int h = GetLineHeight(i) + 2;
+
+    dc.DrawRectangle( i->GetX() - 1, i->GetY() - 1, w, h);
+}
+
+void wxTreeListMainWindow::DrawLine(const wxTreeItemId &item, bool below)
+{
+    wxCHECK_RET( item.IsOk(), _T("invalid item in wxTreeListMainWindow::DrawLine") );
+
+    wxTreeListItem *i = (wxTreeListItem*) item.m_pItem;
+
+    wxClientDC dc(this);
+    PrepareDC( dc );
+    dc.SetLogicalFunction(wxINVERT);
+
+    int x = i->GetX(),
+        y = i->GetY();
+    if ( below )
+    {
+        y += GetLineHeight(i) - 1;
+    }
+
+    dc.DrawLine( x, y, x + i->GetWidth(), y);
+}
+
+// ----------------------------------------------------------------------------
+// wxWindows callbacks
+// ----------------------------------------------------------------------------
+
+void wxTreeListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
+{
+    wxPaintDC dc(this);
+
+    PrepareDC( dc );
+
+    if(!GetColumnCount()) return; // ALB
+
+    if ( !m_anchor)
+        return;
+
+    dc.SetFont( m_normalFont );
+    dc.SetPen( m_dottedPen );
+
+    // this is now done dynamically
+    //if(GetImageList() == NULL)
+    // m_lineHeight = (int)(dc.GetCharHeight() + 4);
+
+    int y = 0; //HEADER_HEIGHT; //2;
+    int x_offset = 0;
+    for(size_t i = 0; i < GetMainColumn(); ++i) {
+        x_offset += m_owner->GetHeaderWindow()->GetColumnWidth(i);
+    }
+    PaintLevel( m_anchor, dc, 0, y, x_offset );
+}
+
+void wxTreeListMainWindow::OnSetFocus( wxFocusEvent &event )
+{
+    m_hasFocus = TRUE;
+
+    RefreshSelected();
+
+    event.Skip();
+}
+
+void wxTreeListMainWindow::OnKillFocus( wxFocusEvent &event )
+{
+    m_hasFocus = FALSE;
+
+    RefreshSelected();
+
+    event.Skip();
+}
+
+void wxTreeListMainWindow::OnChar( wxKeyEvent &event )
+{
+    wxTreeEvent te( wxEVT_COMMAND_TREE_KEY_DOWN, m_owner->GetId() );
+    te.SetKeyEvent( event );
+    te.SetEventObject( /*this*/m_owner );
+    if ( m_owner->GetEventHandler()->ProcessEvent( te ) )
+    {
+        // intercepted by the user code
+        return;
+    }
+
+    if ( (m_current == 0) || (m_key_current == 0) )
+    {
+        event.Skip();
+        return;
+    }
+
+    // how should the selection work for this event?
+    bool is_multiple, extended_select, unselect_others;
+    EventFlagsToSelType(GetWindowStyleFlag(),
+                        event.ShiftDown(),
+                        event.ControlDown(),
+                        is_multiple, extended_select, unselect_others);
+
+    // + : Expand (not on Win32)
+    // - : Collaspe (not on Win32)
+    // * : Expand all/Collapse all
+    // ' ' | return : activate
+    // up    : go up (not last children!)
+    // down  : go down
+    // left  : go to parent (or collapse on Win32)
+    // right : open if parent and go next (or expand on Win32)
+    // home  : go to root
+    // end   : go to last item without opening parents
+    switch (event.KeyCode())
+    {
+#ifndef __WXMSW__ // mimic the standard win32 tree ctrl
+        case '+':
+        case WXK_ADD:
+            if (m_current->HasPlus() && !IsExpanded(m_current))
+            {
+                Expand(m_current);
+            }
+            break;
+#endif // __WXMSW__
+
+        case '*':
+        case WXK_MULTIPLY:
+            if ( !IsExpanded(m_current) )
+            {
+                // expand all
+                ExpandAll(m_current);
+                break;
+            }
+            //else: fall through to Collapse() it
+
+#ifndef __WXMSW__ // mimic the standard wxTreeCtrl behaviour
+        case '-':
+        case WXK_SUBTRACT:
+            if (IsExpanded(m_current))
+            {
+                Collapse(m_current);
+            }
+            break;
+#endif // __WXMSW__
+
+        case ' ':
+        case WXK_RETURN:
+            {
+                wxTreeEvent event( wxEVT_COMMAND_TREE_ITEM_ACTIVATED,
+                                   m_owner->GetId() );
+                event.SetItem( (long) m_current);
+                event.SetEventObject( /*this*/m_owner );
+                m_owner->GetEventHandler()->ProcessEvent( event );
+            }
+            break;
+
+            // up goes to the previous sibling or to the last
+            // of its children if it's expanded
+        case WXK_UP:
+            {
+                wxTreeItemId prev = GetPrevSibling( m_key_current );
+                if (!prev)
+                {
+                    prev = GetParent( m_key_current );
+                    if ((prev == GetRootItem()) && HasFlag(wxTR_HIDE_ROOT))
+                    {
+                        break;  // don't go to root if it is hidden
+                    }
+                    if (prev)
+                    {
+                        long cookie = 0;
+                        wxTreeItemId current = m_key_current;
+                        // TODO: Huh?  If we get here, we'd better be the first child of our parent.  How else could it be?
+                        if (current == GetFirstChild( prev, cookie ))
+                        {
+                            // otherwise we return to where we came from
+                            SelectItem( prev, unselect_others, extended_select );
+                            m_key_current= (wxTreeListItem*) prev.m_pItem;
+                            EnsureVisible( prev );
+                            break;
+                        }
+                    }
+                }
+                if (prev)
+                {
+                    while ( IsExpanded(prev) && HasChildren(prev) )
+                    {
+                        wxTreeItemId child = GetLastChild(prev);
+                        if ( child )
+                        {
+                            prev = child;
+                        }
+                    }
+
+                    SelectItem( prev, unselect_others, extended_select );
+                    m_key_current=(wxTreeListItem*) prev.m_pItem;
+                    EnsureVisible( prev );
+                }
+            }
+            break;
+
+            // left arrow goes to the parent
+        case WXK_LEFT:
+#if defined(__WXMSW__) // mimic the standard win32 tree ctrl
+            if (IsExpanded(m_current))
+            {
+                Collapse(m_current);
+            }
+            else
+#endif // __WXMSW__
+            {
+                wxTreeItemId prev = GetParent( m_current );
+                if ((prev == GetRootItem()) && HasFlag(wxTR_HIDE_ROOT))
+                {
+                    // don't go to root if it is hidden
+                    prev = GetPrevSibling( m_current );
+                }
+                if (prev)
+                {
+                    EnsureVisible( prev );
+                    SelectItem( prev, unselect_others, extended_select );
+                }
+            }
+            break;
+
+        case WXK_RIGHT:
+#if defined(__WXMSW__) // mimic the standard win32 tree ctrl
+            if (m_current->HasPlus() && !IsExpanded(m_current))
+            {
+                Expand(m_current);
+                break;
+            }
+#endif // __WXMSW__
+
+            // this works the same as the down arrow except that we
+            // also expand the item if it wasn't expanded yet
+            Expand(m_current);
+            // fall through
+
+        case WXK_DOWN:
+            {
+                if (IsExpanded(m_key_current) && HasChildren(m_key_current))
+                {
+                    long cookie = 0;
+                    wxTreeItemId child = GetFirstChild( m_key_current, cookie );
+                    SelectItem( child, unselect_others, extended_select );
+                    m_key_current=(wxTreeListItem*) child.m_pItem;
+                    EnsureVisible( child );
+                }
+                else
+                {
+                    wxTreeItemId next = GetNextSibling( m_key_current );
+                    if (!next)
+                    {
+                        wxTreeItemId current = m_key_current;
+                        while (current && !next)
+                        {
+                            current = GetParent( current );
+                            if (current) next = GetNextSibling( current );
+                        }
+                    }
+                    if (next)
+                    {
+                        SelectItem( next, unselect_others, extended_select );
+                        m_key_current=(wxTreeListItem*) next.m_pItem;
+                        EnsureVisible( next );
+                    }
+                }
+            }
+            break;
+
+            // <End> selects the last visible tree item
+        case WXK_END:
+            {
+                wxTreeItemId last = GetRootItem();
+
+                while ( last.IsOk() && IsExpanded(last) )
+                {
+                    wxTreeItemId lastChild = GetLastChild(last);
+
+                    // it may happen if the item was expanded but then all of
+                    // its children have been deleted - so IsExpanded() returned
+                    // TRUE, but GetLastChild() returned invalid item
+                    if ( !lastChild )
+                        break;
+
+                    last = lastChild;
+                }
+
+                if ( last.IsOk() )
+                {
+                    EnsureVisible( last );
+                    SelectItem( last, unselect_others, extended_select );
+                }
+            }
+            break;
+
+            // <Home> selects the root item
+        case WXK_HOME:
+            {
+                wxTreeItemId prev = GetRootItem();
+                if (!prev) break;
+                if (HasFlag(wxTR_HIDE_ROOT))
+                {
+                    long dummy;
+                    prev = GetFirstChild(prev, dummy);
+                    if (!prev) break;
+                }
+                EnsureVisible( prev );
+                SelectItem( prev, unselect_others, extended_select );
+            }
+            break;
+
+        default:
+            event.Skip();
+    }
+}
+
+wxTreeItemId wxTreeListMainWindow::HitTest(const wxPoint& point, int& flags,
+                                           int& column)
+{
+    // JACS: removed wxYieldIfNeeded() because it can cause the window
+    // to be deleted from under us if a close window event is pending
+
+    int w, h;
+    GetSize(&w, &h);
+    flags=0;
+    if (point.x<0) flags |= wxTREE_HITTEST_TOLEFT;
+    if (point.x>w) flags |= wxTREE_HITTEST_TORIGHT;
+    if (point.y<0) flags |= wxTREE_HITTEST_ABOVE;
+    if (point.y>h) flags |= wxTREE_HITTEST_BELOW;
+    if (flags) return wxTreeItemId();
+
+    if (m_anchor == NULL)
+    {
+        flags = wxTREE_HITTEST_NOWHERE;
+        return wxTreeItemId();
+    }
+
+    wxClientDC dc(this);
+    PrepareDC(dc);
+    wxCoord x = dc.DeviceToLogicalX( point.x );
+    wxCoord y = dc.DeviceToLogicalY( point.y );
+    wxTreeListItem *hit = m_anchor->HitTest(wxPoint(x, y), this, flags,
+                                            column, 0);
+    if (hit == NULL)
+    {
+        flags = wxTREE_HITTEST_NOWHERE;
+        return wxTreeItemId();
+    }
+    return hit;
+}
+
+// get the bounding rectangle of the item (or of its label only)
+bool wxTreeListMainWindow::GetBoundingRect(const wxTreeItemId& item,
+                         wxRect& rect,
+                         bool WXUNUSED(textOnly)) const
+{
+    wxCHECK_MSG( item.IsOk(), FALSE, _T("invalid item in wxTreeListMainWindow::GetBoundingRect") );
+
+    wxTreeListItem *i = (wxTreeListItem*) item.m_pItem;
+
+    int startX, startY;
+    GetViewStart(& startX, & startY);
+
+    rect.x = i->GetX() - startX*PIXELS_PER_UNIT;
+    rect.y = i->GetY() - startY*PIXELS_PER_UNIT;
+    rect.width = i->GetWidth();
+    //rect.height = i->GetHeight();
+    rect.height = GetLineHeight(i);
+
+    return TRUE;
+}
+
+/* **** */
+
+void wxTreeListMainWindow::Edit( const wxTreeItemId& item )
+{
+    if (!item.IsOk()) return;
+
+    m_currentEdit = (wxTreeListItem*) item.m_pItem;
+
+    wxTreeEvent te( wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT, m_owner->GetId() );
+    te.SetItem( (long) m_currentEdit);
+    te.SetEventObject( /*this*/m_owner );
+    m_owner->GetEventHandler()->ProcessEvent( te );
+
+    if (!te.IsAllowed()) return;
+
+    // We have to call this here because the label in
+    // question might just have been added and no screen
+    // update taken place.
+    if (m_dirty) wxYieldIfNeeded();
+
+    wxString s = m_currentEdit->GetText(/*ALB*/m_main_column);
+    int x = m_currentEdit->GetX();
+    int y = m_currentEdit->GetY();
+    int w = m_currentEdit->GetWidth();
+    int h = m_currentEdit->GetHeight();
+
+    int image_h = 0;
+    int image_w = 0;
+
+    int image = m_currentEdit->GetCurrentImage();
+    if ( image != NO_IMAGE )
+    {
+        if ( m_imageListNormal )
+        {
+            m_imageListNormal->GetSize( image, image_w, image_h );
+            image_w += 4;
+        }
+        else
+        {
+            wxFAIL_MSG(_T("you must create an image list to use images!"));
+        }
+    }
+    x += image_w;
+    w -= image_w + 4; // I don't know why +4 is needed
+
+    wxClientDC dc(this);
+    PrepareDC( dc );
+    x = dc.LogicalToDeviceX( x );
+    y = dc.LogicalToDeviceY( y );
+
+    wxTreeListTextCtrl *text = new wxTreeListTextCtrl(this, -1,
+                                              &m_renameAccept,
+                                              &m_renameRes,
+                                              this,
+                                              s,
+                                              wxPoint(x-4,y-4),
+                                              wxSize(w+11,h+8));
+    text->SetFocus();
+}
+
+void wxTreeListMainWindow::OnRenameTimer()
+{
+    Edit( m_current );
+}
+
+void wxTreeListMainWindow::OnRenameAccept()
+{
+    // TODO if the validator fails this causes a crash
+    wxTreeEvent le( wxEVT_COMMAND_TREE_END_LABEL_EDIT, m_owner->GetId() );
+    le.SetItem( (long) m_currentEdit );
+    le.SetEventObject( /*this*/m_owner );
+    le.SetLabel( m_renameRes );
+    m_owner->GetEventHandler()->ProcessEvent( le );
+
+    if (!le.IsAllowed()) return;
+
+    SetItemText( m_currentEdit, m_renameRes );
+}
+
+void wxTreeListMainWindow::OnMouse( wxMouseEvent &event )
+{
+    if ( !m_anchor ) return;
+
+    // we process left mouse up event (enables in-place edit), right down
+    // (pass to the user code), left dbl click (activate item) and
+    // dragging/moving events for items drag-and-drop
+    if ( !(event.LeftDown() ||
+           event.LeftUp() ||
+           event.RightDown() ||
+           event.LeftDClick() ||
+           event.Dragging() ||
+           ((event.Moving() || event.RightUp()) && m_isDragging)) )
+    {
+        event.Skip();
+
+        return;
+    }
+
+    if ( event.LeftDown() )
+        SetFocus();
+
+    wxClientDC dc(this);
+    PrepareDC(dc);
+    wxCoord x = dc.DeviceToLogicalX( event.GetX() );
+    wxCoord y = dc.DeviceToLogicalY( event.GetY() );
+
+    int flags = 0;
+    wxTreeListItem *item = m_anchor->HitTest(wxPoint(x,y), this, flags, 0);
+
+    if ( event.Dragging() && !m_isDragging )
+    {
+        if (m_dragCount == 0)
+            m_dragStart = wxPoint(x,y);
+
+        m_dragCount++;
+
+        if (m_dragCount != 3)
+        {
+            // wait until user drags a bit further...
+            return;
+        }
+
+        wxEventType command = event.RightIsDown()
+                              ? wxEVT_COMMAND_TREE_BEGIN_RDRAG
+                              : wxEVT_COMMAND_TREE_BEGIN_DRAG;
+
+        wxTreeEvent nevent( command,/*ALB*/ m_owner->GetId() );
+        nevent.SetItem( (long) m_current);
+        nevent.SetEventObject(/*this*/m_owner); // ALB
+
+        // by default the dragging is not supported, the user code must
+        // explicitly allow the event for it to take place
+        nevent.Veto();
+
+        if ( m_owner->GetEventHandler()->ProcessEvent(nevent) &&
+             nevent.IsAllowed() )
+        {
+            // we're going to drag this item
+            m_isDragging = TRUE;
+
+            // remember the old cursor because we will change it while
+            // dragging
+            m_oldCursor = m_cursor;
+
+            // in a single selection control, hide the selection temporarily
+            if ( !(GetWindowStyleFlag() & wxTR_MULTIPLE) )
+            {
+                m_oldSelection = (wxTreeListItem*) GetSelection().m_pItem;
+
+                if ( m_oldSelection )
+                {
+                    m_oldSelection->SetHilight(FALSE);
+                    RefreshLine(m_oldSelection);
+                }
+            }
+
+            CaptureMouse();
+        }
+    }
+    else if ( event.Moving() )
+    {
+        if ( item != m_dropTarget )
+        {
+            // unhighlight the previous drop target
+            DrawDropEffect(m_dropTarget);
+
+            m_dropTarget = item;
+
+            // highlight the current drop target if any
+            DrawDropEffect(m_dropTarget);
+
+            wxYieldIfNeeded();
+        }
+    }
+    else if ( (event.LeftUp() || event.RightUp()) && m_isDragging )
+    {
+        // erase the highlighting
+        DrawDropEffect(m_dropTarget);
+
+        if ( m_oldSelection )
+        {
+            m_oldSelection->SetHilight(TRUE);
+            RefreshLine(m_oldSelection);
+            m_oldSelection = (wxTreeListItem *)NULL;
+        }
+
+        // generate the drag end event
+        wxTreeEvent event(wxEVT_COMMAND_TREE_END_DRAG,/*ALB*/m_owner->GetId());
+
+        event.SetItem( (long) item );
+        event.SetPoint( wxPoint(x, y) );
+        event.SetEventObject(/*this*/m_owner);
+
+        (void)m_owner->GetEventHandler()->ProcessEvent(event);
+
+        m_isDragging = FALSE;
+        m_dropTarget = (wxTreeListItem *)NULL;
+
+        ReleaseMouse();
+
+        SetCursor(m_oldCursor);
+
+        wxYieldIfNeeded();
+    }
+    else
+    {
+        // here we process only the messages which happen on tree items
+
+        m_dragCount = 0;
+
+        if (item == NULL) return;  /* we hit the blank area */
+
+        if ( event.RightDown() )
+        {
+            SetFocus();
+            wxTreeEvent nevent(wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK,
+                               m_owner->GetId());
+            nevent.SetItem( (long) item );
+            int nx, ny;
+            CalcScrolledPosition(x, y, &nx, &ny);
+            nevent.SetPoint( wxPoint(nx, ny));
+            nevent.SetEventObject(/*this*/m_owner);
+            m_owner->GetEventHandler()->ProcessEvent(nevent);
+        }
+        else if ( event.LeftUp() )
+        {
+            if ( m_lastOnSame )
+            {
+                if ( (item == m_current) &&
+                     (flags & wxTREE_HITTEST_ONITEMLABEL) &&
+                     HasFlag(wxTR_EDIT_LABELS) )
+                {
+                    if ( m_renameTimer->IsRunning() )
+                        m_renameTimer->Stop();
+
+                    m_renameTimer->Start( 100, TRUE );
+                }
+
+                m_lastOnSame = FALSE;
+            }
+        }
+        else // !RightDown() && !LeftUp() ==> LeftDown() || LeftDClick()
+        {
+            if ( event.LeftDown() )
+            {
+                SetFocus();
+                m_lastOnSame = item == m_current;
+            }
+
+            if ( flags & wxTREE_HITTEST_ONITEMBUTTON )
+            {
+                // only toggle the item for a single click, double click on
+                // the button doesn't do anything (it toggles the item twice)
+                if ( event.LeftDown() )
+                {
+                    Toggle( item );
+                }
+
+                // don't select the item if the button was clicked
+                return;
+            }
+
+            // how should the selection work for this event?
+            bool is_multiple, extended_select, unselect_others;
+            EventFlagsToSelType(GetWindowStyleFlag(),
+                                event.ShiftDown(),
+                                event.ControlDown(),
+                                is_multiple, extended_select, unselect_others);
+
+            SelectItem(item, unselect_others, extended_select);
+
+            // For some reason, Windows isn't recognizing a left double-click,
+            // so we need to simulate it here.  Allow 200 milliseconds for now.
+            if ( event.LeftDClick() )
+            {
+                // double clicking should not start editing the item label
+                m_renameTimer->Stop();
+                m_lastOnSame = FALSE;
+
+                // send activate event first
+                wxTreeEvent nevent( wxEVT_COMMAND_TREE_ITEM_ACTIVATED,
+                                    m_owner->GetId() );
+                nevent.SetItem( (long) item );
+                int nx, ny;
+                CalcScrolledPosition(x, y, &nx, &ny);
+                nevent.SetPoint( wxPoint(nx, ny) );
+                nevent.SetEventObject( /*this*/m_owner );
+                if ( !m_owner->GetEventHandler()->ProcessEvent( nevent ) )
+                {
+                    // if the user code didn't process the activate event,
+                    // handle it ourselves by toggling the item when it is
+                    // double clicked
+                    if ( item->HasPlus() )
+                    {
+                        Toggle(item);
+                    }
+                }
+            }
+        }
+    }
+}
+
+void wxTreeListMainWindow::OnIdle( wxIdleEvent &WXUNUSED(event) )
+{
+    /* after all changes have been done to the tree control,
+     * we actually redraw the tree when everything is over */
+
+    if (!m_dirty) return;
+
+    m_dirty = FALSE;
+
+    CalculatePositions();
+    Refresh();
+    AdjustMyScrollbars();
+}
+
+void wxTreeListMainWindow::OnSize(wxSizeEvent& WXUNUSED(event))
+{
+//     int w, h;
+//     GetClientSize(&w, &h);
+//     m_header_win->SetSize(0, 0, w, HEADER_HEIGHT);
+}
+
+void wxTreeListMainWindow::OnScroll(wxScrollWinEvent& event)
+{
+    // FIXME
+#if defined(__WXGTK__) && !defined(__WXUNIVERSAL__)
+    wxScrolledWindow::OnScroll(event);
+#else
+    HandleOnScroll( event );
+#endif
+
+    if(event.GetOrientation() == wxHORIZONTAL)
+    {
+        m_owner->GetHeaderWindow()->Refresh();
+#ifdef __WXMAC__
+        m_owner->GetHeaderWindow()->MacUpdateImmediately();
+#endif
+    }
+}
+
+
+void wxTreeListMainWindow::CalculateSize( wxTreeListItem *item, wxDC &dc )
+{
+    wxCoord text_w = 0;
+    wxCoord text_h = 0;
+
+    if (item->IsBold())
+        dc.SetFont(m_boldFont);
+
+    dc.GetTextExtent( item->GetText(/*ALB*/m_main_column), &text_w, &text_h );
+    text_h+=2;
+
+    // restore normal font
+    dc.SetFont( m_normalFont );
+
+    int image_h = 0;
+    int image_w = 0;
+    int image = item->GetCurrentImage();
+    if ( image != NO_IMAGE )
+    {
+        if ( m_imageListNormal )
+        {
+            m_imageListNormal->GetSize( image, image_w, image_h );
+            image_w += 4;
+            image_h += 2;
+        }
+    }
+
+    int total_h = (image_h > text_h) ? image_h : text_h;
+
+//     if (total_h < 30)
+//         total_h += 2;            // at least 2 pixels
+//     else
+//         total_h += total_h/10;   // otherwise 10% extra spacing
+
+    item->SetHeight(total_h);
+    if (total_h>m_lineHeight)
+        m_lineHeight=total_h;
+
+    item->SetWidth(image_w+text_w+2);
+}
+
+// -----------------------------------------------------------------------------
+// for developper : y is now the top of the level
+// not the middle of it !
+void wxTreeListMainWindow::CalculateLevel( wxTreeListItem *item, wxDC &dc,
+                                        int level, int &y, int x_offset )
+{
+    int x = level*m_indent + x_offset;
+    if (!HasFlag(wxTR_HIDE_ROOT))
+    {
+        x += m_indent;
+    }
+    else if (level == 0)
+    {
+        // a hidden root is not evaluated, but its
+        // children are always calculated
+        goto Recurse;
+    }
+
+    CalculateSize( item, dc );
+
+    // set its position
+    item->SetX( x+m_spacing );
+    item->SetY( y );
+    y += GetLineHeight(item);
+
+    if ( !item->IsExpanded() )
+    {
+        // we don't need to calculate collapsed branches
+        return;
+    }
+
+  Recurse:
+    wxArrayTreeListItems& children = item->GetChildren();
+    size_t n, count = children.Count();
+    ++level;
+    for (n = 0; n < count; ++n )
+        CalculateLevel( children[n], dc, level, y, x_offset );  // recurse
+}
+
+void wxTreeListMainWindow::CalculatePositions()
+{
+    if ( !m_anchor ) return;
+
+    wxClientDC dc(this);
+    PrepareDC( dc );
+
+    dc.SetFont( m_normalFont );
+
+    dc.SetPen( m_dottedPen );
+    //if(GetImageList() == NULL)
+    // m_lineHeight = (int)(dc.GetCharHeight() + 4);
+
+    int y = 2;
+    int x_offset = 0;
+    for(size_t i = 0; i < GetMainColumn(); ++i) {
+        x_offset += m_owner->GetHeaderWindow()->GetColumnWidth(i);
+    }
+    CalculateLevel( m_anchor, dc, 0, y, x_offset ); // start recursion
+}
+
+void wxTreeListMainWindow::RefreshSubtree(wxTreeListItem *item)
+{
+    if (m_dirty) return;
+
+    wxClientDC dc(this);
+    PrepareDC(dc);
+
+    int cw = 0;
+    int ch = 0;
+    GetClientSize( &cw, &ch );
+
+    wxRect rect;
+    rect.x = dc.LogicalToDeviceX( 0 );
+    rect.width = cw;
+    rect.y = dc.LogicalToDeviceY( item->GetY() - 2 );
+    rect.height = ch;
+
+    Refresh( TRUE, &rect );
+
+    AdjustMyScrollbars();
+}
+
+void wxTreeListMainWindow::RefreshLine( wxTreeListItem *item )
+{
+    if (m_dirty) return;
+
+    wxClientDC dc(this);
+    PrepareDC( dc );
+
+    int cw = 0;
+    int ch = 0;
+    GetClientSize( &cw, &ch );
+
+    wxRect rect;
+    rect.x = dc.LogicalToDeviceX( 0 );
+    rect.y = dc.LogicalToDeviceY( item->GetY() );
+    rect.width = cw;
+    rect.height = GetLineHeight(item); //dc.GetCharHeight() + 6;
+
+    Refresh( TRUE, &rect );
+}
+
+void wxTreeListMainWindow::RefreshSelected()
+{
+    // TODO: this is awfully inefficient, we should keep the list of all
+    //       selected items internally, should be much faster
+    if ( m_anchor )
+        RefreshSelectedUnder(m_anchor);
+}
+
+void wxTreeListMainWindow::RefreshSelectedUnder(wxTreeListItem *item)
+{
+    if ( item->IsSelected() )
+        RefreshLine(item);
+
+    const wxArrayTreeListItems& children = item->GetChildren();
+    size_t count = children.GetCount();
+    for ( size_t n = 0; n < count; n++ )
+    {
+        RefreshSelectedUnder(children[n]);
+    }
+}
+
+// ----------------------------------------------------------------------------
+// changing colours: we need to refresh the tree control
+// ----------------------------------------------------------------------------
+
+bool wxTreeListMainWindow::SetBackgroundColour(const wxColour& colour)
+{
+    if ( !wxWindow::SetBackgroundColour(colour) )
+        return FALSE;
+
+    Refresh();
+
+    return TRUE;
+}
+
+bool wxTreeListMainWindow::SetForegroundColour(const wxColour& colour)
+{
+    if ( !wxWindow::SetForegroundColour(colour) )
+        return FALSE;
+
+    Refresh();
+
+    return TRUE;
+}
+
+//----------- ALB -------------
+inline
+void wxTreeListMainWindow::SetItemText(const wxTreeItemId& item, size_t column,
+                                    const wxString& text)
+{
+    wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
+
+    wxClientDC dc(this);
+    wxTreeListItem *pItem = (wxTreeListItem*) item.m_pItem;
+    pItem->SetText(column, text);
+    CalculateSize(pItem, dc);
+    RefreshLine(pItem);
+}
+
+inline
+wxString wxTreeListMainWindow::GetItemText(const wxTreeItemId& item,
+                                     size_t column) const
+{
+    wxCHECK_MSG( item.IsOk(), wxT(""), wxT("invalid tree item") );
+
+    return ((wxTreeListItem*) item.m_pItem)->GetText(column);
+}
+
+//-----------------------------
+
+//-----------------------------------------------------------------------------
+//  wxTreeListCtrl
+//-----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxTreeListCtrl, wxControl);
+
+BEGIN_EVENT_TABLE(wxTreeListCtrl, wxControl)
+    EVT_SIZE(wxTreeListCtrl::OnSize)
+END_EVENT_TABLE();
+
+bool wxTreeListCtrl::Create(wxWindow *parent, wxWindowID id,
+                            const wxPoint& pos,
+                            const wxSize& size,
+                            long style, const wxValidator &validator,
+                            const wxString& name)
+{
+    long main_style = style & ~(wxRAISED_BORDER|wxSUNKEN_BORDER
+                                |wxSIMPLE_BORDER|wxNO_BORDER|wxDOUBLE_BORDER
+                                |wxSTATIC_BORDER);
+    if(!wxControl::Create(parent, id, pos, size, style, validator, name))
+        return false;
+
+    m_main_win = new wxTreeListMainWindow(this, -1, wxPoint(0, 0), size,
+                                          main_style, validator);
+    m_header_win = new wxTreeListHeaderWindow(this, -1, m_main_win,
+                                              wxPoint(0, 0), wxDefaultSize,
+                                              wxTAB_TRAVERSAL);
+    return TRUE;
+}
+
+void wxTreeListCtrl::OnSize(wxSizeEvent& event)
+{
+    int w, h;
+    GetClientSize(&w, &h);
+    if(m_header_win)
+        m_header_win->SetSize(0, 0, w, HEADER_HEIGHT);
+    if(m_main_win)
+        m_main_win->SetSize(0, HEADER_HEIGHT + 1, w, h - HEADER_HEIGHT - 1);
+}
+
+size_t wxTreeListCtrl::GetCount() const { return m_main_win->GetCount(); }
+
+unsigned int wxTreeListCtrl::GetIndent() const
+{ return m_main_win->GetIndent(); }
+
+void wxTreeListCtrl::SetIndent(unsigned int indent)
+{ m_main_win->SetIndent(indent); }
+
+unsigned int wxTreeListCtrl::GetSpacing() const
+{ return m_main_win->GetSpacing(); }
+
+void wxTreeListCtrl::SetSpacing(unsigned int spacing)
+{ m_main_win->SetSpacing(spacing); }
+
+unsigned int wxTreeListCtrl::GetLineSpacing() const
+{ return m_main_win->GetLineSpacing(); }
+
+void wxTreeListCtrl::SetLineSpacing(unsigned int spacing)
+{ m_main_win->SetLineSpacing(spacing); }
+
+wxImageList* wxTreeListCtrl::GetImageList() const
+{ return m_main_win->GetImageList(); }
+
+wxImageList* wxTreeListCtrl::GetStateImageList() const
+{ return m_main_win->GetStateImageList(); }
+
+wxImageList* wxTreeListCtrl::GetButtonsImageList() const
+{ return m_main_win->GetButtonsImageList(); }
+
+void wxTreeListCtrl::SetImageList(wxImageList* imageList)
+{ m_main_win->SetImageList(imageList); }
+
+void wxTreeListCtrl::SetStateImageList(wxImageList* imageList)
+{ m_main_win->SetStateImageList(imageList); }
+
+void wxTreeListCtrl::SetButtonsImageList(wxImageList* imageList)
+{ m_main_win->SetButtonsImageList(imageList); }
+
+void wxTreeListCtrl::AssignImageList(wxImageList* imageList)
+{ m_main_win->AssignImageList(imageList); }
+
+void wxTreeListCtrl::AssignStateImageList(wxImageList* imageList)
+{ m_main_win->AssignStateImageList(imageList); }
+
+void wxTreeListCtrl::AssignButtonsImageList(wxImageList* imageList)
+{ m_main_win->AssignButtonsImageList(imageList); }
+
+wxString wxTreeListCtrl::GetItemText(const wxTreeItemId& item, size_t column)
+    const
+{ return m_main_win->GetItemText(item, column); }
+
+int wxTreeListCtrl::GetItemImage(const wxTreeItemId& item, size_t column,
+                                 wxTreeItemIcon which) const
+{ return m_main_win->GetItemImage(item, column, which); }
+
+wxTreeItemData* wxTreeListCtrl::GetItemData(const wxTreeItemId& item) const
+{ return m_main_win->GetItemData(item); }
+
+bool wxTreeListCtrl::GetItemBold(const wxTreeItemId& item) const
+{ return m_main_win->GetItemBold(item); }
+
+wxColour wxTreeListCtrl::GetItemTextColour(const wxTreeItemId& item) const
+{ return m_main_win->GetItemTextColour(item); }
+
+wxColour wxTreeListCtrl::GetItemBackgroundColour(const wxTreeItemId& item)
+    const
+{ return m_main_win->GetItemBackgroundColour(item); }
+
+wxFont wxTreeListCtrl::GetItemFont(const wxTreeItemId& item) const
+{ return m_main_win->GetItemFont(item); }
+
+
+void wxTreeListCtrl::SetItemText(const wxTreeItemId& item, size_t column,
+                                 const wxString& text)
+{ m_main_win->SetItemText(item, column, text); }
+
+void wxTreeListCtrl::SetItemImage(const wxTreeItemId& item,
+                                  size_t column,
+                                  int image,
+                                  wxTreeItemIcon which)
+{ m_main_win->SetItemImage(item, column, image, which); }
+
+void wxTreeListCtrl::SetItemData(const wxTreeItemId& item,
+                                 wxTreeItemData* data)
+{ m_main_win->SetItemData(item, data); }
+
+void wxTreeListCtrl::SetItemHasChildren(const wxTreeItemId& item, bool has)
+{ m_main_win->SetItemHasChildren(item, has); }
+
+void wxTreeListCtrl::SetItemBold(const wxTreeItemId& item, bool bold)
+{ m_main_win->SetItemBold(item, bold); }
+
+void wxTreeListCtrl::SetItemTextColour(const wxTreeItemId& item,
+                                       const wxColour& col)
+{ m_main_win->SetItemTextColour(item, col); }
+
+void wxTreeListCtrl::SetItemBackgroundColour(const wxTreeItemId& item,
+                                             const wxColour& col)
+{ m_main_win->SetItemBackgroundColour(item, col); }
+
+void wxTreeListCtrl::SetItemFont(const wxTreeItemId& item,
+                                 const wxFont& font)
+{ m_main_win->SetItemFont(item, font); }
+
+bool wxTreeListCtrl::SetFont(const wxFont& font)
+{
+    if(m_header_win) m_header_win->SetFont(font);
+    if(m_main_win)
+        return m_main_win->SetFont(font);
+    else return FALSE;
+}
+
+void wxTreeListCtrl::SetWindowStyle(const long style)
+{
+    if(m_main_win)
+        m_main_win->SetWindowStyle(style);
+    // TODO: provide something like wxTL_NO_HEADERS to hide m_header_win
+}
+
+long wxTreeListCtrl::GetWindowStyle() const
+{
+    long style = m_windowStyle;
+    if(m_main_win)
+        style |= m_main_win->GetWindowStyle();
+    return style;
+}
+
+bool wxTreeListCtrl::IsVisible(const wxTreeItemId& item) const
+{ return m_main_win->IsVisible(item); }
+
+bool wxTreeListCtrl::ItemHasChildren(const wxTreeItemId& item) const
+{ return m_main_win->ItemHasChildren(item); }
+
+bool wxTreeListCtrl::IsExpanded(const wxTreeItemId& item) const
+{ return m_main_win->IsExpanded(item); }
+
+bool wxTreeListCtrl::IsSelected(const wxTreeItemId& item) const
+{ return m_main_win->IsSelected(item); }
+
+bool wxTreeListCtrl::IsBold(const wxTreeItemId& item) const
+{ return m_main_win->IsBold(item); }
+
+size_t wxTreeListCtrl::GetChildrenCount(const wxTreeItemId& item, bool rec)
+{ return m_main_win->GetChildrenCount(item, rec); }
+
+wxTreeItemId wxTreeListCtrl::GetRootItem() const
+{ return m_main_win->GetRootItem(); }
+
+wxTreeItemId wxTreeListCtrl::GetSelection() const
+{ return m_main_win->GetSelection(); }
+
+size_t wxTreeListCtrl::GetSelections(wxArrayTreeItemIds& arr) const
+{ return m_main_win->GetSelections(arr); }
+
+wxTreeItemId wxTreeListCtrl::GetParent(const wxTreeItemId& item) const
+{ return m_main_win->GetParent(item); }
+
+wxTreeItemId wxTreeListCtrl::GetFirstChild(const wxTreeItemId& item,
+                                           long& cookie) const
+{ return m_main_win->GetFirstChild(item, cookie); }
+
+wxTreeItemId wxTreeListCtrl::GetNextChild(const wxTreeItemId& item,
+                                          long& cookie) const
+{ return m_main_win->GetNextChild(item, cookie); }
+
+wxTreeItemId wxTreeListCtrl::GetLastChild(const wxTreeItemId& item) const
+{ return m_main_win->GetLastChild(item); }
+
+wxTreeItemId wxTreeListCtrl::GetNextSibling(const wxTreeItemId& item) const
+{ return m_main_win->GetNextSibling(item); }
+
+wxTreeItemId wxTreeListCtrl::GetPrevSibling(const wxTreeItemId& item) const
+{ return m_main_win->GetPrevSibling(item); }
+
+wxTreeItemId wxTreeListCtrl::GetFirstVisibleItem() const
+{ return m_main_win->GetFirstVisibleItem(); }
+
+wxTreeItemId wxTreeListCtrl::GetNextVisible(const wxTreeItemId& item) const
+{ return m_main_win->GetNextVisible(item); }
+
+wxTreeItemId wxTreeListCtrl::GetPrevVisible(const wxTreeItemId& item) const
+{ return m_main_win->GetPrevVisible(item); }
+
+wxTreeItemId wxTreeListCtrl::GetNext(const wxTreeItemId& item) const
+{ return m_main_win->GetNext(item); }
+
+wxTreeItemId wxTreeListCtrl::AddRoot(const wxString& text, int image,
+                                     int selectedImage, wxTreeItemData* data)
+{ return m_main_win->AddRoot(text, image, selectedImage, data); }
+
+wxTreeItemId wxTreeListCtrl::PrependItem(const wxTreeItemId& parent,
+                                         const wxString& text, int image,
+                                         int selectedImage,
+                                         wxTreeItemData* data)
+{ return m_main_win->PrependItem(parent, text, image, selectedImage, data); }
+
+wxTreeItemId wxTreeListCtrl::InsertItem(const wxTreeItemId& parent,
+                                        const wxTreeItemId& previous,
+                                        const wxString& text, int image,
+                                        int selectedImage,
+                                        wxTreeItemData* data)
+{
+    return m_main_win->InsertItem(parent, previous, text, image,
+                                  selectedImage, data);
+}
+
+wxTreeItemId wxTreeListCtrl::InsertItem(const wxTreeItemId& parent,
+                                        size_t index,
+                                        const wxString& text, int image,
+                                        int selectedImage,
+                                        wxTreeItemData* data)
+{
+    return m_main_win->InsertItem(parent, index, text, image,
+                                  selectedImage, data);
+}
+
+wxTreeItemId wxTreeListCtrl::AppendItem(const wxTreeItemId& parent,
+                                        const wxString& text, int image,
+                                        int selectedImage,
+                                        wxTreeItemData* data)
+{ return m_main_win->AppendItem(parent, text, image, selectedImage, data); }
+
+void wxTreeListCtrl::Delete(const wxTreeItemId& item)
+{ m_main_win->Delete(item); }
+
+void wxTreeListCtrl::DeleteChildren(const wxTreeItemId& item)
+{ m_main_win->DeleteChildren(item); }
+
+void wxTreeListCtrl::DeleteAllItems()
+{ m_main_win->DeleteAllItems(); }
+
+void wxTreeListCtrl::Expand(const wxTreeItemId& item)
+{ m_main_win->Expand(item); }
+
+void wxTreeListCtrl::ExpandAll(const wxTreeItemId& item)
+{ m_main_win->ExpandAll(item); }
+
+void wxTreeListCtrl::Collapse(const wxTreeItemId& item)
+{ m_main_win->Collapse(item); }
+
+void wxTreeListCtrl::CollapseAndReset(const wxTreeItemId& item)
+{ m_main_win->CollapseAndReset(item); }
+
+void wxTreeListCtrl::Toggle(const wxTreeItemId& item)
+{ m_main_win->Toggle(item); }
+
+void wxTreeListCtrl::Unselect()
+{ m_main_win->Unselect(); }
+
+void wxTreeListCtrl::UnselectAll()
+{ m_main_win->UnselectAll(); }
+
+void wxTreeListCtrl::SelectItem(const wxTreeItemId& item, bool unselect_others,
+                                bool extended_select)
+{ m_main_win->SelectItem(item, unselect_others, extended_select); }
+
+void wxTreeListCtrl::EnsureVisible(const wxTreeItemId& item)
+{ m_main_win->EnsureVisible(item); }
+
+void wxTreeListCtrl::ScrollTo(const wxTreeItemId& item)
+{ m_main_win->ScrollTo(item); }
+
+wxTreeItemId wxTreeListCtrl::HitTest(const wxPoint& pos, int& flags,
+                                     int& column)
+{
+    return m_main_win->HitTest(m_main_win->ScreenToClient(ClientToScreen(pos)),
+                               flags, column);
+}
+
+bool wxTreeListCtrl::GetBoundingRect(const wxTreeItemId& item, wxRect& rect,
+                                     bool textOnly) const
+{ return m_main_win->GetBoundingRect(item, rect, textOnly); }
+
+void wxTreeListCtrl::Edit(const wxTreeItemId& item)
+{ m_main_win->Edit(item); }
+
+int wxTreeListCtrl::OnCompareItems(const wxTreeItemId& item1,
+                                   const wxTreeItemId& item2)
+{
+    // ALB: do the comparison here, and not delegate to m_main_win, in order
+    // to let the user override it
+    //return m_main_win->OnCompareItems(item1, item2);
+    return wxStrcmp(GetItemText(item1), GetItemText(item2));
+}
+
+void wxTreeListCtrl::SortChildren(const wxTreeItemId& item)
+{ m_main_win->SortChildren(item); }
+
+bool wxTreeListCtrl::SetBackgroundColour(const wxColour& colour)
+{ return m_main_win->SetBackgroundColour(colour); }
+
+bool wxTreeListCtrl::SetForegroundColour(const wxColour& colour)
+{ return m_main_win->SetForegroundColour(colour); }
+
+size_t wxTreeListCtrl::GetColumnCount() const
+{ return m_main_win->GetColumnCount(); }
+
+void wxTreeListCtrl::SetColumnWidth(size_t column, size_t width)
+{ m_header_win->SetColumnWidth(column, width); }
+
+int wxTreeListCtrl::GetColumnWidth(size_t column) const
+{ return m_header_win->GetColumnWidth(column); }
+
+void wxTreeListCtrl::SetMainColumn(size_t column)
+{ m_main_win->SetMainColumn(column); }
+
+size_t wxTreeListCtrl::GetMainColumn() const
+{ return m_main_win->GetMainColumn(); }
+
+void wxTreeListCtrl::SetColumnText(size_t column, const wxString& text)
+{
+    m_header_win->SetColumnText(column, text);
+    m_header_win->Refresh();
+}
+
+wxString wxTreeListCtrl::GetColumnText(size_t column) const
+{ return m_header_win->GetColumnText(column); }
+
+void wxTreeListCtrl::AddColumn(const wxTreeListColumnInfo& col)
+{ m_header_win->AddColumn(col); }
+
+void wxTreeListCtrl::InsertColumn(size_t before,
+                                  const wxTreeListColumnInfo& col)
+{ m_header_win->InsertColumn(before, col); }
+
+void wxTreeListCtrl::RemoveColumn(size_t column)
+{ m_header_win->RemoveColumn(column); }
+
+void wxTreeListCtrl::SetColumn(size_t column, const wxTreeListColumnInfo& col)
+{ m_header_win->SetColumn(column, col); }
+
+const wxTreeListColumnInfo& wxTreeListCtrl::GetColumn(size_t column) const
+{ return m_header_win->GetColumn(column); }
+
+wxTreeListColumnInfo& wxTreeListCtrl::GetColumn(size_t column)
+{ return m_header_win->GetColumn(column); }
+
+void wxTreeListCtrl::SetColumnImage(size_t column, int image)
+{
+    m_header_win->SetColumn(column, GetColumn(column).SetImage(image));
+}
+
+int wxTreeListCtrl::GetColumnImage(size_t column) const
+{
+    return m_header_win->GetColumn(column).GetImage();
+}
+
+void wxTreeListCtrl::SetColumnAlignment(size_t column,
+                                        wxTreeListColumnAlign align)
+{
+    m_header_win->SetColumn(column, GetColumn(column).SetAlignment(align));
+}
+
+wxTreeListColumnAlign wxTreeListCtrl::GetColumnAlignment(size_t column) const
+{
+    return m_header_win->GetColumn(column).GetAlignment();
+}
+
+void wxTreeListCtrl::Refresh(bool erase, const wxRect* rect)
+{
+    m_main_win->Refresh(erase, rect);
+    m_header_win->Refresh(erase, rect);
+}
+
+void wxTreeListCtrl::SetFocus()
+{ m_main_win->SetFocus(); }
diff --git a/wxPython/contrib/gizmos/treelistctrl.h b/wxPython/contrib/gizmos/treelistctrl.h
new file mode 100644
index 0000000000..a1e75e9ade
--- /dev/null
+++ b/wxPython/contrib/gizmos/treelistctrl.h
@@ -0,0 +1,509 @@
+// -*- C++ -*- //////////////////////////////////////////////////////////////
+// Name:        treelistctrl.h (derived by wx/treectrlg.h)
+// Purpose:     wxTreeListCtrl class
+// Author:      Robert Roebling
+// Modified by: Alberto Griggio, 2002
+// Created:     01/02/97
+// RCS-ID:      $Id$
+// Copyright:   (c) 1997,1998 Robert Roebling
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef TREELISTCTRL_H
+#define TREELISTCTRL_H
+
+#if defined(__GNUG__) && !defined(__APPLE__)
+    #pragma interface "treelistctrl.h"
+#endif
+
+#include <wx/treectrl.h>
+#include <wx/control.h>
+#include <wx/pen.h>
+#include <wx/listctrl.h> // for wxListEvent
+
+#ifdef GIZMOISDLL
+#define GIZMODLLEXPORT WXDLLEXPORT
+#else
+#define GIZMODLLEXPORT
+#endif
+
+
+class GIZMODLLEXPORT wxTreeListItem;
+class GIZMODLLEXPORT wxTreeListHeaderWindow;
+class GIZMODLLEXPORT wxTreeListMainWindow;
+
+//-----------------------------------------------------------------------------
+// wxTreeListColumnAttrs
+//-----------------------------------------------------------------------------
+
+enum wxTreeListColumnAlign {
+    wxTL_ALIGN_LEFT,
+    wxTL_ALIGN_RIGHT,
+    wxTL_ALIGN_CENTER
+};
+
+
+class GIZMODLLEXPORT wxTreeListColumnInfo: public wxObject {
+public:
+    enum { DEFAULT_COL_WIDTH = 100 };
+
+    wxTreeListColumnInfo(const wxChar* text = wxT(""),
+                         int image = -1,
+                         size_t width = DEFAULT_COL_WIDTH,
+                         wxTreeListColumnAlign alignment = wxTL_ALIGN_LEFT)
+    {
+        m_image = image;
+        m_selected_image = -1;
+        m_text = text;
+        m_width = width;
+        m_alignment = alignment;
+    }
+
+    wxTreeListColumnInfo(const wxTreeListColumnInfo& other)
+    {
+        m_image = other.m_image;
+        m_selected_image = other.m_selected_image;
+        m_text = other.m_text;
+        m_width = other.m_width;
+        m_alignment = other.m_alignment;
+    }
+
+    ~wxTreeListColumnInfo() {}
+
+    // getters
+    wxTreeListColumnAlign GetAlignment() const { return m_alignment; }
+    wxString GetText() const { return m_text; }
+    int GetImage() const { return m_image; }
+    int GetSelectedImage() const { return m_selected_image; }
+    size_t GetWidth() const { return m_width; }
+
+    // setters
+    wxTreeListColumnInfo& SetAlignment(wxTreeListColumnAlign alignment)
+    { m_alignment = alignment; return *this; }
+
+    wxTreeListColumnInfo& SetText(const wxString& text)
+    { m_text = text; return *this; }
+
+    wxTreeListColumnInfo& SetImage(int image)
+    { m_image = image; return *this; }
+
+    wxTreeListColumnInfo& SetSelectedImage(int image)
+    { m_selected_image = image; return *this; }
+
+    wxTreeListColumnInfo& SetWidth(size_t with)
+    { m_width = with; return *this; }
+
+private:
+    wxTreeListColumnAlign m_alignment;
+    wxString m_text;
+    int m_image;
+    int m_selected_image;
+    size_t m_width;
+};
+
+//----------------------------------------------------------------------------
+// wxTreeListCtrl - the multicolumn tree control
+//----------------------------------------------------------------------------
+
+// additional flag for HitTest
+const int wxTREE_HITTEST_ONITEMCOLUMN = 0x2000;
+extern GIZMODLLEXPORT const wxChar* wxTreeListCtrlNameStr;
+
+
+class GIZMODLLEXPORT wxTreeListCtrl : public wxControl
+{
+public:
+    // creation
+    // --------
+    wxTreeListCtrl() {}
+
+    wxTreeListCtrl(wxWindow *parent, wxWindowID id = -1,
+               const wxPoint& pos = wxDefaultPosition,
+               const wxSize& size = wxDefaultSize,
+               long style = wxTR_DEFAULT_STYLE,
+               const wxValidator &validator = wxDefaultValidator,
+               const wxString& name = wxTreeListCtrlNameStr )
+        : m_header_win(0), m_main_win(0)
+    {
+        Create(parent, id, pos, size, style, validator, name);
+    }
+
+    virtual ~wxTreeListCtrl() {}
+
+    bool Create(wxWindow *parent, wxWindowID id = -1,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize,
+                long style = wxTR_DEFAULT_STYLE,
+                const wxValidator &validator = wxDefaultValidator,
+                const wxString& name = wxTreeListCtrlNameStr );
+
+    void Refresh(bool erase=TRUE, const wxRect* rect=NULL);
+    void SetFocus();
+    // accessors
+    // ---------
+
+        // get the total number of items in the control
+    size_t GetCount() const;
+
+        // indent is the number of pixels the children are indented relative to
+        // the parents position. SetIndent() also redraws the control
+        // immediately.
+    unsigned int GetIndent() const;
+    void SetIndent(unsigned int indent);
+
+        // spacing is the number of pixels between the start and the Text
+    unsigned int GetSpacing() const;
+    void SetSpacing(unsigned int spacing);
+
+    // line spacing is the space above and below the text on each line
+    unsigned int GetLineSpacing() const;
+    void SetLineSpacing(unsigned int spacing);
+
+        // image list: these functions allow to associate an image list with
+        // the control and retrieve it. Note that when assigned with
+        // SetImageList, the control does _not_ delete
+        // the associated image list when it's deleted in order to allow image
+        // lists to be shared between different controls. If you use
+        // AssignImageList, the control _does_ delete the image list.
+        //
+        // The normal image list is for the icons which correspond to the
+        // normal tree item state (whether it is selected or not).
+        // Additionally, the application might choose to show a state icon
+        // which corresponds to an app-defined item state (for example,
+        // checked/unchecked) which are taken from the state image list.
+    wxImageList *GetImageList() const;
+    wxImageList *GetStateImageList() const;
+    wxImageList *GetButtonsImageList() const;
+
+    void SetImageList(wxImageList *imageList);
+    void SetStateImageList(wxImageList *imageList);
+    void SetButtonsImageList(wxImageList *imageList);
+    void AssignImageList(wxImageList *imageList);
+    void AssignStateImageList(wxImageList *imageList);
+    void AssignButtonsImageList(wxImageList *imageList);
+
+
+    // Functions to work with tree list ctrl columns
+
+    // adds a column
+    void AddColumn(const wxString& text)
+    { AddColumn(wxTreeListColumnInfo().SetText(text)); }
+    void AddColumn(const wxTreeListColumnInfo& col);
+
+    // inserts a column before the given one
+    void InsertColumn(size_t before, const wxString& text)
+    { InsertColumn(before, wxTreeListColumnInfo().SetText(text)); }
+    void InsertColumn(size_t before, const wxTreeListColumnInfo& col);
+
+    // deletes the given column - does not delete the corresponding column
+    // of each item
+    void RemoveColumn(size_t column);
+
+    // returns the number of columns in the ctrl
+    size_t GetColumnCount() const;
+
+    void SetColumnWidth(size_t column, size_t width);
+    int GetColumnWidth(size_t column) const;
+
+    // tells which column is the "main" one, i.e. the "threaded" one
+    void SetMainColumn(size_t column);
+    size_t GetMainColumn() const;
+
+    void SetColumnText(size_t column, const wxString& text);
+    wxString GetColumnText(size_t column) const;
+
+    void SetColumn(size_t column, const wxTreeListColumnInfo& info);
+    wxTreeListColumnInfo& GetColumn(size_t column);
+    const wxTreeListColumnInfo& GetColumn(size_t column) const;
+
+    // other column-related methods
+    void SetColumnAlignment(size_t column, wxTreeListColumnAlign align);
+    wxTreeListColumnAlign GetColumnAlignment(size_t column) const;
+
+    void SetColumnImage(size_t column, int image);
+    int GetColumnImage(size_t column) const;
+
+    // Functions to work with tree list ctrl items.
+
+    // accessors
+    // ---------
+
+        // retrieve item's label (of the main column)
+    wxString GetItemText(const wxTreeItemId& item) const
+    { return GetItemText(item, GetMainColumn()); }
+    // retrieves item's label of the given column
+    wxString GetItemText(const wxTreeItemId& item, size_t column) const;
+
+        // get one of the images associated with the item (normal by default)
+    int GetItemImage(const wxTreeItemId& item,
+                     wxTreeItemIcon which = wxTreeItemIcon_Normal) const
+    { return GetItemImage(item, GetMainColumn(), which); }
+    int GetItemImage(const wxTreeItemId& item, size_t column,
+                     wxTreeItemIcon which = wxTreeItemIcon_Normal) const;
+
+        // get the data associated with the item
+    wxTreeItemData *GetItemData(const wxTreeItemId& item) const;
+
+    bool GetItemBold(const wxTreeItemId& item) const;
+    wxColour GetItemTextColour(const wxTreeItemId& item) const;
+    wxColour GetItemBackgroundColour(const wxTreeItemId& item) const;
+    wxFont GetItemFont(const wxTreeItemId& item) const;
+
+    // modifiers
+    // ---------
+
+        // set item's label
+    void SetItemText(const wxTreeItemId& item, const wxString& text)
+    { SetItemText(item, GetMainColumn(), text); }
+    void SetItemText(const wxTreeItemId& item, size_t column,
+                     const wxString& text);
+
+    // get one of the images associated with the item (normal by default)
+    void SetItemImage(const wxTreeItemId& item, int image,
+                      wxTreeItemIcon which = wxTreeItemIcon_Normal)
+    { SetItemImage(item, GetMainColumn(), image, which); }
+    // the which parameter is ignored for all columns but the main one
+    void SetItemImage(const wxTreeItemId& item, size_t column, int image,
+                      wxTreeItemIcon which = wxTreeItemIcon_Normal);
+
+        // associate some data with the item
+    void SetItemData(const wxTreeItemId& item, wxTreeItemData *data);
+
+        // force appearance of [+] button near the item. This is useful to
+        // allow the user to expand the items which don't have any children now
+        // - but instead add them only when needed, thus minimizing memory
+        // usage and loading time.
+    void SetItemHasChildren(const wxTreeItemId& item, bool has = TRUE);
+
+        // the item will be shown in bold
+    void SetItemBold(const wxTreeItemId& item, bool bold = TRUE);
+
+        // set the item's text colour
+    void SetItemTextColour(const wxTreeItemId& item, const wxColour& col);
+
+        // set the item's background colour
+    void SetItemBackgroundColour(const wxTreeItemId& item,
+                                 const wxColour& col);
+
+        // set the item's font (should be of the same height for all items)
+    void SetItemFont(const wxTreeItemId& item, const wxFont& font);
+
+        // set the window font
+    virtual bool SetFont( const wxFont &font );
+
+       // set the styles.
+    void SetWindowStyle(const long styles);
+    long GetWindowStyle() const;
+    long GetWindowStyleFlag() const { return GetWindowStyle(); }
+
+    // item status inquiries
+    // ---------------------
+
+        // is the item visible (it might be outside the view or not expanded)?
+    bool IsVisible(const wxTreeItemId& item) const;
+        // does the item has any children?
+    bool HasChildren(const wxTreeItemId& item) const
+      { return ItemHasChildren(item); }
+    bool ItemHasChildren(const wxTreeItemId& item) const;
+        // is the item expanded (only makes sense if HasChildren())?
+    bool IsExpanded(const wxTreeItemId& item) const;
+        // is this item currently selected (the same as has focus)?
+    bool IsSelected(const wxTreeItemId& item) const;
+        // is item text in bold font?
+    bool IsBold(const wxTreeItemId& item) const;
+        // does the layout include space for a button?
+
+    // number of children
+    // ------------------
+
+        // if 'recursively' is FALSE, only immediate children count, otherwise
+        // the returned number is the number of all items in this branch
+    size_t GetChildrenCount(const wxTreeItemId& item, bool recursively = TRUE);
+
+    // navigation
+    // ----------
+
+    // wxTreeItemId.IsOk() will return FALSE if there is no such item
+
+        // get the root tree item
+    wxTreeItemId GetRootItem() const;
+
+        // get the item currently selected (may return NULL if no selection)
+    wxTreeItemId GetSelection() const;
+
+        // get the items currently selected, return the number of such item
+    size_t GetSelections(wxArrayTreeItemIds&) const;
+
+        // get the parent of this item (may return NULL if root)
+    wxTreeItemId GetParent(const wxTreeItemId& item) const;
+
+        // for this enumeration function you must pass in a "cookie" parameter
+        // which is opaque for the application but is necessary for the library
+        // to make these functions reentrant (i.e. allow more than one
+        // enumeration on one and the same object simultaneously). Of course,
+        // the "cookie" passed to GetFirstChild() and GetNextChild() should be
+        // the same!
+
+        // get the first child of this item
+    wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& cookie) const;
+        // get the next child
+    wxTreeItemId GetNextChild(const wxTreeItemId& item, long& cookie) const;
+        // get the last child of this item - this method doesn't use cookies
+    wxTreeItemId GetLastChild(const wxTreeItemId& item) const;
+
+        // get the next sibling of this item
+    wxTreeItemId GetNextSibling(const wxTreeItemId& item) const;
+        // get the previous sibling
+    wxTreeItemId GetPrevSibling(const wxTreeItemId& item) const;
+
+        // get first visible item
+    wxTreeItemId GetFirstVisibleItem() const;
+        // get the next visible item: item must be visible itself!
+        // see IsVisible() and wxTreeCtrl::GetFirstVisibleItem()
+    wxTreeItemId GetNextVisible(const wxTreeItemId& item) const;
+        // get the previous visible item: item must be visible itself!
+    wxTreeItemId GetPrevVisible(const wxTreeItemId& item) const;
+
+        // Only for internal use right now, but should probably be public
+    wxTreeItemId GetNext(const wxTreeItemId& item) const;
+
+    // operations
+    // ----------
+
+        // add the root node to the tree
+    wxTreeItemId AddRoot(const wxString& text,
+                         int image = -1, int selectedImage = -1,
+                         wxTreeItemData *data = NULL);
+
+        // insert a new item in as the first child of the parent
+    wxTreeItemId PrependItem(const wxTreeItemId& parent,
+                             const wxString& text,
+                             int image = -1, int selectedImage = -1,
+                             wxTreeItemData *data = NULL);
+
+        // insert a new item after a given one
+    wxTreeItemId InsertItem(const wxTreeItemId& parent,
+                            const wxTreeItemId& idPrevious,
+                            const wxString& text,
+                            int image = -1, int selectedImage = -1,
+                            wxTreeItemData *data = NULL);
+
+        // insert a new item before the one with the given index
+    wxTreeItemId InsertItem(const wxTreeItemId& parent,
+                            size_t index,
+                            const wxString& text,
+                            int image = -1, int selectedImage = -1,
+                            wxTreeItemData *data = NULL);
+
+        // insert a new item in as the last child of the parent
+    wxTreeItemId AppendItem(const wxTreeItemId& parent,
+                            const wxString& text,
+                            int image = -1, int selectedImage = -1,
+                            wxTreeItemData *data = NULL);
+
+        // delete this item and associated data if any
+    void Delete(const wxTreeItemId& item);
+        // delete all children (but don't delete the item itself)
+        // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events
+    void DeleteChildren(const wxTreeItemId& item);
+        // delete all items from the tree
+        // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events
+    void DeleteAllItems();
+
+        // expand this item
+    void Expand(const wxTreeItemId& item);
+        // expand this item and all subitems recursively
+    void ExpandAll(const wxTreeItemId& item);
+        // collapse the item without removing its children
+    void Collapse(const wxTreeItemId& item);
+        // collapse the item and remove all children
+    void CollapseAndReset(const wxTreeItemId& item);
+        // toggles the current state
+    void Toggle(const wxTreeItemId& item);
+
+        // remove the selection from currently selected item (if any)
+    void Unselect();
+    void UnselectAll();
+        // select this item
+    void SelectItem(const wxTreeItemId& item, bool unselect_others=TRUE,
+                    bool extended_select=FALSE);
+        // make sure this item is visible (expanding the parent item and/or
+        // scrolling to this item if necessary)
+    void EnsureVisible(const wxTreeItemId& item);
+        // scroll to this item (but don't expand its parent)
+    void ScrollTo(const wxTreeItemId& item);
+    //void AdjustMyScrollbars();
+
+        // The first function is more portable (because easier to implement
+        // on other platforms), but the second one returns some extra info.
+    wxTreeItemId HitTest(const wxPoint& point)
+        { int dummy; return HitTest(point, dummy); }
+    wxTreeItemId HitTest(const wxPoint& point, int& flags)
+    { int col; return HitTest(point, flags, col); }
+    wxTreeItemId HitTest(const wxPoint& point, int& flags, int& column);
+
+        // get the bounding rectangle of the item (or of its label only)
+    bool GetBoundingRect(const wxTreeItemId& item,
+                         wxRect& rect,
+                         bool textOnly = FALSE) const;
+
+        // Start editing the item label: this (temporarily) replaces the item
+        // with a one line edit control. The item will be selected if it hadn't
+        // been before.
+    void EditLabel( const wxTreeItemId& item ) { Edit( item ); }
+    void Edit( const wxTreeItemId& item );
+
+    // sorting
+        // this function is called to compare 2 items and should return -1, 0
+        // or +1 if the first item is less than, equal to or greater than the
+        // second one. The base class version performs alphabetic comparaison
+        // of item labels (GetText)
+    virtual int OnCompareItems(const wxTreeItemId& item1,
+                               const wxTreeItemId& item2);
+        // sort the children of this item using OnCompareItems
+        //
+        // NB: this function is not reentrant and not MT-safe (FIXME)!
+    void SortChildren(const wxTreeItemId& item);
+
+    // deprecated functions: use Set/GetItemImage directly
+        // get the selected item image
+    int GetItemSelectedImage(const wxTreeItemId& item) const
+        { return GetItemImage(item, wxTreeItemIcon_Selected); }
+        // set the selected item image
+    void SetItemSelectedImage(const wxTreeItemId& item, int image)
+        { SetItemImage(item, image, wxTreeItemIcon_Selected); }
+
+    // implementation only from now on
+
+    // overridden base class virtuals
+    virtual bool SetBackgroundColour(const wxColour& colour);
+    virtual bool SetForegroundColour(const wxColour& colour);
+
+
+    wxTreeListHeaderWindow* GetHeaderWindow() const
+    { return m_header_win; }
+
+    wxTreeListMainWindow* GetMainWindow() const
+    { return m_main_win; }
+
+
+protected:
+    // header window, responsible for column visualization and manipulation
+    wxTreeListHeaderWindow* m_header_win;
+    // main window, the "true" tree ctrl
+    wxTreeListMainWindow*   m_main_win;
+
+    // the common part of all ctors
+    void Init();
+
+    void OnSize(wxSizeEvent& event);
+
+
+private:
+    DECLARE_EVENT_TABLE()
+    DECLARE_DYNAMIC_CLASS(wxTreeListCtrl)
+};
+
+#endif // TREELISTCTRL_H
+
diff --git a/wxPython/contrib/glcanvas/gtk/glcanvas.py b/wxPython/contrib/glcanvas/gtk/glcanvas.py
index 3f0bd13708..1ad92b3818 100644
--- a/wxPython/contrib/glcanvas/gtk/glcanvas.py
+++ b/wxPython/contrib/glcanvas/gtk/glcanvas.py
@@ -54,36 +54,36 @@ class wxGLContextPtr(wxObjectPtr):
             except:
                 pass
     def SetCurrent(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_SetCurrent,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_SetCurrent(self, *_args, **_kwargs)
         return val
     def SetColour(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_SetColour,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_SetColour(self, *_args, **_kwargs)
         return val
     def SwapBuffers(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_SwapBuffers,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_SwapBuffers(self, *_args, **_kwargs)
         return val
     def SetupPixelFormat(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_SetupPixelFormat,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_SetupPixelFormat(self, *_args, **_kwargs)
         return val
     def SetupPalette(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_SetupPalette,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_SetupPalette(self, *_args, **_kwargs)
         return val
     def CreateDefaultPalette(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_CreateDefaultPalette,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_CreateDefaultPalette(self, *_args, **_kwargs)
         if val: val = wxPalettePtr(val) ; val.thisown = 1
         return val
     def GetPalette(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_GetPalette,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_GetPalette(self, *_args, **_kwargs)
         if val: val = wxPalettePtr(val) 
         return val
     def GetWindow(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_GetWindow,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_GetWindow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGLContext instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGLContext instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGLContext(wxGLContextPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(glcanvasc.new_wxGLContext,_args,_kwargs)
+        self.this = glcanvasc.new_wxGLContext(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -94,30 +94,30 @@ class wxGLCanvasPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def SetCurrent(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_SetCurrent,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_SetCurrent(self, *_args, **_kwargs)
         return val
     def SetColour(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_SetColour,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_SetColour(self, *_args, **_kwargs)
         return val
     def SwapBuffers(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_SwapBuffers,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_SwapBuffers(self, *_args, **_kwargs)
         return val
     def GetContext(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_GetContext,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_GetContext(self, *_args, **_kwargs)
         if val: val = wxGLContextPtr(val) 
         return val
     def __repr__(self):
-        return "<C wxGLCanvas instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGLCanvas instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGLCanvas(wxGLCanvasPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(glcanvasc.new_wxGLCanvas,_args,_kwargs)
+        self.this = glcanvasc.new_wxGLCanvas(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxGLCanvasWithContext(*_args,**_kwargs):
-    val = wxGLCanvasPtr(apply(glcanvasc.new_wxGLCanvasWithContext,_args,_kwargs))
+    val = wxGLCanvasPtr(glcanvasc.new_wxGLCanvasWithContext(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(self)
     return val
diff --git a/wxPython/contrib/glcanvas/mac/glcanvas.py b/wxPython/contrib/glcanvas/mac/glcanvas.py
index 163eccb7cc..a63c8ac7d3 100644
--- a/wxPython/contrib/glcanvas/mac/glcanvas.py
+++ b/wxPython/contrib/glcanvas/mac/glcanvas.py
@@ -54,19 +54,19 @@ class wxGLContextPtr(wxObjectPtr):
             except:
                 pass
     def SetCurrent(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_SetCurrent,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_SetCurrent(self, *_args, **_kwargs)
         return val
     def SetColour(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_SetColour,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_SetColour(self, *_args, **_kwargs)
         return val
     def SwapBuffers(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_SwapBuffers,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_SwapBuffers(self, *_args, **_kwargs)
         return val
     def GetWindow(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_GetWindow,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_GetWindow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGLContext instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGLContext instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGLContext(wxGLContextPtr):
     def __init__(self,this):
         self.this = this
@@ -79,30 +79,30 @@ class wxGLCanvasPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def SetCurrent(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_SetCurrent,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_SetCurrent(self, *_args, **_kwargs)
         return val
     def SetColour(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_SetColour,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_SetColour(self, *_args, **_kwargs)
         return val
     def SwapBuffers(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_SwapBuffers,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_SwapBuffers(self, *_args, **_kwargs)
         return val
     def GetContext(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_GetContext,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_GetContext(self, *_args, **_kwargs)
         if val: val = wxGLContextPtr(val) 
         return val
     def __repr__(self):
-        return "<C wxGLCanvas instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGLCanvas instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGLCanvas(wxGLCanvasPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(glcanvasc.new_wxGLCanvas,_args,_kwargs)
+        self.this = glcanvasc.new_wxGLCanvas(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxGLCanvasWithContext(*_args,**_kwargs):
-    val = wxGLCanvasPtr(apply(glcanvasc.new_wxGLCanvasWithContext,_args,_kwargs))
+    val = wxGLCanvasPtr(glcanvasc.new_wxGLCanvasWithContext(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(self)
     return val
diff --git a/wxPython/contrib/glcanvas/msw/glcanvas.py b/wxPython/contrib/glcanvas/msw/glcanvas.py
index a7b7b8dd67..fa4d7f1c4a 100644
--- a/wxPython/contrib/glcanvas/msw/glcanvas.py
+++ b/wxPython/contrib/glcanvas/msw/glcanvas.py
@@ -54,22 +54,22 @@ class wxGLContextPtr(wxObjectPtr):
             except:
                 pass
     def SetCurrent(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_SetCurrent,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_SetCurrent(self, *_args, **_kwargs)
         return val
     def SetColour(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_SetColour,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_SetColour(self, *_args, **_kwargs)
         return val
     def SwapBuffers(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_SwapBuffers,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_SwapBuffers(self, *_args, **_kwargs)
         return val
     def GetWindow(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLContext_GetWindow,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLContext_GetWindow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGLContext instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGLContext instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGLContext(wxGLContextPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(glcanvasc.new_wxGLContext,_args,_kwargs)
+        self.this = glcanvasc.new_wxGLContext(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -80,44 +80,44 @@ class wxGLCanvasPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def SetCurrent(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_SetCurrent,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_SetCurrent(self, *_args, **_kwargs)
         return val
     def SetColour(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_SetColour,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_SetColour(self, *_args, **_kwargs)
         return val
     def SwapBuffers(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_SwapBuffers,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_SwapBuffers(self, *_args, **_kwargs)
         return val
     def GetContext(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_GetContext,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_GetContext(self, *_args, **_kwargs)
         if val: val = wxGLContextPtr(val) 
         return val
     def SetupPixelFormat(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_SetupPixelFormat,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_SetupPixelFormat(self, *_args, **_kwargs)
         return val
     def SetupPalette(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_SetupPalette,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_SetupPalette(self, *_args, **_kwargs)
         return val
     def CreateDefaultPalette(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_CreateDefaultPalette,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_CreateDefaultPalette(self, *_args, **_kwargs)
         if val: val = wxPalettePtr(val) ; val.thisown = 1
         return val
     def GetPalette(self, *_args, **_kwargs):
-        val = apply(glcanvasc.wxGLCanvas_GetPalette,(self,) + _args, _kwargs)
+        val = glcanvasc.wxGLCanvas_GetPalette(self, *_args, **_kwargs)
         if val: val = wxPalettePtr(val) 
         return val
     def __repr__(self):
-        return "<C wxGLCanvas instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGLCanvas instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGLCanvas(wxGLCanvasPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(glcanvasc.new_wxGLCanvas,_args,_kwargs)
+        self.this = glcanvasc.new_wxGLCanvas(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxGLCanvasWithContext(*_args,**_kwargs):
-    val = wxGLCanvasPtr(apply(glcanvasc.new_wxGLCanvasWithContext,_args,_kwargs))
+    val = wxGLCanvasPtr(glcanvasc.new_wxGLCanvasWithContext(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(self)
     return val
diff --git a/wxPython/contrib/iewin/iewin.py b/wxPython/contrib/iewin/iewin.py
index 1bc59d7e3a..e6f2b0a9fe 100644
--- a/wxPython/contrib/iewin/iewin.py
+++ b/wxPython/contrib/iewin/iewin.py
@@ -67,19 +67,19 @@ class wxMSHTMLEventPtr(wxNotifyEventPtr):
         self.this = this
         self.thisown = 0
     def GetText1(self, *_args, **_kwargs):
-        val = apply(iewinc.wxMSHTMLEvent_GetText1,(self,) + _args, _kwargs)
+        val = iewinc.wxMSHTMLEvent_GetText1(self, *_args, **_kwargs)
         return val
     def GetLong1(self, *_args, **_kwargs):
-        val = apply(iewinc.wxMSHTMLEvent_GetLong1,(self,) + _args, _kwargs)
+        val = iewinc.wxMSHTMLEvent_GetLong1(self, *_args, **_kwargs)
         return val
     def GetLong2(self, *_args, **_kwargs):
-        val = apply(iewinc.wxMSHTMLEvent_GetLong2,(self,) + _args, _kwargs)
+        val = iewinc.wxMSHTMLEvent_GetLong2(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxMSHTMLEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMSHTMLEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMSHTMLEvent(wxMSHTMLEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(iewinc.new_wxMSHTMLEvent,_args,_kwargs)
+        self.this = iewinc.new_wxMSHTMLEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -90,53 +90,53 @@ class wxIEHtmlWinPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def LoadUrl(self, *_args, **_kwargs):
-        val = apply(iewinc.wxIEHtmlWin_LoadUrl,(self,) + _args, _kwargs)
+        val = iewinc.wxIEHtmlWin_LoadUrl(self, *_args, **_kwargs)
         return val
     def LoadString(self, *_args, **_kwargs):
-        val = apply(iewinc.wxIEHtmlWin_LoadString,(self,) + _args, _kwargs)
+        val = iewinc.wxIEHtmlWin_LoadString(self, *_args, **_kwargs)
         return val
     def LoadStream(self, *_args, **_kwargs):
-        val = apply(iewinc.wxIEHtmlWin_LoadStream,(self,) + _args, _kwargs)
+        val = iewinc.wxIEHtmlWin_LoadStream(self, *_args, **_kwargs)
         return val
     def SetCharset(self, *_args, **_kwargs):
-        val = apply(iewinc.wxIEHtmlWin_SetCharset,(self,) + _args, _kwargs)
+        val = iewinc.wxIEHtmlWin_SetCharset(self, *_args, **_kwargs)
         return val
     def SetEditMode(self, *_args, **_kwargs):
-        val = apply(iewinc.wxIEHtmlWin_SetEditMode,(self,) + _args, _kwargs)
+        val = iewinc.wxIEHtmlWin_SetEditMode(self, *_args, **_kwargs)
         return val
     def GetEditMode(self, *_args, **_kwargs):
-        val = apply(iewinc.wxIEHtmlWin_GetEditMode,(self,) + _args, _kwargs)
+        val = iewinc.wxIEHtmlWin_GetEditMode(self, *_args, **_kwargs)
         return val
     def GetStringSelection(self, *_args, **_kwargs):
-        val = apply(iewinc.wxIEHtmlWin_GetStringSelection,(self,) + _args, _kwargs)
+        val = iewinc.wxIEHtmlWin_GetStringSelection(self, *_args, **_kwargs)
         return val
     def GetText(self, *_args, **_kwargs):
-        val = apply(iewinc.wxIEHtmlWin_GetText,(self,) + _args, _kwargs)
+        val = iewinc.wxIEHtmlWin_GetText(self, *_args, **_kwargs)
         return val
     def GoBack(self, *_args, **_kwargs):
-        val = apply(iewinc.wxIEHtmlWin_GoBack,(self,) + _args, _kwargs)
+        val = iewinc.wxIEHtmlWin_GoBack(self, *_args, **_kwargs)
         return val
     def GoForward(self, *_args, **_kwargs):
-        val = apply(iewinc.wxIEHtmlWin_GoForward,(self,) + _args, _kwargs)
+        val = iewinc.wxIEHtmlWin_GoForward(self, *_args, **_kwargs)
         return val
     def GoHome(self, *_args, **_kwargs):
-        val = apply(iewinc.wxIEHtmlWin_GoHome,(self,) + _args, _kwargs)
+        val = iewinc.wxIEHtmlWin_GoHome(self, *_args, **_kwargs)
         return val
     def GoSearch(self, *_args, **_kwargs):
-        val = apply(iewinc.wxIEHtmlWin_GoSearch,(self,) + _args, _kwargs)
+        val = iewinc.wxIEHtmlWin_GoSearch(self, *_args, **_kwargs)
         return val
     def RefreshPage(self, *_args, **_kwargs):
-        val = apply(iewinc.wxIEHtmlWin_RefreshPage,(self,) + _args, _kwargs)
+        val = iewinc.wxIEHtmlWin_RefreshPage(self, *_args, **_kwargs)
         return val
     def Stop(self, *_args, **_kwargs):
-        val = apply(iewinc.wxIEHtmlWin_Stop,(self,) + _args, _kwargs)
+        val = iewinc.wxIEHtmlWin_Stop(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxIEHtmlWin instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxIEHtmlWin instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     Navigate = LoadUrl
 class wxIEHtmlWin(wxIEHtmlWinPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(iewinc.new_wxIEHtmlWin,_args,_kwargs)
+        self.this = iewinc.new_wxIEHtmlWin(*_args,**_kwargs)
         self.thisown = 1
 
 
diff --git a/wxPython/contrib/ogl/oglbasic.py b/wxPython/contrib/ogl/oglbasic.py
index f9270c70d8..c2ed2695e5 100644
--- a/wxPython/contrib/ogl/oglbasic.py
+++ b/wxPython/contrib/ogl/oglbasic.py
@@ -49,97 +49,97 @@ class wxShapeRegionPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def SetText(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_SetText,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_SetText(self, *_args, **_kwargs)
         return val
     def SetFont(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_SetFont,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_SetFont(self, *_args, **_kwargs)
         return val
     def SetMinSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_SetMinSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_SetMinSize(self, *_args, **_kwargs)
         return val
     def SetSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_SetSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_SetSize(self, *_args, **_kwargs)
         return val
     def SetPosition(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_SetPosition,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_SetPosition(self, *_args, **_kwargs)
         return val
     def SetProportions(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_SetProportions,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_SetProportions(self, *_args, **_kwargs)
         return val
     def SetFormatMode(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_SetFormatMode,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_SetFormatMode(self, *_args, **_kwargs)
         return val
     def SetName(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_SetName,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_SetName(self, *_args, **_kwargs)
         return val
     def SetColour(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_SetColour,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_SetColour(self, *_args, **_kwargs)
         return val
     def GetText(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetText,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetText(self, *_args, **_kwargs)
         return val
     def GetFont(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetFont,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) 
         return val
     def GetMinSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetMinSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetMinSize(self, *_args, **_kwargs)
         return val
     def GetProportion(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetProportion,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetProportion(self, *_args, **_kwargs)
         return val
     def GetSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetSize(self, *_args, **_kwargs)
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetPosition,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetPosition(self, *_args, **_kwargs)
         return val
     def GetFormatMode(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetFormatMode,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetFormatMode(self, *_args, **_kwargs)
         return val
     def GetName(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetName,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetName(self, *_args, **_kwargs)
         return val
     def GetColour(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetColour,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetColour(self, *_args, **_kwargs)
         return val
     def GetActualColourObject(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetActualColourObject,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetActualColourObject(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) 
         return val
     def GetFormattedText(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetFormattedText,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetFormattedText(self, *_args, **_kwargs)
         return val
     def GetPenColour(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetPenColour,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetPenColour(self, *_args, **_kwargs)
         return val
     def GetPenStyle(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetPenStyle,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetPenStyle(self, *_args, **_kwargs)
         return val
     def SetPenStyle(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_SetPenStyle,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_SetPenStyle(self, *_args, **_kwargs)
         return val
     def SetPenColour(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_SetPenColour,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_SetPenColour(self, *_args, **_kwargs)
         return val
     def GetActualPen(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetActualPen,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetActualPen(self, *_args, **_kwargs)
         if val: val = wxPenPtr(val) 
         return val
     def GetWidth(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetWidth,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetWidth(self, *_args, **_kwargs)
         return val
     def GetHeight(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_GetHeight,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_GetHeight(self, *_args, **_kwargs)
         return val
     def ClearText(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxShapeRegion_ClearText,(self,) + _args, _kwargs)
+        val = oglbasicc.wxShapeRegion_ClearText(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxShapeRegion instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxShapeRegion instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxShapeRegion(wxShapeRegionPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglbasicc.new_wxShapeRegion,_args,_kwargs)
+        self.this = oglbasicc.new_wxShapeRegion(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -150,121 +150,121 @@ class wxPyShapeEvtHandlerPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler__setCallbackInfo,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def Destroy(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_Destroy,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_Destroy(self, *_args, **_kwargs)
         return val
     def _setOORInfo(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler__setOORInfo,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler__setOORInfo(self, *_args, **_kwargs)
         return val
     def SetShape(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_SetShape,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_SetShape(self, *_args, **_kwargs)
         return val
     def GetShape(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_GetShape,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_GetShape(self, *_args, **_kwargs)
         return val
     def SetPreviousHandler(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_SetPreviousHandler,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_SetPreviousHandler(self, *_args, **_kwargs)
         return val
     def GetPreviousHandler(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_GetPreviousHandler,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_GetPreviousHandler(self, *_args, **_kwargs)
         return val
     def CreateNewCopy(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_CreateNewCopy,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_CreateNewCopy(self, *_args, **_kwargs)
         return val
     def base_OnDelete(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnDelete,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnDelete(self, *_args, **_kwargs)
         return val
     def base_OnDraw(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnDraw,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnDraw(self, *_args, **_kwargs)
         return val
     def base_OnDrawContents(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnDrawContents,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnDrawContents(self, *_args, **_kwargs)
         return val
     def base_OnDrawBranches(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnDrawBranches,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnDrawBranches(self, *_args, **_kwargs)
         return val
     def base_OnMoveLinks(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnMoveLinks,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnMoveLinks(self, *_args, **_kwargs)
         return val
     def base_OnErase(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnErase,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnErase(self, *_args, **_kwargs)
         return val
     def base_OnEraseContents(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnEraseContents,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnEraseContents(self, *_args, **_kwargs)
         return val
     def base_OnHighlight(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnHighlight,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnHighlight(self, *_args, **_kwargs)
         return val
     def base_OnLeftClick(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnLeftClick,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnLeftClick(self, *_args, **_kwargs)
         return val
     def base_OnLeftDoubleClick(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnLeftDoubleClick,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnLeftDoubleClick(self, *_args, **_kwargs)
         return val
     def base_OnRightClick(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnRightClick,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnRightClick(self, *_args, **_kwargs)
         return val
     def base_OnSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnSize(self, *_args, **_kwargs)
         return val
     def base_OnMovePre(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnMovePre,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnMovePre(self, *_args, **_kwargs)
         return val
     def base_OnMovePost(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnMovePost,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnMovePost(self, *_args, **_kwargs)
         return val
     def base_OnDragLeft(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnDragLeft,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnEndDragLeft,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnDragRight(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnDragRight,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnDragRight(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragRight(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnBeginDragRight,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnBeginDragRight(self, *_args, **_kwargs)
         return val
     def base_OnEndDragRight(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnEndDragRight,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnEndDragRight(self, *_args, **_kwargs)
         return val
     def base_OnDrawOutline(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnDrawOutline,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnDrawOutline(self, *_args, **_kwargs)
         return val
     def base_OnDrawControlPoints(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnDrawControlPoints,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnDrawControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnEraseControlPoints(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnEraseControlPoints,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnEraseControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnMoveLink(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnMoveLink,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnMoveLink(self, *_args, **_kwargs)
         return val
     def base_OnSizingDragLeft(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnSizingDragLeft,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnSizingDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnSizingBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnSizingBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnSizingEndDragLeft,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnSizingEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnBeginSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnBeginSize(self, *_args, **_kwargs)
         return val
     def base_OnEndSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShapeEvtHandler_base_OnEndSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShapeEvtHandler_base_OnEndSize(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyShapeEvtHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyShapeEvtHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyShapeEvtHandler(wxPyShapeEvtHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglbasicc.new_wxPyShapeEvtHandler,_args,_kwargs)
+        self.this = oglbasicc.new_wxPyShapeEvtHandler(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyShapeEvtHandler)
         self._setOORInfo(self)
@@ -277,506 +277,506 @@ class wxPyShapePtr(wxPyShapeEvtHandlerPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape__setCallbackInfo,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def GetBoundingBoxMax(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetBoundingBoxMax,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetBoundingBoxMax(self, *_args, **_kwargs)
         return val
     def GetBoundingBoxMin(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetBoundingBoxMin,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetBoundingBoxMin(self, *_args, **_kwargs)
         return val
     def GetPerimeterPoint(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetPerimeterPoint,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetPerimeterPoint(self, *_args, **_kwargs)
         return val
     def GetCanvas(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetCanvas,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetCanvas(self, *_args, **_kwargs)
         return val
     def SetCanvas(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetCanvas,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetCanvas(self, *_args, **_kwargs)
         return val
     def AddToCanvas(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_AddToCanvas,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_AddToCanvas(self, *_args, **_kwargs)
         return val
     def InsertInCanvas(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_InsertInCanvas,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_InsertInCanvas(self, *_args, **_kwargs)
         return val
     def RemoveFromCanvas(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_RemoveFromCanvas,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_RemoveFromCanvas(self, *_args, **_kwargs)
         return val
     def GetX(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetX,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetX(self, *_args, **_kwargs)
         return val
     def GetY(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetY,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetY(self, *_args, **_kwargs)
         return val
     def SetX(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetX,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetX(self, *_args, **_kwargs)
         return val
     def SetY(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetY,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetY(self, *_args, **_kwargs)
         return val
     def GetParent(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetParent,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetParent(self, *_args, **_kwargs)
         return val
     def SetParent(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetParent,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetParent(self, *_args, **_kwargs)
         return val
     def GetTopAncestor(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetTopAncestor,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetTopAncestor(self, *_args, **_kwargs)
         return val
     def GetChildren(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetChildren,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetChildren(self, *_args, **_kwargs)
         return val
     def Unlink(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Unlink,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Unlink(self, *_args, **_kwargs)
         return val
     def SetDrawHandles(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetDrawHandles,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetDrawHandles(self, *_args, **_kwargs)
         return val
     def GetDrawHandles(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetDrawHandles,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetDrawHandles(self, *_args, **_kwargs)
         return val
     def MakeControlPoints(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_MakeControlPoints,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_MakeControlPoints(self, *_args, **_kwargs)
         return val
     def DeleteControlPoints(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_DeleteControlPoints,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_DeleteControlPoints(self, *_args, **_kwargs)
         return val
     def ResetControlPoints(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_ResetControlPoints,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_ResetControlPoints(self, *_args, **_kwargs)
         return val
     def GetEventHandler(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetEventHandler,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetEventHandler(self, *_args, **_kwargs)
         return val
     def SetEventHandler(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetEventHandler,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetEventHandler(self, *_args, **_kwargs)
         return val
     def MakeMandatoryControlPoints(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_MakeMandatoryControlPoints,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_MakeMandatoryControlPoints(self, *_args, **_kwargs)
         return val
     def ResetMandatoryControlPoints(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_ResetMandatoryControlPoints,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_ResetMandatoryControlPoints(self, *_args, **_kwargs)
         return val
     def Recompute(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Recompute,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Recompute(self, *_args, **_kwargs)
         return val
     def CalculateSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_CalculateSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_CalculateSize(self, *_args, **_kwargs)
         return val
     def Select(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Select,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Select(self, *_args, **_kwargs)
         return val
     def SetHighlight(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetHighlight,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetHighlight(self, *_args, **_kwargs)
         return val
     def IsHighlighted(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_IsHighlighted,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_IsHighlighted(self, *_args, **_kwargs)
         return val
     def Selected(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Selected,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Selected(self, *_args, **_kwargs)
         return val
     def AncestorSelected(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_AncestorSelected,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_AncestorSelected(self, *_args, **_kwargs)
         return val
     def SetSensitivityFilter(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetSensitivityFilter,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetSensitivityFilter(self, *_args, **_kwargs)
         return val
     def GetSensitivityFilter(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetSensitivityFilter,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetSensitivityFilter(self, *_args, **_kwargs)
         return val
     def SetDraggable(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetDraggable,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetDraggable(self, *_args, **_kwargs)
         return val
     def SetFixedSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetFixedSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetFixedSize(self, *_args, **_kwargs)
         return val
     def GetFixedSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetFixedSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetFixedSize(self, *_args, **_kwargs)
         return val
     def GetFixedWidth(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetFixedWidth,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetFixedWidth(self, *_args, **_kwargs)
         return val
     def GetFixedHeight(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetFixedHeight,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetFixedHeight(self, *_args, **_kwargs)
         return val
     def SetSpaceAttachments(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetSpaceAttachments,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetSpaceAttachments(self, *_args, **_kwargs)
         return val
     def GetSpaceAttachments(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetSpaceAttachments,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetSpaceAttachments(self, *_args, **_kwargs)
         return val
     def SetShadowMode(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetShadowMode,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetShadowMode(self, *_args, **_kwargs)
         return val
     def GetShadowMode(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetShadowMode,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetShadowMode(self, *_args, **_kwargs)
         return val
     def HitTest(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_HitTest,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_HitTest(self, *_args, **_kwargs)
         return val
     def SetCentreResize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetCentreResize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetCentreResize(self, *_args, **_kwargs)
         return val
     def GetCentreResize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetCentreResize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetCentreResize(self, *_args, **_kwargs)
         return val
     def SetMaintainAspectRatio(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetMaintainAspectRatio,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetMaintainAspectRatio(self, *_args, **_kwargs)
         return val
     def GetMaintainAspectRatio(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetMaintainAspectRatio,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetMaintainAspectRatio(self, *_args, **_kwargs)
         return val
     def GetLines(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetLines,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetLines(self, *_args, **_kwargs)
         return val
     def SetDisableLabel(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetDisableLabel,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetDisableLabel(self, *_args, **_kwargs)
         return val
     def GetDisableLabel(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetDisableLabel,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetDisableLabel(self, *_args, **_kwargs)
         return val
     def SetAttachmentMode(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetAttachmentMode,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetAttachmentMode(self, *_args, **_kwargs)
         return val
     def GetAttachmentMode(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetAttachmentMode,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetAttachmentMode(self, *_args, **_kwargs)
         return val
     def SetId(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetId,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetId(self, *_args, **_kwargs)
         return val
     def GetId(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetId,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetId(self, *_args, **_kwargs)
         return val
     def SetPen(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetPen,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetPen(self, *_args, **_kwargs)
         return val
     def SetBrush(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetBrush,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetBrush(self, *_args, **_kwargs)
         return val
     def Show(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Show,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Show(self, *_args, **_kwargs)
         return val
     def IsShown(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_IsShown,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_IsShown(self, *_args, **_kwargs)
         return val
     def Move(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Move,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Move(self, *_args, **_kwargs)
         return val
     def Erase(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Erase,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Erase(self, *_args, **_kwargs)
         return val
     def EraseContents(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_EraseContents,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_EraseContents(self, *_args, **_kwargs)
         return val
     def Draw(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Draw,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Draw(self, *_args, **_kwargs)
         return val
     def Flash(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Flash,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Flash(self, *_args, **_kwargs)
         return val
     def MoveLinks(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_MoveLinks,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_MoveLinks(self, *_args, **_kwargs)
         return val
     def DrawContents(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_DrawContents,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_DrawContents(self, *_args, **_kwargs)
         return val
     def SetSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetSize(self, *_args, **_kwargs)
         return val
     def SetAttachmentSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetAttachmentSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetAttachmentSize(self, *_args, **_kwargs)
         return val
     def Attach(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Attach,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Attach(self, *_args, **_kwargs)
         return val
     def Detach(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Detach,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Detach(self, *_args, **_kwargs)
         return val
     def Constrain(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Constrain,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Constrain(self, *_args, **_kwargs)
         return val
     def AddLine(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_AddLine,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_AddLine(self, *_args, **_kwargs)
         return val
     def GetLinePosition(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetLinePosition,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetLinePosition(self, *_args, **_kwargs)
         return val
     def AddText(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_AddText,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_AddText(self, *_args, **_kwargs)
         return val
     def GetPen(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetPen,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetPen(self, *_args, **_kwargs)
         if val: val = wxPenPtr(val) 
         return val
     def GetBrush(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetBrush,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetBrush(self, *_args, **_kwargs)
         if val: val = wxBrushPtr(val) 
         return val
     def SetDefaultRegionSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetDefaultRegionSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetDefaultRegionSize(self, *_args, **_kwargs)
         return val
     def FormatText(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_FormatText,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_FormatText(self, *_args, **_kwargs)
         return val
     def SetFormatMode(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetFormatMode,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetFormatMode(self, *_args, **_kwargs)
         return val
     def GetFormatMode(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetFormatMode,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetFormatMode(self, *_args, **_kwargs)
         return val
     def SetFont(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetFont,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetFont(self, *_args, **_kwargs)
         return val
     def GetFont(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetFont,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) 
         return val
     def SetTextColour(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetTextColour,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetTextColour(self, *_args, **_kwargs)
         return val
     def GetTextColour(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetTextColour,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetTextColour(self, *_args, **_kwargs)
         return val
     def GetNumberOfTextRegions(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetNumberOfTextRegions,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetNumberOfTextRegions(self, *_args, **_kwargs)
         return val
     def SetRegionName(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetRegionName,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetRegionName(self, *_args, **_kwargs)
         return val
     def GetRegionName(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetRegionName,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetRegionName(self, *_args, **_kwargs)
         return val
     def GetRegionId(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetRegionId,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetRegionId(self, *_args, **_kwargs)
         return val
     def NameRegions(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_NameRegions,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_NameRegions(self, *_args, **_kwargs)
         return val
     def GetRegions(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetRegions,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetRegions(self, *_args, **_kwargs)
         return val
     def AddRegion(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_AddRegion,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_AddRegion(self, *_args, **_kwargs)
         return val
     def ClearRegions(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_ClearRegions,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_ClearRegions(self, *_args, **_kwargs)
         return val
     def AssignNewIds(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_AssignNewIds,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_AssignNewIds(self, *_args, **_kwargs)
         return val
     def FindRegion(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_FindRegion,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_FindRegion(self, *_args, **_kwargs)
         return val
     def FindRegionNames(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_FindRegionNames,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_FindRegionNames(self, *_args, **_kwargs)
         return val
     def ClearText(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_ClearText,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_ClearText(self, *_args, **_kwargs)
         return val
     def RemoveLine(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_RemoveLine,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_RemoveLine(self, *_args, **_kwargs)
         return val
     def GetAttachmentPosition(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetAttachmentPosition,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetAttachmentPosition(self, *_args, **_kwargs)
         return val
     def GetNumberOfAttachments(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetNumberOfAttachments,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetNumberOfAttachments(self, *_args, **_kwargs)
         return val
     def AttachmentIsValid(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_AttachmentIsValid,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_AttachmentIsValid(self, *_args, **_kwargs)
         return val
     def GetAttachmentPositionEdge(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetAttachmentPositionEdge,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetAttachmentPositionEdge(self, *_args, **_kwargs)
         return val
     def CalcSimpleAttachment(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_CalcSimpleAttachment,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_CalcSimpleAttachment(self, *_args, **_kwargs)
         if val: val = wxRealPointPtr(val) ; val.thisown = 1
         return val
     def AttachmentSortTest(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_AttachmentSortTest,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_AttachmentSortTest(self, *_args, **_kwargs)
         return val
     def EraseLinks(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_EraseLinks,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_EraseLinks(self, *_args, **_kwargs)
         return val
     def DrawLinks(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_DrawLinks,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_DrawLinks(self, *_args, **_kwargs)
         return val
     def MoveLineToNewAttachment(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_MoveLineToNewAttachment,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_MoveLineToNewAttachment(self, *_args, **_kwargs)
         return val
     def ApplyAttachmentOrdering(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_ApplyAttachmentOrdering,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_ApplyAttachmentOrdering(self, *_args, **_kwargs)
         return val
     def GetBranchingAttachmentRoot(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetBranchingAttachmentRoot,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetBranchingAttachmentRoot(self, *_args, **_kwargs)
         if val: val = wxRealPointPtr(val) ; val.thisown = 1
         return val
     def GetBranchingAttachmentInfo(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetBranchingAttachmentInfo,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetBranchingAttachmentInfo(self, *_args, **_kwargs)
         return val
     def GetBranchingAttachmentPoint(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetBranchingAttachmentPoint,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetBranchingAttachmentPoint(self, *_args, **_kwargs)
         return val
     def GetAttachmentLineCount(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetAttachmentLineCount,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetAttachmentLineCount(self, *_args, **_kwargs)
         return val
     def SetBranchNeckLength(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetBranchNeckLength,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetBranchNeckLength(self, *_args, **_kwargs)
         return val
     def GetBranchNeckLength(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetBranchNeckLength,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetBranchNeckLength(self, *_args, **_kwargs)
         return val
     def SetBranchStemLength(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetBranchStemLength,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetBranchStemLength(self, *_args, **_kwargs)
         return val
     def GetBranchStemLength(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetBranchStemLength,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetBranchStemLength(self, *_args, **_kwargs)
         return val
     def SetBranchSpacing(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetBranchSpacing,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetBranchSpacing(self, *_args, **_kwargs)
         return val
     def GetBranchSpacing(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetBranchSpacing,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetBranchSpacing(self, *_args, **_kwargs)
         return val
     def SetBranchStyle(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetBranchStyle,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_SetBranchStyle(self, *_args, **_kwargs)
         return val
     def GetBranchStyle(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetBranchStyle,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetBranchStyle(self, *_args, **_kwargs)
         return val
     def PhysicalToLogicalAttachment(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_PhysicalToLogicalAttachment,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_PhysicalToLogicalAttachment(self, *_args, **_kwargs)
         return val
     def LogicalToPhysicalAttachment(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_LogicalToPhysicalAttachment,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_LogicalToPhysicalAttachment(self, *_args, **_kwargs)
         return val
     def Draggable(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Draggable,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Draggable(self, *_args, **_kwargs)
         return val
     def HasDescendant(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_HasDescendant,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_HasDescendant(self, *_args, **_kwargs)
         return val
     def CreateNewCopy(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_CreateNewCopy,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_CreateNewCopy(self, *_args, **_kwargs)
         return val
     def Copy(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Copy,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Copy(self, *_args, **_kwargs)
         return val
     def CopyWithHandler(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_CopyWithHandler,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_CopyWithHandler(self, *_args, **_kwargs)
         return val
     def Rotate(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Rotate,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Rotate(self, *_args, **_kwargs)
         return val
     def GetRotation(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetRotation,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetRotation(self, *_args, **_kwargs)
         return val
     def ClearAttachments(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_ClearAttachments,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_ClearAttachments(self, *_args, **_kwargs)
         return val
     def Recentre(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_Recentre,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_Recentre(self, *_args, **_kwargs)
         return val
     def ClearPointList(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_ClearPointList,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_ClearPointList(self, *_args, **_kwargs)
         return val
     def GetBackgroundPen(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetBackgroundPen,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetBackgroundPen(self, *_args, **_kwargs)
         if val: val = wxPenPtr(val) ; val.thisown = 1
         return val
     def GetBackgroundBrush(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetBackgroundBrush,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_GetBackgroundBrush(self, *_args, **_kwargs)
         if val: val = wxBrushPtr(val) ; val.thisown = 1
         return val
     def base_OnDelete(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnDelete,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnDelete(self, *_args, **_kwargs)
         return val
     def base_OnDraw(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnDraw,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnDraw(self, *_args, **_kwargs)
         return val
     def base_OnDrawContents(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnDrawContents,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnDrawContents(self, *_args, **_kwargs)
         return val
     def base_OnDrawBranches(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnDrawBranches,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnDrawBranches(self, *_args, **_kwargs)
         return val
     def base_OnMoveLinks(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnMoveLinks,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnMoveLinks(self, *_args, **_kwargs)
         return val
     def base_OnErase(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnErase,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnErase(self, *_args, **_kwargs)
         return val
     def base_OnEraseContents(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnEraseContents,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnEraseContents(self, *_args, **_kwargs)
         return val
     def base_OnHighlight(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnHighlight,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnHighlight(self, *_args, **_kwargs)
         return val
     def base_OnLeftClick(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnLeftClick,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnLeftClick(self, *_args, **_kwargs)
         return val
     def base_OnLeftDoubleClick(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnLeftDoubleClick,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnLeftDoubleClick(self, *_args, **_kwargs)
         return val
     def base_OnRightClick(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnRightClick,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnRightClick(self, *_args, **_kwargs)
         return val
     def base_OnSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnSize(self, *_args, **_kwargs)
         return val
     def base_OnMovePre(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnMovePre,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnMovePre(self, *_args, **_kwargs)
         return val
     def base_OnMovePost(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnMovePost,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnMovePost(self, *_args, **_kwargs)
         return val
     def base_OnDragLeft(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnDragLeft,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnEndDragLeft,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnDragRight(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnDragRight,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnDragRight(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragRight(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnBeginDragRight,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnBeginDragRight(self, *_args, **_kwargs)
         return val
     def base_OnEndDragRight(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnEndDragRight,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnEndDragRight(self, *_args, **_kwargs)
         return val
     def base_OnDrawOutline(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnDrawOutline,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnDrawOutline(self, *_args, **_kwargs)
         return val
     def base_OnDrawControlPoints(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnDrawControlPoints,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnDrawControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnEraseControlPoints(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnEraseControlPoints,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnEraseControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnMoveLink(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnMoveLink,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnMoveLink(self, *_args, **_kwargs)
         return val
     def base_OnSizingDragLeft(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnSizingDragLeft,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnSizingDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnSizingBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnSizingBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnSizingEndDragLeft,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnSizingEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnBeginSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnBeginSize(self, *_args, **_kwargs)
         return val
     def base_OnEndSize(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_base_OnEndSize,(self,) + _args, _kwargs)
+        val = oglbasicc.wxPyShape_base_OnEndSize(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyShape instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyShape instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     def SetClientData(self, data):
         self.clientData = data
diff --git a/wxPython/contrib/ogl/oglcanvas.py b/wxPython/contrib/ogl/oglcanvas.py
index 6a6a7459bd..652eba725a 100644
--- a/wxPython/contrib/ogl/oglcanvas.py
+++ b/wxPython/contrib/ogl/oglcanvas.py
@@ -50,82 +50,82 @@ class wxDiagramPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def AddShape(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_AddShape,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_AddShape(self, *_args, **_kwargs)
         return val
     def Clear(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_Clear,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_Clear(self, *_args, **_kwargs)
         return val
     def DeleteAllShapes(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_DeleteAllShapes,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_DeleteAllShapes(self, *_args, **_kwargs)
         return val
     def DrawOutline(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_DrawOutline,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_DrawOutline(self, *_args, **_kwargs)
         return val
     def FindShape(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_FindShape,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_FindShape(self, *_args, **_kwargs)
         return val
     def GetCanvas(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_GetCanvas,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_GetCanvas(self, *_args, **_kwargs)
         return val
     def GetCount(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_GetCount,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_GetCount(self, *_args, **_kwargs)
         return val
     def GetGridSpacing(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_GetGridSpacing,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_GetGridSpacing(self, *_args, **_kwargs)
         return val
     def GetMouseTolerance(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_GetMouseTolerance,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_GetMouseTolerance(self, *_args, **_kwargs)
         return val
     def GetShapeList(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_GetShapeList,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_GetShapeList(self, *_args, **_kwargs)
         return val
     def GetQuickEditMode(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_GetQuickEditMode,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_GetQuickEditMode(self, *_args, **_kwargs)
         return val
     def GetSnapToGrid(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_GetSnapToGrid,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_GetSnapToGrid(self, *_args, **_kwargs)
         return val
     def InsertShape(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_InsertShape,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_InsertShape(self, *_args, **_kwargs)
         return val
     def RecentreAll(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_RecentreAll,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_RecentreAll(self, *_args, **_kwargs)
         return val
     def Redraw(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_Redraw,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_Redraw(self, *_args, **_kwargs)
         return val
     def RemoveAllShapes(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_RemoveAllShapes,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_RemoveAllShapes(self, *_args, **_kwargs)
         return val
     def RemoveShape(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_RemoveShape,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_RemoveShape(self, *_args, **_kwargs)
         return val
     def SetCanvas(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_SetCanvas,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_SetCanvas(self, *_args, **_kwargs)
         return val
     def SetGridSpacing(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_SetGridSpacing,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_SetGridSpacing(self, *_args, **_kwargs)
         return val
     def SetMouseTolerance(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_SetMouseTolerance,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_SetMouseTolerance(self, *_args, **_kwargs)
         return val
     def SetQuickEditMode(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_SetQuickEditMode,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_SetQuickEditMode(self, *_args, **_kwargs)
         return val
     def SetSnapToGrid(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_SetSnapToGrid,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_SetSnapToGrid(self, *_args, **_kwargs)
         return val
     def ShowAll(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_ShowAll,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_ShowAll(self, *_args, **_kwargs)
         return val
     def Snap(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxDiagram_Snap,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxDiagram_Snap(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxDiagram instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDiagram instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDiagram(wxDiagramPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglcanvasc.new_wxDiagram,_args,_kwargs)
+        self.this = oglcanvasc.new_wxDiagram(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -136,71 +136,71 @@ class wxPyShapeCanvasPtr(wxScrolledWindowPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas__setCallbackInfo,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def AddShape(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_AddShape,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_AddShape(self, *_args, **_kwargs)
         return val
     def FindShape(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_FindShape,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_FindShape(self, *_args, **_kwargs)
         return val
     def FindFirstSensitiveShape(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_FindFirstSensitiveShape,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_FindFirstSensitiveShape(self, *_args, **_kwargs)
         return val
     def GetDiagram(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_GetDiagram,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_GetDiagram(self, *_args, **_kwargs)
         return val
     def GetQuickEditMode(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_GetQuickEditMode,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_GetQuickEditMode(self, *_args, **_kwargs)
         return val
     def InsertShape(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_InsertShape,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_InsertShape(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_base_OnBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_base_OnBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragRight(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_base_OnBeginDragRight,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_base_OnBeginDragRight(self, *_args, **_kwargs)
         return val
     def base_OnEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_base_OnEndDragLeft,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_base_OnEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnEndDragRight(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_base_OnEndDragRight,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_base_OnEndDragRight(self, *_args, **_kwargs)
         return val
     def base_OnDragLeft(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_base_OnDragLeft,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_base_OnDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnDragRight(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_base_OnDragRight,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_base_OnDragRight(self, *_args, **_kwargs)
         return val
     def base_OnLeftClick(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_base_OnLeftClick,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_base_OnLeftClick(self, *_args, **_kwargs)
         return val
     def base_OnRightClick(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_base_OnRightClick,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_base_OnRightClick(self, *_args, **_kwargs)
         return val
     def Redraw(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_Redraw,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_Redraw(self, *_args, **_kwargs)
         return val
     def RemoveShape(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_RemoveShape,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_RemoveShape(self, *_args, **_kwargs)
         return val
     def SetDiagram(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_SetDiagram,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_SetDiagram(self, *_args, **_kwargs)
         return val
     def Snap(self, *_args, **_kwargs):
-        val = apply(oglcanvasc.wxPyShapeCanvas_Snap,(self,) + _args, _kwargs)
+        val = oglcanvasc.wxPyShapeCanvas_Snap(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyShapeCanvas instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyShapeCanvas instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     def GetShapeList(self):
         return self.GetDiagram().GetShapeList()
     
 class wxPyShapeCanvas(wxPyShapeCanvasPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglcanvasc.new_wxPyShapeCanvas,_args,_kwargs)
+        self.this = oglcanvasc.new_wxPyShapeCanvas(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyShapeCanvas)
         self._setOORInfo(self)
diff --git a/wxPython/contrib/ogl/oglhelpers.h b/wxPython/contrib/ogl/oglhelpers.h
index 010e72e0a0..d5c9281858 100644
--- a/wxPython/contrib/ogl/oglhelpers.h
+++ b/wxPython/contrib/ogl/oglhelpers.h
@@ -54,8 +54,7 @@
     DEC_PYCALLBACK__WXCP2DBL2INT    (OnSizingEndDragLeft);  \
     DEC_PYCALLBACK__2DBL            (OnBeginSize);          \
     DEC_PYCALLBACK__2DBL            (OnEndSize);            \
-                                                            \
-    PYPRIVATE;
+    PYPRIVATE
 
 
 #define WXSHAPE_IMP_CALLBACKS(CLASS, PARENT)       \
@@ -87,7 +86,7 @@
     IMP_PYCALLBACK__WXCP2DBL2INT    (CLASS, PARENT,  OnSizingBeginDragLeft);\
     IMP_PYCALLBACK__WXCP2DBL2INT    (CLASS, PARENT,  OnSizingEndDragLeft);  \
     IMP_PYCALLBACK__2DBL            (CLASS, PARENT,  OnBeginSize);          \
-    IMP_PYCALLBACK__2DBL            (CLASS, PARENT,  OnEndSize);            \
+    IMP_PYCALLBACK__2DBL            (CLASS, PARENT,  OnEndSize)
 
 
     //  This one may be difficult...
diff --git a/wxPython/contrib/ogl/oglshapes.py b/wxPython/contrib/ogl/oglshapes.py
index 4090867d08..1cbd1eeb8f 100644
--- a/wxPython/contrib/ogl/oglshapes.py
+++ b/wxPython/contrib/ogl/oglshapes.py
@@ -56,129 +56,129 @@ class wxPseudoMetaFilePtr(wxObjectPtr):
             except:
                 pass
     def Draw(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_Draw,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_Draw(self, *_args, **_kwargs)
         return val
     def Clear(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_Clear,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_Clear(self, *_args, **_kwargs)
         return val
     def Copy(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_Copy,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_Copy(self, *_args, **_kwargs)
         return val
     def Scale(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_Scale,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_Scale(self, *_args, **_kwargs)
         return val
     def ScaleTo(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_ScaleTo,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_ScaleTo(self, *_args, **_kwargs)
         return val
     def Translate(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_Translate,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_Translate(self, *_args, **_kwargs)
         return val
     def Rotate(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_Rotate,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_Rotate(self, *_args, **_kwargs)
         return val
     def LoadFromMetaFile(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_LoadFromMetaFile,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_LoadFromMetaFile(self, *_args, **_kwargs)
         return val
     def GetBounds(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_GetBounds,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_GetBounds(self, *_args, **_kwargs)
         return val
     def CalculateSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_CalculateSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_CalculateSize(self, *_args, **_kwargs)
         return val
     def SetRotateable(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_SetRotateable,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_SetRotateable(self, *_args, **_kwargs)
         return val
     def GetRotateable(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_GetRotateable,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_GetRotateable(self, *_args, **_kwargs)
         return val
     def SetSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_SetSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_SetSize(self, *_args, **_kwargs)
         return val
     def SetFillBrush(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_SetFillBrush,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_SetFillBrush(self, *_args, **_kwargs)
         return val
     def GetFillBrush(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_GetFillBrush,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_GetFillBrush(self, *_args, **_kwargs)
         if val: val = wxBrushPtr(val) 
         return val
     def SetOutlinePen(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_SetOutlinePen,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_SetOutlinePen(self, *_args, **_kwargs)
         return val
     def GetOutlinePen(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_GetOutlinePen,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_GetOutlinePen(self, *_args, **_kwargs)
         if val: val = wxPenPtr(val) 
         return val
     def SetOutlineOp(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_SetOutlineOp,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_SetOutlineOp(self, *_args, **_kwargs)
         return val
     def GetOutlineOp(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_GetOutlineOp,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_GetOutlineOp(self, *_args, **_kwargs)
         return val
     def IsValid(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_IsValid,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_IsValid(self, *_args, **_kwargs)
         return val
     def DrawLine(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_DrawLine,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_DrawLine(self, *_args, **_kwargs)
         return val
     def DrawRectangle(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_DrawRectangle,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_DrawRectangle(self, *_args, **_kwargs)
         return val
     def DrawRoundedRectangle(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_DrawRoundedRectangle,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_DrawRoundedRectangle(self, *_args, **_kwargs)
         return val
     def DrawArc(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_DrawArc,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_DrawArc(self, *_args, **_kwargs)
         return val
     def DrawEllipticArc(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_DrawEllipticArc,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_DrawEllipticArc(self, *_args, **_kwargs)
         return val
     def DrawEllipse(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_DrawEllipse,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_DrawEllipse(self, *_args, **_kwargs)
         return val
     def DrawPoint(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_DrawPoint,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_DrawPoint(self, *_args, **_kwargs)
         return val
     def DrawText(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_DrawText,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_DrawText(self, *_args, **_kwargs)
         return val
     def DrawLines(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_DrawLines,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_DrawLines(self, *_args, **_kwargs)
         return val
     def DrawPolygon(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_DrawPolygon,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_DrawPolygon(self, *_args, **_kwargs)
         return val
     def DrawSpline(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_DrawSpline,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_DrawSpline(self, *_args, **_kwargs)
         return val
     def SetClippingRect(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_SetClippingRect,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_SetClippingRect(self, *_args, **_kwargs)
         return val
     def DestroyClippingRect(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_DestroyClippingRect,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_DestroyClippingRect(self, *_args, **_kwargs)
         return val
     def SetPen(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_SetPen,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_SetPen(self, *_args, **_kwargs)
         return val
     def SetBrush(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_SetBrush,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_SetBrush(self, *_args, **_kwargs)
         return val
     def SetFont(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_SetFont,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_SetFont(self, *_args, **_kwargs)
         return val
     def SetTextColour(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_SetTextColour,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_SetTextColour(self, *_args, **_kwargs)
         return val
     def SetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_SetBackgroundColour,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_SetBackgroundColour(self, *_args, **_kwargs)
         return val
     def SetBackgroundMode(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPseudoMetaFile_SetBackgroundMode,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPseudoMetaFile_SetBackgroundMode(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPseudoMetaFile instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPseudoMetaFile instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPseudoMetaFile(wxPseudoMetaFilePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglshapesc.new_wxPseudoMetaFile,_args,_kwargs)
+        self.this = oglshapesc.new_wxPseudoMetaFile(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -189,103 +189,103 @@ class wxPyRectangleShapePtr(wxPyShapePtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape__setCallbackInfo,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def SetCornerRadius(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_SetCornerRadius,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_SetCornerRadius(self, *_args, **_kwargs)
         return val
     def base_OnDelete(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnDelete,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnDelete(self, *_args, **_kwargs)
         return val
     def base_OnDraw(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnDraw,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnDraw(self, *_args, **_kwargs)
         return val
     def base_OnDrawContents(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnDrawContents,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnDrawContents(self, *_args, **_kwargs)
         return val
     def base_OnDrawBranches(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnDrawBranches,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnDrawBranches(self, *_args, **_kwargs)
         return val
     def base_OnMoveLinks(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnMoveLinks,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnMoveLinks(self, *_args, **_kwargs)
         return val
     def base_OnErase(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnErase,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnErase(self, *_args, **_kwargs)
         return val
     def base_OnEraseContents(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnEraseContents,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnEraseContents(self, *_args, **_kwargs)
         return val
     def base_OnHighlight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnHighlight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnHighlight(self, *_args, **_kwargs)
         return val
     def base_OnLeftClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnLeftClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnLeftClick(self, *_args, **_kwargs)
         return val
     def base_OnLeftDoubleClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnLeftDoubleClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnLeftDoubleClick(self, *_args, **_kwargs)
         return val
     def base_OnRightClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnRightClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnRightClick(self, *_args, **_kwargs)
         return val
     def base_OnSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnSize(self, *_args, **_kwargs)
         return val
     def base_OnMovePre(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnMovePre,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnMovePre(self, *_args, **_kwargs)
         return val
     def base_OnMovePost(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnMovePost,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnMovePost(self, *_args, **_kwargs)
         return val
     def base_OnDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnDragRight(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnBeginDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnBeginDragRight(self, *_args, **_kwargs)
         return val
     def base_OnEndDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnEndDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnEndDragRight(self, *_args, **_kwargs)
         return val
     def base_OnDrawOutline(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnDrawOutline,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnDrawOutline(self, *_args, **_kwargs)
         return val
     def base_OnDrawControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnDrawControlPoints,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnDrawControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnEraseControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnEraseControlPoints,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnEraseControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnMoveLink(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnMoveLink,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnMoveLink(self, *_args, **_kwargs)
         return val
     def base_OnSizingDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnSizingDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnSizingDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnSizingBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnSizingBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnSizingEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnSizingEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnBeginSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnBeginSize(self, *_args, **_kwargs)
         return val
     def base_OnEndSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyRectangleShape_base_OnEndSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyRectangleShape_base_OnEndSize(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyRectangleShape instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyRectangleShape instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyRectangleShape(wxPyRectangleShapePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglshapesc.new_wxPyRectangleShape,_args,_kwargs)
+        self.this = oglshapesc.new_wxPyRectangleShape(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyRectangleShape)
         self._setOORInfo(self)
@@ -298,103 +298,103 @@ class wxPyControlPointPtr(wxPyRectangleShapePtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint__setCallbackInfo,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def SetCornerRadius(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_SetCornerRadius,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_SetCornerRadius(self, *_args, **_kwargs)
         return val
     def base_OnDelete(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnDelete,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnDelete(self, *_args, **_kwargs)
         return val
     def base_OnDraw(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnDraw,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnDraw(self, *_args, **_kwargs)
         return val
     def base_OnDrawContents(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnDrawContents,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnDrawContents(self, *_args, **_kwargs)
         return val
     def base_OnDrawBranches(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnDrawBranches,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnDrawBranches(self, *_args, **_kwargs)
         return val
     def base_OnMoveLinks(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnMoveLinks,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnMoveLinks(self, *_args, **_kwargs)
         return val
     def base_OnErase(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnErase,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnErase(self, *_args, **_kwargs)
         return val
     def base_OnEraseContents(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnEraseContents,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnEraseContents(self, *_args, **_kwargs)
         return val
     def base_OnHighlight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnHighlight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnHighlight(self, *_args, **_kwargs)
         return val
     def base_OnLeftClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnLeftClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnLeftClick(self, *_args, **_kwargs)
         return val
     def base_OnLeftDoubleClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnLeftDoubleClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnLeftDoubleClick(self, *_args, **_kwargs)
         return val
     def base_OnRightClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnRightClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnRightClick(self, *_args, **_kwargs)
         return val
     def base_OnSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnSize(self, *_args, **_kwargs)
         return val
     def base_OnMovePre(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnMovePre,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnMovePre(self, *_args, **_kwargs)
         return val
     def base_OnMovePost(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnMovePost,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnMovePost(self, *_args, **_kwargs)
         return val
     def base_OnDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnDragRight(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnBeginDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnBeginDragRight(self, *_args, **_kwargs)
         return val
     def base_OnEndDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnEndDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnEndDragRight(self, *_args, **_kwargs)
         return val
     def base_OnDrawOutline(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnDrawOutline,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnDrawOutline(self, *_args, **_kwargs)
         return val
     def base_OnDrawControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnDrawControlPoints,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnDrawControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnEraseControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnEraseControlPoints,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnEraseControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnMoveLink(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnMoveLink,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnMoveLink(self, *_args, **_kwargs)
         return val
     def base_OnSizingDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnSizingDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnSizingDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnSizingBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnSizingBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnSizingEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnSizingEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnBeginSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnBeginSize(self, *_args, **_kwargs)
         return val
     def base_OnEndSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyControlPoint_base_OnEndSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyControlPoint_base_OnEndSize(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyControlPoint instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyControlPoint instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyControlPoint(wxPyControlPointPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglshapesc.new_wxPyControlPoint,_args,_kwargs)
+        self.this = oglshapesc.new_wxPyControlPoint(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyControlPoint)
         self._setOORInfo(self)
@@ -407,113 +407,113 @@ class wxPyBitmapShapePtr(wxPyRectangleShapePtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape__setCallbackInfo,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def GetBitmap(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_GetBitmap,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_GetBitmap(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) 
         return val
     def GetFilename(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_GetFilename,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_GetFilename(self, *_args, **_kwargs)
         return val
     def SetBitmap(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_SetBitmap,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_SetBitmap(self, *_args, **_kwargs)
         return val
     def SetFilename(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_SetFilename,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_SetFilename(self, *_args, **_kwargs)
         return val
     def base_OnDelete(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnDelete,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnDelete(self, *_args, **_kwargs)
         return val
     def base_OnDraw(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnDraw,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnDraw(self, *_args, **_kwargs)
         return val
     def base_OnDrawContents(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnDrawContents,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnDrawContents(self, *_args, **_kwargs)
         return val
     def base_OnDrawBranches(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnDrawBranches,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnDrawBranches(self, *_args, **_kwargs)
         return val
     def base_OnMoveLinks(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnMoveLinks,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnMoveLinks(self, *_args, **_kwargs)
         return val
     def base_OnErase(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnErase,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnErase(self, *_args, **_kwargs)
         return val
     def base_OnEraseContents(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnEraseContents,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnEraseContents(self, *_args, **_kwargs)
         return val
     def base_OnHighlight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnHighlight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnHighlight(self, *_args, **_kwargs)
         return val
     def base_OnLeftClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnLeftClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnLeftClick(self, *_args, **_kwargs)
         return val
     def base_OnLeftDoubleClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnLeftDoubleClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnLeftDoubleClick(self, *_args, **_kwargs)
         return val
     def base_OnRightClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnRightClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnRightClick(self, *_args, **_kwargs)
         return val
     def base_OnSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnSize(self, *_args, **_kwargs)
         return val
     def base_OnMovePre(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnMovePre,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnMovePre(self, *_args, **_kwargs)
         return val
     def base_OnMovePost(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnMovePost,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnMovePost(self, *_args, **_kwargs)
         return val
     def base_OnDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnDragRight(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnBeginDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnBeginDragRight(self, *_args, **_kwargs)
         return val
     def base_OnEndDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnEndDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnEndDragRight(self, *_args, **_kwargs)
         return val
     def base_OnDrawOutline(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnDrawOutline,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnDrawOutline(self, *_args, **_kwargs)
         return val
     def base_OnDrawControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnDrawControlPoints,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnDrawControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnEraseControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnEraseControlPoints,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnEraseControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnMoveLink(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnMoveLink,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnMoveLink(self, *_args, **_kwargs)
         return val
     def base_OnSizingDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnSizingDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnSizingDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnSizingBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnSizingBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnSizingEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnSizingEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnBeginSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnBeginSize(self, *_args, **_kwargs)
         return val
     def base_OnEndSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyBitmapShape_base_OnEndSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyBitmapShape_base_OnEndSize(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyBitmapShape instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyBitmapShape instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyBitmapShape(wxPyBitmapShapePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglshapesc.new_wxPyBitmapShape,_args,_kwargs)
+        self.this = oglshapesc.new_wxPyBitmapShape(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyBitmapShape)
         self._setOORInfo(self)
@@ -526,184 +526,184 @@ class wxPyDrawnShapePtr(wxPyRectangleShapePtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape__setCallbackInfo,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def CalculateSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_CalculateSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_CalculateSize(self, *_args, **_kwargs)
         return val
     def DestroyClippingRect(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_DestroyClippingRect,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_DestroyClippingRect(self, *_args, **_kwargs)
         return val
     def DrawArc(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_DrawArc,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_DrawArc(self, *_args, **_kwargs)
         return val
     def DrawAtAngle(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_DrawAtAngle,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_DrawAtAngle(self, *_args, **_kwargs)
         return val
     def DrawEllipticArc(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_DrawEllipticArc,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_DrawEllipticArc(self, *_args, **_kwargs)
         return val
     def DrawLine(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_DrawLine,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_DrawLine(self, *_args, **_kwargs)
         return val
     def DrawLines(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_DrawLines,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_DrawLines(self, *_args, **_kwargs)
         return val
     def DrawPoint(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_DrawPoint,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_DrawPoint(self, *_args, **_kwargs)
         return val
     def DrawPolygon(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_DrawPolygon,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_DrawPolygon(self, *_args, **_kwargs)
         return val
     def DrawRectangle(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_DrawRectangle,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_DrawRectangle(self, *_args, **_kwargs)
         return val
     def DrawRoundedRectangle(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_DrawRoundedRectangle,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_DrawRoundedRectangle(self, *_args, **_kwargs)
         return val
     def DrawSpline(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_DrawSpline,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_DrawSpline(self, *_args, **_kwargs)
         return val
     def DrawText(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_DrawText,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_DrawText(self, *_args, **_kwargs)
         return val
     def GetAngle(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_GetAngle,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_GetAngle(self, *_args, **_kwargs)
         return val
     def GetMetaFile(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_GetMetaFile,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_GetMetaFile(self, *_args, **_kwargs)
         return val
     def GetRotation(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_GetRotation,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_GetRotation(self, *_args, **_kwargs)
         return val
     def LoadFromMetaFile(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_LoadFromMetaFile,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_LoadFromMetaFile(self, *_args, **_kwargs)
         return val
     def Rotate(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_Rotate,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_Rotate(self, *_args, **_kwargs)
         return val
     def SetClippingRect(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_SetClippingRect,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_SetClippingRect(self, *_args, **_kwargs)
         return val
     def SetDrawnBackgroundColour(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_SetDrawnBackgroundColour,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_SetDrawnBackgroundColour(self, *_args, **_kwargs)
         return val
     def SetDrawnBackgroundMode(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_SetDrawnBackgroundMode,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_SetDrawnBackgroundMode(self, *_args, **_kwargs)
         return val
     def SetDrawnBrush(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_SetDrawnBrush,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_SetDrawnBrush(self, *_args, **_kwargs)
         return val
     def SetDrawnFont(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_SetDrawnFont,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_SetDrawnFont(self, *_args, **_kwargs)
         return val
     def SetDrawnPen(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_SetDrawnPen,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_SetDrawnPen(self, *_args, **_kwargs)
         return val
     def SetDrawnTextColour(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_SetDrawnTextColour,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_SetDrawnTextColour(self, *_args, **_kwargs)
         return val
     def Scale(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_Scale,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_Scale(self, *_args, **_kwargs)
         return val
     def SetSaveToFile(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_SetSaveToFile,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_SetSaveToFile(self, *_args, **_kwargs)
         return val
     def Translate(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_Translate,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_Translate(self, *_args, **_kwargs)
         return val
     def base_OnDelete(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnDelete,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnDelete(self, *_args, **_kwargs)
         return val
     def base_OnDraw(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnDraw,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnDraw(self, *_args, **_kwargs)
         return val
     def base_OnDrawContents(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnDrawContents,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnDrawContents(self, *_args, **_kwargs)
         return val
     def base_OnDrawBranches(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnDrawBranches,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnDrawBranches(self, *_args, **_kwargs)
         return val
     def base_OnMoveLinks(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnMoveLinks,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnMoveLinks(self, *_args, **_kwargs)
         return val
     def base_OnErase(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnErase,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnErase(self, *_args, **_kwargs)
         return val
     def base_OnEraseContents(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnEraseContents,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnEraseContents(self, *_args, **_kwargs)
         return val
     def base_OnHighlight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnHighlight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnHighlight(self, *_args, **_kwargs)
         return val
     def base_OnLeftClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnLeftClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnLeftClick(self, *_args, **_kwargs)
         return val
     def base_OnLeftDoubleClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnLeftDoubleClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnLeftDoubleClick(self, *_args, **_kwargs)
         return val
     def base_OnRightClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnRightClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnRightClick(self, *_args, **_kwargs)
         return val
     def base_OnSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnSize(self, *_args, **_kwargs)
         return val
     def base_OnMovePre(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnMovePre,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnMovePre(self, *_args, **_kwargs)
         return val
     def base_OnMovePost(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnMovePost,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnMovePost(self, *_args, **_kwargs)
         return val
     def base_OnDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnDragRight(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnBeginDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnBeginDragRight(self, *_args, **_kwargs)
         return val
     def base_OnEndDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnEndDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnEndDragRight(self, *_args, **_kwargs)
         return val
     def base_OnDrawOutline(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnDrawOutline,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnDrawOutline(self, *_args, **_kwargs)
         return val
     def base_OnDrawControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnDrawControlPoints,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnDrawControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnEraseControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnEraseControlPoints,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnEraseControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnMoveLink(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnMoveLink,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnMoveLink(self, *_args, **_kwargs)
         return val
     def base_OnSizingDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnSizingDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnSizingDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnSizingBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnSizingBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnSizingEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnSizingEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnBeginSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnBeginSize(self, *_args, **_kwargs)
         return val
     def base_OnEndSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDrawnShape_base_OnEndSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDrawnShape_base_OnEndSize(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyDrawnShape instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyDrawnShape instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyDrawnShape(wxPyDrawnShapePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglshapesc.new_wxPyDrawnShape,_args,_kwargs)
+        self.this = oglshapesc.new_wxPyDrawnShape(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyDrawnShape)
         self._setOORInfo(self)
@@ -716,19 +716,19 @@ class wxOGLConstraintPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def Evaluate(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxOGLConstraint_Evaluate,(self,) + _args, _kwargs)
+        val = oglshapesc.wxOGLConstraint_Evaluate(self, *_args, **_kwargs)
         return val
     def SetSpacing(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxOGLConstraint_SetSpacing,(self,) + _args, _kwargs)
+        val = oglshapesc.wxOGLConstraint_SetSpacing(self, *_args, **_kwargs)
         return val
     def Equals(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxOGLConstraint_Equals,(self,) + _args, _kwargs)
+        val = oglshapesc.wxOGLConstraint_Equals(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxOGLConstraint instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxOGLConstraint instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxOGLConstraint(wxOGLConstraintPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglshapesc.new_wxOGLConstraint,_args,_kwargs)
+        self.this = oglshapesc.new_wxOGLConstraint(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -739,142 +739,142 @@ class wxPyCompositeShapePtr(wxPyRectangleShapePtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape__setCallbackInfo,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def AddChild(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_AddChild,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_AddChild(self, *_args, **_kwargs)
         return val
     def AddConstraint(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_AddConstraint,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_AddConstraint(self, *_args, **_kwargs)
         return val
     def AddConstrainedShapes(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_AddConstrainedShapes,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_AddConstrainedShapes(self, *_args, **_kwargs)
         return val
     def AddSimpleConstraint(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_AddSimpleConstraint,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_AddSimpleConstraint(self, *_args, **_kwargs)
         return val
     def CalculateSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_CalculateSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_CalculateSize(self, *_args, **_kwargs)
         return val
     def ContainsDivision(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_ContainsDivision,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_ContainsDivision(self, *_args, **_kwargs)
         return val
     def DeleteConstraint(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_DeleteConstraint,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_DeleteConstraint(self, *_args, **_kwargs)
         return val
     def DeleteConstraintsInvolvingChild(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_DeleteConstraintsInvolvingChild,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_DeleteConstraintsInvolvingChild(self, *_args, **_kwargs)
         return val
     def FindContainerImage(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_FindContainerImage,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_FindContainerImage(self, *_args, **_kwargs)
         return val
     def GetConstraints(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_GetConstraints,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_GetConstraints(self, *_args, **_kwargs)
         return val
     def GetDivisions(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_GetDivisions,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_GetDivisions(self, *_args, **_kwargs)
         return val
     def MakeContainer(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_MakeContainer,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_MakeContainer(self, *_args, **_kwargs)
         return val
     def Recompute(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_Recompute,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_Recompute(self, *_args, **_kwargs)
         return val
     def RemoveChild(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_RemoveChild,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_RemoveChild(self, *_args, **_kwargs)
         return val
     def base_OnDelete(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnDelete,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnDelete(self, *_args, **_kwargs)
         return val
     def base_OnDraw(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnDraw,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnDraw(self, *_args, **_kwargs)
         return val
     def base_OnDrawContents(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnDrawContents,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnDrawContents(self, *_args, **_kwargs)
         return val
     def base_OnDrawBranches(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnDrawBranches,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnDrawBranches(self, *_args, **_kwargs)
         return val
     def base_OnMoveLinks(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnMoveLinks,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnMoveLinks(self, *_args, **_kwargs)
         return val
     def base_OnErase(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnErase,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnErase(self, *_args, **_kwargs)
         return val
     def base_OnEraseContents(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnEraseContents,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnEraseContents(self, *_args, **_kwargs)
         return val
     def base_OnHighlight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnHighlight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnHighlight(self, *_args, **_kwargs)
         return val
     def base_OnLeftClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnLeftClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnLeftClick(self, *_args, **_kwargs)
         return val
     def base_OnLeftDoubleClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnLeftDoubleClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnLeftDoubleClick(self, *_args, **_kwargs)
         return val
     def base_OnRightClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnRightClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnRightClick(self, *_args, **_kwargs)
         return val
     def base_OnSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnSize(self, *_args, **_kwargs)
         return val
     def base_OnMovePre(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnMovePre,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnMovePre(self, *_args, **_kwargs)
         return val
     def base_OnMovePost(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnMovePost,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnMovePost(self, *_args, **_kwargs)
         return val
     def base_OnDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnDragRight(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnBeginDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnBeginDragRight(self, *_args, **_kwargs)
         return val
     def base_OnEndDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnEndDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnEndDragRight(self, *_args, **_kwargs)
         return val
     def base_OnDrawOutline(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnDrawOutline,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnDrawOutline(self, *_args, **_kwargs)
         return val
     def base_OnDrawControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnDrawControlPoints,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnDrawControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnEraseControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnEraseControlPoints,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnEraseControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnMoveLink(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnMoveLink,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnMoveLink(self, *_args, **_kwargs)
         return val
     def base_OnSizingDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnSizingDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnSizingDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnSizingBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnSizingBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnSizingEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnSizingEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnBeginSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnBeginSize(self, *_args, **_kwargs)
         return val
     def base_OnEndSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyCompositeShape_base_OnEndSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyCompositeShape_base_OnEndSize(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyCompositeShape instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyCompositeShape instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyCompositeShape(wxPyCompositeShapePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglshapesc.new_wxPyCompositeShape,_args,_kwargs)
+        self.this = oglshapesc.new_wxPyCompositeShape(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyCompositeShape)
         self._setOORInfo(self)
@@ -887,106 +887,106 @@ class wxPyDividedShapePtr(wxPyRectangleShapePtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape__setCallbackInfo,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def EditRegions(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_EditRegions,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_EditRegions(self, *_args, **_kwargs)
         return val
     def SetRegionSizes(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_SetRegionSizes,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_SetRegionSizes(self, *_args, **_kwargs)
         return val
     def base_OnDelete(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnDelete,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnDelete(self, *_args, **_kwargs)
         return val
     def base_OnDraw(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnDraw,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnDraw(self, *_args, **_kwargs)
         return val
     def base_OnDrawContents(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnDrawContents,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnDrawContents(self, *_args, **_kwargs)
         return val
     def base_OnDrawBranches(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnDrawBranches,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnDrawBranches(self, *_args, **_kwargs)
         return val
     def base_OnMoveLinks(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnMoveLinks,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnMoveLinks(self, *_args, **_kwargs)
         return val
     def base_OnErase(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnErase,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnErase(self, *_args, **_kwargs)
         return val
     def base_OnEraseContents(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnEraseContents,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnEraseContents(self, *_args, **_kwargs)
         return val
     def base_OnHighlight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnHighlight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnHighlight(self, *_args, **_kwargs)
         return val
     def base_OnLeftClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnLeftClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnLeftClick(self, *_args, **_kwargs)
         return val
     def base_OnLeftDoubleClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnLeftDoubleClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnLeftDoubleClick(self, *_args, **_kwargs)
         return val
     def base_OnRightClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnRightClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnRightClick(self, *_args, **_kwargs)
         return val
     def base_OnSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnSize(self, *_args, **_kwargs)
         return val
     def base_OnMovePre(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnMovePre,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnMovePre(self, *_args, **_kwargs)
         return val
     def base_OnMovePost(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnMovePost,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnMovePost(self, *_args, **_kwargs)
         return val
     def base_OnDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnDragRight(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnBeginDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnBeginDragRight(self, *_args, **_kwargs)
         return val
     def base_OnEndDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnEndDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnEndDragRight(self, *_args, **_kwargs)
         return val
     def base_OnDrawOutline(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnDrawOutline,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnDrawOutline(self, *_args, **_kwargs)
         return val
     def base_OnDrawControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnDrawControlPoints,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnDrawControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnEraseControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnEraseControlPoints,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnEraseControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnMoveLink(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnMoveLink,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnMoveLink(self, *_args, **_kwargs)
         return val
     def base_OnSizingDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnSizingDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnSizingDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnSizingBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnSizingBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnSizingEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnSizingEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnBeginSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnBeginSize(self, *_args, **_kwargs)
         return val
     def base_OnEndSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDividedShape_base_OnEndSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDividedShape_base_OnEndSize(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyDividedShape instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyDividedShape instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyDividedShape(wxPyDividedShapePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglshapesc.new_wxPyDividedShape,_args,_kwargs)
+        self.this = oglshapesc.new_wxPyDividedShape(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyDividedShape)
         self._setOORInfo(self)
@@ -999,177 +999,177 @@ class wxPyDivisionShapePtr(wxPyCompositeShapePtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape__setCallbackInfo,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def AdjustBottom(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_AdjustBottom,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_AdjustBottom(self, *_args, **_kwargs)
         return val
     def AdjustLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_AdjustLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_AdjustLeft(self, *_args, **_kwargs)
         return val
     def AdjustRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_AdjustRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_AdjustRight(self, *_args, **_kwargs)
         return val
     def AdjustTop(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_AdjustTop,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_AdjustTop(self, *_args, **_kwargs)
         return val
     def Divide(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_Divide,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_Divide(self, *_args, **_kwargs)
         return val
     def EditEdge(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_EditEdge,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_EditEdge(self, *_args, **_kwargs)
         return val
     def GetBottomSide(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_GetBottomSide,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_GetBottomSide(self, *_args, **_kwargs)
         return val
     def GetHandleSide(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_GetHandleSide,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_GetHandleSide(self, *_args, **_kwargs)
         return val
     def GetLeftSide(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_GetLeftSide,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_GetLeftSide(self, *_args, **_kwargs)
         return val
     def GetLeftSideColour(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_GetLeftSideColour,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_GetLeftSideColour(self, *_args, **_kwargs)
         return val
     def GetLeftSidePen(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_GetLeftSidePen,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_GetLeftSidePen(self, *_args, **_kwargs)
         if val: val = wxPenPtr(val) 
         return val
     def GetRightSide(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_GetRightSide,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_GetRightSide(self, *_args, **_kwargs)
         return val
     def GetTopSide(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_GetTopSide,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_GetTopSide(self, *_args, **_kwargs)
         return val
     def GetTopSidePen(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_GetTopSidePen,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_GetTopSidePen(self, *_args, **_kwargs)
         if val: val = wxPenPtr(val) 
         return val
     def ResizeAdjoining(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_ResizeAdjoining,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_ResizeAdjoining(self, *_args, **_kwargs)
         return val
     def PopupMenu(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_PopupMenu,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_PopupMenu(self, *_args, **_kwargs)
         return val
     def SetBottomSide(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_SetBottomSide,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_SetBottomSide(self, *_args, **_kwargs)
         return val
     def SetHandleSide(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_SetHandleSide,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_SetHandleSide(self, *_args, **_kwargs)
         return val
     def SetLeftSide(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_SetLeftSide,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_SetLeftSide(self, *_args, **_kwargs)
         return val
     def SetLeftSideColour(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_SetLeftSideColour,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_SetLeftSideColour(self, *_args, **_kwargs)
         return val
     def SetLeftSidePen(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_SetLeftSidePen,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_SetLeftSidePen(self, *_args, **_kwargs)
         return val
     def SetRightSide(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_SetRightSide,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_SetRightSide(self, *_args, **_kwargs)
         return val
     def SetTopSide(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_SetTopSide,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_SetTopSide(self, *_args, **_kwargs)
         return val
     def SetTopSideColour(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_SetTopSideColour,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_SetTopSideColour(self, *_args, **_kwargs)
         return val
     def SetTopSidePen(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_SetTopSidePen,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_SetTopSidePen(self, *_args, **_kwargs)
         return val
     def base_OnDelete(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnDelete,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnDelete(self, *_args, **_kwargs)
         return val
     def base_OnDraw(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnDraw,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnDraw(self, *_args, **_kwargs)
         return val
     def base_OnDrawContents(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnDrawContents,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnDrawContents(self, *_args, **_kwargs)
         return val
     def base_OnDrawBranches(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnDrawBranches,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnDrawBranches(self, *_args, **_kwargs)
         return val
     def base_OnMoveLinks(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnMoveLinks,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnMoveLinks(self, *_args, **_kwargs)
         return val
     def base_OnErase(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnErase,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnErase(self, *_args, **_kwargs)
         return val
     def base_OnEraseContents(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnEraseContents,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnEraseContents(self, *_args, **_kwargs)
         return val
     def base_OnHighlight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnHighlight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnHighlight(self, *_args, **_kwargs)
         return val
     def base_OnLeftClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnLeftClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnLeftClick(self, *_args, **_kwargs)
         return val
     def base_OnLeftDoubleClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnLeftDoubleClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnLeftDoubleClick(self, *_args, **_kwargs)
         return val
     def base_OnRightClick(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnRightClick,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnRightClick(self, *_args, **_kwargs)
         return val
     def base_OnSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnSize(self, *_args, **_kwargs)
         return val
     def base_OnMovePre(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnMovePre,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnMovePre(self, *_args, **_kwargs)
         return val
     def base_OnMovePost(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnMovePost,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnMovePost(self, *_args, **_kwargs)
         return val
     def base_OnDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnDragRight(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnBeginDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnBeginDragRight(self, *_args, **_kwargs)
         return val
     def base_OnEndDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnEndDragRight,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnEndDragRight(self, *_args, **_kwargs)
         return val
     def base_OnDrawOutline(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnDrawOutline,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnDrawOutline(self, *_args, **_kwargs)
         return val
     def base_OnDrawControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnDrawControlPoints,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnDrawControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnEraseControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnEraseControlPoints,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnEraseControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnMoveLink(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnMoveLink,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnMoveLink(self, *_args, **_kwargs)
         return val
     def base_OnSizingDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnSizingDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnSizingDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnSizingBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnSizingBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnSizingEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnSizingEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnBeginSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnBeginSize(self, *_args, **_kwargs)
         return val
     def base_OnEndSize(self, *_args, **_kwargs):
-        val = apply(oglshapesc.wxPyDivisionShape_base_OnEndSize,(self,) + _args, _kwargs)
+        val = oglshapesc.wxPyDivisionShape_base_OnEndSize(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyDivisionShape instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyDivisionShape instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyDivisionShape(wxPyDivisionShapePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglshapesc.new_wxPyDivisionShape,_args,_kwargs)
+        self.this = oglshapesc.new_wxPyDivisionShape(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyDivisionShape)
         self._setOORInfo(self)
diff --git a/wxPython/contrib/ogl/oglshapes2.py b/wxPython/contrib/ogl/oglshapes2.py
index 60d4c2947e..1be62f6cd7 100644
--- a/wxPython/contrib/ogl/oglshapes2.py
+++ b/wxPython/contrib/ogl/oglshapes2.py
@@ -52,97 +52,97 @@ class wxPyEllipseShapePtr(wxPyShapePtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape__setCallbackInfo,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def base_OnDraw(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnDraw,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnDraw(self, *_args, **_kwargs)
         return val
     def base_OnDrawContents(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnDrawContents,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnDrawContents(self, *_args, **_kwargs)
         return val
     def base_OnDrawBranches(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnDrawBranches,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnDrawBranches(self, *_args, **_kwargs)
         return val
     def base_OnMoveLinks(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnMoveLinks,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnMoveLinks(self, *_args, **_kwargs)
         return val
     def base_OnErase(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnErase,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnErase(self, *_args, **_kwargs)
         return val
     def base_OnEraseContents(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnEraseContents,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnEraseContents(self, *_args, **_kwargs)
         return val
     def base_OnHighlight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnHighlight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnHighlight(self, *_args, **_kwargs)
         return val
     def base_OnLeftClick(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnLeftClick,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnLeftClick(self, *_args, **_kwargs)
         return val
     def base_OnLeftDoubleClick(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnLeftDoubleClick,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnLeftDoubleClick(self, *_args, **_kwargs)
         return val
     def base_OnRightClick(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnRightClick,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnRightClick(self, *_args, **_kwargs)
         return val
     def base_OnSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnSize(self, *_args, **_kwargs)
         return val
     def base_OnMovePre(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnMovePre,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnMovePre(self, *_args, **_kwargs)
         return val
     def base_OnMovePost(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnMovePost,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnMovePost(self, *_args, **_kwargs)
         return val
     def base_OnDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnDragRight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnDragRight(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnBeginDragRight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnBeginDragRight(self, *_args, **_kwargs)
         return val
     def base_OnEndDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnEndDragRight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnEndDragRight(self, *_args, **_kwargs)
         return val
     def base_OnDrawOutline(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnDrawOutline,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnDrawOutline(self, *_args, **_kwargs)
         return val
     def base_OnDrawControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnDrawControlPoints,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnDrawControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnEraseControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnEraseControlPoints,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnEraseControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnMoveLink(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnMoveLink,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnMoveLink(self, *_args, **_kwargs)
         return val
     def base_OnSizingDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnSizingDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnSizingDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnSizingBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnSizingBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnSizingEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnSizingEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnBeginSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnBeginSize(self, *_args, **_kwargs)
         return val
     def base_OnEndSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyEllipseShape_base_OnEndSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyEllipseShape_base_OnEndSize(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyEllipseShape instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyEllipseShape instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyEllipseShape(wxPyEllipseShapePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglshapes2c.new_wxPyEllipseShape,_args,_kwargs)
+        self.this = oglshapes2c.new_wxPyEllipseShape(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyEllipseShape)
         self._setOORInfo(self)
@@ -155,97 +155,97 @@ class wxPyCircleShapePtr(wxPyEllipseShapePtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape__setCallbackInfo,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def base_OnDraw(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnDraw,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnDraw(self, *_args, **_kwargs)
         return val
     def base_OnDrawContents(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnDrawContents,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnDrawContents(self, *_args, **_kwargs)
         return val
     def base_OnDrawBranches(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnDrawBranches,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnDrawBranches(self, *_args, **_kwargs)
         return val
     def base_OnMoveLinks(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnMoveLinks,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnMoveLinks(self, *_args, **_kwargs)
         return val
     def base_OnErase(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnErase,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnErase(self, *_args, **_kwargs)
         return val
     def base_OnEraseContents(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnEraseContents,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnEraseContents(self, *_args, **_kwargs)
         return val
     def base_OnHighlight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnHighlight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnHighlight(self, *_args, **_kwargs)
         return val
     def base_OnLeftClick(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnLeftClick,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnLeftClick(self, *_args, **_kwargs)
         return val
     def base_OnLeftDoubleClick(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnLeftDoubleClick,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnLeftDoubleClick(self, *_args, **_kwargs)
         return val
     def base_OnRightClick(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnRightClick,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnRightClick(self, *_args, **_kwargs)
         return val
     def base_OnSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnSize(self, *_args, **_kwargs)
         return val
     def base_OnMovePre(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnMovePre,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnMovePre(self, *_args, **_kwargs)
         return val
     def base_OnMovePost(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnMovePost,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnMovePost(self, *_args, **_kwargs)
         return val
     def base_OnDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnDragRight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnDragRight(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnBeginDragRight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnBeginDragRight(self, *_args, **_kwargs)
         return val
     def base_OnEndDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnEndDragRight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnEndDragRight(self, *_args, **_kwargs)
         return val
     def base_OnDrawOutline(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnDrawOutline,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnDrawOutline(self, *_args, **_kwargs)
         return val
     def base_OnDrawControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnDrawControlPoints,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnDrawControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnEraseControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnEraseControlPoints,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnEraseControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnMoveLink(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnMoveLink,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnMoveLink(self, *_args, **_kwargs)
         return val
     def base_OnSizingDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnSizingDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnSizingDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnSizingBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnSizingBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnSizingEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnSizingEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnBeginSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnBeginSize(self, *_args, **_kwargs)
         return val
     def base_OnEndSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyCircleShape_base_OnEndSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyCircleShape_base_OnEndSize(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyCircleShape instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyCircleShape instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyCircleShape(wxPyCircleShapePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglshapes2c.new_wxPyCircleShape,_args,_kwargs)
+        self.this = oglshapes2c.new_wxPyCircleShape(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyCircleShape)
         self._setOORInfo(self)
@@ -264,58 +264,58 @@ class wxArrowHeadPtr(wxObjectPtr):
             except:
                 pass
     def _GetType(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead__GetType,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead__GetType(self, *_args, **_kwargs)
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead_GetPosition,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead_GetPosition(self, *_args, **_kwargs)
         return val
     def SetPosition(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead_SetPosition,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead_SetPosition(self, *_args, **_kwargs)
         return val
     def GetXOffset(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead_GetXOffset,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead_GetXOffset(self, *_args, **_kwargs)
         return val
     def GetYOffset(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead_GetYOffset,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead_GetYOffset(self, *_args, **_kwargs)
         return val
     def GetSpacing(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead_GetSpacing,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead_GetSpacing(self, *_args, **_kwargs)
         return val
     def GetSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead_GetSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead_GetSize(self, *_args, **_kwargs)
         return val
     def GetName(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead_GetName,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead_GetName(self, *_args, **_kwargs)
         return val
     def SetXOffset(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead_SetXOffset,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead_SetXOffset(self, *_args, **_kwargs)
         return val
     def SetYOffset(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead_SetYOffset,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead_SetYOffset(self, *_args, **_kwargs)
         return val
     def GetMetaFile(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead_GetMetaFile,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead_GetMetaFile(self, *_args, **_kwargs)
         return val
     def GetId(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead_GetId,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead_GetId(self, *_args, **_kwargs)
         return val
     def GetArrowEnd(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead_GetArrowEnd,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead_GetArrowEnd(self, *_args, **_kwargs)
         return val
     def GetArrowSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead_GetArrowSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead_GetArrowSize(self, *_args, **_kwargs)
         return val
     def SetSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead_SetSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead_SetSize(self, *_args, **_kwargs)
         return val
     def SetSpacing(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxArrowHead_SetSpacing,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxArrowHead_SetSpacing(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxArrowHead instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxArrowHead instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxArrowHead(wxArrowHeadPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglshapes2c.new_wxArrowHead,_args,_kwargs)
+        self.this = oglshapes2c.new_wxArrowHead(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -326,218 +326,218 @@ class wxPyLineShapePtr(wxPyShapePtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape__setCallbackInfo,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def AddArrow(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_AddArrow,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_AddArrow(self, *_args, **_kwargs)
         return val
     def AddArrowOrdered(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_AddArrowOrdered,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_AddArrowOrdered(self, *_args, **_kwargs)
         return val
     def ClearArrow(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_ClearArrow,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_ClearArrow(self, *_args, **_kwargs)
         return val
     def ClearArrowsAtPosition(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_ClearArrowsAtPosition,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_ClearArrowsAtPosition(self, *_args, **_kwargs)
         return val
     def DrawArrow(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_DrawArrow,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_DrawArrow(self, *_args, **_kwargs)
         return val
     def DeleteArrowHeadId(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_DeleteArrowHeadId,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_DeleteArrowHeadId(self, *_args, **_kwargs)
         return val
     def DeleteArrowHead(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_DeleteArrowHead,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_DeleteArrowHead(self, *_args, **_kwargs)
         return val
     def DeleteLineControlPoint(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_DeleteLineControlPoint,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_DeleteLineControlPoint(self, *_args, **_kwargs)
         return val
     def DrawArrows(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_DrawArrows,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_DrawArrows(self, *_args, **_kwargs)
         return val
     def DrawRegion(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_DrawRegion,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_DrawRegion(self, *_args, **_kwargs)
         return val
     def EraseRegion(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_EraseRegion,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_EraseRegion(self, *_args, **_kwargs)
         return val
     def FindArrowHeadId(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_FindArrowHeadId,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_FindArrowHeadId(self, *_args, **_kwargs)
         return val
     def FindArrowHead(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_FindArrowHead,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_FindArrowHead(self, *_args, **_kwargs)
         return val
     def FindLineEndPoints(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_FindLineEndPoints,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_FindLineEndPoints(self, *_args, **_kwargs)
         return val
     def FindLinePosition(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_FindLinePosition,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_FindLinePosition(self, *_args, **_kwargs)
         return val
     def FindMinimumWidth(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_FindMinimumWidth,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_FindMinimumWidth(self, *_args, **_kwargs)
         return val
     def FindNth(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_FindNth,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_FindNth(self, *_args, **_kwargs)
         return val
     def GetAttachmentFrom(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_GetAttachmentFrom,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_GetAttachmentFrom(self, *_args, **_kwargs)
         return val
     def GetAttachmentTo(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_GetAttachmentTo,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_GetAttachmentTo(self, *_args, **_kwargs)
         return val
     def GetEnds(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_GetEnds,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_GetEnds(self, *_args, **_kwargs)
         return val
     def GetFrom(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_GetFrom,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_GetFrom(self, *_args, **_kwargs)
         return val
     def GetLabelPosition(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_GetLabelPosition,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_GetLabelPosition(self, *_args, **_kwargs)
         return val
     def GetNextControlPoint(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_GetNextControlPoint,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_GetNextControlPoint(self, *_args, **_kwargs)
         if val: val = wxRealPointPtr(val) 
         return val
     def GetTo(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_GetTo,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_GetTo(self, *_args, **_kwargs)
         return val
     def Initialise(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_Initialise,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_Initialise(self, *_args, **_kwargs)
         return val
     def InsertLineControlPoint(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_InsertLineControlPoint,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_InsertLineControlPoint(self, *_args, **_kwargs)
         return val
     def IsEnd(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_IsEnd,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_IsEnd(self, *_args, **_kwargs)
         return val
     def IsSpline(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_IsSpline,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_IsSpline(self, *_args, **_kwargs)
         return val
     def MakeLineControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_MakeLineControlPoints,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_MakeLineControlPoints(self, *_args, **_kwargs)
         return val
     def GetLineControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_GetLineControlPoints,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_GetLineControlPoints(self, *_args, **_kwargs)
         return val
     def SetAttachmentFrom(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_SetAttachmentFrom,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_SetAttachmentFrom(self, *_args, **_kwargs)
         return val
     def SetAttachments(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_SetAttachments,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_SetAttachments(self, *_args, **_kwargs)
         return val
     def SetAttachmentTo(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_SetAttachmentTo,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_SetAttachmentTo(self, *_args, **_kwargs)
         return val
     def SetEnds(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_SetEnds,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_SetEnds(self, *_args, **_kwargs)
         return val
     def SetFrom(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_SetFrom,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_SetFrom(self, *_args, **_kwargs)
         return val
     def SetIgnoreOffsets(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_SetIgnoreOffsets,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_SetIgnoreOffsets(self, *_args, **_kwargs)
         return val
     def SetSpline(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_SetSpline,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_SetSpline(self, *_args, **_kwargs)
         return val
     def SetTo(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_SetTo,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_SetTo(self, *_args, **_kwargs)
         return val
     def Straighten(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_Straighten,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_Straighten(self, *_args, **_kwargs)
         return val
     def Unlink(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_Unlink,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_Unlink(self, *_args, **_kwargs)
         return val
     def base_OnDraw(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnDraw,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnDraw(self, *_args, **_kwargs)
         return val
     def base_OnDrawContents(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnDrawContents,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnDrawContents(self, *_args, **_kwargs)
         return val
     def base_OnDrawBranches(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnDrawBranches,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnDrawBranches(self, *_args, **_kwargs)
         return val
     def base_OnMoveLinks(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnMoveLinks,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnMoveLinks(self, *_args, **_kwargs)
         return val
     def base_OnErase(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnErase,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnErase(self, *_args, **_kwargs)
         return val
     def base_OnEraseContents(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnEraseContents,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnEraseContents(self, *_args, **_kwargs)
         return val
     def base_OnHighlight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnHighlight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnHighlight(self, *_args, **_kwargs)
         return val
     def base_OnLeftClick(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnLeftClick,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnLeftClick(self, *_args, **_kwargs)
         return val
     def base_OnLeftDoubleClick(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnLeftDoubleClick,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnLeftDoubleClick(self, *_args, **_kwargs)
         return val
     def base_OnRightClick(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnRightClick,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnRightClick(self, *_args, **_kwargs)
         return val
     def base_OnSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnSize(self, *_args, **_kwargs)
         return val
     def base_OnMovePre(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnMovePre,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnMovePre(self, *_args, **_kwargs)
         return val
     def base_OnMovePost(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnMovePost,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnMovePost(self, *_args, **_kwargs)
         return val
     def base_OnDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnDragRight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnDragRight(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnBeginDragRight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnBeginDragRight(self, *_args, **_kwargs)
         return val
     def base_OnEndDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnEndDragRight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnEndDragRight(self, *_args, **_kwargs)
         return val
     def base_OnDrawOutline(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnDrawOutline,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnDrawOutline(self, *_args, **_kwargs)
         return val
     def base_OnDrawControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnDrawControlPoints,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnDrawControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnEraseControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnEraseControlPoints,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnEraseControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnMoveLink(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnMoveLink,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnMoveLink(self, *_args, **_kwargs)
         return val
     def base_OnSizingDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnSizingDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnSizingDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnSizingBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnSizingBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnSizingEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnSizingEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnBeginSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnBeginSize(self, *_args, **_kwargs)
         return val
     def base_OnEndSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyLineShape_base_OnEndSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyLineShape_base_OnEndSize(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyLineShape instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyLineShape instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyLineShape(wxPyLineShapePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglshapes2c.new_wxPyLineShape,_args,_kwargs)
+        self.this = oglshapes2c.new_wxPyLineShape(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyLineShape)
         self._setOORInfo(self)
@@ -550,115 +550,115 @@ class wxPyPolygonShapePtr(wxPyShapePtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape__setCallbackInfo,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def Create(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_Create,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_Create(self, *_args, **_kwargs)
         return val
     def AddPolygonPoint(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_AddPolygonPoint,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_AddPolygonPoint(self, *_args, **_kwargs)
         return val
     def CalculatePolygonCentre(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_CalculatePolygonCentre,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_CalculatePolygonCentre(self, *_args, **_kwargs)
         return val
     def DeletePolygonPoint(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_DeletePolygonPoint,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_DeletePolygonPoint(self, *_args, **_kwargs)
         return val
     def GetPoints(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_GetPoints,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_GetPoints(self, *_args, **_kwargs)
         return val
     def UpdateOriginalPoints(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_UpdateOriginalPoints,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_UpdateOriginalPoints(self, *_args, **_kwargs)
         return val
     def base_OnDraw(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnDraw,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnDraw(self, *_args, **_kwargs)
         return val
     def base_OnDrawContents(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnDrawContents,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnDrawContents(self, *_args, **_kwargs)
         return val
     def base_OnDrawBranches(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnDrawBranches,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnDrawBranches(self, *_args, **_kwargs)
         return val
     def base_OnMoveLinks(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnMoveLinks,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnMoveLinks(self, *_args, **_kwargs)
         return val
     def base_OnErase(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnErase,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnErase(self, *_args, **_kwargs)
         return val
     def base_OnEraseContents(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnEraseContents,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnEraseContents(self, *_args, **_kwargs)
         return val
     def base_OnHighlight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnHighlight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnHighlight(self, *_args, **_kwargs)
         return val
     def base_OnLeftClick(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnLeftClick,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnLeftClick(self, *_args, **_kwargs)
         return val
     def base_OnLeftDoubleClick(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnLeftDoubleClick,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnLeftDoubleClick(self, *_args, **_kwargs)
         return val
     def base_OnRightClick(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnRightClick,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnRightClick(self, *_args, **_kwargs)
         return val
     def base_OnSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnSize(self, *_args, **_kwargs)
         return val
     def base_OnMovePre(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnMovePre,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnMovePre(self, *_args, **_kwargs)
         return val
     def base_OnMovePost(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnMovePost,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnMovePost(self, *_args, **_kwargs)
         return val
     def base_OnDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnDragRight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnDragRight(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnBeginDragRight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnBeginDragRight(self, *_args, **_kwargs)
         return val
     def base_OnEndDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnEndDragRight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnEndDragRight(self, *_args, **_kwargs)
         return val
     def base_OnDrawOutline(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnDrawOutline,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnDrawOutline(self, *_args, **_kwargs)
         return val
     def base_OnDrawControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnDrawControlPoints,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnDrawControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnEraseControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnEraseControlPoints,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnEraseControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnMoveLink(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnMoveLink,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnMoveLink(self, *_args, **_kwargs)
         return val
     def base_OnSizingDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnSizingDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnSizingDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnSizingBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnSizingBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnSizingEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnSizingEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnBeginSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnBeginSize(self, *_args, **_kwargs)
         return val
     def base_OnEndSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyPolygonShape_base_OnEndSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyPolygonShape_base_OnEndSize(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyPolygonShape instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyPolygonShape instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyPolygonShape(wxPyPolygonShapePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglshapes2c.new_wxPyPolygonShape,_args,_kwargs)
+        self.this = oglshapes2c.new_wxPyPolygonShape(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyPolygonShape)
         self._setOORInfo(self)
@@ -671,100 +671,100 @@ class wxPyTextShapePtr(wxPyRectangleShapePtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape__setCallbackInfo,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def base_OnDelete(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnDelete,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnDelete(self, *_args, **_kwargs)
         return val
     def base_OnDraw(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnDraw,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnDraw(self, *_args, **_kwargs)
         return val
     def base_OnDrawContents(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnDrawContents,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnDrawContents(self, *_args, **_kwargs)
         return val
     def base_OnDrawBranches(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnDrawBranches,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnDrawBranches(self, *_args, **_kwargs)
         return val
     def base_OnMoveLinks(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnMoveLinks,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnMoveLinks(self, *_args, **_kwargs)
         return val
     def base_OnErase(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnErase,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnErase(self, *_args, **_kwargs)
         return val
     def base_OnEraseContents(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnEraseContents,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnEraseContents(self, *_args, **_kwargs)
         return val
     def base_OnHighlight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnHighlight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnHighlight(self, *_args, **_kwargs)
         return val
     def base_OnLeftClick(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnLeftClick,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnLeftClick(self, *_args, **_kwargs)
         return val
     def base_OnLeftDoubleClick(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnLeftDoubleClick,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnLeftDoubleClick(self, *_args, **_kwargs)
         return val
     def base_OnRightClick(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnRightClick,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnRightClick(self, *_args, **_kwargs)
         return val
     def base_OnSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnSize(self, *_args, **_kwargs)
         return val
     def base_OnMovePre(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnMovePre,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnMovePre(self, *_args, **_kwargs)
         return val
     def base_OnMovePost(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnMovePost,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnMovePost(self, *_args, **_kwargs)
         return val
     def base_OnDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnDragRight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnDragRight(self, *_args, **_kwargs)
         return val
     def base_OnBeginDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnBeginDragRight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnBeginDragRight(self, *_args, **_kwargs)
         return val
     def base_OnEndDragRight(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnEndDragRight,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnEndDragRight(self, *_args, **_kwargs)
         return val
     def base_OnDrawOutline(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnDrawOutline,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnDrawOutline(self, *_args, **_kwargs)
         return val
     def base_OnDrawControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnDrawControlPoints,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnDrawControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnEraseControlPoints(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnEraseControlPoints,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnEraseControlPoints(self, *_args, **_kwargs)
         return val
     def base_OnMoveLink(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnMoveLink,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnMoveLink(self, *_args, **_kwargs)
         return val
     def base_OnSizingDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnSizingDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnSizingDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingBeginDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnSizingBeginDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnSizingBeginDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnSizingEndDragLeft(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnSizingEndDragLeft,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnSizingEndDragLeft(self, *_args, **_kwargs)
         return val
     def base_OnBeginSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnBeginSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnBeginSize(self, *_args, **_kwargs)
         return val
     def base_OnEndSize(self, *_args, **_kwargs):
-        val = apply(oglshapes2c.wxPyTextShape_base_OnEndSize,(self,) + _args, _kwargs)
+        val = oglshapes2c.wxPyTextShape_base_OnEndSize(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyTextShape instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyTextShape instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyTextShape(wxPyTextShapePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(oglshapes2c.new_wxPyTextShape,_args,_kwargs)
+        self.this = oglshapes2c.new_wxPyTextShape(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyTextShape)
         self._setOORInfo(self)
diff --git a/wxPython/contrib/stc/gtk/stc_.cpp b/wxPython/contrib/stc/gtk/stc_.cpp
index f522a3d620..7deb374c77 100644
--- a/wxPython/contrib/stc/gtk/stc_.cpp
+++ b/wxPython/contrib/stc/gtk/stc_.cpp
@@ -1649,6 +1649,43 @@ static PyObject *_wrap_wxStyledTextCtrl_MarkerPrevious(PyObject *self, PyObject
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_MarkerDefineBitmap(_swigobj,_swigarg0,_swigarg1)  (_swigobj->MarkerDefineBitmap(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_MarkerDefineBitmap(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    wxBitmap * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","markerNumber","bmp", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_MarkerDefineBitmap",_kwnames,&_argo0,&_arg1,&_argo2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_MarkerDefineBitmap. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxBitmap_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxStyledTextCtrl_MarkerDefineBitmap. Expected _wxBitmap_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_MarkerDefineBitmap(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_SetMarginType(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetMarginType(_swigarg0,_swigarg1))
 static PyObject *_wrap_wxStyledTextCtrl_SetMarginType(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -2275,6 +2312,38 @@ static PyObject *_wrap_wxStyledTextCtrl_StyleSetCharacterSet(PyObject *self, PyO
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_StyleSetHotSpot(_swigobj,_swigarg0,_swigarg1)  (_swigobj->StyleSetHotSpot(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_StyleSetHotSpot(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    bool  _arg2;
+    PyObject * _argo0 = 0;
+    int tempbool2;
+    char *_kwnames[] = { "self","style","hotspot", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oii:wxStyledTextCtrl_StyleSetHotSpot",_kwnames,&_argo0,&_arg1,&tempbool2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_StyleSetHotSpot. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg2 = (bool ) tempbool2;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_StyleSetHotSpot(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_SetSelForeground(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetSelForeground(_swigarg0,_swigarg1))
 static PyObject *_wrap_wxStyledTextCtrl_SetSelForeground(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -3859,6 +3928,128 @@ static PyObject *_wrap_wxStyledTextCtrl_AutoCompGetDropRestOfWord(PyObject *self
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_RegisterImage(_swigobj,_swigarg0,_swigarg1)  (_swigobj->RegisterImage(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_RegisterImage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    wxBitmap * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","type","bmp", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_RegisterImage",_kwnames,&_argo0,&_arg1,&_argo2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_RegisterImage. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxBitmap_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxStyledTextCtrl_RegisterImage. Expected _wxBitmap_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_RegisterImage(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_ClearRegisteredImages(_swigobj)  (_swigobj->ClearRegisteredImages())
+static PyObject *_wrap_wxStyledTextCtrl_ClearRegisteredImages(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_ClearRegisteredImages",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_ClearRegisteredImages. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_ClearRegisteredImages(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_AutoCompGetTypeSeparator(_swigobj)  (_swigobj->AutoCompGetTypeSeparator())
+static PyObject *_wrap_wxStyledTextCtrl_AutoCompGetTypeSeparator(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_AutoCompGetTypeSeparator",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_AutoCompGetTypeSeparator. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxStyledTextCtrl_AutoCompGetTypeSeparator(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_AutoCompSetTypeSeparator(_swigobj,_swigarg0)  (_swigobj->AutoCompSetTypeSeparator(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_AutoCompSetTypeSeparator(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","separatorCharacter", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_AutoCompSetTypeSeparator",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_AutoCompSetTypeSeparator. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_AutoCompSetTypeSeparator(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_SetIndent(_swigobj,_swigarg0)  (_swigobj->SetIndent(_swigarg0))
 static PyObject *_wrap_wxStyledTextCtrl_SetIndent(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -6229,6 +6420,78 @@ static PyObject *_wrap_wxStyledTextCtrl_CallTipSetBackground(PyObject *self, PyO
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_CallTipSetForeground(_swigobj,_swigarg0)  (_swigobj->CallTipSetForeground(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_CallTipSetForeground(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    wxColour * _arg1;
+    PyObject * _argo0 = 0;
+    wxColour  temp;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","fore", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxStyledTextCtrl_CallTipSetForeground",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_CallTipSetForeground. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = &temp;
+    if (! wxColour_helper(_obj1, &_arg1))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_CallTipSetForeground(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_CallTipSetForegroundHighlight(_swigobj,_swigarg0)  (_swigobj->CallTipSetForegroundHighlight(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_CallTipSetForegroundHighlight(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    wxColour * _arg1;
+    PyObject * _argo0 = 0;
+    wxColour  temp;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","fore", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxStyledTextCtrl_CallTipSetForegroundHighlight",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_CallTipSetForegroundHighlight. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = &temp;
+    if (! wxColour_helper(_obj1, &_arg1))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_CallTipSetForegroundHighlight(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_VisibleFromDocLine(_swigobj,_swigarg0)  (_swigobj->VisibleFromDocLine(_swigarg0))
 static PyObject *_wrap_wxStyledTextCtrl_VisibleFromDocLine(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -7209,26 +7472,29 @@ static PyObject *_wrap_wxStyledTextCtrl_TextHeight(PyObject *self, PyObject *arg
     return _resultobj;
 }
 
-#define wxStyledTextCtrl_HomeDisplay(_swigobj)  (_swigobj->HomeDisplay())
-static PyObject *_wrap_wxStyledTextCtrl_HomeDisplay(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxStyledTextCtrl_SetUseVerticalScrollBar(_swigobj,_swigarg0)  (_swigobj->SetUseVerticalScrollBar(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_SetUseVerticalScrollBar(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxStyledTextCtrl * _arg0;
+    bool  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    int tempbool1;
+    char *_kwnames[] = { "self","show", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_HomeDisplay",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_SetUseVerticalScrollBar",_kwnames,&_argo0,&tempbool1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_HomeDisplay. Expected _wxStyledTextCtrl_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetUseVerticalScrollBar. Expected _wxStyledTextCtrl_p.");
         return NULL;
         }
     }
+    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxStyledTextCtrl_HomeDisplay(_arg0);
+    wxStyledTextCtrl_SetUseVerticalScrollBar(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -7237,76 +7503,422 @@ static PyObject *_wrap_wxStyledTextCtrl_HomeDisplay(PyObject *self, PyObject *ar
     return _resultobj;
 }
 
-#define wxStyledTextCtrl_HomeDisplayExtend(_swigobj)  (_swigobj->HomeDisplayExtend())
-static PyObject *_wrap_wxStyledTextCtrl_HomeDisplayExtend(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxStyledTextCtrl_GetUseVerticalScrollBar(_swigobj)  (_swigobj->GetUseVerticalScrollBar())
+static PyObject *_wrap_wxStyledTextCtrl_GetUseVerticalScrollBar(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
+    bool  _result;
     wxStyledTextCtrl * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_HomeDisplayExtend",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_GetUseVerticalScrollBar",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_HomeDisplayExtend. Expected _wxStyledTextCtrl_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_GetUseVerticalScrollBar. Expected _wxStyledTextCtrl_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxStyledTextCtrl_HomeDisplayExtend(_arg0);
+    _result = (bool )wxStyledTextCtrl_GetUseVerticalScrollBar(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxStyledTextCtrl_LineEndDisplay(_swigobj)  (_swigobj->LineEndDisplay())
-static PyObject *_wrap_wxStyledTextCtrl_LineEndDisplay(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxStyledTextCtrl_AppendText(_swigobj,_swigarg0,_swigarg1)  (_swigobj->AppendText(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_AppendText(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    wxString * _arg2;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","length","text", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LineEndDisplay",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_AppendText",_kwnames,&_argo0,&_arg1,&_obj2)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LineEndDisplay. Expected _wxStyledTextCtrl_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_AppendText. Expected _wxStyledTextCtrl_p.");
         return NULL;
         }
     }
+{
+    _arg2 = wxString_in_helper(_obj2);
+    if (_arg2 == NULL)
+        return NULL;
+}
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxStyledTextCtrl_LineEndDisplay(_arg0);
+    wxStyledTextCtrl_AppendText(_arg0,_arg1,*_arg2);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
 }    Py_INCREF(Py_None);
     _resultobj = Py_None;
+{
+    if (_obj2)
+        delete _arg2;
+}
     return _resultobj;
 }
 
-#define wxStyledTextCtrl_LineEndDisplayExtend(_swigobj)  (_swigobj->LineEndDisplayExtend())
-static PyObject *_wrap_wxStyledTextCtrl_LineEndDisplayExtend(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxStyledTextCtrl_GetTwoPhaseDraw(_swigobj)  (_swigobj->GetTwoPhaseDraw())
+static PyObject *_wrap_wxStyledTextCtrl_GetTwoPhaseDraw(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
+    bool  _result;
     wxStyledTextCtrl * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LineEndDisplayExtend",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_GetTwoPhaseDraw",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LineEndDisplayExtend. Expected _wxStyledTextCtrl_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_GetTwoPhaseDraw. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxStyledTextCtrl_GetTwoPhaseDraw(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetTwoPhaseDraw(_swigobj,_swigarg0)  (_swigobj->SetTwoPhaseDraw(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_SetTwoPhaseDraw(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    char *_kwnames[] = { "self","twoPhase", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_SetTwoPhaseDraw",_kwnames,&_argo0,&tempbool1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetTwoPhaseDraw. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetTwoPhaseDraw(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_TargetFromSelection(_swigobj)  (_swigobj->TargetFromSelection())
+static PyObject *_wrap_wxStyledTextCtrl_TargetFromSelection(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_TargetFromSelection",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_TargetFromSelection. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_TargetFromSelection(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LinesJoin(_swigobj)  (_swigobj->LinesJoin())
+static PyObject *_wrap_wxStyledTextCtrl_LinesJoin(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LinesJoin",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LinesJoin. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_LinesJoin(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LinesSplit(_swigobj,_swigarg0)  (_swigobj->LinesSplit(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_LinesSplit(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","pixelWidth", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_LinesSplit",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LinesSplit. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_LinesSplit(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetFoldMarginColour(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetFoldMarginColour(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_SetFoldMarginColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    wxColour * _arg2;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    wxColour  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","useSetting","back", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_SetFoldMarginColour",_kwnames,&_argo0,&tempbool1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetFoldMarginColour. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    _arg2 = &temp;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetFoldMarginColour(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetFoldMarginHiColour(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetFoldMarginHiColour(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_SetFoldMarginHiColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    wxColour * _arg2;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    wxColour  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","useSetting","fore", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_SetFoldMarginHiColour",_kwnames,&_argo0,&tempbool1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetFoldMarginHiColour. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    _arg2 = &temp;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetFoldMarginHiColour(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LineDuplicate(_swigobj)  (_swigobj->LineDuplicate())
+static PyObject *_wrap_wxStyledTextCtrl_LineDuplicate(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LineDuplicate",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LineDuplicate. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_LineDuplicate(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_HomeDisplay(_swigobj)  (_swigobj->HomeDisplay())
+static PyObject *_wrap_wxStyledTextCtrl_HomeDisplay(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_HomeDisplay",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_HomeDisplay. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_HomeDisplay(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_HomeDisplayExtend(_swigobj)  (_swigobj->HomeDisplayExtend())
+static PyObject *_wrap_wxStyledTextCtrl_HomeDisplayExtend(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_HomeDisplayExtend",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_HomeDisplayExtend. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_HomeDisplayExtend(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LineEndDisplay(_swigobj)  (_swigobj->LineEndDisplay())
+static PyObject *_wrap_wxStyledTextCtrl_LineEndDisplay(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LineEndDisplay",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LineEndDisplay. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_LineEndDisplay(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LineEndDisplayExtend(_swigobj)  (_swigobj->LineEndDisplayExtend())
+static PyObject *_wrap_wxStyledTextCtrl_LineEndDisplayExtend(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LineEndDisplayExtend",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LineEndDisplayExtend. Expected _wxStyledTextCtrl_p.");
         return NULL;
         }
     }
@@ -8739,6 +9351,34 @@ static PyObject *_wrap_wxStyledTextCtrl_GetXOffset(PyObject *self, PyObject *arg
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_ChooseCaretX(_swigobj)  (_swigobj->ChooseCaretX())
+static PyObject *_wrap_wxStyledTextCtrl_ChooseCaretX(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_ChooseCaretX",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_ChooseCaretX. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_ChooseCaretX(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_SetXCaretPolicy(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetXCaretPolicy(_swigarg0,_swigarg1))
 static PyObject *_wrap_wxStyledTextCtrl_SetXCaretPolicy(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -8799,6 +9439,172 @@ static PyObject *_wrap_wxStyledTextCtrl_SetYCaretPolicy(PyObject *self, PyObject
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_SetPrintWrapMode(_swigobj,_swigarg0)  (_swigobj->SetPrintWrapMode(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_SetPrintWrapMode(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","mode", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_SetPrintWrapMode",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetPrintWrapMode. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetPrintWrapMode(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_GetPrintWrapMode(_swigobj)  (_swigobj->GetPrintWrapMode())
+static PyObject *_wrap_wxStyledTextCtrl_GetPrintWrapMode(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_GetPrintWrapMode",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_GetPrintWrapMode. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxStyledTextCtrl_GetPrintWrapMode(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetHotspotActiveForeground(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetHotspotActiveForeground(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_SetHotspotActiveForeground(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    wxColour * _arg2;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    wxColour  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","useSetting","fore", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_SetHotspotActiveForeground",_kwnames,&_argo0,&tempbool1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetHotspotActiveForeground. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    _arg2 = &temp;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetHotspotActiveForeground(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetHotspotActiveBackground(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetHotspotActiveBackground(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_SetHotspotActiveBackground(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    wxColour * _arg2;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    wxColour  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","useSetting","back", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_SetHotspotActiveBackground",_kwnames,&_argo0,&tempbool1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetHotspotActiveBackground. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    _arg2 = &temp;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetHotspotActiveBackground(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetHotspotActiveUnderline(_swigobj,_swigarg0)  (_swigobj->SetHotspotActiveUnderline(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_SetHotspotActiveUnderline(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    char *_kwnames[] = { "self","underline", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_SetHotspotActiveUnderline",_kwnames,&_argo0,&tempbool1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetHotspotActiveUnderline. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetHotspotActiveUnderline(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_StartRecord(_swigobj)  (_swigobj->StartRecord())
 static PyObject *_wrap_wxStyledTextCtrl_StartRecord(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -9586,6 +10392,84 @@ static PyObject *_wrap_wxStyledTextCtrl_SetLastKeydownProcessed(PyObject *self,
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_SaveFile(_swigobj,_swigarg0)  (_swigobj->SaveFile(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_SaveFile(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxStyledTextCtrl * _arg0;
+    wxString * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","filename", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxStyledTextCtrl_SaveFile",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SaveFile. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = wxString_in_helper(_obj1);
+    if (_arg1 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxStyledTextCtrl_SaveFile(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+{
+    if (_obj1)
+        delete _arg1;
+}
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LoadFile(_swigobj,_swigarg0)  (_swigobj->LoadFile(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_LoadFile(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxStyledTextCtrl * _arg0;
+    wxString * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","filename", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxStyledTextCtrl_LoadFile",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LoadFile. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = wxString_in_helper(_obj1);
+    if (_arg1 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxStyledTextCtrl_LoadFile(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+{
+    if (_obj1)
+        delete _arg1;
+}
+    return _resultobj;
+}
+
 static void *SwigwxStyledTextEventTowxCommandEvent(void *ptr) {
     wxStyledTextEvent *src;
     wxCommandEvent *dest;
@@ -11012,6 +11896,8 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextEvent_SetPosition", (PyCFunction) _wrap_wxStyledTextEvent_SetPosition, METH_VARARGS | METH_KEYWORDS },
 	 { "delete_wxStyledTextEvent", (PyCFunction) _wrap_delete_wxStyledTextEvent, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxStyledTextEvent", (PyCFunction) _wrap_new_wxStyledTextEvent, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_LoadFile", (PyCFunction) _wrap_wxStyledTextCtrl_LoadFile, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SaveFile", (PyCFunction) _wrap_wxStyledTextCtrl_SaveFile, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetLastKeydownProcessed", (PyCFunction) _wrap_wxStyledTextCtrl_SetLastKeydownProcessed, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_GetLastKeydownProcessed", (PyCFunction) _wrap_wxStyledTextCtrl_GetLastKeydownProcessed, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetHScrollBar", (PyCFunction) _wrap_wxStyledTextCtrl_SetHScrollBar, METH_VARARGS | METH_KEYWORDS },
@@ -11035,8 +11921,14 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_SetLexer", (PyCFunction) _wrap_wxStyledTextCtrl_SetLexer, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_StopRecord", (PyCFunction) _wrap_wxStyledTextCtrl_StopRecord, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_StartRecord", (PyCFunction) _wrap_wxStyledTextCtrl_StartRecord, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetHotspotActiveUnderline", (PyCFunction) _wrap_wxStyledTextCtrl_SetHotspotActiveUnderline, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetHotspotActiveBackground", (PyCFunction) _wrap_wxStyledTextCtrl_SetHotspotActiveBackground, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetHotspotActiveForeground", (PyCFunction) _wrap_wxStyledTextCtrl_SetHotspotActiveForeground, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_GetPrintWrapMode", (PyCFunction) _wrap_wxStyledTextCtrl_GetPrintWrapMode, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetPrintWrapMode", (PyCFunction) _wrap_wxStyledTextCtrl_SetPrintWrapMode, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetYCaretPolicy", (PyCFunction) _wrap_wxStyledTextCtrl_SetYCaretPolicy, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetXCaretPolicy", (PyCFunction) _wrap_wxStyledTextCtrl_SetXCaretPolicy, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_ChooseCaretX", (PyCFunction) _wrap_wxStyledTextCtrl_ChooseCaretX, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_GetXOffset", (PyCFunction) _wrap_wxStyledTextCtrl_GetXOffset, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetXOffset", (PyCFunction) _wrap_wxStyledTextCtrl_SetXOffset, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_DelLineRight", (PyCFunction) _wrap_wxStyledTextCtrl_DelLineRight, METH_VARARGS | METH_KEYWORDS },
@@ -11088,6 +11980,17 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_LineEndDisplay", (PyCFunction) _wrap_wxStyledTextCtrl_LineEndDisplay, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_HomeDisplayExtend", (PyCFunction) _wrap_wxStyledTextCtrl_HomeDisplayExtend, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_HomeDisplay", (PyCFunction) _wrap_wxStyledTextCtrl_HomeDisplay, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_LineDuplicate", (PyCFunction) _wrap_wxStyledTextCtrl_LineDuplicate, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetFoldMarginHiColour", (PyCFunction) _wrap_wxStyledTextCtrl_SetFoldMarginHiColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetFoldMarginColour", (PyCFunction) _wrap_wxStyledTextCtrl_SetFoldMarginColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_LinesSplit", (PyCFunction) _wrap_wxStyledTextCtrl_LinesSplit, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_LinesJoin", (PyCFunction) _wrap_wxStyledTextCtrl_LinesJoin, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_TargetFromSelection", (PyCFunction) _wrap_wxStyledTextCtrl_TargetFromSelection, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetTwoPhaseDraw", (PyCFunction) _wrap_wxStyledTextCtrl_SetTwoPhaseDraw, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_GetTwoPhaseDraw", (PyCFunction) _wrap_wxStyledTextCtrl_GetTwoPhaseDraw, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_AppendText", (PyCFunction) _wrap_wxStyledTextCtrl_AppendText, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_GetUseVerticalScrollBar", (PyCFunction) _wrap_wxStyledTextCtrl_GetUseVerticalScrollBar, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetUseVerticalScrollBar", (PyCFunction) _wrap_wxStyledTextCtrl_SetUseVerticalScrollBar, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_TextHeight", (PyCFunction) _wrap_wxStyledTextCtrl_TextHeight, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_GetEndAtLastLine", (PyCFunction) _wrap_wxStyledTextCtrl_GetEndAtLastLine, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetEndAtLastLine", (PyCFunction) _wrap_wxStyledTextCtrl_SetEndAtLastLine, METH_VARARGS | METH_KEYWORDS },
@@ -11121,6 +12024,8 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_SetFoldLevel", (PyCFunction) _wrap_wxStyledTextCtrl_SetFoldLevel, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_DocLineFromVisible", (PyCFunction) _wrap_wxStyledTextCtrl_DocLineFromVisible, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_VisibleFromDocLine", (PyCFunction) _wrap_wxStyledTextCtrl_VisibleFromDocLine, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_CallTipSetForegroundHighlight", (PyCFunction) _wrap_wxStyledTextCtrl_CallTipSetForegroundHighlight, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_CallTipSetForeground", (PyCFunction) _wrap_wxStyledTextCtrl_CallTipSetForeground, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_CallTipSetBackground", (PyCFunction) _wrap_wxStyledTextCtrl_CallTipSetBackground, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_CallTipSetHighlight", (PyCFunction) _wrap_wxStyledTextCtrl_CallTipSetHighlight, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_CallTipPosAtStart", (PyCFunction) _wrap_wxStyledTextCtrl_CallTipPosAtStart, METH_VARARGS | METH_KEYWORDS },
@@ -11198,6 +12103,10 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_SetUseTabs", (PyCFunction) _wrap_wxStyledTextCtrl_SetUseTabs, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_GetIndent", (PyCFunction) _wrap_wxStyledTextCtrl_GetIndent, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetIndent", (PyCFunction) _wrap_wxStyledTextCtrl_SetIndent, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_AutoCompSetTypeSeparator", (PyCFunction) _wrap_wxStyledTextCtrl_AutoCompSetTypeSeparator, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_AutoCompGetTypeSeparator", (PyCFunction) _wrap_wxStyledTextCtrl_AutoCompGetTypeSeparator, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_ClearRegisteredImages", (PyCFunction) _wrap_wxStyledTextCtrl_ClearRegisteredImages, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_RegisterImage", (PyCFunction) _wrap_wxStyledTextCtrl_RegisterImage, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_AutoCompGetDropRestOfWord", (PyCFunction) _wrap_wxStyledTextCtrl_AutoCompGetDropRestOfWord, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_AutoCompSetDropRestOfWord", (PyCFunction) _wrap_wxStyledTextCtrl_AutoCompSetDropRestOfWord, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_AutoCompGetAutoHide", (PyCFunction) _wrap_wxStyledTextCtrl_AutoCompGetAutoHide, METH_VARARGS | METH_KEYWORDS },
@@ -11248,6 +12157,7 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_SetCaretForeground", (PyCFunction) _wrap_wxStyledTextCtrl_SetCaretForeground, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetSelBackground", (PyCFunction) _wrap_wxStyledTextCtrl_SetSelBackground, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetSelForeground", (PyCFunction) _wrap_wxStyledTextCtrl_SetSelForeground, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_StyleSetHotSpot", (PyCFunction) _wrap_wxStyledTextCtrl_StyleSetHotSpot, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_StyleSetCharacterSet", (PyCFunction) _wrap_wxStyledTextCtrl_StyleSetCharacterSet, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_StyleSetCase", (PyCFunction) _wrap_wxStyledTextCtrl_StyleSetCase, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_StyleSetUnderline", (PyCFunction) _wrap_wxStyledTextCtrl_StyleSetUnderline, METH_VARARGS | METH_KEYWORDS },
@@ -11268,6 +12178,7 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_SetMarginWidth", (PyCFunction) _wrap_wxStyledTextCtrl_SetMarginWidth, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_GetMarginType", (PyCFunction) _wrap_wxStyledTextCtrl_GetMarginType, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetMarginType", (PyCFunction) _wrap_wxStyledTextCtrl_SetMarginType, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_MarkerDefineBitmap", (PyCFunction) _wrap_wxStyledTextCtrl_MarkerDefineBitmap, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_MarkerPrevious", (PyCFunction) _wrap_wxStyledTextCtrl_MarkerPrevious, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_MarkerNext", (PyCFunction) _wrap_wxStyledTextCtrl_MarkerNext, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_MarkerGet", (PyCFunction) _wrap_wxStyledTextCtrl_MarkerGet, METH_VARARGS | METH_KEYWORDS },
@@ -11455,6 +12366,7 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_EOL_CR", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_EOL_LF", PyInt_FromLong((long) 2));
 	 PyDict_SetItemString(d,"wxSTC_CP_UTF8", PyInt_FromLong((long) 65001));
+	 PyDict_SetItemString(d,"wxSTC_CP_DBCS", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_MARKER_MAX", PyInt_FromLong((long) 31));
 	 PyDict_SetItemString(d,"wxSTC_MARK_CIRCLE", PyInt_FromLong((long) 0));
 	 PyDict_SetItemString(d,"wxSTC_MARK_ROUNDRECT", PyInt_FromLong((long) 1));
@@ -11481,6 +12393,7 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_MARK_BACKGROUND", PyInt_FromLong((long) 22));
 	 PyDict_SetItemString(d,"wxSTC_MARK_DOTDOTDOT", PyInt_FromLong((long) 23));
 	 PyDict_SetItemString(d,"wxSTC_MARK_ARROWS", PyInt_FromLong((long) 24));
+	 PyDict_SetItemString(d,"wxSTC_MARK_PIXMAP", PyInt_FromLong((long) 25));
 	 PyDict_SetItemString(d,"wxSTC_MARK_CHARACTER", PyInt_FromLong((long) 10000));
 	 PyDict_SetItemString(d,"wxSTC_MARKNUM_FOLDEREND", PyInt_FromLong((long) 25));
 	 PyDict_SetItemString(d,"wxSTC_MARKNUM_FOLDEROPENMID", PyInt_FromLong((long) 26));
@@ -11541,10 +12454,21 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_FIND_MATCHCASE", PyInt_FromLong((long) 4));
 	 PyDict_SetItemString(d,"wxSTC_FIND_WORDSTART", PyInt_FromLong((long) 0x00100000));
 	 PyDict_SetItemString(d,"wxSTC_FIND_REGEXP", PyInt_FromLong((long) 0x00200000));
+	 PyDict_SetItemString(d,"wxSTC_FIND_POSIX", PyInt_FromLong((long) 0x00400000));
 	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELBASE", PyInt_FromLong((long) 0x400));
 	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELWHITEFLAG", PyInt_FromLong((long) 0x1000));
 	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELHEADERFLAG", PyInt_FromLong((long) 0x2000));
+	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELBOXHEADERFLAG", PyInt_FromLong((long) 0x4000));
+	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELBOXFOOTERFLAG", PyInt_FromLong((long) 0x8000));
+	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELCONTRACTED", PyInt_FromLong((long) 0x10000));
+	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELUNINDENT", PyInt_FromLong((long) 0x20000));
 	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELNUMBERMASK", PyInt_FromLong((long) 0x0FFF));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED", PyInt_FromLong((long) 0x0002));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED", PyInt_FromLong((long) 0x0004));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_LINEAFTER_EXPANDED", PyInt_FromLong((long) 0x0008));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED", PyInt_FromLong((long) 0x0010));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_LEVELNUMBERS", PyInt_FromLong((long) 0x0040));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_BOX", PyInt_FromLong((long) 0x0001));
 	 PyDict_SetItemString(d,"wxSTC_TIME_FOREVER", PyInt_FromLong((long) 10000000));
 	 PyDict_SetItemString(d,"wxSTC_WRAP_NONE", PyInt_FromLong((long) 0));
 	 PyDict_SetItemString(d,"wxSTC_WRAP_WORD", PyInt_FromLong((long) 1));
@@ -11556,7 +12480,7 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_EDGE_LINE", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_EDGE_BACKGROUND", PyInt_FromLong((long) 2));
 	 PyDict_SetItemString(d,"wxSTC_CURSORNORMAL", PyInt_FromLong((long) -1));
-	 PyDict_SetItemString(d,"wxSTC_CURSORWAIT", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_CURSORWAIT", PyInt_FromLong((long) 4));
 	 PyDict_SetItemString(d,"wxSTC_VISIBLE_SLOP", PyInt_FromLong((long) 0x01));
 	 PyDict_SetItemString(d,"wxSTC_VISIBLE_STRICT", PyInt_FromLong((long) 0x04));
 	 PyDict_SetItemString(d,"wxSTC_CARET_SLOP", PyInt_FromLong((long) 0x01));
@@ -11629,6 +12553,12 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_LEX_BAAN", PyInt_FromLong((long) 31));
 	 PyDict_SetItemString(d,"wxSTC_LEX_MATLAB", PyInt_FromLong((long) 32));
 	 PyDict_SetItemString(d,"wxSTC_LEX_SCRIPTOL", PyInt_FromLong((long) 33));
+	 PyDict_SetItemString(d,"wxSTC_LEX_ASM", PyInt_FromLong((long) 34));
+	 PyDict_SetItemString(d,"wxSTC_LEX_CPPNOCASE", PyInt_FromLong((long) 35));
+	 PyDict_SetItemString(d,"wxSTC_LEX_FORTRAN", PyInt_FromLong((long) 36));
+	 PyDict_SetItemString(d,"wxSTC_LEX_F77", PyInt_FromLong((long) 37));
+	 PyDict_SetItemString(d,"wxSTC_LEX_CSS", PyInt_FromLong((long) 38));
+	 PyDict_SetItemString(d,"wxSTC_LEX_POV", PyInt_FromLong((long) 39));
 	 PyDict_SetItemString(d,"wxSTC_LEX_AUTOMATIC", PyInt_FromLong((long) 1000));
 	 PyDict_SetItemString(d,"wxSTC_P_DEFAULT", PyInt_FromLong((long) 0));
 	 PyDict_SetItemString(d,"wxSTC_P_COMMENTLINE", PyInt_FromLong((long) 1));
@@ -11854,6 +12784,9 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_ERR_DIFF_ADDITION", PyInt_FromLong((long) 11));
 	 PyDict_SetItemString(d,"wxSTC_ERR_DIFF_DELETION", PyInt_FromLong((long) 12));
 	 PyDict_SetItemString(d,"wxSTC_ERR_DIFF_MESSAGE", PyInt_FromLong((long) 13));
+	 PyDict_SetItemString(d,"wxSTC_ERR_PHP", PyInt_FromLong((long) 14));
+	 PyDict_SetItemString(d,"wxSTC_ERR_ELF", PyInt_FromLong((long) 15));
+	 PyDict_SetItemString(d,"wxSTC_ERR_IFC", PyInt_FromLong((long) 16));
 	 PyDict_SetItemString(d,"wxSTC_BAT_DEFAULT", PyInt_FromLong((long) 0));
 	 PyDict_SetItemString(d,"wxSTC_BAT_COMMENT", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_BAT_WORD", PyInt_FromLong((long) 2));
@@ -11890,22 +12823,29 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_AVE_COMMENT", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_AVE_NUMBER", PyInt_FromLong((long) 2));
 	 PyDict_SetItemString(d,"wxSTC_AVE_WORD", PyInt_FromLong((long) 3));
-	 PyDict_SetItemString(d,"wxSTC_AVE_KEYWORD", PyInt_FromLong((long) 4));
-	 PyDict_SetItemString(d,"wxSTC_AVE_STATEMENT", PyInt_FromLong((long) 5));
 	 PyDict_SetItemString(d,"wxSTC_AVE_STRING", PyInt_FromLong((long) 6));
 	 PyDict_SetItemString(d,"wxSTC_AVE_ENUM", PyInt_FromLong((long) 7));
 	 PyDict_SetItemString(d,"wxSTC_AVE_STRINGEOL", PyInt_FromLong((long) 8));
 	 PyDict_SetItemString(d,"wxSTC_AVE_IDENTIFIER", PyInt_FromLong((long) 9));
 	 PyDict_SetItemString(d,"wxSTC_AVE_OPERATOR", PyInt_FromLong((long) 10));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD1", PyInt_FromLong((long) 11));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD2", PyInt_FromLong((long) 12));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD3", PyInt_FromLong((long) 13));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD4", PyInt_FromLong((long) 14));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD5", PyInt_FromLong((long) 15));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD6", PyInt_FromLong((long) 16));
 	 PyDict_SetItemString(d,"wxSTC_ADA_DEFAULT", PyInt_FromLong((long) 0));
-	 PyDict_SetItemString(d,"wxSTC_ADA_COMMENT", PyInt_FromLong((long) 1));
-	 PyDict_SetItemString(d,"wxSTC_ADA_NUMBER", PyInt_FromLong((long) 2));
-	 PyDict_SetItemString(d,"wxSTC_ADA_WORD", PyInt_FromLong((long) 3));
-	 PyDict_SetItemString(d,"wxSTC_ADA_STRING", PyInt_FromLong((long) 4));
+	 PyDict_SetItemString(d,"wxSTC_ADA_WORD", PyInt_FromLong((long) 1));
+	 PyDict_SetItemString(d,"wxSTC_ADA_IDENTIFIER", PyInt_FromLong((long) 2));
+	 PyDict_SetItemString(d,"wxSTC_ADA_NUMBER", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_ADA_DELIMITER", PyInt_FromLong((long) 4));
 	 PyDict_SetItemString(d,"wxSTC_ADA_CHARACTER", PyInt_FromLong((long) 5));
-	 PyDict_SetItemString(d,"wxSTC_ADA_OPERATOR", PyInt_FromLong((long) 6));
-	 PyDict_SetItemString(d,"wxSTC_ADA_IDENTIFIER", PyInt_FromLong((long) 7));
+	 PyDict_SetItemString(d,"wxSTC_ADA_CHARACTEREOL", PyInt_FromLong((long) 6));
+	 PyDict_SetItemString(d,"wxSTC_ADA_STRING", PyInt_FromLong((long) 7));
 	 PyDict_SetItemString(d,"wxSTC_ADA_STRINGEOL", PyInt_FromLong((long) 8));
+	 PyDict_SetItemString(d,"wxSTC_ADA_LABEL", PyInt_FromLong((long) 9));
+	 PyDict_SetItemString(d,"wxSTC_ADA_COMMENTLINE", PyInt_FromLong((long) 10));
+	 PyDict_SetItemString(d,"wxSTC_ADA_ILLEGAL", PyInt_FromLong((long) 11));
 	 PyDict_SetItemString(d,"wxSTC_BAAN_DEFAULT", PyInt_FromLong((long) 0));
 	 PyDict_SetItemString(d,"wxSTC_BAAN_COMMENT", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_BAAN_COMMENTDOC", PyInt_FromLong((long) 2));
@@ -11973,6 +12913,58 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_SCRIPTOL_COMMENTDOCKEYWORD", PyInt_FromLong((long) 17));
 	 PyDict_SetItemString(d,"wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR", PyInt_FromLong((long) 18));
 	 PyDict_SetItemString(d,"wxSTC_SCRIPTOL_COMMENTBASIC", PyInt_FromLong((long) 19));
+	 PyDict_SetItemString(d,"wxSTC_ASM_DEFAULT", PyInt_FromLong((long) 0));
+	 PyDict_SetItemString(d,"wxSTC_ASM_COMMENT", PyInt_FromLong((long) 1));
+	 PyDict_SetItemString(d,"wxSTC_ASM_NUMBER", PyInt_FromLong((long) 2));
+	 PyDict_SetItemString(d,"wxSTC_ASM_STRING", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_ASM_OPERATOR", PyInt_FromLong((long) 4));
+	 PyDict_SetItemString(d,"wxSTC_ASM_IDENTIFIER", PyInt_FromLong((long) 5));
+	 PyDict_SetItemString(d,"wxSTC_ASM_CPUINSTRUCTION", PyInt_FromLong((long) 6));
+	 PyDict_SetItemString(d,"wxSTC_ASM_MATHINSTRUCTION", PyInt_FromLong((long) 7));
+	 PyDict_SetItemString(d,"wxSTC_ASM_REGISTER", PyInt_FromLong((long) 8));
+	 PyDict_SetItemString(d,"wxSTC_ASM_DIRECTIVE", PyInt_FromLong((long) 9));
+	 PyDict_SetItemString(d,"wxSTC_ASM_DIRECTIVEOPERAND", PyInt_FromLong((long) 10));
+	 PyDict_SetItemString(d,"wxSTC_F_DEFAULT", PyInt_FromLong((long) 0));
+	 PyDict_SetItemString(d,"wxSTC_F_COMMENT", PyInt_FromLong((long) 1));
+	 PyDict_SetItemString(d,"wxSTC_F_NUMBER", PyInt_FromLong((long) 2));
+	 PyDict_SetItemString(d,"wxSTC_F_STRING1", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_F_STRING2", PyInt_FromLong((long) 4));
+	 PyDict_SetItemString(d,"wxSTC_F_STRINGEOL", PyInt_FromLong((long) 5));
+	 PyDict_SetItemString(d,"wxSTC_F_OPERATOR", PyInt_FromLong((long) 6));
+	 PyDict_SetItemString(d,"wxSTC_F_IDENTIFIER", PyInt_FromLong((long) 7));
+	 PyDict_SetItemString(d,"wxSTC_F_WORD", PyInt_FromLong((long) 8));
+	 PyDict_SetItemString(d,"wxSTC_F_WORD2", PyInt_FromLong((long) 9));
+	 PyDict_SetItemString(d,"wxSTC_F_WORD3", PyInt_FromLong((long) 10));
+	 PyDict_SetItemString(d,"wxSTC_F_PREPROCESSOR", PyInt_FromLong((long) 11));
+	 PyDict_SetItemString(d,"wxSTC_F_OPERATOR2", PyInt_FromLong((long) 12));
+	 PyDict_SetItemString(d,"wxSTC_F_LABEL", PyInt_FromLong((long) 13));
+	 PyDict_SetItemString(d,"wxSTC_F_CONTINUATION", PyInt_FromLong((long) 14));
+	 PyDict_SetItemString(d,"wxSTC_CSS_DEFAULT", PyInt_FromLong((long) 0));
+	 PyDict_SetItemString(d,"wxSTC_CSS_TAG", PyInt_FromLong((long) 1));
+	 PyDict_SetItemString(d,"wxSTC_CSS_CLASS", PyInt_FromLong((long) 2));
+	 PyDict_SetItemString(d,"wxSTC_CSS_PSEUDOCLASS", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_CSS_UNKNOWN_PSEUDOCLASS", PyInt_FromLong((long) 4));
+	 PyDict_SetItemString(d,"wxSTC_CSS_OPERATOR", PyInt_FromLong((long) 5));
+	 PyDict_SetItemString(d,"wxSTC_CSS_IDENTIFIER", PyInt_FromLong((long) 6));
+	 PyDict_SetItemString(d,"wxSTC_CSS_UNKNOWN_IDENTIFIER", PyInt_FromLong((long) 7));
+	 PyDict_SetItemString(d,"wxSTC_CSS_VALUE", PyInt_FromLong((long) 8));
+	 PyDict_SetItemString(d,"wxSTC_CSS_COMMENT", PyInt_FromLong((long) 9));
+	 PyDict_SetItemString(d,"wxSTC_CSS_ID", PyInt_FromLong((long) 10));
+	 PyDict_SetItemString(d,"wxSTC_CSS_IMPORTANT", PyInt_FromLong((long) 11));
+	 PyDict_SetItemString(d,"wxSTC_CSS_DIRECTIVE", PyInt_FromLong((long) 12));
+	 PyDict_SetItemString(d,"wxSTC_CSS_DOUBLESTRING", PyInt_FromLong((long) 13));
+	 PyDict_SetItemString(d,"wxSTC_CSS_SINGLESTRING", PyInt_FromLong((long) 14));
+	 PyDict_SetItemString(d,"wxSTC_POV_DEFAULT", PyInt_FromLong((long) 0));
+	 PyDict_SetItemString(d,"wxSTC_POV_COMMENT", PyInt_FromLong((long) 1));
+	 PyDict_SetItemString(d,"wxSTC_POV_COMMENTLINE", PyInt_FromLong((long) 2));
+	 PyDict_SetItemString(d,"wxSTC_POV_COMMENTDOC", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_POV_NUMBER", PyInt_FromLong((long) 4));
+	 PyDict_SetItemString(d,"wxSTC_POV_WORD", PyInt_FromLong((long) 5));
+	 PyDict_SetItemString(d,"wxSTC_POV_STRING", PyInt_FromLong((long) 6));
+	 PyDict_SetItemString(d,"wxSTC_POV_OPERATOR", PyInt_FromLong((long) 7));
+	 PyDict_SetItemString(d,"wxSTC_POV_IDENTIFIER", PyInt_FromLong((long) 8));
+	 PyDict_SetItemString(d,"wxSTC_POV_BRACE", PyInt_FromLong((long) 9));
+	 PyDict_SetItemString(d,"wxSTC_POV_WORD2", PyInt_FromLong((long) 10));
 	 PyDict_SetItemString(d,"wxSTC_CMD_REDO", PyInt_FromLong((long) 2011));
 	 PyDict_SetItemString(d,"wxSTC_CMD_SELECTALL", PyInt_FromLong((long) 2013));
 	 PyDict_SetItemString(d,"wxSTC_CMD_UNDO", PyInt_FromLong((long) 2176));
@@ -12020,6 +13012,7 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINECUT", PyInt_FromLong((long) 2337));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINEDELETE", PyInt_FromLong((long) 2338));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINETRANSPOSE", PyInt_FromLong((long) 2339));
+	 PyDict_SetItemString(d,"wxSTC_CMD_LINEDUPLICATE", PyInt_FromLong((long) 2404));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LOWERCASE", PyInt_FromLong((long) 2340));
 	 PyDict_SetItemString(d,"wxSTC_CMD_UPPERCASE", PyInt_FromLong((long) 2341));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINESCROLLDOWN", PyInt_FromLong((long) 2342));
@@ -12029,12 +13022,22 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_CMD_HOMEDISPLAYEXTEND", PyInt_FromLong((long) 2346));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINEENDDISPLAY", PyInt_FromLong((long) 2347));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINEENDDISPLAYEXTEND", PyInt_FromLong((long) 2348));
+	 PyDict_SetItemString(d,"wxSTC_CMD_HOMEWRAP", PyInt_FromLong((long) 2349));
+	 PyDict_SetItemString(d,"wxSTC_CMD_HOMEWRAPEXTEND", PyInt_FromLong((long) 2450));
+	 PyDict_SetItemString(d,"wxSTC_CMD_LINEENDWRAP", PyInt_FromLong((long) 2451));
+	 PyDict_SetItemString(d,"wxSTC_CMD_LINEENDWRAPEXTEND", PyInt_FromLong((long) 2452));
+	 PyDict_SetItemString(d,"wxSTC_CMD_VCHOMEWRAP", PyInt_FromLong((long) 2453));
+	 PyDict_SetItemString(d,"wxSTC_CMD_VCHOMEWRAPEXTEND", PyInt_FromLong((long) 2454));
 	 PyDict_SetItemString(d,"wxSTC_CMD_WORDPARTLEFT", PyInt_FromLong((long) 2390));
 	 PyDict_SetItemString(d,"wxSTC_CMD_WORDPARTLEFTEXTEND", PyInt_FromLong((long) 2391));
 	 PyDict_SetItemString(d,"wxSTC_CMD_WORDPARTRIGHT", PyInt_FromLong((long) 2392));
 	 PyDict_SetItemString(d,"wxSTC_CMD_WORDPARTRIGHTEXTEND", PyInt_FromLong((long) 2393));
 	 PyDict_SetItemString(d,"wxSTC_CMD_DELLINELEFT", PyInt_FromLong((long) 2395));
 	 PyDict_SetItemString(d,"wxSTC_CMD_DELLINERIGHT", PyInt_FromLong((long) 2396));
+	 PyDict_SetItemString(d,"wxSTC_CMD_PARADOWN", PyInt_FromLong((long) 2413));
+	 PyDict_SetItemString(d,"wxSTC_CMD_PARADOWNEXTEND", PyInt_FromLong((long) 2414));
+	 PyDict_SetItemString(d,"wxSTC_CMD_PARAUP", PyInt_FromLong((long) 2415));
+	 PyDict_SetItemString(d,"wxSTC_CMD_PARAUPEXTEND", PyInt_FromLong((long) 2416));
 	 PyDict_SetItemString(d,"STC_USE_DND", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxEVT_STC_CHANGE", PyInt_FromLong((long) wxEVT_STC_CHANGE));
 	 PyDict_SetItemString(d,"wxEVT_STC_STYLENEEDED", PyInt_FromLong((long) wxEVT_STC_STYLENEEDED));
@@ -12059,6 +13062,9 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxEVT_STC_DRAG_OVER", PyInt_FromLong((long) wxEVT_STC_DRAG_OVER));
 	 PyDict_SetItemString(d,"wxEVT_STC_DO_DROP", PyInt_FromLong((long) wxEVT_STC_DO_DROP));
 	 PyDict_SetItemString(d,"wxEVT_STC_ZOOM", PyInt_FromLong((long) wxEVT_STC_ZOOM));
+	 PyDict_SetItemString(d,"wxEVT_STC_HOTSPOT_CLICK", PyInt_FromLong((long) wxEVT_STC_HOTSPOT_CLICK));
+	 PyDict_SetItemString(d,"wxEVT_STC_HOTSPOT_DCLICK", PyInt_FromLong((long) wxEVT_STC_HOTSPOT_DCLICK));
+	 PyDict_SetItemString(d,"wxEVT_STC_CALLTIP_CLICK", PyInt_FromLong((long) wxEVT_STC_CALLTIP_CLICK));
 
 
     wxClassInfo::CleanUpClasses();
diff --git a/wxPython/contrib/stc/gtk/stc_.py b/wxPython/contrib/stc/gtk/stc_.py
index a3a4fef4a9..93e7f892ef 100644
--- a/wxPython/contrib/stc/gtk/stc_.py
+++ b/wxPython/contrib/stc/gtk/stc_.py
@@ -112,930 +112,1019 @@ def EVT_STC_DO_DROP(win, id, func):
 def EVT_STC_ZOOM(win, id, func):
     win.Connect(id, -1, wxEVT_STC_ZOOM, func)
 
+def EVT_STC_HOTSPOT_CLICK(win, id, func):
+    win.Connect(id, -1, wxEVT_STC_HOTSPOT_CLICK, func)
+
+def EVT_STC_HOTSPOT_DCLICK(win, id, func):
+    win.Connect(id, -1, wxEVT_STC_HOTSPOT_DCLICK, func)
+
+def EVT_STC_CALLTIP_CLICK(win, id, func):
+    win.Connect(id, -1, wxEVT_STC_CALLTIP_CLICK, func)
 
 class wxStyledTextCtrlPtr(wxControlPtr):
     def __init__(self,this):
         self.this = this
         self.thisown = 0
     def AddText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AddText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AddText(self, *_args, **_kwargs)
         return val
     def AddStyledText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AddStyledText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AddStyledText(self, *_args, **_kwargs)
         return val
     def InsertText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_InsertText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_InsertText(self, *_args, **_kwargs)
         return val
     def ClearAll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ClearAll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ClearAll(self, *_args, **_kwargs)
         return val
     def ClearDocumentStyle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ClearDocumentStyle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ClearDocumentStyle(self, *_args, **_kwargs)
         return val
     def GetLength(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLength,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLength(self, *_args, **_kwargs)
         return val
     def GetCharAt(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCharAt,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCharAt(self, *_args, **_kwargs)
         return val
     def GetCurrentPos(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCurrentPos,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCurrentPos(self, *_args, **_kwargs)
         return val
     def GetAnchor(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetAnchor,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetAnchor(self, *_args, **_kwargs)
         return val
     def GetStyleAt(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetStyleAt,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetStyleAt(self, *_args, **_kwargs)
         return val
     def Redo(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Redo,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Redo(self, *_args, **_kwargs)
         return val
     def SetUndoCollection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetUndoCollection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetUndoCollection(self, *_args, **_kwargs)
         return val
     def SelectAll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SelectAll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SelectAll(self, *_args, **_kwargs)
         return val
     def SetSavePoint(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSavePoint,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSavePoint(self, *_args, **_kwargs)
         return val
     def GetStyledText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetStyledText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetStyledText(self, *_args, **_kwargs)
         return val
     def CanRedo(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CanRedo,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CanRedo(self, *_args, **_kwargs)
         return val
     def MarkerLineFromHandle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerLineFromHandle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerLineFromHandle(self, *_args, **_kwargs)
         return val
     def MarkerDeleteHandle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerDeleteHandle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerDeleteHandle(self, *_args, **_kwargs)
         return val
     def GetUndoCollection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetUndoCollection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetUndoCollection(self, *_args, **_kwargs)
         return val
     def GetViewWhiteSpace(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetViewWhiteSpace,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetViewWhiteSpace(self, *_args, **_kwargs)
         return val
     def SetViewWhiteSpace(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetViewWhiteSpace,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetViewWhiteSpace(self, *_args, **_kwargs)
         return val
     def PositionFromPoint(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_PositionFromPoint,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_PositionFromPoint(self, *_args, **_kwargs)
         return val
     def PositionFromPointClose(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_PositionFromPointClose,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_PositionFromPointClose(self, *_args, **_kwargs)
         return val
     def GotoLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GotoLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GotoLine(self, *_args, **_kwargs)
         return val
     def GotoPos(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GotoPos,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GotoPos(self, *_args, **_kwargs)
         return val
     def SetAnchor(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetAnchor,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetAnchor(self, *_args, **_kwargs)
         return val
     def GetCurLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCurLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCurLine(self, *_args, **_kwargs)
         return val
     def GetEndStyled(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEndStyled,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEndStyled(self, *_args, **_kwargs)
         return val
     def ConvertEOLs(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ConvertEOLs,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ConvertEOLs(self, *_args, **_kwargs)
         return val
     def GetEOLMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEOLMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEOLMode(self, *_args, **_kwargs)
         return val
     def SetEOLMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetEOLMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetEOLMode(self, *_args, **_kwargs)
         return val
     def StartStyling(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StartStyling,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StartStyling(self, *_args, **_kwargs)
         return val
     def SetStyling(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetStyling,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetStyling(self, *_args, **_kwargs)
         return val
     def GetBufferedDraw(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetBufferedDraw,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetBufferedDraw(self, *_args, **_kwargs)
         return val
     def SetBufferedDraw(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetBufferedDraw,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetBufferedDraw(self, *_args, **_kwargs)
         return val
     def SetTabWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetTabWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetTabWidth(self, *_args, **_kwargs)
         return val
     def GetTabWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTabWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTabWidth(self, *_args, **_kwargs)
         return val
     def SetCodePage(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCodePage,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCodePage(self, *_args, **_kwargs)
         return val
     def MarkerDefine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerDefine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerDefine(self, *_args, **_kwargs)
         return val
     def MarkerSetForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerSetForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerSetForeground(self, *_args, **_kwargs)
         return val
     def MarkerSetBackground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerSetBackground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerSetBackground(self, *_args, **_kwargs)
         return val
     def MarkerAdd(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerAdd,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerAdd(self, *_args, **_kwargs)
         return val
     def MarkerDelete(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerDelete,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerDelete(self, *_args, **_kwargs)
         return val
     def MarkerDeleteAll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerDeleteAll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerDeleteAll(self, *_args, **_kwargs)
         return val
     def MarkerGet(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerGet,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerGet(self, *_args, **_kwargs)
         return val
     def MarkerNext(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerNext,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerNext(self, *_args, **_kwargs)
         return val
     def MarkerPrevious(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerPrevious,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerPrevious(self, *_args, **_kwargs)
+        return val
+    def MarkerDefineBitmap(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_MarkerDefineBitmap(self, *_args, **_kwargs)
         return val
     def SetMarginType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginType(self, *_args, **_kwargs)
         return val
     def GetMarginType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginType(self, *_args, **_kwargs)
         return val
     def SetMarginWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginWidth(self, *_args, **_kwargs)
         return val
     def GetMarginWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginWidth(self, *_args, **_kwargs)
         return val
     def SetMarginMask(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginMask,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginMask(self, *_args, **_kwargs)
         return val
     def GetMarginMask(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginMask,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginMask(self, *_args, **_kwargs)
         return val
     def SetMarginSensitive(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginSensitive,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginSensitive(self, *_args, **_kwargs)
         return val
     def GetMarginSensitive(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginSensitive,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginSensitive(self, *_args, **_kwargs)
         return val
     def StyleClearAll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleClearAll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleClearAll(self, *_args, **_kwargs)
         return val
     def StyleSetForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetForeground(self, *_args, **_kwargs)
         return val
     def StyleSetBackground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetBackground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetBackground(self, *_args, **_kwargs)
         return val
     def StyleSetBold(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetBold,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetBold(self, *_args, **_kwargs)
         return val
     def StyleSetItalic(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetItalic,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetItalic(self, *_args, **_kwargs)
         return val
     def StyleSetSize(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetSize,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetSize(self, *_args, **_kwargs)
         return val
     def StyleSetFaceName(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetFaceName,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetFaceName(self, *_args, **_kwargs)
         return val
     def StyleSetEOLFilled(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetEOLFilled,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetEOLFilled(self, *_args, **_kwargs)
         return val
     def StyleResetDefault(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleResetDefault,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleResetDefault(self, *_args, **_kwargs)
         return val
     def StyleSetUnderline(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetUnderline,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetUnderline(self, *_args, **_kwargs)
         return val
     def StyleSetCase(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetCase,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetCase(self, *_args, **_kwargs)
         return val
     def StyleSetCharacterSet(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetCharacterSet,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetCharacterSet(self, *_args, **_kwargs)
+        return val
+    def StyleSetHotSpot(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_StyleSetHotSpot(self, *_args, **_kwargs)
         return val
     def SetSelForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSelForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSelForeground(self, *_args, **_kwargs)
         return val
     def SetSelBackground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSelBackground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSelBackground(self, *_args, **_kwargs)
         return val
     def SetCaretForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCaretForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCaretForeground(self, *_args, **_kwargs)
         return val
     def CmdKeyAssign(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CmdKeyAssign,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CmdKeyAssign(self, *_args, **_kwargs)
         return val
     def CmdKeyClear(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CmdKeyClear,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CmdKeyClear(self, *_args, **_kwargs)
         return val
     def CmdKeyClearAll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CmdKeyClearAll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CmdKeyClearAll(self, *_args, **_kwargs)
         return val
     def SetStyleBytes(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetStyleBytes,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetStyleBytes(self, *_args, **_kwargs)
         return val
     def StyleSetVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetVisible(self, *_args, **_kwargs)
         return val
     def GetCaretPeriod(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCaretPeriod,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCaretPeriod(self, *_args, **_kwargs)
         return val
     def SetCaretPeriod(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCaretPeriod,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCaretPeriod(self, *_args, **_kwargs)
         return val
     def SetWordChars(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetWordChars,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetWordChars(self, *_args, **_kwargs)
         return val
     def BeginUndoAction(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_BeginUndoAction,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_BeginUndoAction(self, *_args, **_kwargs)
         return val
     def EndUndoAction(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_EndUndoAction,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_EndUndoAction(self, *_args, **_kwargs)
         return val
     def IndicatorSetStyle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_IndicatorSetStyle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_IndicatorSetStyle(self, *_args, **_kwargs)
         return val
     def IndicatorGetStyle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_IndicatorGetStyle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_IndicatorGetStyle(self, *_args, **_kwargs)
         return val
     def IndicatorSetForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_IndicatorSetForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_IndicatorSetForeground(self, *_args, **_kwargs)
         return val
     def IndicatorGetForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_IndicatorGetForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_IndicatorGetForeground(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetWhitespaceForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetWhitespaceForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetWhitespaceForeground(self, *_args, **_kwargs)
         return val
     def SetWhitespaceBackground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetWhitespaceBackground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetWhitespaceBackground(self, *_args, **_kwargs)
         return val
     def SetStyleBits(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetStyleBits,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetStyleBits(self, *_args, **_kwargs)
         return val
     def GetStyleBits(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetStyleBits,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetStyleBits(self, *_args, **_kwargs)
         return val
     def SetLineState(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLineState,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLineState(self, *_args, **_kwargs)
         return val
     def GetLineState(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineState,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineState(self, *_args, **_kwargs)
         return val
     def GetMaxLineState(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMaxLineState,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMaxLineState(self, *_args, **_kwargs)
         return val
     def GetCaretLineVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCaretLineVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCaretLineVisible(self, *_args, **_kwargs)
         return val
     def SetCaretLineVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCaretLineVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCaretLineVisible(self, *_args, **_kwargs)
         return val
     def GetCaretLineBack(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCaretLineBack,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCaretLineBack(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetCaretLineBack(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCaretLineBack,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCaretLineBack(self, *_args, **_kwargs)
         return val
     def StyleSetChangeable(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetChangeable,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetChangeable(self, *_args, **_kwargs)
         return val
     def AutoCompShow(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompShow,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompShow(self, *_args, **_kwargs)
         return val
     def AutoCompCancel(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompCancel,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompCancel(self, *_args, **_kwargs)
         return val
     def AutoCompActive(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompActive,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompActive(self, *_args, **_kwargs)
         return val
     def AutoCompPosStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompPosStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompPosStart(self, *_args, **_kwargs)
         return val
     def AutoCompComplete(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompComplete,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompComplete(self, *_args, **_kwargs)
         return val
     def AutoCompStops(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompStops,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompStops(self, *_args, **_kwargs)
         return val
     def AutoCompSetSeparator(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetSeparator,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetSeparator(self, *_args, **_kwargs)
         return val
     def AutoCompGetSeparator(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetSeparator,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetSeparator(self, *_args, **_kwargs)
         return val
     def AutoCompSelect(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSelect,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSelect(self, *_args, **_kwargs)
         return val
     def AutoCompSetCancelAtStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetCancelAtStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetCancelAtStart(self, *_args, **_kwargs)
         return val
     def AutoCompGetCancelAtStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetCancelAtStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetCancelAtStart(self, *_args, **_kwargs)
         return val
     def AutoCompSetFillUps(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetFillUps,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetFillUps(self, *_args, **_kwargs)
         return val
     def AutoCompSetChooseSingle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetChooseSingle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetChooseSingle(self, *_args, **_kwargs)
         return val
     def AutoCompGetChooseSingle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetChooseSingle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetChooseSingle(self, *_args, **_kwargs)
         return val
     def AutoCompSetIgnoreCase(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetIgnoreCase,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetIgnoreCase(self, *_args, **_kwargs)
         return val
     def AutoCompGetIgnoreCase(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetIgnoreCase,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetIgnoreCase(self, *_args, **_kwargs)
         return val
     def UserListShow(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_UserListShow,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_UserListShow(self, *_args, **_kwargs)
         return val
     def AutoCompSetAutoHide(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetAutoHide,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetAutoHide(self, *_args, **_kwargs)
         return val
     def AutoCompGetAutoHide(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetAutoHide,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetAutoHide(self, *_args, **_kwargs)
         return val
     def AutoCompSetDropRestOfWord(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetDropRestOfWord,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetDropRestOfWord(self, *_args, **_kwargs)
         return val
     def AutoCompGetDropRestOfWord(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetDropRestOfWord,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetDropRestOfWord(self, *_args, **_kwargs)
+        return val
+    def RegisterImage(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_RegisterImage(self, *_args, **_kwargs)
+        return val
+    def ClearRegisteredImages(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_ClearRegisteredImages(self, *_args, **_kwargs)
+        return val
+    def AutoCompGetTypeSeparator(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_AutoCompGetTypeSeparator(self, *_args, **_kwargs)
+        return val
+    def AutoCompSetTypeSeparator(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_AutoCompSetTypeSeparator(self, *_args, **_kwargs)
         return val
     def SetIndent(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetIndent,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetIndent(self, *_args, **_kwargs)
         return val
     def GetIndent(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetIndent,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetIndent(self, *_args, **_kwargs)
         return val
     def SetUseTabs(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetUseTabs,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetUseTabs(self, *_args, **_kwargs)
         return val
     def GetUseTabs(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetUseTabs,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetUseTabs(self, *_args, **_kwargs)
         return val
     def SetLineIndentation(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLineIndentation,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLineIndentation(self, *_args, **_kwargs)
         return val
     def GetLineIndentation(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineIndentation,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineIndentation(self, *_args, **_kwargs)
         return val
     def GetLineIndentPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineIndentPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineIndentPosition(self, *_args, **_kwargs)
         return val
     def GetColumn(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetColumn,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetColumn(self, *_args, **_kwargs)
         return val
     def SetUseHorizontalScrollBar(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetUseHorizontalScrollBar,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetUseHorizontalScrollBar(self, *_args, **_kwargs)
         return val
     def GetUseHorizontalScrollBar(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetUseHorizontalScrollBar,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetUseHorizontalScrollBar(self, *_args, **_kwargs)
         return val
     def SetIndentationGuides(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetIndentationGuides,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetIndentationGuides(self, *_args, **_kwargs)
         return val
     def GetIndentationGuides(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetIndentationGuides,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetIndentationGuides(self, *_args, **_kwargs)
         return val
     def SetHighlightGuide(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetHighlightGuide,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetHighlightGuide(self, *_args, **_kwargs)
         return val
     def GetHighlightGuide(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetHighlightGuide,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetHighlightGuide(self, *_args, **_kwargs)
         return val
     def GetLineEndPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineEndPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineEndPosition(self, *_args, **_kwargs)
         return val
     def GetCodePage(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCodePage,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCodePage(self, *_args, **_kwargs)
         return val
     def GetCaretForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCaretForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCaretForeground(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetReadOnly(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetReadOnly,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetReadOnly(self, *_args, **_kwargs)
         return val
     def SetCurrentPos(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCurrentPos,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCurrentPos(self, *_args, **_kwargs)
         return val
     def SetSelectionStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSelectionStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSelectionStart(self, *_args, **_kwargs)
         return val
     def GetSelectionStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSelectionStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSelectionStart(self, *_args, **_kwargs)
         return val
     def SetSelectionEnd(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSelectionEnd,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSelectionEnd(self, *_args, **_kwargs)
         return val
     def GetSelectionEnd(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSelectionEnd,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSelectionEnd(self, *_args, **_kwargs)
         return val
     def SetPrintMagnification(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetPrintMagnification,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetPrintMagnification(self, *_args, **_kwargs)
         return val
     def GetPrintMagnification(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetPrintMagnification,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetPrintMagnification(self, *_args, **_kwargs)
         return val
     def SetPrintColourMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetPrintColourMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetPrintColourMode(self, *_args, **_kwargs)
         return val
     def GetPrintColourMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetPrintColourMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetPrintColourMode(self, *_args, **_kwargs)
         return val
     def FindText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_FindText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_FindText(self, *_args, **_kwargs)
         return val
     def FormatRange(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_FormatRange,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_FormatRange(self, *_args, **_kwargs)
         return val
     def GetFirstVisibleLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetFirstVisibleLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetFirstVisibleLine(self, *_args, **_kwargs)
         return val
     def GetLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLine(self, *_args, **_kwargs)
         return val
     def GetLineCount(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineCount,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineCount(self, *_args, **_kwargs)
         return val
     def SetMarginLeft(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginLeft,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginLeft(self, *_args, **_kwargs)
         return val
     def GetMarginLeft(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginLeft,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginLeft(self, *_args, **_kwargs)
         return val
     def SetMarginRight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginRight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginRight(self, *_args, **_kwargs)
         return val
     def GetMarginRight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginRight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginRight(self, *_args, **_kwargs)
         return val
     def GetModify(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetModify,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetModify(self, *_args, **_kwargs)
         return val
     def SetSelection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSelection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSelection(self, *_args, **_kwargs)
         return val
     def GetSelectedText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSelectedText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSelectedText(self, *_args, **_kwargs)
         return val
     def GetTextRange(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTextRange,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTextRange(self, *_args, **_kwargs)
         return val
     def HideSelection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_HideSelection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_HideSelection(self, *_args, **_kwargs)
         return val
     def LineFromPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LineFromPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LineFromPosition(self, *_args, **_kwargs)
         return val
     def PositionFromLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_PositionFromLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_PositionFromLine(self, *_args, **_kwargs)
         return val
     def LineScroll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LineScroll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LineScroll(self, *_args, **_kwargs)
         return val
     def EnsureCaretVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_EnsureCaretVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_EnsureCaretVisible(self, *_args, **_kwargs)
         return val
     def ReplaceSelection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ReplaceSelection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ReplaceSelection(self, *_args, **_kwargs)
         return val
     def SetReadOnly(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetReadOnly,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetReadOnly(self, *_args, **_kwargs)
         return val
     def CanPaste(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CanPaste,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CanPaste(self, *_args, **_kwargs)
         return val
     def CanUndo(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CanUndo,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CanUndo(self, *_args, **_kwargs)
         return val
     def EmptyUndoBuffer(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_EmptyUndoBuffer,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_EmptyUndoBuffer(self, *_args, **_kwargs)
         return val
     def Undo(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Undo,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Undo(self, *_args, **_kwargs)
         return val
     def Cut(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Cut,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Cut(self, *_args, **_kwargs)
         return val
     def Copy(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Copy,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Copy(self, *_args, **_kwargs)
         return val
     def Paste(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Paste,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Paste(self, *_args, **_kwargs)
         return val
     def Clear(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Clear,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Clear(self, *_args, **_kwargs)
         return val
     def SetText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetText(self, *_args, **_kwargs)
         return val
     def GetText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetText(self, *_args, **_kwargs)
         return val
     def GetTextLength(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTextLength,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTextLength(self, *_args, **_kwargs)
         return val
     def SetOvertype(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetOvertype,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetOvertype(self, *_args, **_kwargs)
         return val
     def GetOvertype(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetOvertype,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetOvertype(self, *_args, **_kwargs)
         return val
     def SetCaretWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCaretWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCaretWidth(self, *_args, **_kwargs)
         return val
     def GetCaretWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCaretWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCaretWidth(self, *_args, **_kwargs)
         return val
     def SetTargetStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetTargetStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetTargetStart(self, *_args, **_kwargs)
         return val
     def GetTargetStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTargetStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTargetStart(self, *_args, **_kwargs)
         return val
     def SetTargetEnd(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetTargetEnd,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetTargetEnd(self, *_args, **_kwargs)
         return val
     def GetTargetEnd(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTargetEnd,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTargetEnd(self, *_args, **_kwargs)
         return val
     def ReplaceTarget(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ReplaceTarget,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ReplaceTarget(self, *_args, **_kwargs)
         return val
     def ReplaceTargetRE(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ReplaceTargetRE,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ReplaceTargetRE(self, *_args, **_kwargs)
         return val
     def SearchInTarget(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SearchInTarget,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SearchInTarget(self, *_args, **_kwargs)
         return val
     def SetSearchFlags(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSearchFlags,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSearchFlags(self, *_args, **_kwargs)
         return val
     def GetSearchFlags(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSearchFlags,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSearchFlags(self, *_args, **_kwargs)
         return val
     def CallTipShow(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipShow,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipShow(self, *_args, **_kwargs)
         return val
     def CallTipCancel(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipCancel,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipCancel(self, *_args, **_kwargs)
         return val
     def CallTipActive(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipActive,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipActive(self, *_args, **_kwargs)
         return val
     def CallTipPosAtStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipPosAtStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipPosAtStart(self, *_args, **_kwargs)
         return val
     def CallTipSetHighlight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipSetHighlight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipSetHighlight(self, *_args, **_kwargs)
         return val
     def CallTipSetBackground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipSetBackground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipSetBackground(self, *_args, **_kwargs)
+        return val
+    def CallTipSetForeground(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_CallTipSetForeground(self, *_args, **_kwargs)
+        return val
+    def CallTipSetForegroundHighlight(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_CallTipSetForegroundHighlight(self, *_args, **_kwargs)
         return val
     def VisibleFromDocLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_VisibleFromDocLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_VisibleFromDocLine(self, *_args, **_kwargs)
         return val
     def DocLineFromVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_DocLineFromVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_DocLineFromVisible(self, *_args, **_kwargs)
         return val
     def SetFoldLevel(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetFoldLevel,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetFoldLevel(self, *_args, **_kwargs)
         return val
     def GetFoldLevel(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetFoldLevel,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetFoldLevel(self, *_args, **_kwargs)
         return val
     def GetLastChild(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLastChild,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLastChild(self, *_args, **_kwargs)
         return val
     def GetFoldParent(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetFoldParent,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetFoldParent(self, *_args, **_kwargs)
         return val
     def ShowLines(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ShowLines,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ShowLines(self, *_args, **_kwargs)
         return val
     def HideLines(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_HideLines,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_HideLines(self, *_args, **_kwargs)
         return val
     def GetLineVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineVisible(self, *_args, **_kwargs)
         return val
     def SetFoldExpanded(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetFoldExpanded,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetFoldExpanded(self, *_args, **_kwargs)
         return val
     def GetFoldExpanded(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetFoldExpanded,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetFoldExpanded(self, *_args, **_kwargs)
         return val
     def ToggleFold(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ToggleFold,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ToggleFold(self, *_args, **_kwargs)
         return val
     def EnsureVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_EnsureVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_EnsureVisible(self, *_args, **_kwargs)
         return val
     def SetFoldFlags(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetFoldFlags,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetFoldFlags(self, *_args, **_kwargs)
         return val
     def EnsureVisibleEnforcePolicy(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_EnsureVisibleEnforcePolicy,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_EnsureVisibleEnforcePolicy(self, *_args, **_kwargs)
         return val
     def SetTabIndents(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetTabIndents,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetTabIndents(self, *_args, **_kwargs)
         return val
     def GetTabIndents(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTabIndents,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTabIndents(self, *_args, **_kwargs)
         return val
     def SetBackSpaceUnIndents(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetBackSpaceUnIndents,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetBackSpaceUnIndents(self, *_args, **_kwargs)
         return val
     def GetBackSpaceUnIndents(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetBackSpaceUnIndents,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetBackSpaceUnIndents(self, *_args, **_kwargs)
         return val
     def SetMouseDwellTime(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMouseDwellTime,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMouseDwellTime(self, *_args, **_kwargs)
         return val
     def GetMouseDwellTime(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMouseDwellTime,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMouseDwellTime(self, *_args, **_kwargs)
         return val
     def WordStartPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordStartPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordStartPosition(self, *_args, **_kwargs)
         return val
     def WordEndPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordEndPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordEndPosition(self, *_args, **_kwargs)
         return val
     def SetWrapMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetWrapMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetWrapMode(self, *_args, **_kwargs)
         return val
     def GetWrapMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetWrapMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetWrapMode(self, *_args, **_kwargs)
         return val
     def SetLayoutCache(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLayoutCache,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLayoutCache(self, *_args, **_kwargs)
         return val
     def GetLayoutCache(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLayoutCache,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLayoutCache(self, *_args, **_kwargs)
         return val
     def SetScrollWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetScrollWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetScrollWidth(self, *_args, **_kwargs)
         return val
     def GetScrollWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetScrollWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetScrollWidth(self, *_args, **_kwargs)
         return val
     def TextWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_TextWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_TextWidth(self, *_args, **_kwargs)
         return val
     def SetEndAtLastLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetEndAtLastLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetEndAtLastLine(self, *_args, **_kwargs)
         return val
     def GetEndAtLastLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEndAtLastLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEndAtLastLine(self, *_args, **_kwargs)
         return val
     def TextHeight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_TextHeight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_TextHeight(self, *_args, **_kwargs)
+        return val
+    def SetUseVerticalScrollBar(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetUseVerticalScrollBar(self, *_args, **_kwargs)
+        return val
+    def GetUseVerticalScrollBar(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_GetUseVerticalScrollBar(self, *_args, **_kwargs)
+        return val
+    def AppendText(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_AppendText(self, *_args, **_kwargs)
+        return val
+    def GetTwoPhaseDraw(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_GetTwoPhaseDraw(self, *_args, **_kwargs)
+        return val
+    def SetTwoPhaseDraw(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetTwoPhaseDraw(self, *_args, **_kwargs)
+        return val
+    def TargetFromSelection(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_TargetFromSelection(self, *_args, **_kwargs)
+        return val
+    def LinesJoin(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_LinesJoin(self, *_args, **_kwargs)
+        return val
+    def LinesSplit(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_LinesSplit(self, *_args, **_kwargs)
+        return val
+    def SetFoldMarginColour(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetFoldMarginColour(self, *_args, **_kwargs)
+        return val
+    def SetFoldMarginHiColour(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetFoldMarginHiColour(self, *_args, **_kwargs)
+        return val
+    def LineDuplicate(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_LineDuplicate(self, *_args, **_kwargs)
         return val
     def HomeDisplay(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_HomeDisplay,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_HomeDisplay(self, *_args, **_kwargs)
         return val
     def HomeDisplayExtend(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_HomeDisplayExtend,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_HomeDisplayExtend(self, *_args, **_kwargs)
         return val
     def LineEndDisplay(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LineEndDisplay,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LineEndDisplay(self, *_args, **_kwargs)
         return val
     def LineEndDisplayExtend(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LineEndDisplayExtend,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LineEndDisplayExtend(self, *_args, **_kwargs)
         return val
     def MoveCaretInsideView(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MoveCaretInsideView,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MoveCaretInsideView(self, *_args, **_kwargs)
         return val
     def LineLength(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LineLength,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LineLength(self, *_args, **_kwargs)
         return val
     def BraceHighlight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_BraceHighlight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_BraceHighlight(self, *_args, **_kwargs)
         return val
     def BraceBadLight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_BraceBadLight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_BraceBadLight(self, *_args, **_kwargs)
         return val
     def BraceMatch(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_BraceMatch,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_BraceMatch(self, *_args, **_kwargs)
         return val
     def GetViewEOL(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetViewEOL,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetViewEOL(self, *_args, **_kwargs)
         return val
     def SetViewEOL(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetViewEOL,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetViewEOL(self, *_args, **_kwargs)
         return val
     def GetDocPointer(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetDocPointer,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetDocPointer(self, *_args, **_kwargs)
         return val
     def SetDocPointer(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetDocPointer,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetDocPointer(self, *_args, **_kwargs)
         return val
     def SetModEventMask(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetModEventMask,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetModEventMask(self, *_args, **_kwargs)
         return val
     def GetEdgeColumn(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEdgeColumn,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEdgeColumn(self, *_args, **_kwargs)
         return val
     def SetEdgeColumn(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetEdgeColumn,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetEdgeColumn(self, *_args, **_kwargs)
         return val
     def GetEdgeMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEdgeMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEdgeMode(self, *_args, **_kwargs)
         return val
     def SetEdgeMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetEdgeMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetEdgeMode(self, *_args, **_kwargs)
         return val
     def GetEdgeColour(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEdgeColour,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEdgeColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetEdgeColour(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetEdgeColour,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetEdgeColour(self, *_args, **_kwargs)
         return val
     def SearchAnchor(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SearchAnchor,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SearchAnchor(self, *_args, **_kwargs)
         return val
     def SearchNext(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SearchNext,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SearchNext(self, *_args, **_kwargs)
         return val
     def SearchPrev(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SearchPrev,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SearchPrev(self, *_args, **_kwargs)
         return val
     def LinesOnScreen(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LinesOnScreen,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LinesOnScreen(self, *_args, **_kwargs)
         return val
     def UsePopUp(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_UsePopUp,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_UsePopUp(self, *_args, **_kwargs)
         return val
     def SelectionIsRectangle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SelectionIsRectangle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SelectionIsRectangle(self, *_args, **_kwargs)
         return val
     def SetZoom(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetZoom,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetZoom(self, *_args, **_kwargs)
         return val
     def GetZoom(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetZoom,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetZoom(self, *_args, **_kwargs)
         return val
     def CreateDocument(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CreateDocument,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CreateDocument(self, *_args, **_kwargs)
         return val
     def AddRefDocument(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AddRefDocument,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AddRefDocument(self, *_args, **_kwargs)
         return val
     def ReleaseDocument(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ReleaseDocument,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ReleaseDocument(self, *_args, **_kwargs)
         return val
     def GetModEventMask(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetModEventMask,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetModEventMask(self, *_args, **_kwargs)
         return val
     def SetSTCFocus(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSTCFocus,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSTCFocus(self, *_args, **_kwargs)
         return val
     def GetSTCFocus(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSTCFocus,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSTCFocus(self, *_args, **_kwargs)
         return val
     def SetStatus(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetStatus,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetStatus(self, *_args, **_kwargs)
         return val
     def GetStatus(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetStatus,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetStatus(self, *_args, **_kwargs)
         return val
     def SetMouseDownCaptures(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMouseDownCaptures,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMouseDownCaptures(self, *_args, **_kwargs)
         return val
     def GetMouseDownCaptures(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMouseDownCaptures,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMouseDownCaptures(self, *_args, **_kwargs)
         return val
     def SetCursor(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCursor,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCursor(self, *_args, **_kwargs)
         return val
     def GetCursor(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCursor,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCursor(self, *_args, **_kwargs)
         return val
     def SetControlCharSymbol(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetControlCharSymbol,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetControlCharSymbol(self, *_args, **_kwargs)
         return val
     def GetControlCharSymbol(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetControlCharSymbol,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetControlCharSymbol(self, *_args, **_kwargs)
         return val
     def WordPartLeft(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordPartLeft,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordPartLeft(self, *_args, **_kwargs)
         return val
     def WordPartLeftExtend(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordPartLeftExtend,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordPartLeftExtend(self, *_args, **_kwargs)
         return val
     def WordPartRight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordPartRight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordPartRight(self, *_args, **_kwargs)
         return val
     def WordPartRightExtend(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordPartRightExtend,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordPartRightExtend(self, *_args, **_kwargs)
         return val
     def SetVisiblePolicy(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetVisiblePolicy,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetVisiblePolicy(self, *_args, **_kwargs)
         return val
     def DelLineLeft(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_DelLineLeft,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_DelLineLeft(self, *_args, **_kwargs)
         return val
     def DelLineRight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_DelLineRight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_DelLineRight(self, *_args, **_kwargs)
         return val
     def SetXOffset(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetXOffset,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetXOffset(self, *_args, **_kwargs)
         return val
     def GetXOffset(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetXOffset,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetXOffset(self, *_args, **_kwargs)
+        return val
+    def ChooseCaretX(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_ChooseCaretX(self, *_args, **_kwargs)
         return val
     def SetXCaretPolicy(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetXCaretPolicy,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetXCaretPolicy(self, *_args, **_kwargs)
         return val
     def SetYCaretPolicy(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetYCaretPolicy,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetYCaretPolicy(self, *_args, **_kwargs)
+        return val
+    def SetPrintWrapMode(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetPrintWrapMode(self, *_args, **_kwargs)
+        return val
+    def GetPrintWrapMode(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_GetPrintWrapMode(self, *_args, **_kwargs)
+        return val
+    def SetHotspotActiveForeground(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetHotspotActiveForeground(self, *_args, **_kwargs)
+        return val
+    def SetHotspotActiveBackground(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetHotspotActiveBackground(self, *_args, **_kwargs)
+        return val
+    def SetHotspotActiveUnderline(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetHotspotActiveUnderline(self, *_args, **_kwargs)
         return val
     def StartRecord(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StartRecord,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StartRecord(self, *_args, **_kwargs)
         return val
     def StopRecord(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StopRecord,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StopRecord(self, *_args, **_kwargs)
         return val
     def SetLexer(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLexer,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLexer(self, *_args, **_kwargs)
         return val
     def GetLexer(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLexer,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLexer(self, *_args, **_kwargs)
         return val
     def Colourise(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Colourise,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Colourise(self, *_args, **_kwargs)
         return val
     def SetProperty(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetProperty,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetProperty(self, *_args, **_kwargs)
         return val
     def SetKeyWords(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetKeyWords,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetKeyWords(self, *_args, **_kwargs)
         return val
     def SetLexerLanguage(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLexerLanguage,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLexerLanguage(self, *_args, **_kwargs)
         return val
     def GetCurrentLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCurrentLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCurrentLine(self, *_args, **_kwargs)
         return val
     def StyleSetSpec(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetSpec,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetSpec(self, *_args, **_kwargs)
         return val
     def StyleSetFont(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetFont,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetFont(self, *_args, **_kwargs)
         return val
     def StyleSetFontAttr(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetFontAttr,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetFontAttr(self, *_args, **_kwargs)
         return val
     def CmdKeyExecute(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CmdKeyExecute,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CmdKeyExecute(self, *_args, **_kwargs)
         return val
     def SetMargins(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMargins,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMargins(self, *_args, **_kwargs)
         return val
     def GetSelection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSelection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSelection(self, *_args, **_kwargs)
         return val
     def PointFromPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_PointFromPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_PointFromPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def ScrollToLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ScrollToLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ScrollToLine(self, *_args, **_kwargs)
         return val
     def ScrollToColumn(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ScrollToColumn,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ScrollToColumn(self, *_args, **_kwargs)
         return val
     def SendMsg(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SendMsg,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SendMsg(self, *_args, **_kwargs)
         return val
     def SetVScrollBar(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetVScrollBar,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetVScrollBar(self, *_args, **_kwargs)
         return val
     def SetHScrollBar(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetHScrollBar,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetHScrollBar(self, *_args, **_kwargs)
         return val
     def GetLastKeydownProcessed(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLastKeydownProcessed,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLastKeydownProcessed(self, *_args, **_kwargs)
         return val
     def SetLastKeydownProcessed(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLastKeydownProcessed,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLastKeydownProcessed(self, *_args, **_kwargs)
+        return val
+    def SaveFile(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SaveFile(self, *_args, **_kwargs)
+        return val
+    def LoadFile(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_LoadFile(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxStyledTextCtrl instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxStyledTextCtrl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxStyledTextCtrl(wxStyledTextCtrlPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(stc_c.new_wxStyledTextCtrl,_args,_kwargs)
+        self.this = stc_c.new_wxStyledTextCtrl(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -1053,143 +1142,143 @@ class wxStyledTextEventPtr(wxCommandEventPtr):
             except:
                 pass
     def SetPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetPosition(self, *_args, **_kwargs)
         return val
     def SetKey(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetKey,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetKey(self, *_args, **_kwargs)
         return val
     def SetModifiers(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetModifiers,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetModifiers(self, *_args, **_kwargs)
         return val
     def SetModificationType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetModificationType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetModificationType(self, *_args, **_kwargs)
         return val
     def SetText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetText(self, *_args, **_kwargs)
         return val
     def SetLength(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetLength,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetLength(self, *_args, **_kwargs)
         return val
     def SetLinesAdded(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetLinesAdded,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetLinesAdded(self, *_args, **_kwargs)
         return val
     def SetLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetLine(self, *_args, **_kwargs)
         return val
     def SetFoldLevelNow(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetFoldLevelNow,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetFoldLevelNow(self, *_args, **_kwargs)
         return val
     def SetFoldLevelPrev(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetFoldLevelPrev,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetFoldLevelPrev(self, *_args, **_kwargs)
         return val
     def SetMargin(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetMargin,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetMargin(self, *_args, **_kwargs)
         return val
     def SetMessage(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetMessage,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetMessage(self, *_args, **_kwargs)
         return val
     def SetWParam(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetWParam,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetWParam(self, *_args, **_kwargs)
         return val
     def SetLParam(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetLParam,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetLParam(self, *_args, **_kwargs)
         return val
     def SetListType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetListType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetListType(self, *_args, **_kwargs)
         return val
     def SetX(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetX,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetX(self, *_args, **_kwargs)
         return val
     def SetY(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetY,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetY(self, *_args, **_kwargs)
         return val
     def SetDragText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetDragText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetDragText(self, *_args, **_kwargs)
         return val
     def SetDragAllowMove(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetDragAllowMove,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetDragAllowMove(self, *_args, **_kwargs)
         return val
     def SetDragResult(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetDragResult,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetDragResult(self, *_args, **_kwargs)
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetPosition(self, *_args, **_kwargs)
         return val
     def GetKey(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetKey,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetKey(self, *_args, **_kwargs)
         return val
     def GetModifiers(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetModifiers,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetModifiers(self, *_args, **_kwargs)
         return val
     def GetModificationType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetModificationType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetModificationType(self, *_args, **_kwargs)
         return val
     def GetText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetText(self, *_args, **_kwargs)
         return val
     def GetLength(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetLength,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetLength(self, *_args, **_kwargs)
         return val
     def GetLinesAdded(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetLinesAdded,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetLinesAdded(self, *_args, **_kwargs)
         return val
     def GetLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetLine(self, *_args, **_kwargs)
         return val
     def GetFoldLevelNow(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetFoldLevelNow,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetFoldLevelNow(self, *_args, **_kwargs)
         return val
     def GetFoldLevelPrev(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetFoldLevelPrev,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetFoldLevelPrev(self, *_args, **_kwargs)
         return val
     def GetMargin(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetMargin,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetMargin(self, *_args, **_kwargs)
         return val
     def GetMessage(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetMessage,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetMessage(self, *_args, **_kwargs)
         return val
     def GetWParam(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetWParam,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetWParam(self, *_args, **_kwargs)
         return val
     def GetLParam(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetLParam,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetLParam(self, *_args, **_kwargs)
         return val
     def GetListType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetListType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetListType(self, *_args, **_kwargs)
         return val
     def GetX(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetX,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetX(self, *_args, **_kwargs)
         return val
     def GetY(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetY,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetY(self, *_args, **_kwargs)
         return val
     def GetDragText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetDragText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetDragText(self, *_args, **_kwargs)
         return val
     def GetDragAllowMove(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetDragAllowMove,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetDragAllowMove(self, *_args, **_kwargs)
         return val
     def GetDragResult(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetDragResult,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetDragResult(self, *_args, **_kwargs)
         return val
     def GetShift(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetShift,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetShift(self, *_args, **_kwargs)
         return val
     def GetControl(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetControl,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetControl(self, *_args, **_kwargs)
         return val
     def GetAlt(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetAlt,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetAlt(self, *_args, **_kwargs)
         return val
     def Clone(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_Clone,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_Clone(self, *_args, **_kwargs)
         if val: val = wxEventPtr(val) 
         return val
     def __repr__(self):
-        return "<C wxStyledTextEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxStyledTextEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxStyledTextEvent(wxStyledTextEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(stc_c.new_wxStyledTextEvent,_args,_kwargs)
+        self.this = stc_c.new_wxStyledTextEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1215,6 +1304,7 @@ wxSTC_EOL_CRLF = stc_c.wxSTC_EOL_CRLF
 wxSTC_EOL_CR = stc_c.wxSTC_EOL_CR
 wxSTC_EOL_LF = stc_c.wxSTC_EOL_LF
 wxSTC_CP_UTF8 = stc_c.wxSTC_CP_UTF8
+wxSTC_CP_DBCS = stc_c.wxSTC_CP_DBCS
 wxSTC_MARKER_MAX = stc_c.wxSTC_MARKER_MAX
 wxSTC_MARK_CIRCLE = stc_c.wxSTC_MARK_CIRCLE
 wxSTC_MARK_ROUNDRECT = stc_c.wxSTC_MARK_ROUNDRECT
@@ -1241,6 +1331,7 @@ wxSTC_MARK_CIRCLEMINUSCONNECTED = stc_c.wxSTC_MARK_CIRCLEMINUSCONNECTED
 wxSTC_MARK_BACKGROUND = stc_c.wxSTC_MARK_BACKGROUND
 wxSTC_MARK_DOTDOTDOT = stc_c.wxSTC_MARK_DOTDOTDOT
 wxSTC_MARK_ARROWS = stc_c.wxSTC_MARK_ARROWS
+wxSTC_MARK_PIXMAP = stc_c.wxSTC_MARK_PIXMAP
 wxSTC_MARK_CHARACTER = stc_c.wxSTC_MARK_CHARACTER
 wxSTC_MARKNUM_FOLDEREND = stc_c.wxSTC_MARKNUM_FOLDEREND
 wxSTC_MARKNUM_FOLDEROPENMID = stc_c.wxSTC_MARKNUM_FOLDEROPENMID
@@ -1301,10 +1392,21 @@ wxSTC_FIND_WHOLEWORD = stc_c.wxSTC_FIND_WHOLEWORD
 wxSTC_FIND_MATCHCASE = stc_c.wxSTC_FIND_MATCHCASE
 wxSTC_FIND_WORDSTART = stc_c.wxSTC_FIND_WORDSTART
 wxSTC_FIND_REGEXP = stc_c.wxSTC_FIND_REGEXP
+wxSTC_FIND_POSIX = stc_c.wxSTC_FIND_POSIX
 wxSTC_FOLDLEVELBASE = stc_c.wxSTC_FOLDLEVELBASE
 wxSTC_FOLDLEVELWHITEFLAG = stc_c.wxSTC_FOLDLEVELWHITEFLAG
 wxSTC_FOLDLEVELHEADERFLAG = stc_c.wxSTC_FOLDLEVELHEADERFLAG
+wxSTC_FOLDLEVELBOXHEADERFLAG = stc_c.wxSTC_FOLDLEVELBOXHEADERFLAG
+wxSTC_FOLDLEVELBOXFOOTERFLAG = stc_c.wxSTC_FOLDLEVELBOXFOOTERFLAG
+wxSTC_FOLDLEVELCONTRACTED = stc_c.wxSTC_FOLDLEVELCONTRACTED
+wxSTC_FOLDLEVELUNINDENT = stc_c.wxSTC_FOLDLEVELUNINDENT
 wxSTC_FOLDLEVELNUMBERMASK = stc_c.wxSTC_FOLDLEVELNUMBERMASK
+wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED = stc_c.wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED
+wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED = stc_c.wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED
+wxSTC_FOLDFLAG_LINEAFTER_EXPANDED = stc_c.wxSTC_FOLDFLAG_LINEAFTER_EXPANDED
+wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED = stc_c.wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED
+wxSTC_FOLDFLAG_LEVELNUMBERS = stc_c.wxSTC_FOLDFLAG_LEVELNUMBERS
+wxSTC_FOLDFLAG_BOX = stc_c.wxSTC_FOLDFLAG_BOX
 wxSTC_TIME_FOREVER = stc_c.wxSTC_TIME_FOREVER
 wxSTC_WRAP_NONE = stc_c.wxSTC_WRAP_NONE
 wxSTC_WRAP_WORD = stc_c.wxSTC_WRAP_WORD
@@ -1389,6 +1491,12 @@ wxSTC_LEX_PHP = stc_c.wxSTC_LEX_PHP
 wxSTC_LEX_BAAN = stc_c.wxSTC_LEX_BAAN
 wxSTC_LEX_MATLAB = stc_c.wxSTC_LEX_MATLAB
 wxSTC_LEX_SCRIPTOL = stc_c.wxSTC_LEX_SCRIPTOL
+wxSTC_LEX_ASM = stc_c.wxSTC_LEX_ASM
+wxSTC_LEX_CPPNOCASE = stc_c.wxSTC_LEX_CPPNOCASE
+wxSTC_LEX_FORTRAN = stc_c.wxSTC_LEX_FORTRAN
+wxSTC_LEX_F77 = stc_c.wxSTC_LEX_F77
+wxSTC_LEX_CSS = stc_c.wxSTC_LEX_CSS
+wxSTC_LEX_POV = stc_c.wxSTC_LEX_POV
 wxSTC_LEX_AUTOMATIC = stc_c.wxSTC_LEX_AUTOMATIC
 wxSTC_P_DEFAULT = stc_c.wxSTC_P_DEFAULT
 wxSTC_P_COMMENTLINE = stc_c.wxSTC_P_COMMENTLINE
@@ -1614,6 +1722,9 @@ wxSTC_ERR_DIFF_CHANGED = stc_c.wxSTC_ERR_DIFF_CHANGED
 wxSTC_ERR_DIFF_ADDITION = stc_c.wxSTC_ERR_DIFF_ADDITION
 wxSTC_ERR_DIFF_DELETION = stc_c.wxSTC_ERR_DIFF_DELETION
 wxSTC_ERR_DIFF_MESSAGE = stc_c.wxSTC_ERR_DIFF_MESSAGE
+wxSTC_ERR_PHP = stc_c.wxSTC_ERR_PHP
+wxSTC_ERR_ELF = stc_c.wxSTC_ERR_ELF
+wxSTC_ERR_IFC = stc_c.wxSTC_ERR_IFC
 wxSTC_BAT_DEFAULT = stc_c.wxSTC_BAT_DEFAULT
 wxSTC_BAT_COMMENT = stc_c.wxSTC_BAT_COMMENT
 wxSTC_BAT_WORD = stc_c.wxSTC_BAT_WORD
@@ -1650,22 +1761,29 @@ wxSTC_AVE_DEFAULT = stc_c.wxSTC_AVE_DEFAULT
 wxSTC_AVE_COMMENT = stc_c.wxSTC_AVE_COMMENT
 wxSTC_AVE_NUMBER = stc_c.wxSTC_AVE_NUMBER
 wxSTC_AVE_WORD = stc_c.wxSTC_AVE_WORD
-wxSTC_AVE_KEYWORD = stc_c.wxSTC_AVE_KEYWORD
-wxSTC_AVE_STATEMENT = stc_c.wxSTC_AVE_STATEMENT
 wxSTC_AVE_STRING = stc_c.wxSTC_AVE_STRING
 wxSTC_AVE_ENUM = stc_c.wxSTC_AVE_ENUM
 wxSTC_AVE_STRINGEOL = stc_c.wxSTC_AVE_STRINGEOL
 wxSTC_AVE_IDENTIFIER = stc_c.wxSTC_AVE_IDENTIFIER
 wxSTC_AVE_OPERATOR = stc_c.wxSTC_AVE_OPERATOR
+wxSTC_AVE_WORD1 = stc_c.wxSTC_AVE_WORD1
+wxSTC_AVE_WORD2 = stc_c.wxSTC_AVE_WORD2
+wxSTC_AVE_WORD3 = stc_c.wxSTC_AVE_WORD3
+wxSTC_AVE_WORD4 = stc_c.wxSTC_AVE_WORD4
+wxSTC_AVE_WORD5 = stc_c.wxSTC_AVE_WORD5
+wxSTC_AVE_WORD6 = stc_c.wxSTC_AVE_WORD6
 wxSTC_ADA_DEFAULT = stc_c.wxSTC_ADA_DEFAULT
-wxSTC_ADA_COMMENT = stc_c.wxSTC_ADA_COMMENT
-wxSTC_ADA_NUMBER = stc_c.wxSTC_ADA_NUMBER
 wxSTC_ADA_WORD = stc_c.wxSTC_ADA_WORD
-wxSTC_ADA_STRING = stc_c.wxSTC_ADA_STRING
-wxSTC_ADA_CHARACTER = stc_c.wxSTC_ADA_CHARACTER
-wxSTC_ADA_OPERATOR = stc_c.wxSTC_ADA_OPERATOR
 wxSTC_ADA_IDENTIFIER = stc_c.wxSTC_ADA_IDENTIFIER
+wxSTC_ADA_NUMBER = stc_c.wxSTC_ADA_NUMBER
+wxSTC_ADA_DELIMITER = stc_c.wxSTC_ADA_DELIMITER
+wxSTC_ADA_CHARACTER = stc_c.wxSTC_ADA_CHARACTER
+wxSTC_ADA_CHARACTEREOL = stc_c.wxSTC_ADA_CHARACTEREOL
+wxSTC_ADA_STRING = stc_c.wxSTC_ADA_STRING
 wxSTC_ADA_STRINGEOL = stc_c.wxSTC_ADA_STRINGEOL
+wxSTC_ADA_LABEL = stc_c.wxSTC_ADA_LABEL
+wxSTC_ADA_COMMENTLINE = stc_c.wxSTC_ADA_COMMENTLINE
+wxSTC_ADA_ILLEGAL = stc_c.wxSTC_ADA_ILLEGAL
 wxSTC_BAAN_DEFAULT = stc_c.wxSTC_BAAN_DEFAULT
 wxSTC_BAAN_COMMENT = stc_c.wxSTC_BAAN_COMMENT
 wxSTC_BAAN_COMMENTDOC = stc_c.wxSTC_BAAN_COMMENTDOC
@@ -1733,6 +1851,58 @@ wxSTC_SCRIPTOL_WORD2 = stc_c.wxSTC_SCRIPTOL_WORD2
 wxSTC_SCRIPTOL_COMMENTDOCKEYWORD = stc_c.wxSTC_SCRIPTOL_COMMENTDOCKEYWORD
 wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR = stc_c.wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR
 wxSTC_SCRIPTOL_COMMENTBASIC = stc_c.wxSTC_SCRIPTOL_COMMENTBASIC
+wxSTC_ASM_DEFAULT = stc_c.wxSTC_ASM_DEFAULT
+wxSTC_ASM_COMMENT = stc_c.wxSTC_ASM_COMMENT
+wxSTC_ASM_NUMBER = stc_c.wxSTC_ASM_NUMBER
+wxSTC_ASM_STRING = stc_c.wxSTC_ASM_STRING
+wxSTC_ASM_OPERATOR = stc_c.wxSTC_ASM_OPERATOR
+wxSTC_ASM_IDENTIFIER = stc_c.wxSTC_ASM_IDENTIFIER
+wxSTC_ASM_CPUINSTRUCTION = stc_c.wxSTC_ASM_CPUINSTRUCTION
+wxSTC_ASM_MATHINSTRUCTION = stc_c.wxSTC_ASM_MATHINSTRUCTION
+wxSTC_ASM_REGISTER = stc_c.wxSTC_ASM_REGISTER
+wxSTC_ASM_DIRECTIVE = stc_c.wxSTC_ASM_DIRECTIVE
+wxSTC_ASM_DIRECTIVEOPERAND = stc_c.wxSTC_ASM_DIRECTIVEOPERAND
+wxSTC_F_DEFAULT = stc_c.wxSTC_F_DEFAULT
+wxSTC_F_COMMENT = stc_c.wxSTC_F_COMMENT
+wxSTC_F_NUMBER = stc_c.wxSTC_F_NUMBER
+wxSTC_F_STRING1 = stc_c.wxSTC_F_STRING1
+wxSTC_F_STRING2 = stc_c.wxSTC_F_STRING2
+wxSTC_F_STRINGEOL = stc_c.wxSTC_F_STRINGEOL
+wxSTC_F_OPERATOR = stc_c.wxSTC_F_OPERATOR
+wxSTC_F_IDENTIFIER = stc_c.wxSTC_F_IDENTIFIER
+wxSTC_F_WORD = stc_c.wxSTC_F_WORD
+wxSTC_F_WORD2 = stc_c.wxSTC_F_WORD2
+wxSTC_F_WORD3 = stc_c.wxSTC_F_WORD3
+wxSTC_F_PREPROCESSOR = stc_c.wxSTC_F_PREPROCESSOR
+wxSTC_F_OPERATOR2 = stc_c.wxSTC_F_OPERATOR2
+wxSTC_F_LABEL = stc_c.wxSTC_F_LABEL
+wxSTC_F_CONTINUATION = stc_c.wxSTC_F_CONTINUATION
+wxSTC_CSS_DEFAULT = stc_c.wxSTC_CSS_DEFAULT
+wxSTC_CSS_TAG = stc_c.wxSTC_CSS_TAG
+wxSTC_CSS_CLASS = stc_c.wxSTC_CSS_CLASS
+wxSTC_CSS_PSEUDOCLASS = stc_c.wxSTC_CSS_PSEUDOCLASS
+wxSTC_CSS_UNKNOWN_PSEUDOCLASS = stc_c.wxSTC_CSS_UNKNOWN_PSEUDOCLASS
+wxSTC_CSS_OPERATOR = stc_c.wxSTC_CSS_OPERATOR
+wxSTC_CSS_IDENTIFIER = stc_c.wxSTC_CSS_IDENTIFIER
+wxSTC_CSS_UNKNOWN_IDENTIFIER = stc_c.wxSTC_CSS_UNKNOWN_IDENTIFIER
+wxSTC_CSS_VALUE = stc_c.wxSTC_CSS_VALUE
+wxSTC_CSS_COMMENT = stc_c.wxSTC_CSS_COMMENT
+wxSTC_CSS_ID = stc_c.wxSTC_CSS_ID
+wxSTC_CSS_IMPORTANT = stc_c.wxSTC_CSS_IMPORTANT
+wxSTC_CSS_DIRECTIVE = stc_c.wxSTC_CSS_DIRECTIVE
+wxSTC_CSS_DOUBLESTRING = stc_c.wxSTC_CSS_DOUBLESTRING
+wxSTC_CSS_SINGLESTRING = stc_c.wxSTC_CSS_SINGLESTRING
+wxSTC_POV_DEFAULT = stc_c.wxSTC_POV_DEFAULT
+wxSTC_POV_COMMENT = stc_c.wxSTC_POV_COMMENT
+wxSTC_POV_COMMENTLINE = stc_c.wxSTC_POV_COMMENTLINE
+wxSTC_POV_COMMENTDOC = stc_c.wxSTC_POV_COMMENTDOC
+wxSTC_POV_NUMBER = stc_c.wxSTC_POV_NUMBER
+wxSTC_POV_WORD = stc_c.wxSTC_POV_WORD
+wxSTC_POV_STRING = stc_c.wxSTC_POV_STRING
+wxSTC_POV_OPERATOR = stc_c.wxSTC_POV_OPERATOR
+wxSTC_POV_IDENTIFIER = stc_c.wxSTC_POV_IDENTIFIER
+wxSTC_POV_BRACE = stc_c.wxSTC_POV_BRACE
+wxSTC_POV_WORD2 = stc_c.wxSTC_POV_WORD2
 wxSTC_CMD_REDO = stc_c.wxSTC_CMD_REDO
 wxSTC_CMD_SELECTALL = stc_c.wxSTC_CMD_SELECTALL
 wxSTC_CMD_UNDO = stc_c.wxSTC_CMD_UNDO
@@ -1780,6 +1950,7 @@ wxSTC_CMD_DELWORDRIGHT = stc_c.wxSTC_CMD_DELWORDRIGHT
 wxSTC_CMD_LINECUT = stc_c.wxSTC_CMD_LINECUT
 wxSTC_CMD_LINEDELETE = stc_c.wxSTC_CMD_LINEDELETE
 wxSTC_CMD_LINETRANSPOSE = stc_c.wxSTC_CMD_LINETRANSPOSE
+wxSTC_CMD_LINEDUPLICATE = stc_c.wxSTC_CMD_LINEDUPLICATE
 wxSTC_CMD_LOWERCASE = stc_c.wxSTC_CMD_LOWERCASE
 wxSTC_CMD_UPPERCASE = stc_c.wxSTC_CMD_UPPERCASE
 wxSTC_CMD_LINESCROLLDOWN = stc_c.wxSTC_CMD_LINESCROLLDOWN
@@ -1789,12 +1960,22 @@ wxSTC_CMD_HOMEDISPLAY = stc_c.wxSTC_CMD_HOMEDISPLAY
 wxSTC_CMD_HOMEDISPLAYEXTEND = stc_c.wxSTC_CMD_HOMEDISPLAYEXTEND
 wxSTC_CMD_LINEENDDISPLAY = stc_c.wxSTC_CMD_LINEENDDISPLAY
 wxSTC_CMD_LINEENDDISPLAYEXTEND = stc_c.wxSTC_CMD_LINEENDDISPLAYEXTEND
+wxSTC_CMD_HOMEWRAP = stc_c.wxSTC_CMD_HOMEWRAP
+wxSTC_CMD_HOMEWRAPEXTEND = stc_c.wxSTC_CMD_HOMEWRAPEXTEND
+wxSTC_CMD_LINEENDWRAP = stc_c.wxSTC_CMD_LINEENDWRAP
+wxSTC_CMD_LINEENDWRAPEXTEND = stc_c.wxSTC_CMD_LINEENDWRAPEXTEND
+wxSTC_CMD_VCHOMEWRAP = stc_c.wxSTC_CMD_VCHOMEWRAP
+wxSTC_CMD_VCHOMEWRAPEXTEND = stc_c.wxSTC_CMD_VCHOMEWRAPEXTEND
 wxSTC_CMD_WORDPARTLEFT = stc_c.wxSTC_CMD_WORDPARTLEFT
 wxSTC_CMD_WORDPARTLEFTEXTEND = stc_c.wxSTC_CMD_WORDPARTLEFTEXTEND
 wxSTC_CMD_WORDPARTRIGHT = stc_c.wxSTC_CMD_WORDPARTRIGHT
 wxSTC_CMD_WORDPARTRIGHTEXTEND = stc_c.wxSTC_CMD_WORDPARTRIGHTEXTEND
 wxSTC_CMD_DELLINELEFT = stc_c.wxSTC_CMD_DELLINELEFT
 wxSTC_CMD_DELLINERIGHT = stc_c.wxSTC_CMD_DELLINERIGHT
+wxSTC_CMD_PARADOWN = stc_c.wxSTC_CMD_PARADOWN
+wxSTC_CMD_PARADOWNEXTEND = stc_c.wxSTC_CMD_PARADOWNEXTEND
+wxSTC_CMD_PARAUP = stc_c.wxSTC_CMD_PARAUP
+wxSTC_CMD_PARAUPEXTEND = stc_c.wxSTC_CMD_PARAUPEXTEND
 STC_USE_DND = stc_c.STC_USE_DND
 wxEVT_STC_CHANGE = stc_c.wxEVT_STC_CHANGE
 wxEVT_STC_STYLENEEDED = stc_c.wxEVT_STC_STYLENEEDED
@@ -1819,6 +2000,9 @@ wxEVT_STC_START_DRAG = stc_c.wxEVT_STC_START_DRAG
 wxEVT_STC_DRAG_OVER = stc_c.wxEVT_STC_DRAG_OVER
 wxEVT_STC_DO_DROP = stc_c.wxEVT_STC_DO_DROP
 wxEVT_STC_ZOOM = stc_c.wxEVT_STC_ZOOM
+wxEVT_STC_HOTSPOT_CLICK = stc_c.wxEVT_STC_HOTSPOT_CLICK
+wxEVT_STC_HOTSPOT_DCLICK = stc_c.wxEVT_STC_HOTSPOT_DCLICK
+wxEVT_STC_CALLTIP_CLICK = stc_c.wxEVT_STC_CALLTIP_CLICK
 
 
 #-------------- USER INCLUDE -----------------------
diff --git a/wxPython/contrib/stc/mac/stc_.cpp b/wxPython/contrib/stc/mac/stc_.cpp
index 0aa420109b..d6c081cfb5 100644
--- a/wxPython/contrib/stc/mac/stc_.cpp
+++ b/wxPython/contrib/stc/mac/stc_.cpp
@@ -1649,6 +1649,43 @@ static PyObject *_wrap_wxStyledTextCtrl_MarkerPrevious(PyObject *self, PyObject
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_MarkerDefineBitmap(_swigobj,_swigarg0,_swigarg1)  (_swigobj->MarkerDefineBitmap(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_MarkerDefineBitmap(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    wxBitmap * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","markerNumber","bmp", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_MarkerDefineBitmap",_kwnames,&_argo0,&_arg1,&_argo2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_MarkerDefineBitmap. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxBitmap_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxStyledTextCtrl_MarkerDefineBitmap. Expected _wxBitmap_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_MarkerDefineBitmap(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_SetMarginType(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetMarginType(_swigarg0,_swigarg1))
 static PyObject *_wrap_wxStyledTextCtrl_SetMarginType(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -2275,6 +2312,38 @@ static PyObject *_wrap_wxStyledTextCtrl_StyleSetCharacterSet(PyObject *self, PyO
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_StyleSetHotSpot(_swigobj,_swigarg0,_swigarg1)  (_swigobj->StyleSetHotSpot(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_StyleSetHotSpot(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    bool  _arg2;
+    PyObject * _argo0 = 0;
+    int tempbool2;
+    char *_kwnames[] = { "self","style","hotspot", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oii:wxStyledTextCtrl_StyleSetHotSpot",_kwnames,&_argo0,&_arg1,&tempbool2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_StyleSetHotSpot. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg2 = (bool ) tempbool2;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_StyleSetHotSpot(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_SetSelForeground(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetSelForeground(_swigarg0,_swigarg1))
 static PyObject *_wrap_wxStyledTextCtrl_SetSelForeground(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -3859,6 +3928,128 @@ static PyObject *_wrap_wxStyledTextCtrl_AutoCompGetDropRestOfWord(PyObject *self
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_RegisterImage(_swigobj,_swigarg0,_swigarg1)  (_swigobj->RegisterImage(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_RegisterImage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    wxBitmap * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","type","bmp", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_RegisterImage",_kwnames,&_argo0,&_arg1,&_argo2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_RegisterImage. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxBitmap_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxStyledTextCtrl_RegisterImage. Expected _wxBitmap_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_RegisterImage(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_ClearRegisteredImages(_swigobj)  (_swigobj->ClearRegisteredImages())
+static PyObject *_wrap_wxStyledTextCtrl_ClearRegisteredImages(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_ClearRegisteredImages",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_ClearRegisteredImages. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_ClearRegisteredImages(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_AutoCompGetTypeSeparator(_swigobj)  (_swigobj->AutoCompGetTypeSeparator())
+static PyObject *_wrap_wxStyledTextCtrl_AutoCompGetTypeSeparator(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_AutoCompGetTypeSeparator",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_AutoCompGetTypeSeparator. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxStyledTextCtrl_AutoCompGetTypeSeparator(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_AutoCompSetTypeSeparator(_swigobj,_swigarg0)  (_swigobj->AutoCompSetTypeSeparator(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_AutoCompSetTypeSeparator(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","separatorCharacter", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_AutoCompSetTypeSeparator",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_AutoCompSetTypeSeparator. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_AutoCompSetTypeSeparator(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_SetIndent(_swigobj,_swigarg0)  (_swigobj->SetIndent(_swigarg0))
 static PyObject *_wrap_wxStyledTextCtrl_SetIndent(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -6229,6 +6420,78 @@ static PyObject *_wrap_wxStyledTextCtrl_CallTipSetBackground(PyObject *self, PyO
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_CallTipSetForeground(_swigobj,_swigarg0)  (_swigobj->CallTipSetForeground(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_CallTipSetForeground(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    wxColour * _arg1;
+    PyObject * _argo0 = 0;
+    wxColour  temp;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","fore", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxStyledTextCtrl_CallTipSetForeground",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_CallTipSetForeground. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = &temp;
+    if (! wxColour_helper(_obj1, &_arg1))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_CallTipSetForeground(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_CallTipSetForegroundHighlight(_swigobj,_swigarg0)  (_swigobj->CallTipSetForegroundHighlight(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_CallTipSetForegroundHighlight(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    wxColour * _arg1;
+    PyObject * _argo0 = 0;
+    wxColour  temp;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","fore", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxStyledTextCtrl_CallTipSetForegroundHighlight",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_CallTipSetForegroundHighlight. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = &temp;
+    if (! wxColour_helper(_obj1, &_arg1))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_CallTipSetForegroundHighlight(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_VisibleFromDocLine(_swigobj,_swigarg0)  (_swigobj->VisibleFromDocLine(_swigarg0))
 static PyObject *_wrap_wxStyledTextCtrl_VisibleFromDocLine(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -7209,26 +7472,29 @@ static PyObject *_wrap_wxStyledTextCtrl_TextHeight(PyObject *self, PyObject *arg
     return _resultobj;
 }
 
-#define wxStyledTextCtrl_HomeDisplay(_swigobj)  (_swigobj->HomeDisplay())
-static PyObject *_wrap_wxStyledTextCtrl_HomeDisplay(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxStyledTextCtrl_SetUseVerticalScrollBar(_swigobj,_swigarg0)  (_swigobj->SetUseVerticalScrollBar(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_SetUseVerticalScrollBar(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxStyledTextCtrl * _arg0;
+    bool  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    int tempbool1;
+    char *_kwnames[] = { "self","show", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_HomeDisplay",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_SetUseVerticalScrollBar",_kwnames,&_argo0,&tempbool1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_HomeDisplay. Expected _wxStyledTextCtrl_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetUseVerticalScrollBar. Expected _wxStyledTextCtrl_p.");
         return NULL;
         }
     }
+    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxStyledTextCtrl_HomeDisplay(_arg0);
+    wxStyledTextCtrl_SetUseVerticalScrollBar(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -7237,76 +7503,422 @@ static PyObject *_wrap_wxStyledTextCtrl_HomeDisplay(PyObject *self, PyObject *ar
     return _resultobj;
 }
 
-#define wxStyledTextCtrl_HomeDisplayExtend(_swigobj)  (_swigobj->HomeDisplayExtend())
-static PyObject *_wrap_wxStyledTextCtrl_HomeDisplayExtend(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxStyledTextCtrl_GetUseVerticalScrollBar(_swigobj)  (_swigobj->GetUseVerticalScrollBar())
+static PyObject *_wrap_wxStyledTextCtrl_GetUseVerticalScrollBar(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
+    bool  _result;
     wxStyledTextCtrl * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_HomeDisplayExtend",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_GetUseVerticalScrollBar",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_HomeDisplayExtend. Expected _wxStyledTextCtrl_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_GetUseVerticalScrollBar. Expected _wxStyledTextCtrl_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxStyledTextCtrl_HomeDisplayExtend(_arg0);
+    _result = (bool )wxStyledTextCtrl_GetUseVerticalScrollBar(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxStyledTextCtrl_LineEndDisplay(_swigobj)  (_swigobj->LineEndDisplay())
-static PyObject *_wrap_wxStyledTextCtrl_LineEndDisplay(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxStyledTextCtrl_AppendText(_swigobj,_swigarg0,_swigarg1)  (_swigobj->AppendText(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_AppendText(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    wxString * _arg2;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","length","text", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LineEndDisplay",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_AppendText",_kwnames,&_argo0,&_arg1,&_obj2)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LineEndDisplay. Expected _wxStyledTextCtrl_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_AppendText. Expected _wxStyledTextCtrl_p.");
         return NULL;
         }
     }
+{
+    _arg2 = wxString_in_helper(_obj2);
+    if (_arg2 == NULL)
+        return NULL;
+}
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxStyledTextCtrl_LineEndDisplay(_arg0);
+    wxStyledTextCtrl_AppendText(_arg0,_arg1,*_arg2);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
 }    Py_INCREF(Py_None);
     _resultobj = Py_None;
+{
+    if (_obj2)
+        delete _arg2;
+}
     return _resultobj;
 }
 
-#define wxStyledTextCtrl_LineEndDisplayExtend(_swigobj)  (_swigobj->LineEndDisplayExtend())
-static PyObject *_wrap_wxStyledTextCtrl_LineEndDisplayExtend(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxStyledTextCtrl_GetTwoPhaseDraw(_swigobj)  (_swigobj->GetTwoPhaseDraw())
+static PyObject *_wrap_wxStyledTextCtrl_GetTwoPhaseDraw(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
+    bool  _result;
     wxStyledTextCtrl * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LineEndDisplayExtend",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_GetTwoPhaseDraw",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LineEndDisplayExtend. Expected _wxStyledTextCtrl_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_GetTwoPhaseDraw. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxStyledTextCtrl_GetTwoPhaseDraw(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetTwoPhaseDraw(_swigobj,_swigarg0)  (_swigobj->SetTwoPhaseDraw(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_SetTwoPhaseDraw(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    char *_kwnames[] = { "self","twoPhase", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_SetTwoPhaseDraw",_kwnames,&_argo0,&tempbool1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetTwoPhaseDraw. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetTwoPhaseDraw(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_TargetFromSelection(_swigobj)  (_swigobj->TargetFromSelection())
+static PyObject *_wrap_wxStyledTextCtrl_TargetFromSelection(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_TargetFromSelection",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_TargetFromSelection. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_TargetFromSelection(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LinesJoin(_swigobj)  (_swigobj->LinesJoin())
+static PyObject *_wrap_wxStyledTextCtrl_LinesJoin(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LinesJoin",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LinesJoin. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_LinesJoin(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LinesSplit(_swigobj,_swigarg0)  (_swigobj->LinesSplit(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_LinesSplit(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","pixelWidth", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_LinesSplit",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LinesSplit. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_LinesSplit(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetFoldMarginColour(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetFoldMarginColour(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_SetFoldMarginColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    wxColour * _arg2;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    wxColour  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","useSetting","back", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_SetFoldMarginColour",_kwnames,&_argo0,&tempbool1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetFoldMarginColour. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    _arg2 = &temp;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetFoldMarginColour(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetFoldMarginHiColour(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetFoldMarginHiColour(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_SetFoldMarginHiColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    wxColour * _arg2;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    wxColour  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","useSetting","fore", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_SetFoldMarginHiColour",_kwnames,&_argo0,&tempbool1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetFoldMarginHiColour. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    _arg2 = &temp;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetFoldMarginHiColour(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LineDuplicate(_swigobj)  (_swigobj->LineDuplicate())
+static PyObject *_wrap_wxStyledTextCtrl_LineDuplicate(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LineDuplicate",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LineDuplicate. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_LineDuplicate(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_HomeDisplay(_swigobj)  (_swigobj->HomeDisplay())
+static PyObject *_wrap_wxStyledTextCtrl_HomeDisplay(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_HomeDisplay",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_HomeDisplay. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_HomeDisplay(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_HomeDisplayExtend(_swigobj)  (_swigobj->HomeDisplayExtend())
+static PyObject *_wrap_wxStyledTextCtrl_HomeDisplayExtend(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_HomeDisplayExtend",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_HomeDisplayExtend. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_HomeDisplayExtend(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LineEndDisplay(_swigobj)  (_swigobj->LineEndDisplay())
+static PyObject *_wrap_wxStyledTextCtrl_LineEndDisplay(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LineEndDisplay",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LineEndDisplay. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_LineEndDisplay(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LineEndDisplayExtend(_swigobj)  (_swigobj->LineEndDisplayExtend())
+static PyObject *_wrap_wxStyledTextCtrl_LineEndDisplayExtend(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LineEndDisplayExtend",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LineEndDisplayExtend. Expected _wxStyledTextCtrl_p.");
         return NULL;
         }
     }
@@ -8739,6 +9351,34 @@ static PyObject *_wrap_wxStyledTextCtrl_GetXOffset(PyObject *self, PyObject *arg
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_ChooseCaretX(_swigobj)  (_swigobj->ChooseCaretX())
+static PyObject *_wrap_wxStyledTextCtrl_ChooseCaretX(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_ChooseCaretX",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_ChooseCaretX. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_ChooseCaretX(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_SetXCaretPolicy(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetXCaretPolicy(_swigarg0,_swigarg1))
 static PyObject *_wrap_wxStyledTextCtrl_SetXCaretPolicy(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -8799,6 +9439,172 @@ static PyObject *_wrap_wxStyledTextCtrl_SetYCaretPolicy(PyObject *self, PyObject
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_SetPrintWrapMode(_swigobj,_swigarg0)  (_swigobj->SetPrintWrapMode(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_SetPrintWrapMode(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","mode", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_SetPrintWrapMode",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetPrintWrapMode. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetPrintWrapMode(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_GetPrintWrapMode(_swigobj)  (_swigobj->GetPrintWrapMode())
+static PyObject *_wrap_wxStyledTextCtrl_GetPrintWrapMode(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_GetPrintWrapMode",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_GetPrintWrapMode. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxStyledTextCtrl_GetPrintWrapMode(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetHotspotActiveForeground(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetHotspotActiveForeground(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_SetHotspotActiveForeground(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    wxColour * _arg2;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    wxColour  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","useSetting","fore", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_SetHotspotActiveForeground",_kwnames,&_argo0,&tempbool1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetHotspotActiveForeground. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    _arg2 = &temp;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetHotspotActiveForeground(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetHotspotActiveBackground(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetHotspotActiveBackground(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_SetHotspotActiveBackground(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    wxColour * _arg2;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    wxColour  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","useSetting","back", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_SetHotspotActiveBackground",_kwnames,&_argo0,&tempbool1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetHotspotActiveBackground. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    _arg2 = &temp;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetHotspotActiveBackground(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetHotspotActiveUnderline(_swigobj,_swigarg0)  (_swigobj->SetHotspotActiveUnderline(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_SetHotspotActiveUnderline(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    char *_kwnames[] = { "self","underline", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_SetHotspotActiveUnderline",_kwnames,&_argo0,&tempbool1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetHotspotActiveUnderline. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetHotspotActiveUnderline(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_StartRecord(_swigobj)  (_swigobj->StartRecord())
 static PyObject *_wrap_wxStyledTextCtrl_StartRecord(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -9586,6 +10392,84 @@ static PyObject *_wrap_wxStyledTextCtrl_SetLastKeydownProcessed(PyObject *self,
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_SaveFile(_swigobj,_swigarg0)  (_swigobj->SaveFile(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_SaveFile(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxStyledTextCtrl * _arg0;
+    wxString * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","filename", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxStyledTextCtrl_SaveFile",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SaveFile. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = wxString_in_helper(_obj1);
+    if (_arg1 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxStyledTextCtrl_SaveFile(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+{
+    if (_obj1)
+        delete _arg1;
+}
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LoadFile(_swigobj,_swigarg0)  (_swigobj->LoadFile(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_LoadFile(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxStyledTextCtrl * _arg0;
+    wxString * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","filename", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxStyledTextCtrl_LoadFile",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LoadFile. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = wxString_in_helper(_obj1);
+    if (_arg1 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxStyledTextCtrl_LoadFile(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+{
+    if (_obj1)
+        delete _arg1;
+}
+    return _resultobj;
+}
+
 static void *SwigwxStyledTextEventTowxCommandEvent(void *ptr) {
     wxStyledTextEvent *src;
     wxCommandEvent *dest;
@@ -11012,6 +11896,8 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextEvent_SetPosition", (PyCFunction) _wrap_wxStyledTextEvent_SetPosition, METH_VARARGS | METH_KEYWORDS },
 	 { "delete_wxStyledTextEvent", (PyCFunction) _wrap_delete_wxStyledTextEvent, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxStyledTextEvent", (PyCFunction) _wrap_new_wxStyledTextEvent, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_LoadFile", (PyCFunction) _wrap_wxStyledTextCtrl_LoadFile, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SaveFile", (PyCFunction) _wrap_wxStyledTextCtrl_SaveFile, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetLastKeydownProcessed", (PyCFunction) _wrap_wxStyledTextCtrl_SetLastKeydownProcessed, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_GetLastKeydownProcessed", (PyCFunction) _wrap_wxStyledTextCtrl_GetLastKeydownProcessed, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetHScrollBar", (PyCFunction) _wrap_wxStyledTextCtrl_SetHScrollBar, METH_VARARGS | METH_KEYWORDS },
@@ -11035,8 +11921,14 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_SetLexer", (PyCFunction) _wrap_wxStyledTextCtrl_SetLexer, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_StopRecord", (PyCFunction) _wrap_wxStyledTextCtrl_StopRecord, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_StartRecord", (PyCFunction) _wrap_wxStyledTextCtrl_StartRecord, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetHotspotActiveUnderline", (PyCFunction) _wrap_wxStyledTextCtrl_SetHotspotActiveUnderline, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetHotspotActiveBackground", (PyCFunction) _wrap_wxStyledTextCtrl_SetHotspotActiveBackground, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetHotspotActiveForeground", (PyCFunction) _wrap_wxStyledTextCtrl_SetHotspotActiveForeground, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_GetPrintWrapMode", (PyCFunction) _wrap_wxStyledTextCtrl_GetPrintWrapMode, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetPrintWrapMode", (PyCFunction) _wrap_wxStyledTextCtrl_SetPrintWrapMode, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetYCaretPolicy", (PyCFunction) _wrap_wxStyledTextCtrl_SetYCaretPolicy, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetXCaretPolicy", (PyCFunction) _wrap_wxStyledTextCtrl_SetXCaretPolicy, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_ChooseCaretX", (PyCFunction) _wrap_wxStyledTextCtrl_ChooseCaretX, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_GetXOffset", (PyCFunction) _wrap_wxStyledTextCtrl_GetXOffset, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetXOffset", (PyCFunction) _wrap_wxStyledTextCtrl_SetXOffset, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_DelLineRight", (PyCFunction) _wrap_wxStyledTextCtrl_DelLineRight, METH_VARARGS | METH_KEYWORDS },
@@ -11088,6 +11980,17 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_LineEndDisplay", (PyCFunction) _wrap_wxStyledTextCtrl_LineEndDisplay, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_HomeDisplayExtend", (PyCFunction) _wrap_wxStyledTextCtrl_HomeDisplayExtend, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_HomeDisplay", (PyCFunction) _wrap_wxStyledTextCtrl_HomeDisplay, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_LineDuplicate", (PyCFunction) _wrap_wxStyledTextCtrl_LineDuplicate, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetFoldMarginHiColour", (PyCFunction) _wrap_wxStyledTextCtrl_SetFoldMarginHiColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetFoldMarginColour", (PyCFunction) _wrap_wxStyledTextCtrl_SetFoldMarginColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_LinesSplit", (PyCFunction) _wrap_wxStyledTextCtrl_LinesSplit, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_LinesJoin", (PyCFunction) _wrap_wxStyledTextCtrl_LinesJoin, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_TargetFromSelection", (PyCFunction) _wrap_wxStyledTextCtrl_TargetFromSelection, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetTwoPhaseDraw", (PyCFunction) _wrap_wxStyledTextCtrl_SetTwoPhaseDraw, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_GetTwoPhaseDraw", (PyCFunction) _wrap_wxStyledTextCtrl_GetTwoPhaseDraw, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_AppendText", (PyCFunction) _wrap_wxStyledTextCtrl_AppendText, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_GetUseVerticalScrollBar", (PyCFunction) _wrap_wxStyledTextCtrl_GetUseVerticalScrollBar, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetUseVerticalScrollBar", (PyCFunction) _wrap_wxStyledTextCtrl_SetUseVerticalScrollBar, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_TextHeight", (PyCFunction) _wrap_wxStyledTextCtrl_TextHeight, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_GetEndAtLastLine", (PyCFunction) _wrap_wxStyledTextCtrl_GetEndAtLastLine, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetEndAtLastLine", (PyCFunction) _wrap_wxStyledTextCtrl_SetEndAtLastLine, METH_VARARGS | METH_KEYWORDS },
@@ -11121,6 +12024,8 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_SetFoldLevel", (PyCFunction) _wrap_wxStyledTextCtrl_SetFoldLevel, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_DocLineFromVisible", (PyCFunction) _wrap_wxStyledTextCtrl_DocLineFromVisible, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_VisibleFromDocLine", (PyCFunction) _wrap_wxStyledTextCtrl_VisibleFromDocLine, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_CallTipSetForegroundHighlight", (PyCFunction) _wrap_wxStyledTextCtrl_CallTipSetForegroundHighlight, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_CallTipSetForeground", (PyCFunction) _wrap_wxStyledTextCtrl_CallTipSetForeground, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_CallTipSetBackground", (PyCFunction) _wrap_wxStyledTextCtrl_CallTipSetBackground, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_CallTipSetHighlight", (PyCFunction) _wrap_wxStyledTextCtrl_CallTipSetHighlight, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_CallTipPosAtStart", (PyCFunction) _wrap_wxStyledTextCtrl_CallTipPosAtStart, METH_VARARGS | METH_KEYWORDS },
@@ -11198,6 +12103,10 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_SetUseTabs", (PyCFunction) _wrap_wxStyledTextCtrl_SetUseTabs, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_GetIndent", (PyCFunction) _wrap_wxStyledTextCtrl_GetIndent, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetIndent", (PyCFunction) _wrap_wxStyledTextCtrl_SetIndent, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_AutoCompSetTypeSeparator", (PyCFunction) _wrap_wxStyledTextCtrl_AutoCompSetTypeSeparator, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_AutoCompGetTypeSeparator", (PyCFunction) _wrap_wxStyledTextCtrl_AutoCompGetTypeSeparator, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_ClearRegisteredImages", (PyCFunction) _wrap_wxStyledTextCtrl_ClearRegisteredImages, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_RegisterImage", (PyCFunction) _wrap_wxStyledTextCtrl_RegisterImage, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_AutoCompGetDropRestOfWord", (PyCFunction) _wrap_wxStyledTextCtrl_AutoCompGetDropRestOfWord, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_AutoCompSetDropRestOfWord", (PyCFunction) _wrap_wxStyledTextCtrl_AutoCompSetDropRestOfWord, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_AutoCompGetAutoHide", (PyCFunction) _wrap_wxStyledTextCtrl_AutoCompGetAutoHide, METH_VARARGS | METH_KEYWORDS },
@@ -11248,6 +12157,7 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_SetCaretForeground", (PyCFunction) _wrap_wxStyledTextCtrl_SetCaretForeground, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetSelBackground", (PyCFunction) _wrap_wxStyledTextCtrl_SetSelBackground, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetSelForeground", (PyCFunction) _wrap_wxStyledTextCtrl_SetSelForeground, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_StyleSetHotSpot", (PyCFunction) _wrap_wxStyledTextCtrl_StyleSetHotSpot, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_StyleSetCharacterSet", (PyCFunction) _wrap_wxStyledTextCtrl_StyleSetCharacterSet, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_StyleSetCase", (PyCFunction) _wrap_wxStyledTextCtrl_StyleSetCase, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_StyleSetUnderline", (PyCFunction) _wrap_wxStyledTextCtrl_StyleSetUnderline, METH_VARARGS | METH_KEYWORDS },
@@ -11268,6 +12178,7 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_SetMarginWidth", (PyCFunction) _wrap_wxStyledTextCtrl_SetMarginWidth, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_GetMarginType", (PyCFunction) _wrap_wxStyledTextCtrl_GetMarginType, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetMarginType", (PyCFunction) _wrap_wxStyledTextCtrl_SetMarginType, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_MarkerDefineBitmap", (PyCFunction) _wrap_wxStyledTextCtrl_MarkerDefineBitmap, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_MarkerPrevious", (PyCFunction) _wrap_wxStyledTextCtrl_MarkerPrevious, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_MarkerNext", (PyCFunction) _wrap_wxStyledTextCtrl_MarkerNext, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_MarkerGet", (PyCFunction) _wrap_wxStyledTextCtrl_MarkerGet, METH_VARARGS | METH_KEYWORDS },
@@ -11455,6 +12366,7 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_EOL_CR", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_EOL_LF", PyInt_FromLong((long) 2));
 	 PyDict_SetItemString(d,"wxSTC_CP_UTF8", PyInt_FromLong((long) 65001));
+	 PyDict_SetItemString(d,"wxSTC_CP_DBCS", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_MARKER_MAX", PyInt_FromLong((long) 31));
 	 PyDict_SetItemString(d,"wxSTC_MARK_CIRCLE", PyInt_FromLong((long) 0));
 	 PyDict_SetItemString(d,"wxSTC_MARK_ROUNDRECT", PyInt_FromLong((long) 1));
@@ -11481,6 +12393,7 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_MARK_BACKGROUND", PyInt_FromLong((long) 22));
 	 PyDict_SetItemString(d,"wxSTC_MARK_DOTDOTDOT", PyInt_FromLong((long) 23));
 	 PyDict_SetItemString(d,"wxSTC_MARK_ARROWS", PyInt_FromLong((long) 24));
+	 PyDict_SetItemString(d,"wxSTC_MARK_PIXMAP", PyInt_FromLong((long) 25));
 	 PyDict_SetItemString(d,"wxSTC_MARK_CHARACTER", PyInt_FromLong((long) 10000));
 	 PyDict_SetItemString(d,"wxSTC_MARKNUM_FOLDEREND", PyInt_FromLong((long) 25));
 	 PyDict_SetItemString(d,"wxSTC_MARKNUM_FOLDEROPENMID", PyInt_FromLong((long) 26));
@@ -11541,10 +12454,21 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_FIND_MATCHCASE", PyInt_FromLong((long) 4));
 	 PyDict_SetItemString(d,"wxSTC_FIND_WORDSTART", PyInt_FromLong((long) 0x00100000));
 	 PyDict_SetItemString(d,"wxSTC_FIND_REGEXP", PyInt_FromLong((long) 0x00200000));
+	 PyDict_SetItemString(d,"wxSTC_FIND_POSIX", PyInt_FromLong((long) 0x00400000));
 	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELBASE", PyInt_FromLong((long) 0x400));
 	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELWHITEFLAG", PyInt_FromLong((long) 0x1000));
 	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELHEADERFLAG", PyInt_FromLong((long) 0x2000));
+	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELBOXHEADERFLAG", PyInt_FromLong((long) 0x4000));
+	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELBOXFOOTERFLAG", PyInt_FromLong((long) 0x8000));
+	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELCONTRACTED", PyInt_FromLong((long) 0x10000));
+	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELUNINDENT", PyInt_FromLong((long) 0x20000));
 	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELNUMBERMASK", PyInt_FromLong((long) 0x0FFF));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED", PyInt_FromLong((long) 0x0002));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED", PyInt_FromLong((long) 0x0004));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_LINEAFTER_EXPANDED", PyInt_FromLong((long) 0x0008));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED", PyInt_FromLong((long) 0x0010));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_LEVELNUMBERS", PyInt_FromLong((long) 0x0040));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_BOX", PyInt_FromLong((long) 0x0001));
 	 PyDict_SetItemString(d,"wxSTC_TIME_FOREVER", PyInt_FromLong((long) 10000000));
 	 PyDict_SetItemString(d,"wxSTC_WRAP_NONE", PyInt_FromLong((long) 0));
 	 PyDict_SetItemString(d,"wxSTC_WRAP_WORD", PyInt_FromLong((long) 1));
@@ -11556,7 +12480,7 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_EDGE_LINE", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_EDGE_BACKGROUND", PyInt_FromLong((long) 2));
 	 PyDict_SetItemString(d,"wxSTC_CURSORNORMAL", PyInt_FromLong((long) -1));
-	 PyDict_SetItemString(d,"wxSTC_CURSORWAIT", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_CURSORWAIT", PyInt_FromLong((long) 4));
 	 PyDict_SetItemString(d,"wxSTC_VISIBLE_SLOP", PyInt_FromLong((long) 0x01));
 	 PyDict_SetItemString(d,"wxSTC_VISIBLE_STRICT", PyInt_FromLong((long) 0x04));
 	 PyDict_SetItemString(d,"wxSTC_CARET_SLOP", PyInt_FromLong((long) 0x01));
@@ -11629,6 +12553,12 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_LEX_BAAN", PyInt_FromLong((long) 31));
 	 PyDict_SetItemString(d,"wxSTC_LEX_MATLAB", PyInt_FromLong((long) 32));
 	 PyDict_SetItemString(d,"wxSTC_LEX_SCRIPTOL", PyInt_FromLong((long) 33));
+	 PyDict_SetItemString(d,"wxSTC_LEX_ASM", PyInt_FromLong((long) 34));
+	 PyDict_SetItemString(d,"wxSTC_LEX_CPPNOCASE", PyInt_FromLong((long) 35));
+	 PyDict_SetItemString(d,"wxSTC_LEX_FORTRAN", PyInt_FromLong((long) 36));
+	 PyDict_SetItemString(d,"wxSTC_LEX_F77", PyInt_FromLong((long) 37));
+	 PyDict_SetItemString(d,"wxSTC_LEX_CSS", PyInt_FromLong((long) 38));
+	 PyDict_SetItemString(d,"wxSTC_LEX_POV", PyInt_FromLong((long) 39));
 	 PyDict_SetItemString(d,"wxSTC_LEX_AUTOMATIC", PyInt_FromLong((long) 1000));
 	 PyDict_SetItemString(d,"wxSTC_P_DEFAULT", PyInt_FromLong((long) 0));
 	 PyDict_SetItemString(d,"wxSTC_P_COMMENTLINE", PyInt_FromLong((long) 1));
@@ -11854,6 +12784,9 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_ERR_DIFF_ADDITION", PyInt_FromLong((long) 11));
 	 PyDict_SetItemString(d,"wxSTC_ERR_DIFF_DELETION", PyInt_FromLong((long) 12));
 	 PyDict_SetItemString(d,"wxSTC_ERR_DIFF_MESSAGE", PyInt_FromLong((long) 13));
+	 PyDict_SetItemString(d,"wxSTC_ERR_PHP", PyInt_FromLong((long) 14));
+	 PyDict_SetItemString(d,"wxSTC_ERR_ELF", PyInt_FromLong((long) 15));
+	 PyDict_SetItemString(d,"wxSTC_ERR_IFC", PyInt_FromLong((long) 16));
 	 PyDict_SetItemString(d,"wxSTC_BAT_DEFAULT", PyInt_FromLong((long) 0));
 	 PyDict_SetItemString(d,"wxSTC_BAT_COMMENT", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_BAT_WORD", PyInt_FromLong((long) 2));
@@ -11890,22 +12823,29 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_AVE_COMMENT", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_AVE_NUMBER", PyInt_FromLong((long) 2));
 	 PyDict_SetItemString(d,"wxSTC_AVE_WORD", PyInt_FromLong((long) 3));
-	 PyDict_SetItemString(d,"wxSTC_AVE_KEYWORD", PyInt_FromLong((long) 4));
-	 PyDict_SetItemString(d,"wxSTC_AVE_STATEMENT", PyInt_FromLong((long) 5));
 	 PyDict_SetItemString(d,"wxSTC_AVE_STRING", PyInt_FromLong((long) 6));
 	 PyDict_SetItemString(d,"wxSTC_AVE_ENUM", PyInt_FromLong((long) 7));
 	 PyDict_SetItemString(d,"wxSTC_AVE_STRINGEOL", PyInt_FromLong((long) 8));
 	 PyDict_SetItemString(d,"wxSTC_AVE_IDENTIFIER", PyInt_FromLong((long) 9));
 	 PyDict_SetItemString(d,"wxSTC_AVE_OPERATOR", PyInt_FromLong((long) 10));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD1", PyInt_FromLong((long) 11));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD2", PyInt_FromLong((long) 12));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD3", PyInt_FromLong((long) 13));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD4", PyInt_FromLong((long) 14));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD5", PyInt_FromLong((long) 15));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD6", PyInt_FromLong((long) 16));
 	 PyDict_SetItemString(d,"wxSTC_ADA_DEFAULT", PyInt_FromLong((long) 0));
-	 PyDict_SetItemString(d,"wxSTC_ADA_COMMENT", PyInt_FromLong((long) 1));
-	 PyDict_SetItemString(d,"wxSTC_ADA_NUMBER", PyInt_FromLong((long) 2));
-	 PyDict_SetItemString(d,"wxSTC_ADA_WORD", PyInt_FromLong((long) 3));
-	 PyDict_SetItemString(d,"wxSTC_ADA_STRING", PyInt_FromLong((long) 4));
+	 PyDict_SetItemString(d,"wxSTC_ADA_WORD", PyInt_FromLong((long) 1));
+	 PyDict_SetItemString(d,"wxSTC_ADA_IDENTIFIER", PyInt_FromLong((long) 2));
+	 PyDict_SetItemString(d,"wxSTC_ADA_NUMBER", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_ADA_DELIMITER", PyInt_FromLong((long) 4));
 	 PyDict_SetItemString(d,"wxSTC_ADA_CHARACTER", PyInt_FromLong((long) 5));
-	 PyDict_SetItemString(d,"wxSTC_ADA_OPERATOR", PyInt_FromLong((long) 6));
-	 PyDict_SetItemString(d,"wxSTC_ADA_IDENTIFIER", PyInt_FromLong((long) 7));
+	 PyDict_SetItemString(d,"wxSTC_ADA_CHARACTEREOL", PyInt_FromLong((long) 6));
+	 PyDict_SetItemString(d,"wxSTC_ADA_STRING", PyInt_FromLong((long) 7));
 	 PyDict_SetItemString(d,"wxSTC_ADA_STRINGEOL", PyInt_FromLong((long) 8));
+	 PyDict_SetItemString(d,"wxSTC_ADA_LABEL", PyInt_FromLong((long) 9));
+	 PyDict_SetItemString(d,"wxSTC_ADA_COMMENTLINE", PyInt_FromLong((long) 10));
+	 PyDict_SetItemString(d,"wxSTC_ADA_ILLEGAL", PyInt_FromLong((long) 11));
 	 PyDict_SetItemString(d,"wxSTC_BAAN_DEFAULT", PyInt_FromLong((long) 0));
 	 PyDict_SetItemString(d,"wxSTC_BAAN_COMMENT", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_BAAN_COMMENTDOC", PyInt_FromLong((long) 2));
@@ -11973,6 +12913,58 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_SCRIPTOL_COMMENTDOCKEYWORD", PyInt_FromLong((long) 17));
 	 PyDict_SetItemString(d,"wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR", PyInt_FromLong((long) 18));
 	 PyDict_SetItemString(d,"wxSTC_SCRIPTOL_COMMENTBASIC", PyInt_FromLong((long) 19));
+	 PyDict_SetItemString(d,"wxSTC_ASM_DEFAULT", PyInt_FromLong((long) 0));
+	 PyDict_SetItemString(d,"wxSTC_ASM_COMMENT", PyInt_FromLong((long) 1));
+	 PyDict_SetItemString(d,"wxSTC_ASM_NUMBER", PyInt_FromLong((long) 2));
+	 PyDict_SetItemString(d,"wxSTC_ASM_STRING", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_ASM_OPERATOR", PyInt_FromLong((long) 4));
+	 PyDict_SetItemString(d,"wxSTC_ASM_IDENTIFIER", PyInt_FromLong((long) 5));
+	 PyDict_SetItemString(d,"wxSTC_ASM_CPUINSTRUCTION", PyInt_FromLong((long) 6));
+	 PyDict_SetItemString(d,"wxSTC_ASM_MATHINSTRUCTION", PyInt_FromLong((long) 7));
+	 PyDict_SetItemString(d,"wxSTC_ASM_REGISTER", PyInt_FromLong((long) 8));
+	 PyDict_SetItemString(d,"wxSTC_ASM_DIRECTIVE", PyInt_FromLong((long) 9));
+	 PyDict_SetItemString(d,"wxSTC_ASM_DIRECTIVEOPERAND", PyInt_FromLong((long) 10));
+	 PyDict_SetItemString(d,"wxSTC_F_DEFAULT", PyInt_FromLong((long) 0));
+	 PyDict_SetItemString(d,"wxSTC_F_COMMENT", PyInt_FromLong((long) 1));
+	 PyDict_SetItemString(d,"wxSTC_F_NUMBER", PyInt_FromLong((long) 2));
+	 PyDict_SetItemString(d,"wxSTC_F_STRING1", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_F_STRING2", PyInt_FromLong((long) 4));
+	 PyDict_SetItemString(d,"wxSTC_F_STRINGEOL", PyInt_FromLong((long) 5));
+	 PyDict_SetItemString(d,"wxSTC_F_OPERATOR", PyInt_FromLong((long) 6));
+	 PyDict_SetItemString(d,"wxSTC_F_IDENTIFIER", PyInt_FromLong((long) 7));
+	 PyDict_SetItemString(d,"wxSTC_F_WORD", PyInt_FromLong((long) 8));
+	 PyDict_SetItemString(d,"wxSTC_F_WORD2", PyInt_FromLong((long) 9));
+	 PyDict_SetItemString(d,"wxSTC_F_WORD3", PyInt_FromLong((long) 10));
+	 PyDict_SetItemString(d,"wxSTC_F_PREPROCESSOR", PyInt_FromLong((long) 11));
+	 PyDict_SetItemString(d,"wxSTC_F_OPERATOR2", PyInt_FromLong((long) 12));
+	 PyDict_SetItemString(d,"wxSTC_F_LABEL", PyInt_FromLong((long) 13));
+	 PyDict_SetItemString(d,"wxSTC_F_CONTINUATION", PyInt_FromLong((long) 14));
+	 PyDict_SetItemString(d,"wxSTC_CSS_DEFAULT", PyInt_FromLong((long) 0));
+	 PyDict_SetItemString(d,"wxSTC_CSS_TAG", PyInt_FromLong((long) 1));
+	 PyDict_SetItemString(d,"wxSTC_CSS_CLASS", PyInt_FromLong((long) 2));
+	 PyDict_SetItemString(d,"wxSTC_CSS_PSEUDOCLASS", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_CSS_UNKNOWN_PSEUDOCLASS", PyInt_FromLong((long) 4));
+	 PyDict_SetItemString(d,"wxSTC_CSS_OPERATOR", PyInt_FromLong((long) 5));
+	 PyDict_SetItemString(d,"wxSTC_CSS_IDENTIFIER", PyInt_FromLong((long) 6));
+	 PyDict_SetItemString(d,"wxSTC_CSS_UNKNOWN_IDENTIFIER", PyInt_FromLong((long) 7));
+	 PyDict_SetItemString(d,"wxSTC_CSS_VALUE", PyInt_FromLong((long) 8));
+	 PyDict_SetItemString(d,"wxSTC_CSS_COMMENT", PyInt_FromLong((long) 9));
+	 PyDict_SetItemString(d,"wxSTC_CSS_ID", PyInt_FromLong((long) 10));
+	 PyDict_SetItemString(d,"wxSTC_CSS_IMPORTANT", PyInt_FromLong((long) 11));
+	 PyDict_SetItemString(d,"wxSTC_CSS_DIRECTIVE", PyInt_FromLong((long) 12));
+	 PyDict_SetItemString(d,"wxSTC_CSS_DOUBLESTRING", PyInt_FromLong((long) 13));
+	 PyDict_SetItemString(d,"wxSTC_CSS_SINGLESTRING", PyInt_FromLong((long) 14));
+	 PyDict_SetItemString(d,"wxSTC_POV_DEFAULT", PyInt_FromLong((long) 0));
+	 PyDict_SetItemString(d,"wxSTC_POV_COMMENT", PyInt_FromLong((long) 1));
+	 PyDict_SetItemString(d,"wxSTC_POV_COMMENTLINE", PyInt_FromLong((long) 2));
+	 PyDict_SetItemString(d,"wxSTC_POV_COMMENTDOC", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_POV_NUMBER", PyInt_FromLong((long) 4));
+	 PyDict_SetItemString(d,"wxSTC_POV_WORD", PyInt_FromLong((long) 5));
+	 PyDict_SetItemString(d,"wxSTC_POV_STRING", PyInt_FromLong((long) 6));
+	 PyDict_SetItemString(d,"wxSTC_POV_OPERATOR", PyInt_FromLong((long) 7));
+	 PyDict_SetItemString(d,"wxSTC_POV_IDENTIFIER", PyInt_FromLong((long) 8));
+	 PyDict_SetItemString(d,"wxSTC_POV_BRACE", PyInt_FromLong((long) 9));
+	 PyDict_SetItemString(d,"wxSTC_POV_WORD2", PyInt_FromLong((long) 10));
 	 PyDict_SetItemString(d,"wxSTC_CMD_REDO", PyInt_FromLong((long) 2011));
 	 PyDict_SetItemString(d,"wxSTC_CMD_SELECTALL", PyInt_FromLong((long) 2013));
 	 PyDict_SetItemString(d,"wxSTC_CMD_UNDO", PyInt_FromLong((long) 2176));
@@ -12020,6 +13012,7 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINECUT", PyInt_FromLong((long) 2337));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINEDELETE", PyInt_FromLong((long) 2338));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINETRANSPOSE", PyInt_FromLong((long) 2339));
+	 PyDict_SetItemString(d,"wxSTC_CMD_LINEDUPLICATE", PyInt_FromLong((long) 2404));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LOWERCASE", PyInt_FromLong((long) 2340));
 	 PyDict_SetItemString(d,"wxSTC_CMD_UPPERCASE", PyInt_FromLong((long) 2341));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINESCROLLDOWN", PyInt_FromLong((long) 2342));
@@ -12029,12 +13022,22 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_CMD_HOMEDISPLAYEXTEND", PyInt_FromLong((long) 2346));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINEENDDISPLAY", PyInt_FromLong((long) 2347));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINEENDDISPLAYEXTEND", PyInt_FromLong((long) 2348));
+	 PyDict_SetItemString(d,"wxSTC_CMD_HOMEWRAP", PyInt_FromLong((long) 2349));
+	 PyDict_SetItemString(d,"wxSTC_CMD_HOMEWRAPEXTEND", PyInt_FromLong((long) 2450));
+	 PyDict_SetItemString(d,"wxSTC_CMD_LINEENDWRAP", PyInt_FromLong((long) 2451));
+	 PyDict_SetItemString(d,"wxSTC_CMD_LINEENDWRAPEXTEND", PyInt_FromLong((long) 2452));
+	 PyDict_SetItemString(d,"wxSTC_CMD_VCHOMEWRAP", PyInt_FromLong((long) 2453));
+	 PyDict_SetItemString(d,"wxSTC_CMD_VCHOMEWRAPEXTEND", PyInt_FromLong((long) 2454));
 	 PyDict_SetItemString(d,"wxSTC_CMD_WORDPARTLEFT", PyInt_FromLong((long) 2390));
 	 PyDict_SetItemString(d,"wxSTC_CMD_WORDPARTLEFTEXTEND", PyInt_FromLong((long) 2391));
 	 PyDict_SetItemString(d,"wxSTC_CMD_WORDPARTRIGHT", PyInt_FromLong((long) 2392));
 	 PyDict_SetItemString(d,"wxSTC_CMD_WORDPARTRIGHTEXTEND", PyInt_FromLong((long) 2393));
 	 PyDict_SetItemString(d,"wxSTC_CMD_DELLINELEFT", PyInt_FromLong((long) 2395));
 	 PyDict_SetItemString(d,"wxSTC_CMD_DELLINERIGHT", PyInt_FromLong((long) 2396));
+	 PyDict_SetItemString(d,"wxSTC_CMD_PARADOWN", PyInt_FromLong((long) 2413));
+	 PyDict_SetItemString(d,"wxSTC_CMD_PARADOWNEXTEND", PyInt_FromLong((long) 2414));
+	 PyDict_SetItemString(d,"wxSTC_CMD_PARAUP", PyInt_FromLong((long) 2415));
+	 PyDict_SetItemString(d,"wxSTC_CMD_PARAUPEXTEND", PyInt_FromLong((long) 2416));
 	 PyDict_SetItemString(d,"STC_USE_DND", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxEVT_STC_CHANGE", PyInt_FromLong((long) wxEVT_STC_CHANGE));
 	 PyDict_SetItemString(d,"wxEVT_STC_STYLENEEDED", PyInt_FromLong((long) wxEVT_STC_STYLENEEDED));
@@ -12059,6 +13062,9 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxEVT_STC_DRAG_OVER", PyInt_FromLong((long) wxEVT_STC_DRAG_OVER));
 	 PyDict_SetItemString(d,"wxEVT_STC_DO_DROP", PyInt_FromLong((long) wxEVT_STC_DO_DROP));
 	 PyDict_SetItemString(d,"wxEVT_STC_ZOOM", PyInt_FromLong((long) wxEVT_STC_ZOOM));
+	 PyDict_SetItemString(d,"wxEVT_STC_HOTSPOT_CLICK", PyInt_FromLong((long) wxEVT_STC_HOTSPOT_CLICK));
+	 PyDict_SetItemString(d,"wxEVT_STC_HOTSPOT_DCLICK", PyInt_FromLong((long) wxEVT_STC_HOTSPOT_DCLICK));
+	 PyDict_SetItemString(d,"wxEVT_STC_CALLTIP_CLICK", PyInt_FromLong((long) wxEVT_STC_CALLTIP_CLICK));
 
 
     wxClassInfo::CleanUpClasses();
diff --git a/wxPython/contrib/stc/mac/stc_.py b/wxPython/contrib/stc/mac/stc_.py
index a3a4fef4a9..93e7f892ef 100644
--- a/wxPython/contrib/stc/mac/stc_.py
+++ b/wxPython/contrib/stc/mac/stc_.py
@@ -112,930 +112,1019 @@ def EVT_STC_DO_DROP(win, id, func):
 def EVT_STC_ZOOM(win, id, func):
     win.Connect(id, -1, wxEVT_STC_ZOOM, func)
 
+def EVT_STC_HOTSPOT_CLICK(win, id, func):
+    win.Connect(id, -1, wxEVT_STC_HOTSPOT_CLICK, func)
+
+def EVT_STC_HOTSPOT_DCLICK(win, id, func):
+    win.Connect(id, -1, wxEVT_STC_HOTSPOT_DCLICK, func)
+
+def EVT_STC_CALLTIP_CLICK(win, id, func):
+    win.Connect(id, -1, wxEVT_STC_CALLTIP_CLICK, func)
 
 class wxStyledTextCtrlPtr(wxControlPtr):
     def __init__(self,this):
         self.this = this
         self.thisown = 0
     def AddText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AddText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AddText(self, *_args, **_kwargs)
         return val
     def AddStyledText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AddStyledText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AddStyledText(self, *_args, **_kwargs)
         return val
     def InsertText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_InsertText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_InsertText(self, *_args, **_kwargs)
         return val
     def ClearAll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ClearAll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ClearAll(self, *_args, **_kwargs)
         return val
     def ClearDocumentStyle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ClearDocumentStyle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ClearDocumentStyle(self, *_args, **_kwargs)
         return val
     def GetLength(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLength,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLength(self, *_args, **_kwargs)
         return val
     def GetCharAt(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCharAt,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCharAt(self, *_args, **_kwargs)
         return val
     def GetCurrentPos(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCurrentPos,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCurrentPos(self, *_args, **_kwargs)
         return val
     def GetAnchor(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetAnchor,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetAnchor(self, *_args, **_kwargs)
         return val
     def GetStyleAt(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetStyleAt,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetStyleAt(self, *_args, **_kwargs)
         return val
     def Redo(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Redo,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Redo(self, *_args, **_kwargs)
         return val
     def SetUndoCollection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetUndoCollection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetUndoCollection(self, *_args, **_kwargs)
         return val
     def SelectAll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SelectAll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SelectAll(self, *_args, **_kwargs)
         return val
     def SetSavePoint(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSavePoint,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSavePoint(self, *_args, **_kwargs)
         return val
     def GetStyledText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetStyledText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetStyledText(self, *_args, **_kwargs)
         return val
     def CanRedo(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CanRedo,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CanRedo(self, *_args, **_kwargs)
         return val
     def MarkerLineFromHandle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerLineFromHandle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerLineFromHandle(self, *_args, **_kwargs)
         return val
     def MarkerDeleteHandle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerDeleteHandle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerDeleteHandle(self, *_args, **_kwargs)
         return val
     def GetUndoCollection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetUndoCollection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetUndoCollection(self, *_args, **_kwargs)
         return val
     def GetViewWhiteSpace(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetViewWhiteSpace,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetViewWhiteSpace(self, *_args, **_kwargs)
         return val
     def SetViewWhiteSpace(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetViewWhiteSpace,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetViewWhiteSpace(self, *_args, **_kwargs)
         return val
     def PositionFromPoint(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_PositionFromPoint,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_PositionFromPoint(self, *_args, **_kwargs)
         return val
     def PositionFromPointClose(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_PositionFromPointClose,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_PositionFromPointClose(self, *_args, **_kwargs)
         return val
     def GotoLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GotoLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GotoLine(self, *_args, **_kwargs)
         return val
     def GotoPos(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GotoPos,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GotoPos(self, *_args, **_kwargs)
         return val
     def SetAnchor(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetAnchor,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetAnchor(self, *_args, **_kwargs)
         return val
     def GetCurLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCurLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCurLine(self, *_args, **_kwargs)
         return val
     def GetEndStyled(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEndStyled,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEndStyled(self, *_args, **_kwargs)
         return val
     def ConvertEOLs(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ConvertEOLs,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ConvertEOLs(self, *_args, **_kwargs)
         return val
     def GetEOLMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEOLMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEOLMode(self, *_args, **_kwargs)
         return val
     def SetEOLMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetEOLMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetEOLMode(self, *_args, **_kwargs)
         return val
     def StartStyling(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StartStyling,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StartStyling(self, *_args, **_kwargs)
         return val
     def SetStyling(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetStyling,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetStyling(self, *_args, **_kwargs)
         return val
     def GetBufferedDraw(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetBufferedDraw,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetBufferedDraw(self, *_args, **_kwargs)
         return val
     def SetBufferedDraw(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetBufferedDraw,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetBufferedDraw(self, *_args, **_kwargs)
         return val
     def SetTabWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetTabWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetTabWidth(self, *_args, **_kwargs)
         return val
     def GetTabWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTabWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTabWidth(self, *_args, **_kwargs)
         return val
     def SetCodePage(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCodePage,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCodePage(self, *_args, **_kwargs)
         return val
     def MarkerDefine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerDefine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerDefine(self, *_args, **_kwargs)
         return val
     def MarkerSetForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerSetForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerSetForeground(self, *_args, **_kwargs)
         return val
     def MarkerSetBackground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerSetBackground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerSetBackground(self, *_args, **_kwargs)
         return val
     def MarkerAdd(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerAdd,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerAdd(self, *_args, **_kwargs)
         return val
     def MarkerDelete(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerDelete,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerDelete(self, *_args, **_kwargs)
         return val
     def MarkerDeleteAll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerDeleteAll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerDeleteAll(self, *_args, **_kwargs)
         return val
     def MarkerGet(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerGet,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerGet(self, *_args, **_kwargs)
         return val
     def MarkerNext(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerNext,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerNext(self, *_args, **_kwargs)
         return val
     def MarkerPrevious(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerPrevious,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerPrevious(self, *_args, **_kwargs)
+        return val
+    def MarkerDefineBitmap(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_MarkerDefineBitmap(self, *_args, **_kwargs)
         return val
     def SetMarginType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginType(self, *_args, **_kwargs)
         return val
     def GetMarginType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginType(self, *_args, **_kwargs)
         return val
     def SetMarginWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginWidth(self, *_args, **_kwargs)
         return val
     def GetMarginWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginWidth(self, *_args, **_kwargs)
         return val
     def SetMarginMask(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginMask,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginMask(self, *_args, **_kwargs)
         return val
     def GetMarginMask(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginMask,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginMask(self, *_args, **_kwargs)
         return val
     def SetMarginSensitive(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginSensitive,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginSensitive(self, *_args, **_kwargs)
         return val
     def GetMarginSensitive(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginSensitive,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginSensitive(self, *_args, **_kwargs)
         return val
     def StyleClearAll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleClearAll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleClearAll(self, *_args, **_kwargs)
         return val
     def StyleSetForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetForeground(self, *_args, **_kwargs)
         return val
     def StyleSetBackground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetBackground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetBackground(self, *_args, **_kwargs)
         return val
     def StyleSetBold(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetBold,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetBold(self, *_args, **_kwargs)
         return val
     def StyleSetItalic(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetItalic,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetItalic(self, *_args, **_kwargs)
         return val
     def StyleSetSize(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetSize,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetSize(self, *_args, **_kwargs)
         return val
     def StyleSetFaceName(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetFaceName,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetFaceName(self, *_args, **_kwargs)
         return val
     def StyleSetEOLFilled(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetEOLFilled,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetEOLFilled(self, *_args, **_kwargs)
         return val
     def StyleResetDefault(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleResetDefault,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleResetDefault(self, *_args, **_kwargs)
         return val
     def StyleSetUnderline(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetUnderline,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetUnderline(self, *_args, **_kwargs)
         return val
     def StyleSetCase(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetCase,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetCase(self, *_args, **_kwargs)
         return val
     def StyleSetCharacterSet(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetCharacterSet,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetCharacterSet(self, *_args, **_kwargs)
+        return val
+    def StyleSetHotSpot(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_StyleSetHotSpot(self, *_args, **_kwargs)
         return val
     def SetSelForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSelForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSelForeground(self, *_args, **_kwargs)
         return val
     def SetSelBackground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSelBackground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSelBackground(self, *_args, **_kwargs)
         return val
     def SetCaretForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCaretForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCaretForeground(self, *_args, **_kwargs)
         return val
     def CmdKeyAssign(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CmdKeyAssign,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CmdKeyAssign(self, *_args, **_kwargs)
         return val
     def CmdKeyClear(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CmdKeyClear,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CmdKeyClear(self, *_args, **_kwargs)
         return val
     def CmdKeyClearAll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CmdKeyClearAll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CmdKeyClearAll(self, *_args, **_kwargs)
         return val
     def SetStyleBytes(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetStyleBytes,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetStyleBytes(self, *_args, **_kwargs)
         return val
     def StyleSetVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetVisible(self, *_args, **_kwargs)
         return val
     def GetCaretPeriod(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCaretPeriod,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCaretPeriod(self, *_args, **_kwargs)
         return val
     def SetCaretPeriod(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCaretPeriod,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCaretPeriod(self, *_args, **_kwargs)
         return val
     def SetWordChars(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetWordChars,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetWordChars(self, *_args, **_kwargs)
         return val
     def BeginUndoAction(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_BeginUndoAction,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_BeginUndoAction(self, *_args, **_kwargs)
         return val
     def EndUndoAction(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_EndUndoAction,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_EndUndoAction(self, *_args, **_kwargs)
         return val
     def IndicatorSetStyle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_IndicatorSetStyle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_IndicatorSetStyle(self, *_args, **_kwargs)
         return val
     def IndicatorGetStyle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_IndicatorGetStyle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_IndicatorGetStyle(self, *_args, **_kwargs)
         return val
     def IndicatorSetForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_IndicatorSetForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_IndicatorSetForeground(self, *_args, **_kwargs)
         return val
     def IndicatorGetForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_IndicatorGetForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_IndicatorGetForeground(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetWhitespaceForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetWhitespaceForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetWhitespaceForeground(self, *_args, **_kwargs)
         return val
     def SetWhitespaceBackground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetWhitespaceBackground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetWhitespaceBackground(self, *_args, **_kwargs)
         return val
     def SetStyleBits(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetStyleBits,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetStyleBits(self, *_args, **_kwargs)
         return val
     def GetStyleBits(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetStyleBits,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetStyleBits(self, *_args, **_kwargs)
         return val
     def SetLineState(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLineState,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLineState(self, *_args, **_kwargs)
         return val
     def GetLineState(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineState,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineState(self, *_args, **_kwargs)
         return val
     def GetMaxLineState(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMaxLineState,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMaxLineState(self, *_args, **_kwargs)
         return val
     def GetCaretLineVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCaretLineVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCaretLineVisible(self, *_args, **_kwargs)
         return val
     def SetCaretLineVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCaretLineVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCaretLineVisible(self, *_args, **_kwargs)
         return val
     def GetCaretLineBack(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCaretLineBack,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCaretLineBack(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetCaretLineBack(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCaretLineBack,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCaretLineBack(self, *_args, **_kwargs)
         return val
     def StyleSetChangeable(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetChangeable,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetChangeable(self, *_args, **_kwargs)
         return val
     def AutoCompShow(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompShow,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompShow(self, *_args, **_kwargs)
         return val
     def AutoCompCancel(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompCancel,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompCancel(self, *_args, **_kwargs)
         return val
     def AutoCompActive(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompActive,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompActive(self, *_args, **_kwargs)
         return val
     def AutoCompPosStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompPosStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompPosStart(self, *_args, **_kwargs)
         return val
     def AutoCompComplete(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompComplete,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompComplete(self, *_args, **_kwargs)
         return val
     def AutoCompStops(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompStops,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompStops(self, *_args, **_kwargs)
         return val
     def AutoCompSetSeparator(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetSeparator,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetSeparator(self, *_args, **_kwargs)
         return val
     def AutoCompGetSeparator(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetSeparator,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetSeparator(self, *_args, **_kwargs)
         return val
     def AutoCompSelect(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSelect,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSelect(self, *_args, **_kwargs)
         return val
     def AutoCompSetCancelAtStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetCancelAtStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetCancelAtStart(self, *_args, **_kwargs)
         return val
     def AutoCompGetCancelAtStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetCancelAtStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetCancelAtStart(self, *_args, **_kwargs)
         return val
     def AutoCompSetFillUps(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetFillUps,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetFillUps(self, *_args, **_kwargs)
         return val
     def AutoCompSetChooseSingle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetChooseSingle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetChooseSingle(self, *_args, **_kwargs)
         return val
     def AutoCompGetChooseSingle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetChooseSingle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetChooseSingle(self, *_args, **_kwargs)
         return val
     def AutoCompSetIgnoreCase(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetIgnoreCase,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetIgnoreCase(self, *_args, **_kwargs)
         return val
     def AutoCompGetIgnoreCase(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetIgnoreCase,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetIgnoreCase(self, *_args, **_kwargs)
         return val
     def UserListShow(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_UserListShow,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_UserListShow(self, *_args, **_kwargs)
         return val
     def AutoCompSetAutoHide(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetAutoHide,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetAutoHide(self, *_args, **_kwargs)
         return val
     def AutoCompGetAutoHide(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetAutoHide,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetAutoHide(self, *_args, **_kwargs)
         return val
     def AutoCompSetDropRestOfWord(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetDropRestOfWord,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetDropRestOfWord(self, *_args, **_kwargs)
         return val
     def AutoCompGetDropRestOfWord(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetDropRestOfWord,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetDropRestOfWord(self, *_args, **_kwargs)
+        return val
+    def RegisterImage(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_RegisterImage(self, *_args, **_kwargs)
+        return val
+    def ClearRegisteredImages(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_ClearRegisteredImages(self, *_args, **_kwargs)
+        return val
+    def AutoCompGetTypeSeparator(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_AutoCompGetTypeSeparator(self, *_args, **_kwargs)
+        return val
+    def AutoCompSetTypeSeparator(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_AutoCompSetTypeSeparator(self, *_args, **_kwargs)
         return val
     def SetIndent(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetIndent,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetIndent(self, *_args, **_kwargs)
         return val
     def GetIndent(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetIndent,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetIndent(self, *_args, **_kwargs)
         return val
     def SetUseTabs(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetUseTabs,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetUseTabs(self, *_args, **_kwargs)
         return val
     def GetUseTabs(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetUseTabs,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetUseTabs(self, *_args, **_kwargs)
         return val
     def SetLineIndentation(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLineIndentation,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLineIndentation(self, *_args, **_kwargs)
         return val
     def GetLineIndentation(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineIndentation,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineIndentation(self, *_args, **_kwargs)
         return val
     def GetLineIndentPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineIndentPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineIndentPosition(self, *_args, **_kwargs)
         return val
     def GetColumn(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetColumn,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetColumn(self, *_args, **_kwargs)
         return val
     def SetUseHorizontalScrollBar(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetUseHorizontalScrollBar,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetUseHorizontalScrollBar(self, *_args, **_kwargs)
         return val
     def GetUseHorizontalScrollBar(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetUseHorizontalScrollBar,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetUseHorizontalScrollBar(self, *_args, **_kwargs)
         return val
     def SetIndentationGuides(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetIndentationGuides,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetIndentationGuides(self, *_args, **_kwargs)
         return val
     def GetIndentationGuides(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetIndentationGuides,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetIndentationGuides(self, *_args, **_kwargs)
         return val
     def SetHighlightGuide(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetHighlightGuide,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetHighlightGuide(self, *_args, **_kwargs)
         return val
     def GetHighlightGuide(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetHighlightGuide,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetHighlightGuide(self, *_args, **_kwargs)
         return val
     def GetLineEndPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineEndPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineEndPosition(self, *_args, **_kwargs)
         return val
     def GetCodePage(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCodePage,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCodePage(self, *_args, **_kwargs)
         return val
     def GetCaretForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCaretForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCaretForeground(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetReadOnly(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetReadOnly,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetReadOnly(self, *_args, **_kwargs)
         return val
     def SetCurrentPos(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCurrentPos,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCurrentPos(self, *_args, **_kwargs)
         return val
     def SetSelectionStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSelectionStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSelectionStart(self, *_args, **_kwargs)
         return val
     def GetSelectionStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSelectionStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSelectionStart(self, *_args, **_kwargs)
         return val
     def SetSelectionEnd(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSelectionEnd,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSelectionEnd(self, *_args, **_kwargs)
         return val
     def GetSelectionEnd(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSelectionEnd,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSelectionEnd(self, *_args, **_kwargs)
         return val
     def SetPrintMagnification(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetPrintMagnification,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetPrintMagnification(self, *_args, **_kwargs)
         return val
     def GetPrintMagnification(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetPrintMagnification,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetPrintMagnification(self, *_args, **_kwargs)
         return val
     def SetPrintColourMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetPrintColourMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetPrintColourMode(self, *_args, **_kwargs)
         return val
     def GetPrintColourMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetPrintColourMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetPrintColourMode(self, *_args, **_kwargs)
         return val
     def FindText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_FindText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_FindText(self, *_args, **_kwargs)
         return val
     def FormatRange(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_FormatRange,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_FormatRange(self, *_args, **_kwargs)
         return val
     def GetFirstVisibleLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetFirstVisibleLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetFirstVisibleLine(self, *_args, **_kwargs)
         return val
     def GetLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLine(self, *_args, **_kwargs)
         return val
     def GetLineCount(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineCount,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineCount(self, *_args, **_kwargs)
         return val
     def SetMarginLeft(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginLeft,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginLeft(self, *_args, **_kwargs)
         return val
     def GetMarginLeft(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginLeft,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginLeft(self, *_args, **_kwargs)
         return val
     def SetMarginRight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginRight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginRight(self, *_args, **_kwargs)
         return val
     def GetMarginRight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginRight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginRight(self, *_args, **_kwargs)
         return val
     def GetModify(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetModify,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetModify(self, *_args, **_kwargs)
         return val
     def SetSelection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSelection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSelection(self, *_args, **_kwargs)
         return val
     def GetSelectedText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSelectedText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSelectedText(self, *_args, **_kwargs)
         return val
     def GetTextRange(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTextRange,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTextRange(self, *_args, **_kwargs)
         return val
     def HideSelection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_HideSelection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_HideSelection(self, *_args, **_kwargs)
         return val
     def LineFromPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LineFromPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LineFromPosition(self, *_args, **_kwargs)
         return val
     def PositionFromLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_PositionFromLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_PositionFromLine(self, *_args, **_kwargs)
         return val
     def LineScroll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LineScroll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LineScroll(self, *_args, **_kwargs)
         return val
     def EnsureCaretVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_EnsureCaretVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_EnsureCaretVisible(self, *_args, **_kwargs)
         return val
     def ReplaceSelection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ReplaceSelection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ReplaceSelection(self, *_args, **_kwargs)
         return val
     def SetReadOnly(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetReadOnly,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetReadOnly(self, *_args, **_kwargs)
         return val
     def CanPaste(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CanPaste,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CanPaste(self, *_args, **_kwargs)
         return val
     def CanUndo(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CanUndo,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CanUndo(self, *_args, **_kwargs)
         return val
     def EmptyUndoBuffer(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_EmptyUndoBuffer,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_EmptyUndoBuffer(self, *_args, **_kwargs)
         return val
     def Undo(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Undo,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Undo(self, *_args, **_kwargs)
         return val
     def Cut(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Cut,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Cut(self, *_args, **_kwargs)
         return val
     def Copy(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Copy,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Copy(self, *_args, **_kwargs)
         return val
     def Paste(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Paste,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Paste(self, *_args, **_kwargs)
         return val
     def Clear(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Clear,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Clear(self, *_args, **_kwargs)
         return val
     def SetText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetText(self, *_args, **_kwargs)
         return val
     def GetText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetText(self, *_args, **_kwargs)
         return val
     def GetTextLength(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTextLength,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTextLength(self, *_args, **_kwargs)
         return val
     def SetOvertype(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetOvertype,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetOvertype(self, *_args, **_kwargs)
         return val
     def GetOvertype(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetOvertype,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetOvertype(self, *_args, **_kwargs)
         return val
     def SetCaretWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCaretWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCaretWidth(self, *_args, **_kwargs)
         return val
     def GetCaretWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCaretWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCaretWidth(self, *_args, **_kwargs)
         return val
     def SetTargetStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetTargetStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetTargetStart(self, *_args, **_kwargs)
         return val
     def GetTargetStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTargetStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTargetStart(self, *_args, **_kwargs)
         return val
     def SetTargetEnd(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetTargetEnd,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetTargetEnd(self, *_args, **_kwargs)
         return val
     def GetTargetEnd(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTargetEnd,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTargetEnd(self, *_args, **_kwargs)
         return val
     def ReplaceTarget(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ReplaceTarget,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ReplaceTarget(self, *_args, **_kwargs)
         return val
     def ReplaceTargetRE(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ReplaceTargetRE,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ReplaceTargetRE(self, *_args, **_kwargs)
         return val
     def SearchInTarget(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SearchInTarget,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SearchInTarget(self, *_args, **_kwargs)
         return val
     def SetSearchFlags(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSearchFlags,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSearchFlags(self, *_args, **_kwargs)
         return val
     def GetSearchFlags(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSearchFlags,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSearchFlags(self, *_args, **_kwargs)
         return val
     def CallTipShow(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipShow,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipShow(self, *_args, **_kwargs)
         return val
     def CallTipCancel(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipCancel,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipCancel(self, *_args, **_kwargs)
         return val
     def CallTipActive(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipActive,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipActive(self, *_args, **_kwargs)
         return val
     def CallTipPosAtStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipPosAtStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipPosAtStart(self, *_args, **_kwargs)
         return val
     def CallTipSetHighlight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipSetHighlight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipSetHighlight(self, *_args, **_kwargs)
         return val
     def CallTipSetBackground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipSetBackground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipSetBackground(self, *_args, **_kwargs)
+        return val
+    def CallTipSetForeground(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_CallTipSetForeground(self, *_args, **_kwargs)
+        return val
+    def CallTipSetForegroundHighlight(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_CallTipSetForegroundHighlight(self, *_args, **_kwargs)
         return val
     def VisibleFromDocLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_VisibleFromDocLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_VisibleFromDocLine(self, *_args, **_kwargs)
         return val
     def DocLineFromVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_DocLineFromVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_DocLineFromVisible(self, *_args, **_kwargs)
         return val
     def SetFoldLevel(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetFoldLevel,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetFoldLevel(self, *_args, **_kwargs)
         return val
     def GetFoldLevel(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetFoldLevel,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetFoldLevel(self, *_args, **_kwargs)
         return val
     def GetLastChild(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLastChild,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLastChild(self, *_args, **_kwargs)
         return val
     def GetFoldParent(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetFoldParent,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetFoldParent(self, *_args, **_kwargs)
         return val
     def ShowLines(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ShowLines,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ShowLines(self, *_args, **_kwargs)
         return val
     def HideLines(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_HideLines,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_HideLines(self, *_args, **_kwargs)
         return val
     def GetLineVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineVisible(self, *_args, **_kwargs)
         return val
     def SetFoldExpanded(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetFoldExpanded,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetFoldExpanded(self, *_args, **_kwargs)
         return val
     def GetFoldExpanded(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetFoldExpanded,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetFoldExpanded(self, *_args, **_kwargs)
         return val
     def ToggleFold(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ToggleFold,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ToggleFold(self, *_args, **_kwargs)
         return val
     def EnsureVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_EnsureVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_EnsureVisible(self, *_args, **_kwargs)
         return val
     def SetFoldFlags(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetFoldFlags,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetFoldFlags(self, *_args, **_kwargs)
         return val
     def EnsureVisibleEnforcePolicy(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_EnsureVisibleEnforcePolicy,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_EnsureVisibleEnforcePolicy(self, *_args, **_kwargs)
         return val
     def SetTabIndents(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetTabIndents,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetTabIndents(self, *_args, **_kwargs)
         return val
     def GetTabIndents(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTabIndents,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTabIndents(self, *_args, **_kwargs)
         return val
     def SetBackSpaceUnIndents(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetBackSpaceUnIndents,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetBackSpaceUnIndents(self, *_args, **_kwargs)
         return val
     def GetBackSpaceUnIndents(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetBackSpaceUnIndents,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetBackSpaceUnIndents(self, *_args, **_kwargs)
         return val
     def SetMouseDwellTime(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMouseDwellTime,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMouseDwellTime(self, *_args, **_kwargs)
         return val
     def GetMouseDwellTime(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMouseDwellTime,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMouseDwellTime(self, *_args, **_kwargs)
         return val
     def WordStartPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordStartPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordStartPosition(self, *_args, **_kwargs)
         return val
     def WordEndPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordEndPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordEndPosition(self, *_args, **_kwargs)
         return val
     def SetWrapMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetWrapMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetWrapMode(self, *_args, **_kwargs)
         return val
     def GetWrapMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetWrapMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetWrapMode(self, *_args, **_kwargs)
         return val
     def SetLayoutCache(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLayoutCache,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLayoutCache(self, *_args, **_kwargs)
         return val
     def GetLayoutCache(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLayoutCache,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLayoutCache(self, *_args, **_kwargs)
         return val
     def SetScrollWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetScrollWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetScrollWidth(self, *_args, **_kwargs)
         return val
     def GetScrollWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetScrollWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetScrollWidth(self, *_args, **_kwargs)
         return val
     def TextWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_TextWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_TextWidth(self, *_args, **_kwargs)
         return val
     def SetEndAtLastLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetEndAtLastLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetEndAtLastLine(self, *_args, **_kwargs)
         return val
     def GetEndAtLastLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEndAtLastLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEndAtLastLine(self, *_args, **_kwargs)
         return val
     def TextHeight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_TextHeight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_TextHeight(self, *_args, **_kwargs)
+        return val
+    def SetUseVerticalScrollBar(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetUseVerticalScrollBar(self, *_args, **_kwargs)
+        return val
+    def GetUseVerticalScrollBar(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_GetUseVerticalScrollBar(self, *_args, **_kwargs)
+        return val
+    def AppendText(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_AppendText(self, *_args, **_kwargs)
+        return val
+    def GetTwoPhaseDraw(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_GetTwoPhaseDraw(self, *_args, **_kwargs)
+        return val
+    def SetTwoPhaseDraw(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetTwoPhaseDraw(self, *_args, **_kwargs)
+        return val
+    def TargetFromSelection(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_TargetFromSelection(self, *_args, **_kwargs)
+        return val
+    def LinesJoin(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_LinesJoin(self, *_args, **_kwargs)
+        return val
+    def LinesSplit(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_LinesSplit(self, *_args, **_kwargs)
+        return val
+    def SetFoldMarginColour(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetFoldMarginColour(self, *_args, **_kwargs)
+        return val
+    def SetFoldMarginHiColour(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetFoldMarginHiColour(self, *_args, **_kwargs)
+        return val
+    def LineDuplicate(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_LineDuplicate(self, *_args, **_kwargs)
         return val
     def HomeDisplay(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_HomeDisplay,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_HomeDisplay(self, *_args, **_kwargs)
         return val
     def HomeDisplayExtend(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_HomeDisplayExtend,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_HomeDisplayExtend(self, *_args, **_kwargs)
         return val
     def LineEndDisplay(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LineEndDisplay,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LineEndDisplay(self, *_args, **_kwargs)
         return val
     def LineEndDisplayExtend(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LineEndDisplayExtend,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LineEndDisplayExtend(self, *_args, **_kwargs)
         return val
     def MoveCaretInsideView(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MoveCaretInsideView,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MoveCaretInsideView(self, *_args, **_kwargs)
         return val
     def LineLength(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LineLength,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LineLength(self, *_args, **_kwargs)
         return val
     def BraceHighlight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_BraceHighlight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_BraceHighlight(self, *_args, **_kwargs)
         return val
     def BraceBadLight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_BraceBadLight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_BraceBadLight(self, *_args, **_kwargs)
         return val
     def BraceMatch(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_BraceMatch,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_BraceMatch(self, *_args, **_kwargs)
         return val
     def GetViewEOL(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetViewEOL,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetViewEOL(self, *_args, **_kwargs)
         return val
     def SetViewEOL(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetViewEOL,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetViewEOL(self, *_args, **_kwargs)
         return val
     def GetDocPointer(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetDocPointer,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetDocPointer(self, *_args, **_kwargs)
         return val
     def SetDocPointer(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetDocPointer,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetDocPointer(self, *_args, **_kwargs)
         return val
     def SetModEventMask(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetModEventMask,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetModEventMask(self, *_args, **_kwargs)
         return val
     def GetEdgeColumn(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEdgeColumn,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEdgeColumn(self, *_args, **_kwargs)
         return val
     def SetEdgeColumn(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetEdgeColumn,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetEdgeColumn(self, *_args, **_kwargs)
         return val
     def GetEdgeMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEdgeMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEdgeMode(self, *_args, **_kwargs)
         return val
     def SetEdgeMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetEdgeMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetEdgeMode(self, *_args, **_kwargs)
         return val
     def GetEdgeColour(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEdgeColour,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEdgeColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetEdgeColour(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetEdgeColour,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetEdgeColour(self, *_args, **_kwargs)
         return val
     def SearchAnchor(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SearchAnchor,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SearchAnchor(self, *_args, **_kwargs)
         return val
     def SearchNext(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SearchNext,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SearchNext(self, *_args, **_kwargs)
         return val
     def SearchPrev(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SearchPrev,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SearchPrev(self, *_args, **_kwargs)
         return val
     def LinesOnScreen(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LinesOnScreen,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LinesOnScreen(self, *_args, **_kwargs)
         return val
     def UsePopUp(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_UsePopUp,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_UsePopUp(self, *_args, **_kwargs)
         return val
     def SelectionIsRectangle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SelectionIsRectangle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SelectionIsRectangle(self, *_args, **_kwargs)
         return val
     def SetZoom(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetZoom,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetZoom(self, *_args, **_kwargs)
         return val
     def GetZoom(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetZoom,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetZoom(self, *_args, **_kwargs)
         return val
     def CreateDocument(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CreateDocument,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CreateDocument(self, *_args, **_kwargs)
         return val
     def AddRefDocument(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AddRefDocument,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AddRefDocument(self, *_args, **_kwargs)
         return val
     def ReleaseDocument(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ReleaseDocument,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ReleaseDocument(self, *_args, **_kwargs)
         return val
     def GetModEventMask(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetModEventMask,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetModEventMask(self, *_args, **_kwargs)
         return val
     def SetSTCFocus(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSTCFocus,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSTCFocus(self, *_args, **_kwargs)
         return val
     def GetSTCFocus(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSTCFocus,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSTCFocus(self, *_args, **_kwargs)
         return val
     def SetStatus(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetStatus,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetStatus(self, *_args, **_kwargs)
         return val
     def GetStatus(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetStatus,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetStatus(self, *_args, **_kwargs)
         return val
     def SetMouseDownCaptures(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMouseDownCaptures,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMouseDownCaptures(self, *_args, **_kwargs)
         return val
     def GetMouseDownCaptures(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMouseDownCaptures,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMouseDownCaptures(self, *_args, **_kwargs)
         return val
     def SetCursor(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCursor,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCursor(self, *_args, **_kwargs)
         return val
     def GetCursor(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCursor,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCursor(self, *_args, **_kwargs)
         return val
     def SetControlCharSymbol(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetControlCharSymbol,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetControlCharSymbol(self, *_args, **_kwargs)
         return val
     def GetControlCharSymbol(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetControlCharSymbol,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetControlCharSymbol(self, *_args, **_kwargs)
         return val
     def WordPartLeft(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordPartLeft,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordPartLeft(self, *_args, **_kwargs)
         return val
     def WordPartLeftExtend(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordPartLeftExtend,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordPartLeftExtend(self, *_args, **_kwargs)
         return val
     def WordPartRight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordPartRight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordPartRight(self, *_args, **_kwargs)
         return val
     def WordPartRightExtend(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordPartRightExtend,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordPartRightExtend(self, *_args, **_kwargs)
         return val
     def SetVisiblePolicy(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetVisiblePolicy,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetVisiblePolicy(self, *_args, **_kwargs)
         return val
     def DelLineLeft(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_DelLineLeft,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_DelLineLeft(self, *_args, **_kwargs)
         return val
     def DelLineRight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_DelLineRight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_DelLineRight(self, *_args, **_kwargs)
         return val
     def SetXOffset(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetXOffset,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetXOffset(self, *_args, **_kwargs)
         return val
     def GetXOffset(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetXOffset,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetXOffset(self, *_args, **_kwargs)
+        return val
+    def ChooseCaretX(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_ChooseCaretX(self, *_args, **_kwargs)
         return val
     def SetXCaretPolicy(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetXCaretPolicy,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetXCaretPolicy(self, *_args, **_kwargs)
         return val
     def SetYCaretPolicy(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetYCaretPolicy,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetYCaretPolicy(self, *_args, **_kwargs)
+        return val
+    def SetPrintWrapMode(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetPrintWrapMode(self, *_args, **_kwargs)
+        return val
+    def GetPrintWrapMode(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_GetPrintWrapMode(self, *_args, **_kwargs)
+        return val
+    def SetHotspotActiveForeground(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetHotspotActiveForeground(self, *_args, **_kwargs)
+        return val
+    def SetHotspotActiveBackground(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetHotspotActiveBackground(self, *_args, **_kwargs)
+        return val
+    def SetHotspotActiveUnderline(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetHotspotActiveUnderline(self, *_args, **_kwargs)
         return val
     def StartRecord(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StartRecord,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StartRecord(self, *_args, **_kwargs)
         return val
     def StopRecord(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StopRecord,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StopRecord(self, *_args, **_kwargs)
         return val
     def SetLexer(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLexer,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLexer(self, *_args, **_kwargs)
         return val
     def GetLexer(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLexer,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLexer(self, *_args, **_kwargs)
         return val
     def Colourise(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Colourise,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Colourise(self, *_args, **_kwargs)
         return val
     def SetProperty(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetProperty,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetProperty(self, *_args, **_kwargs)
         return val
     def SetKeyWords(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetKeyWords,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetKeyWords(self, *_args, **_kwargs)
         return val
     def SetLexerLanguage(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLexerLanguage,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLexerLanguage(self, *_args, **_kwargs)
         return val
     def GetCurrentLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCurrentLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCurrentLine(self, *_args, **_kwargs)
         return val
     def StyleSetSpec(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetSpec,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetSpec(self, *_args, **_kwargs)
         return val
     def StyleSetFont(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetFont,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetFont(self, *_args, **_kwargs)
         return val
     def StyleSetFontAttr(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetFontAttr,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetFontAttr(self, *_args, **_kwargs)
         return val
     def CmdKeyExecute(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CmdKeyExecute,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CmdKeyExecute(self, *_args, **_kwargs)
         return val
     def SetMargins(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMargins,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMargins(self, *_args, **_kwargs)
         return val
     def GetSelection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSelection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSelection(self, *_args, **_kwargs)
         return val
     def PointFromPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_PointFromPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_PointFromPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def ScrollToLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ScrollToLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ScrollToLine(self, *_args, **_kwargs)
         return val
     def ScrollToColumn(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ScrollToColumn,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ScrollToColumn(self, *_args, **_kwargs)
         return val
     def SendMsg(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SendMsg,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SendMsg(self, *_args, **_kwargs)
         return val
     def SetVScrollBar(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetVScrollBar,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetVScrollBar(self, *_args, **_kwargs)
         return val
     def SetHScrollBar(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetHScrollBar,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetHScrollBar(self, *_args, **_kwargs)
         return val
     def GetLastKeydownProcessed(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLastKeydownProcessed,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLastKeydownProcessed(self, *_args, **_kwargs)
         return val
     def SetLastKeydownProcessed(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLastKeydownProcessed,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLastKeydownProcessed(self, *_args, **_kwargs)
+        return val
+    def SaveFile(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SaveFile(self, *_args, **_kwargs)
+        return val
+    def LoadFile(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_LoadFile(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxStyledTextCtrl instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxStyledTextCtrl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxStyledTextCtrl(wxStyledTextCtrlPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(stc_c.new_wxStyledTextCtrl,_args,_kwargs)
+        self.this = stc_c.new_wxStyledTextCtrl(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -1053,143 +1142,143 @@ class wxStyledTextEventPtr(wxCommandEventPtr):
             except:
                 pass
     def SetPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetPosition(self, *_args, **_kwargs)
         return val
     def SetKey(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetKey,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetKey(self, *_args, **_kwargs)
         return val
     def SetModifiers(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetModifiers,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetModifiers(self, *_args, **_kwargs)
         return val
     def SetModificationType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetModificationType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetModificationType(self, *_args, **_kwargs)
         return val
     def SetText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetText(self, *_args, **_kwargs)
         return val
     def SetLength(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetLength,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetLength(self, *_args, **_kwargs)
         return val
     def SetLinesAdded(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetLinesAdded,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetLinesAdded(self, *_args, **_kwargs)
         return val
     def SetLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetLine(self, *_args, **_kwargs)
         return val
     def SetFoldLevelNow(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetFoldLevelNow,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetFoldLevelNow(self, *_args, **_kwargs)
         return val
     def SetFoldLevelPrev(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetFoldLevelPrev,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetFoldLevelPrev(self, *_args, **_kwargs)
         return val
     def SetMargin(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetMargin,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetMargin(self, *_args, **_kwargs)
         return val
     def SetMessage(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetMessage,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetMessage(self, *_args, **_kwargs)
         return val
     def SetWParam(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetWParam,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetWParam(self, *_args, **_kwargs)
         return val
     def SetLParam(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetLParam,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetLParam(self, *_args, **_kwargs)
         return val
     def SetListType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetListType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetListType(self, *_args, **_kwargs)
         return val
     def SetX(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetX,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetX(self, *_args, **_kwargs)
         return val
     def SetY(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetY,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetY(self, *_args, **_kwargs)
         return val
     def SetDragText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetDragText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetDragText(self, *_args, **_kwargs)
         return val
     def SetDragAllowMove(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetDragAllowMove,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetDragAllowMove(self, *_args, **_kwargs)
         return val
     def SetDragResult(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetDragResult,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetDragResult(self, *_args, **_kwargs)
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetPosition(self, *_args, **_kwargs)
         return val
     def GetKey(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetKey,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetKey(self, *_args, **_kwargs)
         return val
     def GetModifiers(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetModifiers,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetModifiers(self, *_args, **_kwargs)
         return val
     def GetModificationType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetModificationType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetModificationType(self, *_args, **_kwargs)
         return val
     def GetText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetText(self, *_args, **_kwargs)
         return val
     def GetLength(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetLength,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetLength(self, *_args, **_kwargs)
         return val
     def GetLinesAdded(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetLinesAdded,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetLinesAdded(self, *_args, **_kwargs)
         return val
     def GetLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetLine(self, *_args, **_kwargs)
         return val
     def GetFoldLevelNow(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetFoldLevelNow,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetFoldLevelNow(self, *_args, **_kwargs)
         return val
     def GetFoldLevelPrev(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetFoldLevelPrev,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetFoldLevelPrev(self, *_args, **_kwargs)
         return val
     def GetMargin(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetMargin,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetMargin(self, *_args, **_kwargs)
         return val
     def GetMessage(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetMessage,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetMessage(self, *_args, **_kwargs)
         return val
     def GetWParam(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetWParam,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetWParam(self, *_args, **_kwargs)
         return val
     def GetLParam(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetLParam,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetLParam(self, *_args, **_kwargs)
         return val
     def GetListType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetListType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetListType(self, *_args, **_kwargs)
         return val
     def GetX(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetX,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetX(self, *_args, **_kwargs)
         return val
     def GetY(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetY,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetY(self, *_args, **_kwargs)
         return val
     def GetDragText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetDragText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetDragText(self, *_args, **_kwargs)
         return val
     def GetDragAllowMove(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetDragAllowMove,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetDragAllowMove(self, *_args, **_kwargs)
         return val
     def GetDragResult(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetDragResult,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetDragResult(self, *_args, **_kwargs)
         return val
     def GetShift(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetShift,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetShift(self, *_args, **_kwargs)
         return val
     def GetControl(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetControl,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetControl(self, *_args, **_kwargs)
         return val
     def GetAlt(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetAlt,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetAlt(self, *_args, **_kwargs)
         return val
     def Clone(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_Clone,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_Clone(self, *_args, **_kwargs)
         if val: val = wxEventPtr(val) 
         return val
     def __repr__(self):
-        return "<C wxStyledTextEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxStyledTextEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxStyledTextEvent(wxStyledTextEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(stc_c.new_wxStyledTextEvent,_args,_kwargs)
+        self.this = stc_c.new_wxStyledTextEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1215,6 +1304,7 @@ wxSTC_EOL_CRLF = stc_c.wxSTC_EOL_CRLF
 wxSTC_EOL_CR = stc_c.wxSTC_EOL_CR
 wxSTC_EOL_LF = stc_c.wxSTC_EOL_LF
 wxSTC_CP_UTF8 = stc_c.wxSTC_CP_UTF8
+wxSTC_CP_DBCS = stc_c.wxSTC_CP_DBCS
 wxSTC_MARKER_MAX = stc_c.wxSTC_MARKER_MAX
 wxSTC_MARK_CIRCLE = stc_c.wxSTC_MARK_CIRCLE
 wxSTC_MARK_ROUNDRECT = stc_c.wxSTC_MARK_ROUNDRECT
@@ -1241,6 +1331,7 @@ wxSTC_MARK_CIRCLEMINUSCONNECTED = stc_c.wxSTC_MARK_CIRCLEMINUSCONNECTED
 wxSTC_MARK_BACKGROUND = stc_c.wxSTC_MARK_BACKGROUND
 wxSTC_MARK_DOTDOTDOT = stc_c.wxSTC_MARK_DOTDOTDOT
 wxSTC_MARK_ARROWS = stc_c.wxSTC_MARK_ARROWS
+wxSTC_MARK_PIXMAP = stc_c.wxSTC_MARK_PIXMAP
 wxSTC_MARK_CHARACTER = stc_c.wxSTC_MARK_CHARACTER
 wxSTC_MARKNUM_FOLDEREND = stc_c.wxSTC_MARKNUM_FOLDEREND
 wxSTC_MARKNUM_FOLDEROPENMID = stc_c.wxSTC_MARKNUM_FOLDEROPENMID
@@ -1301,10 +1392,21 @@ wxSTC_FIND_WHOLEWORD = stc_c.wxSTC_FIND_WHOLEWORD
 wxSTC_FIND_MATCHCASE = stc_c.wxSTC_FIND_MATCHCASE
 wxSTC_FIND_WORDSTART = stc_c.wxSTC_FIND_WORDSTART
 wxSTC_FIND_REGEXP = stc_c.wxSTC_FIND_REGEXP
+wxSTC_FIND_POSIX = stc_c.wxSTC_FIND_POSIX
 wxSTC_FOLDLEVELBASE = stc_c.wxSTC_FOLDLEVELBASE
 wxSTC_FOLDLEVELWHITEFLAG = stc_c.wxSTC_FOLDLEVELWHITEFLAG
 wxSTC_FOLDLEVELHEADERFLAG = stc_c.wxSTC_FOLDLEVELHEADERFLAG
+wxSTC_FOLDLEVELBOXHEADERFLAG = stc_c.wxSTC_FOLDLEVELBOXHEADERFLAG
+wxSTC_FOLDLEVELBOXFOOTERFLAG = stc_c.wxSTC_FOLDLEVELBOXFOOTERFLAG
+wxSTC_FOLDLEVELCONTRACTED = stc_c.wxSTC_FOLDLEVELCONTRACTED
+wxSTC_FOLDLEVELUNINDENT = stc_c.wxSTC_FOLDLEVELUNINDENT
 wxSTC_FOLDLEVELNUMBERMASK = stc_c.wxSTC_FOLDLEVELNUMBERMASK
+wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED = stc_c.wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED
+wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED = stc_c.wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED
+wxSTC_FOLDFLAG_LINEAFTER_EXPANDED = stc_c.wxSTC_FOLDFLAG_LINEAFTER_EXPANDED
+wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED = stc_c.wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED
+wxSTC_FOLDFLAG_LEVELNUMBERS = stc_c.wxSTC_FOLDFLAG_LEVELNUMBERS
+wxSTC_FOLDFLAG_BOX = stc_c.wxSTC_FOLDFLAG_BOX
 wxSTC_TIME_FOREVER = stc_c.wxSTC_TIME_FOREVER
 wxSTC_WRAP_NONE = stc_c.wxSTC_WRAP_NONE
 wxSTC_WRAP_WORD = stc_c.wxSTC_WRAP_WORD
@@ -1389,6 +1491,12 @@ wxSTC_LEX_PHP = stc_c.wxSTC_LEX_PHP
 wxSTC_LEX_BAAN = stc_c.wxSTC_LEX_BAAN
 wxSTC_LEX_MATLAB = stc_c.wxSTC_LEX_MATLAB
 wxSTC_LEX_SCRIPTOL = stc_c.wxSTC_LEX_SCRIPTOL
+wxSTC_LEX_ASM = stc_c.wxSTC_LEX_ASM
+wxSTC_LEX_CPPNOCASE = stc_c.wxSTC_LEX_CPPNOCASE
+wxSTC_LEX_FORTRAN = stc_c.wxSTC_LEX_FORTRAN
+wxSTC_LEX_F77 = stc_c.wxSTC_LEX_F77
+wxSTC_LEX_CSS = stc_c.wxSTC_LEX_CSS
+wxSTC_LEX_POV = stc_c.wxSTC_LEX_POV
 wxSTC_LEX_AUTOMATIC = stc_c.wxSTC_LEX_AUTOMATIC
 wxSTC_P_DEFAULT = stc_c.wxSTC_P_DEFAULT
 wxSTC_P_COMMENTLINE = stc_c.wxSTC_P_COMMENTLINE
@@ -1614,6 +1722,9 @@ wxSTC_ERR_DIFF_CHANGED = stc_c.wxSTC_ERR_DIFF_CHANGED
 wxSTC_ERR_DIFF_ADDITION = stc_c.wxSTC_ERR_DIFF_ADDITION
 wxSTC_ERR_DIFF_DELETION = stc_c.wxSTC_ERR_DIFF_DELETION
 wxSTC_ERR_DIFF_MESSAGE = stc_c.wxSTC_ERR_DIFF_MESSAGE
+wxSTC_ERR_PHP = stc_c.wxSTC_ERR_PHP
+wxSTC_ERR_ELF = stc_c.wxSTC_ERR_ELF
+wxSTC_ERR_IFC = stc_c.wxSTC_ERR_IFC
 wxSTC_BAT_DEFAULT = stc_c.wxSTC_BAT_DEFAULT
 wxSTC_BAT_COMMENT = stc_c.wxSTC_BAT_COMMENT
 wxSTC_BAT_WORD = stc_c.wxSTC_BAT_WORD
@@ -1650,22 +1761,29 @@ wxSTC_AVE_DEFAULT = stc_c.wxSTC_AVE_DEFAULT
 wxSTC_AVE_COMMENT = stc_c.wxSTC_AVE_COMMENT
 wxSTC_AVE_NUMBER = stc_c.wxSTC_AVE_NUMBER
 wxSTC_AVE_WORD = stc_c.wxSTC_AVE_WORD
-wxSTC_AVE_KEYWORD = stc_c.wxSTC_AVE_KEYWORD
-wxSTC_AVE_STATEMENT = stc_c.wxSTC_AVE_STATEMENT
 wxSTC_AVE_STRING = stc_c.wxSTC_AVE_STRING
 wxSTC_AVE_ENUM = stc_c.wxSTC_AVE_ENUM
 wxSTC_AVE_STRINGEOL = stc_c.wxSTC_AVE_STRINGEOL
 wxSTC_AVE_IDENTIFIER = stc_c.wxSTC_AVE_IDENTIFIER
 wxSTC_AVE_OPERATOR = stc_c.wxSTC_AVE_OPERATOR
+wxSTC_AVE_WORD1 = stc_c.wxSTC_AVE_WORD1
+wxSTC_AVE_WORD2 = stc_c.wxSTC_AVE_WORD2
+wxSTC_AVE_WORD3 = stc_c.wxSTC_AVE_WORD3
+wxSTC_AVE_WORD4 = stc_c.wxSTC_AVE_WORD4
+wxSTC_AVE_WORD5 = stc_c.wxSTC_AVE_WORD5
+wxSTC_AVE_WORD6 = stc_c.wxSTC_AVE_WORD6
 wxSTC_ADA_DEFAULT = stc_c.wxSTC_ADA_DEFAULT
-wxSTC_ADA_COMMENT = stc_c.wxSTC_ADA_COMMENT
-wxSTC_ADA_NUMBER = stc_c.wxSTC_ADA_NUMBER
 wxSTC_ADA_WORD = stc_c.wxSTC_ADA_WORD
-wxSTC_ADA_STRING = stc_c.wxSTC_ADA_STRING
-wxSTC_ADA_CHARACTER = stc_c.wxSTC_ADA_CHARACTER
-wxSTC_ADA_OPERATOR = stc_c.wxSTC_ADA_OPERATOR
 wxSTC_ADA_IDENTIFIER = stc_c.wxSTC_ADA_IDENTIFIER
+wxSTC_ADA_NUMBER = stc_c.wxSTC_ADA_NUMBER
+wxSTC_ADA_DELIMITER = stc_c.wxSTC_ADA_DELIMITER
+wxSTC_ADA_CHARACTER = stc_c.wxSTC_ADA_CHARACTER
+wxSTC_ADA_CHARACTEREOL = stc_c.wxSTC_ADA_CHARACTEREOL
+wxSTC_ADA_STRING = stc_c.wxSTC_ADA_STRING
 wxSTC_ADA_STRINGEOL = stc_c.wxSTC_ADA_STRINGEOL
+wxSTC_ADA_LABEL = stc_c.wxSTC_ADA_LABEL
+wxSTC_ADA_COMMENTLINE = stc_c.wxSTC_ADA_COMMENTLINE
+wxSTC_ADA_ILLEGAL = stc_c.wxSTC_ADA_ILLEGAL
 wxSTC_BAAN_DEFAULT = stc_c.wxSTC_BAAN_DEFAULT
 wxSTC_BAAN_COMMENT = stc_c.wxSTC_BAAN_COMMENT
 wxSTC_BAAN_COMMENTDOC = stc_c.wxSTC_BAAN_COMMENTDOC
@@ -1733,6 +1851,58 @@ wxSTC_SCRIPTOL_WORD2 = stc_c.wxSTC_SCRIPTOL_WORD2
 wxSTC_SCRIPTOL_COMMENTDOCKEYWORD = stc_c.wxSTC_SCRIPTOL_COMMENTDOCKEYWORD
 wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR = stc_c.wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR
 wxSTC_SCRIPTOL_COMMENTBASIC = stc_c.wxSTC_SCRIPTOL_COMMENTBASIC
+wxSTC_ASM_DEFAULT = stc_c.wxSTC_ASM_DEFAULT
+wxSTC_ASM_COMMENT = stc_c.wxSTC_ASM_COMMENT
+wxSTC_ASM_NUMBER = stc_c.wxSTC_ASM_NUMBER
+wxSTC_ASM_STRING = stc_c.wxSTC_ASM_STRING
+wxSTC_ASM_OPERATOR = stc_c.wxSTC_ASM_OPERATOR
+wxSTC_ASM_IDENTIFIER = stc_c.wxSTC_ASM_IDENTIFIER
+wxSTC_ASM_CPUINSTRUCTION = stc_c.wxSTC_ASM_CPUINSTRUCTION
+wxSTC_ASM_MATHINSTRUCTION = stc_c.wxSTC_ASM_MATHINSTRUCTION
+wxSTC_ASM_REGISTER = stc_c.wxSTC_ASM_REGISTER
+wxSTC_ASM_DIRECTIVE = stc_c.wxSTC_ASM_DIRECTIVE
+wxSTC_ASM_DIRECTIVEOPERAND = stc_c.wxSTC_ASM_DIRECTIVEOPERAND
+wxSTC_F_DEFAULT = stc_c.wxSTC_F_DEFAULT
+wxSTC_F_COMMENT = stc_c.wxSTC_F_COMMENT
+wxSTC_F_NUMBER = stc_c.wxSTC_F_NUMBER
+wxSTC_F_STRING1 = stc_c.wxSTC_F_STRING1
+wxSTC_F_STRING2 = stc_c.wxSTC_F_STRING2
+wxSTC_F_STRINGEOL = stc_c.wxSTC_F_STRINGEOL
+wxSTC_F_OPERATOR = stc_c.wxSTC_F_OPERATOR
+wxSTC_F_IDENTIFIER = stc_c.wxSTC_F_IDENTIFIER
+wxSTC_F_WORD = stc_c.wxSTC_F_WORD
+wxSTC_F_WORD2 = stc_c.wxSTC_F_WORD2
+wxSTC_F_WORD3 = stc_c.wxSTC_F_WORD3
+wxSTC_F_PREPROCESSOR = stc_c.wxSTC_F_PREPROCESSOR
+wxSTC_F_OPERATOR2 = stc_c.wxSTC_F_OPERATOR2
+wxSTC_F_LABEL = stc_c.wxSTC_F_LABEL
+wxSTC_F_CONTINUATION = stc_c.wxSTC_F_CONTINUATION
+wxSTC_CSS_DEFAULT = stc_c.wxSTC_CSS_DEFAULT
+wxSTC_CSS_TAG = stc_c.wxSTC_CSS_TAG
+wxSTC_CSS_CLASS = stc_c.wxSTC_CSS_CLASS
+wxSTC_CSS_PSEUDOCLASS = stc_c.wxSTC_CSS_PSEUDOCLASS
+wxSTC_CSS_UNKNOWN_PSEUDOCLASS = stc_c.wxSTC_CSS_UNKNOWN_PSEUDOCLASS
+wxSTC_CSS_OPERATOR = stc_c.wxSTC_CSS_OPERATOR
+wxSTC_CSS_IDENTIFIER = stc_c.wxSTC_CSS_IDENTIFIER
+wxSTC_CSS_UNKNOWN_IDENTIFIER = stc_c.wxSTC_CSS_UNKNOWN_IDENTIFIER
+wxSTC_CSS_VALUE = stc_c.wxSTC_CSS_VALUE
+wxSTC_CSS_COMMENT = stc_c.wxSTC_CSS_COMMENT
+wxSTC_CSS_ID = stc_c.wxSTC_CSS_ID
+wxSTC_CSS_IMPORTANT = stc_c.wxSTC_CSS_IMPORTANT
+wxSTC_CSS_DIRECTIVE = stc_c.wxSTC_CSS_DIRECTIVE
+wxSTC_CSS_DOUBLESTRING = stc_c.wxSTC_CSS_DOUBLESTRING
+wxSTC_CSS_SINGLESTRING = stc_c.wxSTC_CSS_SINGLESTRING
+wxSTC_POV_DEFAULT = stc_c.wxSTC_POV_DEFAULT
+wxSTC_POV_COMMENT = stc_c.wxSTC_POV_COMMENT
+wxSTC_POV_COMMENTLINE = stc_c.wxSTC_POV_COMMENTLINE
+wxSTC_POV_COMMENTDOC = stc_c.wxSTC_POV_COMMENTDOC
+wxSTC_POV_NUMBER = stc_c.wxSTC_POV_NUMBER
+wxSTC_POV_WORD = stc_c.wxSTC_POV_WORD
+wxSTC_POV_STRING = stc_c.wxSTC_POV_STRING
+wxSTC_POV_OPERATOR = stc_c.wxSTC_POV_OPERATOR
+wxSTC_POV_IDENTIFIER = stc_c.wxSTC_POV_IDENTIFIER
+wxSTC_POV_BRACE = stc_c.wxSTC_POV_BRACE
+wxSTC_POV_WORD2 = stc_c.wxSTC_POV_WORD2
 wxSTC_CMD_REDO = stc_c.wxSTC_CMD_REDO
 wxSTC_CMD_SELECTALL = stc_c.wxSTC_CMD_SELECTALL
 wxSTC_CMD_UNDO = stc_c.wxSTC_CMD_UNDO
@@ -1780,6 +1950,7 @@ wxSTC_CMD_DELWORDRIGHT = stc_c.wxSTC_CMD_DELWORDRIGHT
 wxSTC_CMD_LINECUT = stc_c.wxSTC_CMD_LINECUT
 wxSTC_CMD_LINEDELETE = stc_c.wxSTC_CMD_LINEDELETE
 wxSTC_CMD_LINETRANSPOSE = stc_c.wxSTC_CMD_LINETRANSPOSE
+wxSTC_CMD_LINEDUPLICATE = stc_c.wxSTC_CMD_LINEDUPLICATE
 wxSTC_CMD_LOWERCASE = stc_c.wxSTC_CMD_LOWERCASE
 wxSTC_CMD_UPPERCASE = stc_c.wxSTC_CMD_UPPERCASE
 wxSTC_CMD_LINESCROLLDOWN = stc_c.wxSTC_CMD_LINESCROLLDOWN
@@ -1789,12 +1960,22 @@ wxSTC_CMD_HOMEDISPLAY = stc_c.wxSTC_CMD_HOMEDISPLAY
 wxSTC_CMD_HOMEDISPLAYEXTEND = stc_c.wxSTC_CMD_HOMEDISPLAYEXTEND
 wxSTC_CMD_LINEENDDISPLAY = stc_c.wxSTC_CMD_LINEENDDISPLAY
 wxSTC_CMD_LINEENDDISPLAYEXTEND = stc_c.wxSTC_CMD_LINEENDDISPLAYEXTEND
+wxSTC_CMD_HOMEWRAP = stc_c.wxSTC_CMD_HOMEWRAP
+wxSTC_CMD_HOMEWRAPEXTEND = stc_c.wxSTC_CMD_HOMEWRAPEXTEND
+wxSTC_CMD_LINEENDWRAP = stc_c.wxSTC_CMD_LINEENDWRAP
+wxSTC_CMD_LINEENDWRAPEXTEND = stc_c.wxSTC_CMD_LINEENDWRAPEXTEND
+wxSTC_CMD_VCHOMEWRAP = stc_c.wxSTC_CMD_VCHOMEWRAP
+wxSTC_CMD_VCHOMEWRAPEXTEND = stc_c.wxSTC_CMD_VCHOMEWRAPEXTEND
 wxSTC_CMD_WORDPARTLEFT = stc_c.wxSTC_CMD_WORDPARTLEFT
 wxSTC_CMD_WORDPARTLEFTEXTEND = stc_c.wxSTC_CMD_WORDPARTLEFTEXTEND
 wxSTC_CMD_WORDPARTRIGHT = stc_c.wxSTC_CMD_WORDPARTRIGHT
 wxSTC_CMD_WORDPARTRIGHTEXTEND = stc_c.wxSTC_CMD_WORDPARTRIGHTEXTEND
 wxSTC_CMD_DELLINELEFT = stc_c.wxSTC_CMD_DELLINELEFT
 wxSTC_CMD_DELLINERIGHT = stc_c.wxSTC_CMD_DELLINERIGHT
+wxSTC_CMD_PARADOWN = stc_c.wxSTC_CMD_PARADOWN
+wxSTC_CMD_PARADOWNEXTEND = stc_c.wxSTC_CMD_PARADOWNEXTEND
+wxSTC_CMD_PARAUP = stc_c.wxSTC_CMD_PARAUP
+wxSTC_CMD_PARAUPEXTEND = stc_c.wxSTC_CMD_PARAUPEXTEND
 STC_USE_DND = stc_c.STC_USE_DND
 wxEVT_STC_CHANGE = stc_c.wxEVT_STC_CHANGE
 wxEVT_STC_STYLENEEDED = stc_c.wxEVT_STC_STYLENEEDED
@@ -1819,6 +2000,9 @@ wxEVT_STC_START_DRAG = stc_c.wxEVT_STC_START_DRAG
 wxEVT_STC_DRAG_OVER = stc_c.wxEVT_STC_DRAG_OVER
 wxEVT_STC_DO_DROP = stc_c.wxEVT_STC_DO_DROP
 wxEVT_STC_ZOOM = stc_c.wxEVT_STC_ZOOM
+wxEVT_STC_HOTSPOT_CLICK = stc_c.wxEVT_STC_HOTSPOT_CLICK
+wxEVT_STC_HOTSPOT_DCLICK = stc_c.wxEVT_STC_HOTSPOT_DCLICK
+wxEVT_STC_CALLTIP_CLICK = stc_c.wxEVT_STC_CALLTIP_CLICK
 
 
 #-------------- USER INCLUDE -----------------------
diff --git a/wxPython/contrib/stc/msw/stc_.cpp b/wxPython/contrib/stc/msw/stc_.cpp
index 70f55c2596..ac7fbdb933 100644
--- a/wxPython/contrib/stc/msw/stc_.cpp
+++ b/wxPython/contrib/stc/msw/stc_.cpp
@@ -1649,6 +1649,43 @@ static PyObject *_wrap_wxStyledTextCtrl_MarkerPrevious(PyObject *self, PyObject
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_MarkerDefineBitmap(_swigobj,_swigarg0,_swigarg1)  (_swigobj->MarkerDefineBitmap(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_MarkerDefineBitmap(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    wxBitmap * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","markerNumber","bmp", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_MarkerDefineBitmap",_kwnames,&_argo0,&_arg1,&_argo2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_MarkerDefineBitmap. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxBitmap_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxStyledTextCtrl_MarkerDefineBitmap. Expected _wxBitmap_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_MarkerDefineBitmap(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_SetMarginType(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetMarginType(_swigarg0,_swigarg1))
 static PyObject *_wrap_wxStyledTextCtrl_SetMarginType(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -2275,6 +2312,38 @@ static PyObject *_wrap_wxStyledTextCtrl_StyleSetCharacterSet(PyObject *self, PyO
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_StyleSetHotSpot(_swigobj,_swigarg0,_swigarg1)  (_swigobj->StyleSetHotSpot(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_StyleSetHotSpot(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    bool  _arg2;
+    PyObject * _argo0 = 0;
+    int tempbool2;
+    char *_kwnames[] = { "self","style","hotspot", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oii:wxStyledTextCtrl_StyleSetHotSpot",_kwnames,&_argo0,&_arg1,&tempbool2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_StyleSetHotSpot. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg2 = (bool ) tempbool2;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_StyleSetHotSpot(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_SetSelForeground(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetSelForeground(_swigarg0,_swigarg1))
 static PyObject *_wrap_wxStyledTextCtrl_SetSelForeground(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -3859,6 +3928,128 @@ static PyObject *_wrap_wxStyledTextCtrl_AutoCompGetDropRestOfWord(PyObject *self
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_RegisterImage(_swigobj,_swigarg0,_swigarg1)  (_swigobj->RegisterImage(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_RegisterImage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    wxBitmap * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","type","bmp", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_RegisterImage",_kwnames,&_argo0,&_arg1,&_argo2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_RegisterImage. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxBitmap_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxStyledTextCtrl_RegisterImage. Expected _wxBitmap_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_RegisterImage(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_ClearRegisteredImages(_swigobj)  (_swigobj->ClearRegisteredImages())
+static PyObject *_wrap_wxStyledTextCtrl_ClearRegisteredImages(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_ClearRegisteredImages",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_ClearRegisteredImages. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_ClearRegisteredImages(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_AutoCompGetTypeSeparator(_swigobj)  (_swigobj->AutoCompGetTypeSeparator())
+static PyObject *_wrap_wxStyledTextCtrl_AutoCompGetTypeSeparator(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_AutoCompGetTypeSeparator",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_AutoCompGetTypeSeparator. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxStyledTextCtrl_AutoCompGetTypeSeparator(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_AutoCompSetTypeSeparator(_swigobj,_swigarg0)  (_swigobj->AutoCompSetTypeSeparator(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_AutoCompSetTypeSeparator(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","separatorCharacter", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_AutoCompSetTypeSeparator",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_AutoCompSetTypeSeparator. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_AutoCompSetTypeSeparator(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_SetIndent(_swigobj,_swigarg0)  (_swigobj->SetIndent(_swigarg0))
 static PyObject *_wrap_wxStyledTextCtrl_SetIndent(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -6229,6 +6420,78 @@ static PyObject *_wrap_wxStyledTextCtrl_CallTipSetBackground(PyObject *self, PyO
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_CallTipSetForeground(_swigobj,_swigarg0)  (_swigobj->CallTipSetForeground(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_CallTipSetForeground(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    wxColour * _arg1;
+    PyObject * _argo0 = 0;
+    wxColour  temp;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","fore", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxStyledTextCtrl_CallTipSetForeground",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_CallTipSetForeground. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = &temp;
+    if (! wxColour_helper(_obj1, &_arg1))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_CallTipSetForeground(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_CallTipSetForegroundHighlight(_swigobj,_swigarg0)  (_swigobj->CallTipSetForegroundHighlight(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_CallTipSetForegroundHighlight(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    wxColour * _arg1;
+    PyObject * _argo0 = 0;
+    wxColour  temp;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","fore", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxStyledTextCtrl_CallTipSetForegroundHighlight",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_CallTipSetForegroundHighlight. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = &temp;
+    if (! wxColour_helper(_obj1, &_arg1))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_CallTipSetForegroundHighlight(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_VisibleFromDocLine(_swigobj,_swigarg0)  (_swigobj->VisibleFromDocLine(_swigarg0))
 static PyObject *_wrap_wxStyledTextCtrl_VisibleFromDocLine(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -7209,26 +7472,29 @@ static PyObject *_wrap_wxStyledTextCtrl_TextHeight(PyObject *self, PyObject *arg
     return _resultobj;
 }
 
-#define wxStyledTextCtrl_HomeDisplay(_swigobj)  (_swigobj->HomeDisplay())
-static PyObject *_wrap_wxStyledTextCtrl_HomeDisplay(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxStyledTextCtrl_SetUseVerticalScrollBar(_swigobj,_swigarg0)  (_swigobj->SetUseVerticalScrollBar(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_SetUseVerticalScrollBar(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxStyledTextCtrl * _arg0;
+    bool  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    int tempbool1;
+    char *_kwnames[] = { "self","show", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_HomeDisplay",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_SetUseVerticalScrollBar",_kwnames,&_argo0,&tempbool1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_HomeDisplay. Expected _wxStyledTextCtrl_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetUseVerticalScrollBar. Expected _wxStyledTextCtrl_p.");
         return NULL;
         }
     }
+    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxStyledTextCtrl_HomeDisplay(_arg0);
+    wxStyledTextCtrl_SetUseVerticalScrollBar(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -7237,76 +7503,422 @@ static PyObject *_wrap_wxStyledTextCtrl_HomeDisplay(PyObject *self, PyObject *ar
     return _resultobj;
 }
 
-#define wxStyledTextCtrl_HomeDisplayExtend(_swigobj)  (_swigobj->HomeDisplayExtend())
-static PyObject *_wrap_wxStyledTextCtrl_HomeDisplayExtend(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxStyledTextCtrl_GetUseVerticalScrollBar(_swigobj)  (_swigobj->GetUseVerticalScrollBar())
+static PyObject *_wrap_wxStyledTextCtrl_GetUseVerticalScrollBar(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
+    bool  _result;
     wxStyledTextCtrl * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_HomeDisplayExtend",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_GetUseVerticalScrollBar",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_HomeDisplayExtend. Expected _wxStyledTextCtrl_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_GetUseVerticalScrollBar. Expected _wxStyledTextCtrl_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxStyledTextCtrl_HomeDisplayExtend(_arg0);
+    _result = (bool )wxStyledTextCtrl_GetUseVerticalScrollBar(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxStyledTextCtrl_LineEndDisplay(_swigobj)  (_swigobj->LineEndDisplay())
-static PyObject *_wrap_wxStyledTextCtrl_LineEndDisplay(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxStyledTextCtrl_AppendText(_swigobj,_swigarg0,_swigarg1)  (_swigobj->AppendText(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_AppendText(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    wxString * _arg2;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","length","text", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LineEndDisplay",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_AppendText",_kwnames,&_argo0,&_arg1,&_obj2)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LineEndDisplay. Expected _wxStyledTextCtrl_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_AppendText. Expected _wxStyledTextCtrl_p.");
         return NULL;
         }
     }
+{
+    _arg2 = wxString_in_helper(_obj2);
+    if (_arg2 == NULL)
+        return NULL;
+}
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxStyledTextCtrl_LineEndDisplay(_arg0);
+    wxStyledTextCtrl_AppendText(_arg0,_arg1,*_arg2);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
 }    Py_INCREF(Py_None);
     _resultobj = Py_None;
+{
+    if (_obj2)
+        delete _arg2;
+}
     return _resultobj;
 }
 
-#define wxStyledTextCtrl_LineEndDisplayExtend(_swigobj)  (_swigobj->LineEndDisplayExtend())
-static PyObject *_wrap_wxStyledTextCtrl_LineEndDisplayExtend(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxStyledTextCtrl_GetTwoPhaseDraw(_swigobj)  (_swigobj->GetTwoPhaseDraw())
+static PyObject *_wrap_wxStyledTextCtrl_GetTwoPhaseDraw(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
+    bool  _result;
     wxStyledTextCtrl * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LineEndDisplayExtend",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_GetTwoPhaseDraw",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LineEndDisplayExtend. Expected _wxStyledTextCtrl_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_GetTwoPhaseDraw. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxStyledTextCtrl_GetTwoPhaseDraw(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetTwoPhaseDraw(_swigobj,_swigarg0)  (_swigobj->SetTwoPhaseDraw(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_SetTwoPhaseDraw(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    char *_kwnames[] = { "self","twoPhase", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_SetTwoPhaseDraw",_kwnames,&_argo0,&tempbool1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetTwoPhaseDraw. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetTwoPhaseDraw(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_TargetFromSelection(_swigobj)  (_swigobj->TargetFromSelection())
+static PyObject *_wrap_wxStyledTextCtrl_TargetFromSelection(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_TargetFromSelection",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_TargetFromSelection. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_TargetFromSelection(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LinesJoin(_swigobj)  (_swigobj->LinesJoin())
+static PyObject *_wrap_wxStyledTextCtrl_LinesJoin(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LinesJoin",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LinesJoin. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_LinesJoin(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LinesSplit(_swigobj,_swigarg0)  (_swigobj->LinesSplit(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_LinesSplit(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","pixelWidth", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_LinesSplit",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LinesSplit. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_LinesSplit(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetFoldMarginColour(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetFoldMarginColour(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_SetFoldMarginColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    wxColour * _arg2;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    wxColour  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","useSetting","back", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_SetFoldMarginColour",_kwnames,&_argo0,&tempbool1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetFoldMarginColour. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    _arg2 = &temp;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetFoldMarginColour(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetFoldMarginHiColour(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetFoldMarginHiColour(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_SetFoldMarginHiColour(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    wxColour * _arg2;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    wxColour  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","useSetting","fore", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_SetFoldMarginHiColour",_kwnames,&_argo0,&tempbool1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetFoldMarginHiColour. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    _arg2 = &temp;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetFoldMarginHiColour(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LineDuplicate(_swigobj)  (_swigobj->LineDuplicate())
+static PyObject *_wrap_wxStyledTextCtrl_LineDuplicate(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LineDuplicate",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LineDuplicate. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_LineDuplicate(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_HomeDisplay(_swigobj)  (_swigobj->HomeDisplay())
+static PyObject *_wrap_wxStyledTextCtrl_HomeDisplay(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_HomeDisplay",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_HomeDisplay. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_HomeDisplay(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_HomeDisplayExtend(_swigobj)  (_swigobj->HomeDisplayExtend())
+static PyObject *_wrap_wxStyledTextCtrl_HomeDisplayExtend(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_HomeDisplayExtend",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_HomeDisplayExtend. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_HomeDisplayExtend(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LineEndDisplay(_swigobj)  (_swigobj->LineEndDisplay())
+static PyObject *_wrap_wxStyledTextCtrl_LineEndDisplay(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LineEndDisplay",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LineEndDisplay. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_LineEndDisplay(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LineEndDisplayExtend(_swigobj)  (_swigobj->LineEndDisplayExtend())
+static PyObject *_wrap_wxStyledTextCtrl_LineEndDisplayExtend(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_LineEndDisplayExtend",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LineEndDisplayExtend. Expected _wxStyledTextCtrl_p.");
         return NULL;
         }
     }
@@ -8739,6 +9351,34 @@ static PyObject *_wrap_wxStyledTextCtrl_GetXOffset(PyObject *self, PyObject *arg
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_ChooseCaretX(_swigobj)  (_swigobj->ChooseCaretX())
+static PyObject *_wrap_wxStyledTextCtrl_ChooseCaretX(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_ChooseCaretX",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_ChooseCaretX. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_ChooseCaretX(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_SetXCaretPolicy(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetXCaretPolicy(_swigarg0,_swigarg1))
 static PyObject *_wrap_wxStyledTextCtrl_SetXCaretPolicy(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -8799,6 +9439,172 @@ static PyObject *_wrap_wxStyledTextCtrl_SetYCaretPolicy(PyObject *self, PyObject
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_SetPrintWrapMode(_swigobj,_swigarg0)  (_swigobj->SetPrintWrapMode(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_SetPrintWrapMode(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","mode", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_SetPrintWrapMode",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetPrintWrapMode. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetPrintWrapMode(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_GetPrintWrapMode(_swigobj)  (_swigobj->GetPrintWrapMode())
+static PyObject *_wrap_wxStyledTextCtrl_GetPrintWrapMode(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    wxStyledTextCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxStyledTextCtrl_GetPrintWrapMode",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_GetPrintWrapMode. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxStyledTextCtrl_GetPrintWrapMode(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetHotspotActiveForeground(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetHotspotActiveForeground(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_SetHotspotActiveForeground(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    wxColour * _arg2;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    wxColour  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","useSetting","fore", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_SetHotspotActiveForeground",_kwnames,&_argo0,&tempbool1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetHotspotActiveForeground. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    _arg2 = &temp;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetHotspotActiveForeground(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetHotspotActiveBackground(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetHotspotActiveBackground(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxStyledTextCtrl_SetHotspotActiveBackground(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    wxColour * _arg2;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    wxColour  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","useSetting","back", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxStyledTextCtrl_SetHotspotActiveBackground",_kwnames,&_argo0,&tempbool1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetHotspotActiveBackground. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    _arg2 = &temp;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetHotspotActiveBackground(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_SetHotspotActiveUnderline(_swigobj,_swigarg0)  (_swigobj->SetHotspotActiveUnderline(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_SetHotspotActiveUnderline(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxStyledTextCtrl * _arg0;
+    bool  _arg1;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    char *_kwnames[] = { "self","underline", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxStyledTextCtrl_SetHotspotActiveUnderline",_kwnames,&_argo0,&tempbool1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SetHotspotActiveUnderline. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxStyledTextCtrl_SetHotspotActiveUnderline(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxStyledTextCtrl_StartRecord(_swigobj)  (_swigobj->StartRecord())
 static PyObject *_wrap_wxStyledTextCtrl_StartRecord(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -9586,6 +10392,84 @@ static PyObject *_wrap_wxStyledTextCtrl_SetLastKeydownProcessed(PyObject *self,
     return _resultobj;
 }
 
+#define wxStyledTextCtrl_SaveFile(_swigobj,_swigarg0)  (_swigobj->SaveFile(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_SaveFile(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxStyledTextCtrl * _arg0;
+    wxString * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","filename", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxStyledTextCtrl_SaveFile",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_SaveFile. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = wxString_in_helper(_obj1);
+    if (_arg1 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxStyledTextCtrl_SaveFile(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+{
+    if (_obj1)
+        delete _arg1;
+}
+    return _resultobj;
+}
+
+#define wxStyledTextCtrl_LoadFile(_swigobj,_swigarg0)  (_swigobj->LoadFile(_swigarg0))
+static PyObject *_wrap_wxStyledTextCtrl_LoadFile(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxStyledTextCtrl * _arg0;
+    wxString * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","filename", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxStyledTextCtrl_LoadFile",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxStyledTextCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxStyledTextCtrl_LoadFile. Expected _wxStyledTextCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = wxString_in_helper(_obj1);
+    if (_arg1 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxStyledTextCtrl_LoadFile(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+{
+    if (_obj1)
+        delete _arg1;
+}
+    return _resultobj;
+}
+
 static void *SwigwxStyledTextEventTowxCommandEvent(void *ptr) {
     wxStyledTextEvent *src;
     wxCommandEvent *dest;
@@ -11012,6 +11896,8 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextEvent_SetPosition", (PyCFunction) _wrap_wxStyledTextEvent_SetPosition, METH_VARARGS | METH_KEYWORDS },
 	 { "delete_wxStyledTextEvent", (PyCFunction) _wrap_delete_wxStyledTextEvent, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxStyledTextEvent", (PyCFunction) _wrap_new_wxStyledTextEvent, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_LoadFile", (PyCFunction) _wrap_wxStyledTextCtrl_LoadFile, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SaveFile", (PyCFunction) _wrap_wxStyledTextCtrl_SaveFile, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetLastKeydownProcessed", (PyCFunction) _wrap_wxStyledTextCtrl_SetLastKeydownProcessed, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_GetLastKeydownProcessed", (PyCFunction) _wrap_wxStyledTextCtrl_GetLastKeydownProcessed, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetHScrollBar", (PyCFunction) _wrap_wxStyledTextCtrl_SetHScrollBar, METH_VARARGS | METH_KEYWORDS },
@@ -11035,8 +11921,14 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_SetLexer", (PyCFunction) _wrap_wxStyledTextCtrl_SetLexer, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_StopRecord", (PyCFunction) _wrap_wxStyledTextCtrl_StopRecord, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_StartRecord", (PyCFunction) _wrap_wxStyledTextCtrl_StartRecord, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetHotspotActiveUnderline", (PyCFunction) _wrap_wxStyledTextCtrl_SetHotspotActiveUnderline, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetHotspotActiveBackground", (PyCFunction) _wrap_wxStyledTextCtrl_SetHotspotActiveBackground, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetHotspotActiveForeground", (PyCFunction) _wrap_wxStyledTextCtrl_SetHotspotActiveForeground, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_GetPrintWrapMode", (PyCFunction) _wrap_wxStyledTextCtrl_GetPrintWrapMode, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetPrintWrapMode", (PyCFunction) _wrap_wxStyledTextCtrl_SetPrintWrapMode, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetYCaretPolicy", (PyCFunction) _wrap_wxStyledTextCtrl_SetYCaretPolicy, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetXCaretPolicy", (PyCFunction) _wrap_wxStyledTextCtrl_SetXCaretPolicy, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_ChooseCaretX", (PyCFunction) _wrap_wxStyledTextCtrl_ChooseCaretX, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_GetXOffset", (PyCFunction) _wrap_wxStyledTextCtrl_GetXOffset, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetXOffset", (PyCFunction) _wrap_wxStyledTextCtrl_SetXOffset, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_DelLineRight", (PyCFunction) _wrap_wxStyledTextCtrl_DelLineRight, METH_VARARGS | METH_KEYWORDS },
@@ -11088,6 +11980,17 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_LineEndDisplay", (PyCFunction) _wrap_wxStyledTextCtrl_LineEndDisplay, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_HomeDisplayExtend", (PyCFunction) _wrap_wxStyledTextCtrl_HomeDisplayExtend, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_HomeDisplay", (PyCFunction) _wrap_wxStyledTextCtrl_HomeDisplay, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_LineDuplicate", (PyCFunction) _wrap_wxStyledTextCtrl_LineDuplicate, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetFoldMarginHiColour", (PyCFunction) _wrap_wxStyledTextCtrl_SetFoldMarginHiColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetFoldMarginColour", (PyCFunction) _wrap_wxStyledTextCtrl_SetFoldMarginColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_LinesSplit", (PyCFunction) _wrap_wxStyledTextCtrl_LinesSplit, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_LinesJoin", (PyCFunction) _wrap_wxStyledTextCtrl_LinesJoin, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_TargetFromSelection", (PyCFunction) _wrap_wxStyledTextCtrl_TargetFromSelection, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetTwoPhaseDraw", (PyCFunction) _wrap_wxStyledTextCtrl_SetTwoPhaseDraw, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_GetTwoPhaseDraw", (PyCFunction) _wrap_wxStyledTextCtrl_GetTwoPhaseDraw, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_AppendText", (PyCFunction) _wrap_wxStyledTextCtrl_AppendText, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_GetUseVerticalScrollBar", (PyCFunction) _wrap_wxStyledTextCtrl_GetUseVerticalScrollBar, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_SetUseVerticalScrollBar", (PyCFunction) _wrap_wxStyledTextCtrl_SetUseVerticalScrollBar, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_TextHeight", (PyCFunction) _wrap_wxStyledTextCtrl_TextHeight, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_GetEndAtLastLine", (PyCFunction) _wrap_wxStyledTextCtrl_GetEndAtLastLine, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetEndAtLastLine", (PyCFunction) _wrap_wxStyledTextCtrl_SetEndAtLastLine, METH_VARARGS | METH_KEYWORDS },
@@ -11121,6 +12024,8 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_SetFoldLevel", (PyCFunction) _wrap_wxStyledTextCtrl_SetFoldLevel, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_DocLineFromVisible", (PyCFunction) _wrap_wxStyledTextCtrl_DocLineFromVisible, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_VisibleFromDocLine", (PyCFunction) _wrap_wxStyledTextCtrl_VisibleFromDocLine, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_CallTipSetForegroundHighlight", (PyCFunction) _wrap_wxStyledTextCtrl_CallTipSetForegroundHighlight, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_CallTipSetForeground", (PyCFunction) _wrap_wxStyledTextCtrl_CallTipSetForeground, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_CallTipSetBackground", (PyCFunction) _wrap_wxStyledTextCtrl_CallTipSetBackground, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_CallTipSetHighlight", (PyCFunction) _wrap_wxStyledTextCtrl_CallTipSetHighlight, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_CallTipPosAtStart", (PyCFunction) _wrap_wxStyledTextCtrl_CallTipPosAtStart, METH_VARARGS | METH_KEYWORDS },
@@ -11198,6 +12103,10 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_SetUseTabs", (PyCFunction) _wrap_wxStyledTextCtrl_SetUseTabs, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_GetIndent", (PyCFunction) _wrap_wxStyledTextCtrl_GetIndent, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetIndent", (PyCFunction) _wrap_wxStyledTextCtrl_SetIndent, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_AutoCompSetTypeSeparator", (PyCFunction) _wrap_wxStyledTextCtrl_AutoCompSetTypeSeparator, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_AutoCompGetTypeSeparator", (PyCFunction) _wrap_wxStyledTextCtrl_AutoCompGetTypeSeparator, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_ClearRegisteredImages", (PyCFunction) _wrap_wxStyledTextCtrl_ClearRegisteredImages, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_RegisterImage", (PyCFunction) _wrap_wxStyledTextCtrl_RegisterImage, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_AutoCompGetDropRestOfWord", (PyCFunction) _wrap_wxStyledTextCtrl_AutoCompGetDropRestOfWord, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_AutoCompSetDropRestOfWord", (PyCFunction) _wrap_wxStyledTextCtrl_AutoCompSetDropRestOfWord, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_AutoCompGetAutoHide", (PyCFunction) _wrap_wxStyledTextCtrl_AutoCompGetAutoHide, METH_VARARGS | METH_KEYWORDS },
@@ -11248,6 +12157,7 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_SetCaretForeground", (PyCFunction) _wrap_wxStyledTextCtrl_SetCaretForeground, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetSelBackground", (PyCFunction) _wrap_wxStyledTextCtrl_SetSelBackground, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetSelForeground", (PyCFunction) _wrap_wxStyledTextCtrl_SetSelForeground, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_StyleSetHotSpot", (PyCFunction) _wrap_wxStyledTextCtrl_StyleSetHotSpot, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_StyleSetCharacterSet", (PyCFunction) _wrap_wxStyledTextCtrl_StyleSetCharacterSet, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_StyleSetCase", (PyCFunction) _wrap_wxStyledTextCtrl_StyleSetCase, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_StyleSetUnderline", (PyCFunction) _wrap_wxStyledTextCtrl_StyleSetUnderline, METH_VARARGS | METH_KEYWORDS },
@@ -11268,6 +12178,7 @@ static PyMethodDef stc_cMethods[] = {
 	 { "wxStyledTextCtrl_SetMarginWidth", (PyCFunction) _wrap_wxStyledTextCtrl_SetMarginWidth, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_GetMarginType", (PyCFunction) _wrap_wxStyledTextCtrl_GetMarginType, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_SetMarginType", (PyCFunction) _wrap_wxStyledTextCtrl_SetMarginType, METH_VARARGS | METH_KEYWORDS },
+	 { "wxStyledTextCtrl_MarkerDefineBitmap", (PyCFunction) _wrap_wxStyledTextCtrl_MarkerDefineBitmap, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_MarkerPrevious", (PyCFunction) _wrap_wxStyledTextCtrl_MarkerPrevious, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_MarkerNext", (PyCFunction) _wrap_wxStyledTextCtrl_MarkerNext, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStyledTextCtrl_MarkerGet", (PyCFunction) _wrap_wxStyledTextCtrl_MarkerGet, METH_VARARGS | METH_KEYWORDS },
@@ -11455,6 +12366,7 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_EOL_CR", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_EOL_LF", PyInt_FromLong((long) 2));
 	 PyDict_SetItemString(d,"wxSTC_CP_UTF8", PyInt_FromLong((long) 65001));
+	 PyDict_SetItemString(d,"wxSTC_CP_DBCS", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_MARKER_MAX", PyInt_FromLong((long) 31));
 	 PyDict_SetItemString(d,"wxSTC_MARK_CIRCLE", PyInt_FromLong((long) 0));
 	 PyDict_SetItemString(d,"wxSTC_MARK_ROUNDRECT", PyInt_FromLong((long) 1));
@@ -11481,6 +12393,7 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_MARK_BACKGROUND", PyInt_FromLong((long) 22));
 	 PyDict_SetItemString(d,"wxSTC_MARK_DOTDOTDOT", PyInt_FromLong((long) 23));
 	 PyDict_SetItemString(d,"wxSTC_MARK_ARROWS", PyInt_FromLong((long) 24));
+	 PyDict_SetItemString(d,"wxSTC_MARK_PIXMAP", PyInt_FromLong((long) 25));
 	 PyDict_SetItemString(d,"wxSTC_MARK_CHARACTER", PyInt_FromLong((long) 10000));
 	 PyDict_SetItemString(d,"wxSTC_MARKNUM_FOLDEREND", PyInt_FromLong((long) 25));
 	 PyDict_SetItemString(d,"wxSTC_MARKNUM_FOLDEROPENMID", PyInt_FromLong((long) 26));
@@ -11541,10 +12454,21 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_FIND_MATCHCASE", PyInt_FromLong((long) 4));
 	 PyDict_SetItemString(d,"wxSTC_FIND_WORDSTART", PyInt_FromLong((long) 0x00100000));
 	 PyDict_SetItemString(d,"wxSTC_FIND_REGEXP", PyInt_FromLong((long) 0x00200000));
+	 PyDict_SetItemString(d,"wxSTC_FIND_POSIX", PyInt_FromLong((long) 0x00400000));
 	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELBASE", PyInt_FromLong((long) 0x400));
 	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELWHITEFLAG", PyInt_FromLong((long) 0x1000));
 	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELHEADERFLAG", PyInt_FromLong((long) 0x2000));
+	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELBOXHEADERFLAG", PyInt_FromLong((long) 0x4000));
+	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELBOXFOOTERFLAG", PyInt_FromLong((long) 0x8000));
+	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELCONTRACTED", PyInt_FromLong((long) 0x10000));
+	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELUNINDENT", PyInt_FromLong((long) 0x20000));
 	 PyDict_SetItemString(d,"wxSTC_FOLDLEVELNUMBERMASK", PyInt_FromLong((long) 0x0FFF));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED", PyInt_FromLong((long) 0x0002));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED", PyInt_FromLong((long) 0x0004));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_LINEAFTER_EXPANDED", PyInt_FromLong((long) 0x0008));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED", PyInt_FromLong((long) 0x0010));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_LEVELNUMBERS", PyInt_FromLong((long) 0x0040));
+	 PyDict_SetItemString(d,"wxSTC_FOLDFLAG_BOX", PyInt_FromLong((long) 0x0001));
 	 PyDict_SetItemString(d,"wxSTC_TIME_FOREVER", PyInt_FromLong((long) 10000000));
 	 PyDict_SetItemString(d,"wxSTC_WRAP_NONE", PyInt_FromLong((long) 0));
 	 PyDict_SetItemString(d,"wxSTC_WRAP_WORD", PyInt_FromLong((long) 1));
@@ -11556,7 +12480,7 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_EDGE_LINE", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_EDGE_BACKGROUND", PyInt_FromLong((long) 2));
 	 PyDict_SetItemString(d,"wxSTC_CURSORNORMAL", PyInt_FromLong((long) -1));
-	 PyDict_SetItemString(d,"wxSTC_CURSORWAIT", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_CURSORWAIT", PyInt_FromLong((long) 4));
 	 PyDict_SetItemString(d,"wxSTC_VISIBLE_SLOP", PyInt_FromLong((long) 0x01));
 	 PyDict_SetItemString(d,"wxSTC_VISIBLE_STRICT", PyInt_FromLong((long) 0x04));
 	 PyDict_SetItemString(d,"wxSTC_CARET_SLOP", PyInt_FromLong((long) 0x01));
@@ -11629,6 +12553,12 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_LEX_BAAN", PyInt_FromLong((long) 31));
 	 PyDict_SetItemString(d,"wxSTC_LEX_MATLAB", PyInt_FromLong((long) 32));
 	 PyDict_SetItemString(d,"wxSTC_LEX_SCRIPTOL", PyInt_FromLong((long) 33));
+	 PyDict_SetItemString(d,"wxSTC_LEX_ASM", PyInt_FromLong((long) 34));
+	 PyDict_SetItemString(d,"wxSTC_LEX_CPPNOCASE", PyInt_FromLong((long) 35));
+	 PyDict_SetItemString(d,"wxSTC_LEX_FORTRAN", PyInt_FromLong((long) 36));
+	 PyDict_SetItemString(d,"wxSTC_LEX_F77", PyInt_FromLong((long) 37));
+	 PyDict_SetItemString(d,"wxSTC_LEX_CSS", PyInt_FromLong((long) 38));
+	 PyDict_SetItemString(d,"wxSTC_LEX_POV", PyInt_FromLong((long) 39));
 	 PyDict_SetItemString(d,"wxSTC_LEX_AUTOMATIC", PyInt_FromLong((long) 1000));
 	 PyDict_SetItemString(d,"wxSTC_P_DEFAULT", PyInt_FromLong((long) 0));
 	 PyDict_SetItemString(d,"wxSTC_P_COMMENTLINE", PyInt_FromLong((long) 1));
@@ -11854,6 +12784,9 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_ERR_DIFF_ADDITION", PyInt_FromLong((long) 11));
 	 PyDict_SetItemString(d,"wxSTC_ERR_DIFF_DELETION", PyInt_FromLong((long) 12));
 	 PyDict_SetItemString(d,"wxSTC_ERR_DIFF_MESSAGE", PyInt_FromLong((long) 13));
+	 PyDict_SetItemString(d,"wxSTC_ERR_PHP", PyInt_FromLong((long) 14));
+	 PyDict_SetItemString(d,"wxSTC_ERR_ELF", PyInt_FromLong((long) 15));
+	 PyDict_SetItemString(d,"wxSTC_ERR_IFC", PyInt_FromLong((long) 16));
 	 PyDict_SetItemString(d,"wxSTC_BAT_DEFAULT", PyInt_FromLong((long) 0));
 	 PyDict_SetItemString(d,"wxSTC_BAT_COMMENT", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_BAT_WORD", PyInt_FromLong((long) 2));
@@ -11890,22 +12823,29 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_AVE_COMMENT", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_AVE_NUMBER", PyInt_FromLong((long) 2));
 	 PyDict_SetItemString(d,"wxSTC_AVE_WORD", PyInt_FromLong((long) 3));
-	 PyDict_SetItemString(d,"wxSTC_AVE_KEYWORD", PyInt_FromLong((long) 4));
-	 PyDict_SetItemString(d,"wxSTC_AVE_STATEMENT", PyInt_FromLong((long) 5));
 	 PyDict_SetItemString(d,"wxSTC_AVE_STRING", PyInt_FromLong((long) 6));
 	 PyDict_SetItemString(d,"wxSTC_AVE_ENUM", PyInt_FromLong((long) 7));
 	 PyDict_SetItemString(d,"wxSTC_AVE_STRINGEOL", PyInt_FromLong((long) 8));
 	 PyDict_SetItemString(d,"wxSTC_AVE_IDENTIFIER", PyInt_FromLong((long) 9));
 	 PyDict_SetItemString(d,"wxSTC_AVE_OPERATOR", PyInt_FromLong((long) 10));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD1", PyInt_FromLong((long) 11));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD2", PyInt_FromLong((long) 12));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD3", PyInt_FromLong((long) 13));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD4", PyInt_FromLong((long) 14));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD5", PyInt_FromLong((long) 15));
+	 PyDict_SetItemString(d,"wxSTC_AVE_WORD6", PyInt_FromLong((long) 16));
 	 PyDict_SetItemString(d,"wxSTC_ADA_DEFAULT", PyInt_FromLong((long) 0));
-	 PyDict_SetItemString(d,"wxSTC_ADA_COMMENT", PyInt_FromLong((long) 1));
-	 PyDict_SetItemString(d,"wxSTC_ADA_NUMBER", PyInt_FromLong((long) 2));
-	 PyDict_SetItemString(d,"wxSTC_ADA_WORD", PyInt_FromLong((long) 3));
-	 PyDict_SetItemString(d,"wxSTC_ADA_STRING", PyInt_FromLong((long) 4));
+	 PyDict_SetItemString(d,"wxSTC_ADA_WORD", PyInt_FromLong((long) 1));
+	 PyDict_SetItemString(d,"wxSTC_ADA_IDENTIFIER", PyInt_FromLong((long) 2));
+	 PyDict_SetItemString(d,"wxSTC_ADA_NUMBER", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_ADA_DELIMITER", PyInt_FromLong((long) 4));
 	 PyDict_SetItemString(d,"wxSTC_ADA_CHARACTER", PyInt_FromLong((long) 5));
-	 PyDict_SetItemString(d,"wxSTC_ADA_OPERATOR", PyInt_FromLong((long) 6));
-	 PyDict_SetItemString(d,"wxSTC_ADA_IDENTIFIER", PyInt_FromLong((long) 7));
+	 PyDict_SetItemString(d,"wxSTC_ADA_CHARACTEREOL", PyInt_FromLong((long) 6));
+	 PyDict_SetItemString(d,"wxSTC_ADA_STRING", PyInt_FromLong((long) 7));
 	 PyDict_SetItemString(d,"wxSTC_ADA_STRINGEOL", PyInt_FromLong((long) 8));
+	 PyDict_SetItemString(d,"wxSTC_ADA_LABEL", PyInt_FromLong((long) 9));
+	 PyDict_SetItemString(d,"wxSTC_ADA_COMMENTLINE", PyInt_FromLong((long) 10));
+	 PyDict_SetItemString(d,"wxSTC_ADA_ILLEGAL", PyInt_FromLong((long) 11));
 	 PyDict_SetItemString(d,"wxSTC_BAAN_DEFAULT", PyInt_FromLong((long) 0));
 	 PyDict_SetItemString(d,"wxSTC_BAAN_COMMENT", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxSTC_BAAN_COMMENTDOC", PyInt_FromLong((long) 2));
@@ -11973,6 +12913,58 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_SCRIPTOL_COMMENTDOCKEYWORD", PyInt_FromLong((long) 17));
 	 PyDict_SetItemString(d,"wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR", PyInt_FromLong((long) 18));
 	 PyDict_SetItemString(d,"wxSTC_SCRIPTOL_COMMENTBASIC", PyInt_FromLong((long) 19));
+	 PyDict_SetItemString(d,"wxSTC_ASM_DEFAULT", PyInt_FromLong((long) 0));
+	 PyDict_SetItemString(d,"wxSTC_ASM_COMMENT", PyInt_FromLong((long) 1));
+	 PyDict_SetItemString(d,"wxSTC_ASM_NUMBER", PyInt_FromLong((long) 2));
+	 PyDict_SetItemString(d,"wxSTC_ASM_STRING", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_ASM_OPERATOR", PyInt_FromLong((long) 4));
+	 PyDict_SetItemString(d,"wxSTC_ASM_IDENTIFIER", PyInt_FromLong((long) 5));
+	 PyDict_SetItemString(d,"wxSTC_ASM_CPUINSTRUCTION", PyInt_FromLong((long) 6));
+	 PyDict_SetItemString(d,"wxSTC_ASM_MATHINSTRUCTION", PyInt_FromLong((long) 7));
+	 PyDict_SetItemString(d,"wxSTC_ASM_REGISTER", PyInt_FromLong((long) 8));
+	 PyDict_SetItemString(d,"wxSTC_ASM_DIRECTIVE", PyInt_FromLong((long) 9));
+	 PyDict_SetItemString(d,"wxSTC_ASM_DIRECTIVEOPERAND", PyInt_FromLong((long) 10));
+	 PyDict_SetItemString(d,"wxSTC_F_DEFAULT", PyInt_FromLong((long) 0));
+	 PyDict_SetItemString(d,"wxSTC_F_COMMENT", PyInt_FromLong((long) 1));
+	 PyDict_SetItemString(d,"wxSTC_F_NUMBER", PyInt_FromLong((long) 2));
+	 PyDict_SetItemString(d,"wxSTC_F_STRING1", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_F_STRING2", PyInt_FromLong((long) 4));
+	 PyDict_SetItemString(d,"wxSTC_F_STRINGEOL", PyInt_FromLong((long) 5));
+	 PyDict_SetItemString(d,"wxSTC_F_OPERATOR", PyInt_FromLong((long) 6));
+	 PyDict_SetItemString(d,"wxSTC_F_IDENTIFIER", PyInt_FromLong((long) 7));
+	 PyDict_SetItemString(d,"wxSTC_F_WORD", PyInt_FromLong((long) 8));
+	 PyDict_SetItemString(d,"wxSTC_F_WORD2", PyInt_FromLong((long) 9));
+	 PyDict_SetItemString(d,"wxSTC_F_WORD3", PyInt_FromLong((long) 10));
+	 PyDict_SetItemString(d,"wxSTC_F_PREPROCESSOR", PyInt_FromLong((long) 11));
+	 PyDict_SetItemString(d,"wxSTC_F_OPERATOR2", PyInt_FromLong((long) 12));
+	 PyDict_SetItemString(d,"wxSTC_F_LABEL", PyInt_FromLong((long) 13));
+	 PyDict_SetItemString(d,"wxSTC_F_CONTINUATION", PyInt_FromLong((long) 14));
+	 PyDict_SetItemString(d,"wxSTC_CSS_DEFAULT", PyInt_FromLong((long) 0));
+	 PyDict_SetItemString(d,"wxSTC_CSS_TAG", PyInt_FromLong((long) 1));
+	 PyDict_SetItemString(d,"wxSTC_CSS_CLASS", PyInt_FromLong((long) 2));
+	 PyDict_SetItemString(d,"wxSTC_CSS_PSEUDOCLASS", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_CSS_UNKNOWN_PSEUDOCLASS", PyInt_FromLong((long) 4));
+	 PyDict_SetItemString(d,"wxSTC_CSS_OPERATOR", PyInt_FromLong((long) 5));
+	 PyDict_SetItemString(d,"wxSTC_CSS_IDENTIFIER", PyInt_FromLong((long) 6));
+	 PyDict_SetItemString(d,"wxSTC_CSS_UNKNOWN_IDENTIFIER", PyInt_FromLong((long) 7));
+	 PyDict_SetItemString(d,"wxSTC_CSS_VALUE", PyInt_FromLong((long) 8));
+	 PyDict_SetItemString(d,"wxSTC_CSS_COMMENT", PyInt_FromLong((long) 9));
+	 PyDict_SetItemString(d,"wxSTC_CSS_ID", PyInt_FromLong((long) 10));
+	 PyDict_SetItemString(d,"wxSTC_CSS_IMPORTANT", PyInt_FromLong((long) 11));
+	 PyDict_SetItemString(d,"wxSTC_CSS_DIRECTIVE", PyInt_FromLong((long) 12));
+	 PyDict_SetItemString(d,"wxSTC_CSS_DOUBLESTRING", PyInt_FromLong((long) 13));
+	 PyDict_SetItemString(d,"wxSTC_CSS_SINGLESTRING", PyInt_FromLong((long) 14));
+	 PyDict_SetItemString(d,"wxSTC_POV_DEFAULT", PyInt_FromLong((long) 0));
+	 PyDict_SetItemString(d,"wxSTC_POV_COMMENT", PyInt_FromLong((long) 1));
+	 PyDict_SetItemString(d,"wxSTC_POV_COMMENTLINE", PyInt_FromLong((long) 2));
+	 PyDict_SetItemString(d,"wxSTC_POV_COMMENTDOC", PyInt_FromLong((long) 3));
+	 PyDict_SetItemString(d,"wxSTC_POV_NUMBER", PyInt_FromLong((long) 4));
+	 PyDict_SetItemString(d,"wxSTC_POV_WORD", PyInt_FromLong((long) 5));
+	 PyDict_SetItemString(d,"wxSTC_POV_STRING", PyInt_FromLong((long) 6));
+	 PyDict_SetItemString(d,"wxSTC_POV_OPERATOR", PyInt_FromLong((long) 7));
+	 PyDict_SetItemString(d,"wxSTC_POV_IDENTIFIER", PyInt_FromLong((long) 8));
+	 PyDict_SetItemString(d,"wxSTC_POV_BRACE", PyInt_FromLong((long) 9));
+	 PyDict_SetItemString(d,"wxSTC_POV_WORD2", PyInt_FromLong((long) 10));
 	 PyDict_SetItemString(d,"wxSTC_CMD_REDO", PyInt_FromLong((long) 2011));
 	 PyDict_SetItemString(d,"wxSTC_CMD_SELECTALL", PyInt_FromLong((long) 2013));
 	 PyDict_SetItemString(d,"wxSTC_CMD_UNDO", PyInt_FromLong((long) 2176));
@@ -12020,6 +13012,7 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINECUT", PyInt_FromLong((long) 2337));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINEDELETE", PyInt_FromLong((long) 2338));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINETRANSPOSE", PyInt_FromLong((long) 2339));
+	 PyDict_SetItemString(d,"wxSTC_CMD_LINEDUPLICATE", PyInt_FromLong((long) 2404));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LOWERCASE", PyInt_FromLong((long) 2340));
 	 PyDict_SetItemString(d,"wxSTC_CMD_UPPERCASE", PyInt_FromLong((long) 2341));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINESCROLLDOWN", PyInt_FromLong((long) 2342));
@@ -12029,12 +13022,22 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxSTC_CMD_HOMEDISPLAYEXTEND", PyInt_FromLong((long) 2346));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINEENDDISPLAY", PyInt_FromLong((long) 2347));
 	 PyDict_SetItemString(d,"wxSTC_CMD_LINEENDDISPLAYEXTEND", PyInt_FromLong((long) 2348));
+	 PyDict_SetItemString(d,"wxSTC_CMD_HOMEWRAP", PyInt_FromLong((long) 2349));
+	 PyDict_SetItemString(d,"wxSTC_CMD_HOMEWRAPEXTEND", PyInt_FromLong((long) 2450));
+	 PyDict_SetItemString(d,"wxSTC_CMD_LINEENDWRAP", PyInt_FromLong((long) 2451));
+	 PyDict_SetItemString(d,"wxSTC_CMD_LINEENDWRAPEXTEND", PyInt_FromLong((long) 2452));
+	 PyDict_SetItemString(d,"wxSTC_CMD_VCHOMEWRAP", PyInt_FromLong((long) 2453));
+	 PyDict_SetItemString(d,"wxSTC_CMD_VCHOMEWRAPEXTEND", PyInt_FromLong((long) 2454));
 	 PyDict_SetItemString(d,"wxSTC_CMD_WORDPARTLEFT", PyInt_FromLong((long) 2390));
 	 PyDict_SetItemString(d,"wxSTC_CMD_WORDPARTLEFTEXTEND", PyInt_FromLong((long) 2391));
 	 PyDict_SetItemString(d,"wxSTC_CMD_WORDPARTRIGHT", PyInt_FromLong((long) 2392));
 	 PyDict_SetItemString(d,"wxSTC_CMD_WORDPARTRIGHTEXTEND", PyInt_FromLong((long) 2393));
 	 PyDict_SetItemString(d,"wxSTC_CMD_DELLINELEFT", PyInt_FromLong((long) 2395));
 	 PyDict_SetItemString(d,"wxSTC_CMD_DELLINERIGHT", PyInt_FromLong((long) 2396));
+	 PyDict_SetItemString(d,"wxSTC_CMD_PARADOWN", PyInt_FromLong((long) 2413));
+	 PyDict_SetItemString(d,"wxSTC_CMD_PARADOWNEXTEND", PyInt_FromLong((long) 2414));
+	 PyDict_SetItemString(d,"wxSTC_CMD_PARAUP", PyInt_FromLong((long) 2415));
+	 PyDict_SetItemString(d,"wxSTC_CMD_PARAUPEXTEND", PyInt_FromLong((long) 2416));
 	 PyDict_SetItemString(d,"STC_USE_DND", PyInt_FromLong((long) 1));
 	 PyDict_SetItemString(d,"wxEVT_STC_CHANGE", PyInt_FromLong((long) wxEVT_STC_CHANGE));
 	 PyDict_SetItemString(d,"wxEVT_STC_STYLENEEDED", PyInt_FromLong((long) wxEVT_STC_STYLENEEDED));
@@ -12059,6 +13062,9 @@ SWIGEXPORT(void) initstc_c() {
 	 PyDict_SetItemString(d,"wxEVT_STC_DRAG_OVER", PyInt_FromLong((long) wxEVT_STC_DRAG_OVER));
 	 PyDict_SetItemString(d,"wxEVT_STC_DO_DROP", PyInt_FromLong((long) wxEVT_STC_DO_DROP));
 	 PyDict_SetItemString(d,"wxEVT_STC_ZOOM", PyInt_FromLong((long) wxEVT_STC_ZOOM));
+	 PyDict_SetItemString(d,"wxEVT_STC_HOTSPOT_CLICK", PyInt_FromLong((long) wxEVT_STC_HOTSPOT_CLICK));
+	 PyDict_SetItemString(d,"wxEVT_STC_HOTSPOT_DCLICK", PyInt_FromLong((long) wxEVT_STC_HOTSPOT_DCLICK));
+	 PyDict_SetItemString(d,"wxEVT_STC_CALLTIP_CLICK", PyInt_FromLong((long) wxEVT_STC_CALLTIP_CLICK));
 
 
     wxClassInfo::CleanUpClasses();
diff --git a/wxPython/contrib/stc/msw/stc_.py b/wxPython/contrib/stc/msw/stc_.py
index a3a4fef4a9..93e7f892ef 100644
--- a/wxPython/contrib/stc/msw/stc_.py
+++ b/wxPython/contrib/stc/msw/stc_.py
@@ -112,930 +112,1019 @@ def EVT_STC_DO_DROP(win, id, func):
 def EVT_STC_ZOOM(win, id, func):
     win.Connect(id, -1, wxEVT_STC_ZOOM, func)
 
+def EVT_STC_HOTSPOT_CLICK(win, id, func):
+    win.Connect(id, -1, wxEVT_STC_HOTSPOT_CLICK, func)
+
+def EVT_STC_HOTSPOT_DCLICK(win, id, func):
+    win.Connect(id, -1, wxEVT_STC_HOTSPOT_DCLICK, func)
+
+def EVT_STC_CALLTIP_CLICK(win, id, func):
+    win.Connect(id, -1, wxEVT_STC_CALLTIP_CLICK, func)
 
 class wxStyledTextCtrlPtr(wxControlPtr):
     def __init__(self,this):
         self.this = this
         self.thisown = 0
     def AddText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AddText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AddText(self, *_args, **_kwargs)
         return val
     def AddStyledText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AddStyledText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AddStyledText(self, *_args, **_kwargs)
         return val
     def InsertText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_InsertText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_InsertText(self, *_args, **_kwargs)
         return val
     def ClearAll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ClearAll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ClearAll(self, *_args, **_kwargs)
         return val
     def ClearDocumentStyle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ClearDocumentStyle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ClearDocumentStyle(self, *_args, **_kwargs)
         return val
     def GetLength(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLength,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLength(self, *_args, **_kwargs)
         return val
     def GetCharAt(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCharAt,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCharAt(self, *_args, **_kwargs)
         return val
     def GetCurrentPos(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCurrentPos,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCurrentPos(self, *_args, **_kwargs)
         return val
     def GetAnchor(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetAnchor,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetAnchor(self, *_args, **_kwargs)
         return val
     def GetStyleAt(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetStyleAt,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetStyleAt(self, *_args, **_kwargs)
         return val
     def Redo(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Redo,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Redo(self, *_args, **_kwargs)
         return val
     def SetUndoCollection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetUndoCollection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetUndoCollection(self, *_args, **_kwargs)
         return val
     def SelectAll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SelectAll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SelectAll(self, *_args, **_kwargs)
         return val
     def SetSavePoint(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSavePoint,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSavePoint(self, *_args, **_kwargs)
         return val
     def GetStyledText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetStyledText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetStyledText(self, *_args, **_kwargs)
         return val
     def CanRedo(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CanRedo,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CanRedo(self, *_args, **_kwargs)
         return val
     def MarkerLineFromHandle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerLineFromHandle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerLineFromHandle(self, *_args, **_kwargs)
         return val
     def MarkerDeleteHandle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerDeleteHandle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerDeleteHandle(self, *_args, **_kwargs)
         return val
     def GetUndoCollection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetUndoCollection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetUndoCollection(self, *_args, **_kwargs)
         return val
     def GetViewWhiteSpace(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetViewWhiteSpace,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetViewWhiteSpace(self, *_args, **_kwargs)
         return val
     def SetViewWhiteSpace(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetViewWhiteSpace,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetViewWhiteSpace(self, *_args, **_kwargs)
         return val
     def PositionFromPoint(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_PositionFromPoint,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_PositionFromPoint(self, *_args, **_kwargs)
         return val
     def PositionFromPointClose(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_PositionFromPointClose,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_PositionFromPointClose(self, *_args, **_kwargs)
         return val
     def GotoLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GotoLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GotoLine(self, *_args, **_kwargs)
         return val
     def GotoPos(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GotoPos,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GotoPos(self, *_args, **_kwargs)
         return val
     def SetAnchor(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetAnchor,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetAnchor(self, *_args, **_kwargs)
         return val
     def GetCurLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCurLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCurLine(self, *_args, **_kwargs)
         return val
     def GetEndStyled(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEndStyled,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEndStyled(self, *_args, **_kwargs)
         return val
     def ConvertEOLs(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ConvertEOLs,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ConvertEOLs(self, *_args, **_kwargs)
         return val
     def GetEOLMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEOLMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEOLMode(self, *_args, **_kwargs)
         return val
     def SetEOLMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetEOLMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetEOLMode(self, *_args, **_kwargs)
         return val
     def StartStyling(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StartStyling,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StartStyling(self, *_args, **_kwargs)
         return val
     def SetStyling(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetStyling,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetStyling(self, *_args, **_kwargs)
         return val
     def GetBufferedDraw(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetBufferedDraw,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetBufferedDraw(self, *_args, **_kwargs)
         return val
     def SetBufferedDraw(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetBufferedDraw,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetBufferedDraw(self, *_args, **_kwargs)
         return val
     def SetTabWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetTabWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetTabWidth(self, *_args, **_kwargs)
         return val
     def GetTabWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTabWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTabWidth(self, *_args, **_kwargs)
         return val
     def SetCodePage(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCodePage,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCodePage(self, *_args, **_kwargs)
         return val
     def MarkerDefine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerDefine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerDefine(self, *_args, **_kwargs)
         return val
     def MarkerSetForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerSetForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerSetForeground(self, *_args, **_kwargs)
         return val
     def MarkerSetBackground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerSetBackground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerSetBackground(self, *_args, **_kwargs)
         return val
     def MarkerAdd(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerAdd,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerAdd(self, *_args, **_kwargs)
         return val
     def MarkerDelete(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerDelete,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerDelete(self, *_args, **_kwargs)
         return val
     def MarkerDeleteAll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerDeleteAll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerDeleteAll(self, *_args, **_kwargs)
         return val
     def MarkerGet(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerGet,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerGet(self, *_args, **_kwargs)
         return val
     def MarkerNext(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerNext,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerNext(self, *_args, **_kwargs)
         return val
     def MarkerPrevious(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MarkerPrevious,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MarkerPrevious(self, *_args, **_kwargs)
+        return val
+    def MarkerDefineBitmap(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_MarkerDefineBitmap(self, *_args, **_kwargs)
         return val
     def SetMarginType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginType(self, *_args, **_kwargs)
         return val
     def GetMarginType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginType(self, *_args, **_kwargs)
         return val
     def SetMarginWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginWidth(self, *_args, **_kwargs)
         return val
     def GetMarginWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginWidth(self, *_args, **_kwargs)
         return val
     def SetMarginMask(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginMask,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginMask(self, *_args, **_kwargs)
         return val
     def GetMarginMask(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginMask,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginMask(self, *_args, **_kwargs)
         return val
     def SetMarginSensitive(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginSensitive,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginSensitive(self, *_args, **_kwargs)
         return val
     def GetMarginSensitive(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginSensitive,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginSensitive(self, *_args, **_kwargs)
         return val
     def StyleClearAll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleClearAll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleClearAll(self, *_args, **_kwargs)
         return val
     def StyleSetForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetForeground(self, *_args, **_kwargs)
         return val
     def StyleSetBackground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetBackground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetBackground(self, *_args, **_kwargs)
         return val
     def StyleSetBold(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetBold,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetBold(self, *_args, **_kwargs)
         return val
     def StyleSetItalic(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetItalic,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetItalic(self, *_args, **_kwargs)
         return val
     def StyleSetSize(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetSize,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetSize(self, *_args, **_kwargs)
         return val
     def StyleSetFaceName(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetFaceName,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetFaceName(self, *_args, **_kwargs)
         return val
     def StyleSetEOLFilled(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetEOLFilled,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetEOLFilled(self, *_args, **_kwargs)
         return val
     def StyleResetDefault(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleResetDefault,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleResetDefault(self, *_args, **_kwargs)
         return val
     def StyleSetUnderline(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetUnderline,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetUnderline(self, *_args, **_kwargs)
         return val
     def StyleSetCase(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetCase,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetCase(self, *_args, **_kwargs)
         return val
     def StyleSetCharacterSet(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetCharacterSet,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetCharacterSet(self, *_args, **_kwargs)
+        return val
+    def StyleSetHotSpot(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_StyleSetHotSpot(self, *_args, **_kwargs)
         return val
     def SetSelForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSelForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSelForeground(self, *_args, **_kwargs)
         return val
     def SetSelBackground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSelBackground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSelBackground(self, *_args, **_kwargs)
         return val
     def SetCaretForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCaretForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCaretForeground(self, *_args, **_kwargs)
         return val
     def CmdKeyAssign(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CmdKeyAssign,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CmdKeyAssign(self, *_args, **_kwargs)
         return val
     def CmdKeyClear(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CmdKeyClear,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CmdKeyClear(self, *_args, **_kwargs)
         return val
     def CmdKeyClearAll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CmdKeyClearAll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CmdKeyClearAll(self, *_args, **_kwargs)
         return val
     def SetStyleBytes(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetStyleBytes,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetStyleBytes(self, *_args, **_kwargs)
         return val
     def StyleSetVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetVisible(self, *_args, **_kwargs)
         return val
     def GetCaretPeriod(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCaretPeriod,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCaretPeriod(self, *_args, **_kwargs)
         return val
     def SetCaretPeriod(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCaretPeriod,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCaretPeriod(self, *_args, **_kwargs)
         return val
     def SetWordChars(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetWordChars,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetWordChars(self, *_args, **_kwargs)
         return val
     def BeginUndoAction(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_BeginUndoAction,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_BeginUndoAction(self, *_args, **_kwargs)
         return val
     def EndUndoAction(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_EndUndoAction,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_EndUndoAction(self, *_args, **_kwargs)
         return val
     def IndicatorSetStyle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_IndicatorSetStyle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_IndicatorSetStyle(self, *_args, **_kwargs)
         return val
     def IndicatorGetStyle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_IndicatorGetStyle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_IndicatorGetStyle(self, *_args, **_kwargs)
         return val
     def IndicatorSetForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_IndicatorSetForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_IndicatorSetForeground(self, *_args, **_kwargs)
         return val
     def IndicatorGetForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_IndicatorGetForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_IndicatorGetForeground(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetWhitespaceForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetWhitespaceForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetWhitespaceForeground(self, *_args, **_kwargs)
         return val
     def SetWhitespaceBackground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetWhitespaceBackground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetWhitespaceBackground(self, *_args, **_kwargs)
         return val
     def SetStyleBits(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetStyleBits,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetStyleBits(self, *_args, **_kwargs)
         return val
     def GetStyleBits(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetStyleBits,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetStyleBits(self, *_args, **_kwargs)
         return val
     def SetLineState(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLineState,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLineState(self, *_args, **_kwargs)
         return val
     def GetLineState(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineState,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineState(self, *_args, **_kwargs)
         return val
     def GetMaxLineState(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMaxLineState,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMaxLineState(self, *_args, **_kwargs)
         return val
     def GetCaretLineVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCaretLineVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCaretLineVisible(self, *_args, **_kwargs)
         return val
     def SetCaretLineVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCaretLineVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCaretLineVisible(self, *_args, **_kwargs)
         return val
     def GetCaretLineBack(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCaretLineBack,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCaretLineBack(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetCaretLineBack(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCaretLineBack,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCaretLineBack(self, *_args, **_kwargs)
         return val
     def StyleSetChangeable(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetChangeable,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetChangeable(self, *_args, **_kwargs)
         return val
     def AutoCompShow(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompShow,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompShow(self, *_args, **_kwargs)
         return val
     def AutoCompCancel(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompCancel,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompCancel(self, *_args, **_kwargs)
         return val
     def AutoCompActive(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompActive,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompActive(self, *_args, **_kwargs)
         return val
     def AutoCompPosStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompPosStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompPosStart(self, *_args, **_kwargs)
         return val
     def AutoCompComplete(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompComplete,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompComplete(self, *_args, **_kwargs)
         return val
     def AutoCompStops(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompStops,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompStops(self, *_args, **_kwargs)
         return val
     def AutoCompSetSeparator(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetSeparator,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetSeparator(self, *_args, **_kwargs)
         return val
     def AutoCompGetSeparator(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetSeparator,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetSeparator(self, *_args, **_kwargs)
         return val
     def AutoCompSelect(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSelect,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSelect(self, *_args, **_kwargs)
         return val
     def AutoCompSetCancelAtStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetCancelAtStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetCancelAtStart(self, *_args, **_kwargs)
         return val
     def AutoCompGetCancelAtStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetCancelAtStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetCancelAtStart(self, *_args, **_kwargs)
         return val
     def AutoCompSetFillUps(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetFillUps,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetFillUps(self, *_args, **_kwargs)
         return val
     def AutoCompSetChooseSingle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetChooseSingle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetChooseSingle(self, *_args, **_kwargs)
         return val
     def AutoCompGetChooseSingle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetChooseSingle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetChooseSingle(self, *_args, **_kwargs)
         return val
     def AutoCompSetIgnoreCase(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetIgnoreCase,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetIgnoreCase(self, *_args, **_kwargs)
         return val
     def AutoCompGetIgnoreCase(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetIgnoreCase,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetIgnoreCase(self, *_args, **_kwargs)
         return val
     def UserListShow(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_UserListShow,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_UserListShow(self, *_args, **_kwargs)
         return val
     def AutoCompSetAutoHide(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetAutoHide,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetAutoHide(self, *_args, **_kwargs)
         return val
     def AutoCompGetAutoHide(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetAutoHide,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetAutoHide(self, *_args, **_kwargs)
         return val
     def AutoCompSetDropRestOfWord(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompSetDropRestOfWord,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompSetDropRestOfWord(self, *_args, **_kwargs)
         return val
     def AutoCompGetDropRestOfWord(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AutoCompGetDropRestOfWord,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AutoCompGetDropRestOfWord(self, *_args, **_kwargs)
+        return val
+    def RegisterImage(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_RegisterImage(self, *_args, **_kwargs)
+        return val
+    def ClearRegisteredImages(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_ClearRegisteredImages(self, *_args, **_kwargs)
+        return val
+    def AutoCompGetTypeSeparator(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_AutoCompGetTypeSeparator(self, *_args, **_kwargs)
+        return val
+    def AutoCompSetTypeSeparator(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_AutoCompSetTypeSeparator(self, *_args, **_kwargs)
         return val
     def SetIndent(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetIndent,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetIndent(self, *_args, **_kwargs)
         return val
     def GetIndent(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetIndent,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetIndent(self, *_args, **_kwargs)
         return val
     def SetUseTabs(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetUseTabs,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetUseTabs(self, *_args, **_kwargs)
         return val
     def GetUseTabs(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetUseTabs,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetUseTabs(self, *_args, **_kwargs)
         return val
     def SetLineIndentation(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLineIndentation,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLineIndentation(self, *_args, **_kwargs)
         return val
     def GetLineIndentation(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineIndentation,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineIndentation(self, *_args, **_kwargs)
         return val
     def GetLineIndentPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineIndentPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineIndentPosition(self, *_args, **_kwargs)
         return val
     def GetColumn(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetColumn,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetColumn(self, *_args, **_kwargs)
         return val
     def SetUseHorizontalScrollBar(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetUseHorizontalScrollBar,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetUseHorizontalScrollBar(self, *_args, **_kwargs)
         return val
     def GetUseHorizontalScrollBar(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetUseHorizontalScrollBar,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetUseHorizontalScrollBar(self, *_args, **_kwargs)
         return val
     def SetIndentationGuides(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetIndentationGuides,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetIndentationGuides(self, *_args, **_kwargs)
         return val
     def GetIndentationGuides(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetIndentationGuides,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetIndentationGuides(self, *_args, **_kwargs)
         return val
     def SetHighlightGuide(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetHighlightGuide,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetHighlightGuide(self, *_args, **_kwargs)
         return val
     def GetHighlightGuide(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetHighlightGuide,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetHighlightGuide(self, *_args, **_kwargs)
         return val
     def GetLineEndPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineEndPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineEndPosition(self, *_args, **_kwargs)
         return val
     def GetCodePage(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCodePage,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCodePage(self, *_args, **_kwargs)
         return val
     def GetCaretForeground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCaretForeground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCaretForeground(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetReadOnly(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetReadOnly,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetReadOnly(self, *_args, **_kwargs)
         return val
     def SetCurrentPos(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCurrentPos,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCurrentPos(self, *_args, **_kwargs)
         return val
     def SetSelectionStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSelectionStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSelectionStart(self, *_args, **_kwargs)
         return val
     def GetSelectionStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSelectionStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSelectionStart(self, *_args, **_kwargs)
         return val
     def SetSelectionEnd(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSelectionEnd,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSelectionEnd(self, *_args, **_kwargs)
         return val
     def GetSelectionEnd(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSelectionEnd,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSelectionEnd(self, *_args, **_kwargs)
         return val
     def SetPrintMagnification(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetPrintMagnification,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetPrintMagnification(self, *_args, **_kwargs)
         return val
     def GetPrintMagnification(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetPrintMagnification,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetPrintMagnification(self, *_args, **_kwargs)
         return val
     def SetPrintColourMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetPrintColourMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetPrintColourMode(self, *_args, **_kwargs)
         return val
     def GetPrintColourMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetPrintColourMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetPrintColourMode(self, *_args, **_kwargs)
         return val
     def FindText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_FindText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_FindText(self, *_args, **_kwargs)
         return val
     def FormatRange(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_FormatRange,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_FormatRange(self, *_args, **_kwargs)
         return val
     def GetFirstVisibleLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetFirstVisibleLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetFirstVisibleLine(self, *_args, **_kwargs)
         return val
     def GetLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLine(self, *_args, **_kwargs)
         return val
     def GetLineCount(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineCount,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineCount(self, *_args, **_kwargs)
         return val
     def SetMarginLeft(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginLeft,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginLeft(self, *_args, **_kwargs)
         return val
     def GetMarginLeft(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginLeft,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginLeft(self, *_args, **_kwargs)
         return val
     def SetMarginRight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMarginRight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMarginRight(self, *_args, **_kwargs)
         return val
     def GetMarginRight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMarginRight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMarginRight(self, *_args, **_kwargs)
         return val
     def GetModify(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetModify,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetModify(self, *_args, **_kwargs)
         return val
     def SetSelection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSelection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSelection(self, *_args, **_kwargs)
         return val
     def GetSelectedText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSelectedText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSelectedText(self, *_args, **_kwargs)
         return val
     def GetTextRange(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTextRange,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTextRange(self, *_args, **_kwargs)
         return val
     def HideSelection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_HideSelection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_HideSelection(self, *_args, **_kwargs)
         return val
     def LineFromPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LineFromPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LineFromPosition(self, *_args, **_kwargs)
         return val
     def PositionFromLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_PositionFromLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_PositionFromLine(self, *_args, **_kwargs)
         return val
     def LineScroll(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LineScroll,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LineScroll(self, *_args, **_kwargs)
         return val
     def EnsureCaretVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_EnsureCaretVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_EnsureCaretVisible(self, *_args, **_kwargs)
         return val
     def ReplaceSelection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ReplaceSelection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ReplaceSelection(self, *_args, **_kwargs)
         return val
     def SetReadOnly(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetReadOnly,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetReadOnly(self, *_args, **_kwargs)
         return val
     def CanPaste(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CanPaste,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CanPaste(self, *_args, **_kwargs)
         return val
     def CanUndo(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CanUndo,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CanUndo(self, *_args, **_kwargs)
         return val
     def EmptyUndoBuffer(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_EmptyUndoBuffer,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_EmptyUndoBuffer(self, *_args, **_kwargs)
         return val
     def Undo(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Undo,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Undo(self, *_args, **_kwargs)
         return val
     def Cut(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Cut,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Cut(self, *_args, **_kwargs)
         return val
     def Copy(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Copy,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Copy(self, *_args, **_kwargs)
         return val
     def Paste(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Paste,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Paste(self, *_args, **_kwargs)
         return val
     def Clear(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Clear,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Clear(self, *_args, **_kwargs)
         return val
     def SetText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetText(self, *_args, **_kwargs)
         return val
     def GetText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetText(self, *_args, **_kwargs)
         return val
     def GetTextLength(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTextLength,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTextLength(self, *_args, **_kwargs)
         return val
     def SetOvertype(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetOvertype,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetOvertype(self, *_args, **_kwargs)
         return val
     def GetOvertype(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetOvertype,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetOvertype(self, *_args, **_kwargs)
         return val
     def SetCaretWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCaretWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCaretWidth(self, *_args, **_kwargs)
         return val
     def GetCaretWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCaretWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCaretWidth(self, *_args, **_kwargs)
         return val
     def SetTargetStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetTargetStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetTargetStart(self, *_args, **_kwargs)
         return val
     def GetTargetStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTargetStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTargetStart(self, *_args, **_kwargs)
         return val
     def SetTargetEnd(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetTargetEnd,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetTargetEnd(self, *_args, **_kwargs)
         return val
     def GetTargetEnd(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTargetEnd,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTargetEnd(self, *_args, **_kwargs)
         return val
     def ReplaceTarget(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ReplaceTarget,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ReplaceTarget(self, *_args, **_kwargs)
         return val
     def ReplaceTargetRE(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ReplaceTargetRE,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ReplaceTargetRE(self, *_args, **_kwargs)
         return val
     def SearchInTarget(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SearchInTarget,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SearchInTarget(self, *_args, **_kwargs)
         return val
     def SetSearchFlags(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSearchFlags,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSearchFlags(self, *_args, **_kwargs)
         return val
     def GetSearchFlags(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSearchFlags,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSearchFlags(self, *_args, **_kwargs)
         return val
     def CallTipShow(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipShow,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipShow(self, *_args, **_kwargs)
         return val
     def CallTipCancel(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipCancel,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipCancel(self, *_args, **_kwargs)
         return val
     def CallTipActive(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipActive,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipActive(self, *_args, **_kwargs)
         return val
     def CallTipPosAtStart(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipPosAtStart,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipPosAtStart(self, *_args, **_kwargs)
         return val
     def CallTipSetHighlight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipSetHighlight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipSetHighlight(self, *_args, **_kwargs)
         return val
     def CallTipSetBackground(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CallTipSetBackground,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CallTipSetBackground(self, *_args, **_kwargs)
+        return val
+    def CallTipSetForeground(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_CallTipSetForeground(self, *_args, **_kwargs)
+        return val
+    def CallTipSetForegroundHighlight(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_CallTipSetForegroundHighlight(self, *_args, **_kwargs)
         return val
     def VisibleFromDocLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_VisibleFromDocLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_VisibleFromDocLine(self, *_args, **_kwargs)
         return val
     def DocLineFromVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_DocLineFromVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_DocLineFromVisible(self, *_args, **_kwargs)
         return val
     def SetFoldLevel(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetFoldLevel,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetFoldLevel(self, *_args, **_kwargs)
         return val
     def GetFoldLevel(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetFoldLevel,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetFoldLevel(self, *_args, **_kwargs)
         return val
     def GetLastChild(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLastChild,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLastChild(self, *_args, **_kwargs)
         return val
     def GetFoldParent(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetFoldParent,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetFoldParent(self, *_args, **_kwargs)
         return val
     def ShowLines(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ShowLines,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ShowLines(self, *_args, **_kwargs)
         return val
     def HideLines(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_HideLines,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_HideLines(self, *_args, **_kwargs)
         return val
     def GetLineVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLineVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLineVisible(self, *_args, **_kwargs)
         return val
     def SetFoldExpanded(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetFoldExpanded,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetFoldExpanded(self, *_args, **_kwargs)
         return val
     def GetFoldExpanded(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetFoldExpanded,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetFoldExpanded(self, *_args, **_kwargs)
         return val
     def ToggleFold(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ToggleFold,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ToggleFold(self, *_args, **_kwargs)
         return val
     def EnsureVisible(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_EnsureVisible,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_EnsureVisible(self, *_args, **_kwargs)
         return val
     def SetFoldFlags(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetFoldFlags,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetFoldFlags(self, *_args, **_kwargs)
         return val
     def EnsureVisibleEnforcePolicy(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_EnsureVisibleEnforcePolicy,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_EnsureVisibleEnforcePolicy(self, *_args, **_kwargs)
         return val
     def SetTabIndents(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetTabIndents,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetTabIndents(self, *_args, **_kwargs)
         return val
     def GetTabIndents(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetTabIndents,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetTabIndents(self, *_args, **_kwargs)
         return val
     def SetBackSpaceUnIndents(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetBackSpaceUnIndents,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetBackSpaceUnIndents(self, *_args, **_kwargs)
         return val
     def GetBackSpaceUnIndents(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetBackSpaceUnIndents,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetBackSpaceUnIndents(self, *_args, **_kwargs)
         return val
     def SetMouseDwellTime(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMouseDwellTime,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMouseDwellTime(self, *_args, **_kwargs)
         return val
     def GetMouseDwellTime(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMouseDwellTime,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMouseDwellTime(self, *_args, **_kwargs)
         return val
     def WordStartPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordStartPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordStartPosition(self, *_args, **_kwargs)
         return val
     def WordEndPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordEndPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordEndPosition(self, *_args, **_kwargs)
         return val
     def SetWrapMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetWrapMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetWrapMode(self, *_args, **_kwargs)
         return val
     def GetWrapMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetWrapMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetWrapMode(self, *_args, **_kwargs)
         return val
     def SetLayoutCache(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLayoutCache,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLayoutCache(self, *_args, **_kwargs)
         return val
     def GetLayoutCache(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLayoutCache,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLayoutCache(self, *_args, **_kwargs)
         return val
     def SetScrollWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetScrollWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetScrollWidth(self, *_args, **_kwargs)
         return val
     def GetScrollWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetScrollWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetScrollWidth(self, *_args, **_kwargs)
         return val
     def TextWidth(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_TextWidth,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_TextWidth(self, *_args, **_kwargs)
         return val
     def SetEndAtLastLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetEndAtLastLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetEndAtLastLine(self, *_args, **_kwargs)
         return val
     def GetEndAtLastLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEndAtLastLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEndAtLastLine(self, *_args, **_kwargs)
         return val
     def TextHeight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_TextHeight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_TextHeight(self, *_args, **_kwargs)
+        return val
+    def SetUseVerticalScrollBar(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetUseVerticalScrollBar(self, *_args, **_kwargs)
+        return val
+    def GetUseVerticalScrollBar(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_GetUseVerticalScrollBar(self, *_args, **_kwargs)
+        return val
+    def AppendText(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_AppendText(self, *_args, **_kwargs)
+        return val
+    def GetTwoPhaseDraw(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_GetTwoPhaseDraw(self, *_args, **_kwargs)
+        return val
+    def SetTwoPhaseDraw(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetTwoPhaseDraw(self, *_args, **_kwargs)
+        return val
+    def TargetFromSelection(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_TargetFromSelection(self, *_args, **_kwargs)
+        return val
+    def LinesJoin(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_LinesJoin(self, *_args, **_kwargs)
+        return val
+    def LinesSplit(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_LinesSplit(self, *_args, **_kwargs)
+        return val
+    def SetFoldMarginColour(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetFoldMarginColour(self, *_args, **_kwargs)
+        return val
+    def SetFoldMarginHiColour(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetFoldMarginHiColour(self, *_args, **_kwargs)
+        return val
+    def LineDuplicate(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_LineDuplicate(self, *_args, **_kwargs)
         return val
     def HomeDisplay(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_HomeDisplay,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_HomeDisplay(self, *_args, **_kwargs)
         return val
     def HomeDisplayExtend(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_HomeDisplayExtend,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_HomeDisplayExtend(self, *_args, **_kwargs)
         return val
     def LineEndDisplay(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LineEndDisplay,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LineEndDisplay(self, *_args, **_kwargs)
         return val
     def LineEndDisplayExtend(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LineEndDisplayExtend,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LineEndDisplayExtend(self, *_args, **_kwargs)
         return val
     def MoveCaretInsideView(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_MoveCaretInsideView,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_MoveCaretInsideView(self, *_args, **_kwargs)
         return val
     def LineLength(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LineLength,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LineLength(self, *_args, **_kwargs)
         return val
     def BraceHighlight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_BraceHighlight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_BraceHighlight(self, *_args, **_kwargs)
         return val
     def BraceBadLight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_BraceBadLight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_BraceBadLight(self, *_args, **_kwargs)
         return val
     def BraceMatch(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_BraceMatch,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_BraceMatch(self, *_args, **_kwargs)
         return val
     def GetViewEOL(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetViewEOL,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetViewEOL(self, *_args, **_kwargs)
         return val
     def SetViewEOL(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetViewEOL,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetViewEOL(self, *_args, **_kwargs)
         return val
     def GetDocPointer(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetDocPointer,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetDocPointer(self, *_args, **_kwargs)
         return val
     def SetDocPointer(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetDocPointer,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetDocPointer(self, *_args, **_kwargs)
         return val
     def SetModEventMask(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetModEventMask,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetModEventMask(self, *_args, **_kwargs)
         return val
     def GetEdgeColumn(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEdgeColumn,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEdgeColumn(self, *_args, **_kwargs)
         return val
     def SetEdgeColumn(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetEdgeColumn,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetEdgeColumn(self, *_args, **_kwargs)
         return val
     def GetEdgeMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEdgeMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEdgeMode(self, *_args, **_kwargs)
         return val
     def SetEdgeMode(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetEdgeMode,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetEdgeMode(self, *_args, **_kwargs)
         return val
     def GetEdgeColour(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetEdgeColour,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetEdgeColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetEdgeColour(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetEdgeColour,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetEdgeColour(self, *_args, **_kwargs)
         return val
     def SearchAnchor(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SearchAnchor,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SearchAnchor(self, *_args, **_kwargs)
         return val
     def SearchNext(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SearchNext,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SearchNext(self, *_args, **_kwargs)
         return val
     def SearchPrev(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SearchPrev,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SearchPrev(self, *_args, **_kwargs)
         return val
     def LinesOnScreen(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_LinesOnScreen,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_LinesOnScreen(self, *_args, **_kwargs)
         return val
     def UsePopUp(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_UsePopUp,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_UsePopUp(self, *_args, **_kwargs)
         return val
     def SelectionIsRectangle(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SelectionIsRectangle,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SelectionIsRectangle(self, *_args, **_kwargs)
         return val
     def SetZoom(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetZoom,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetZoom(self, *_args, **_kwargs)
         return val
     def GetZoom(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetZoom,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetZoom(self, *_args, **_kwargs)
         return val
     def CreateDocument(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CreateDocument,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CreateDocument(self, *_args, **_kwargs)
         return val
     def AddRefDocument(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_AddRefDocument,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_AddRefDocument(self, *_args, **_kwargs)
         return val
     def ReleaseDocument(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ReleaseDocument,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ReleaseDocument(self, *_args, **_kwargs)
         return val
     def GetModEventMask(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetModEventMask,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetModEventMask(self, *_args, **_kwargs)
         return val
     def SetSTCFocus(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetSTCFocus,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetSTCFocus(self, *_args, **_kwargs)
         return val
     def GetSTCFocus(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSTCFocus,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSTCFocus(self, *_args, **_kwargs)
         return val
     def SetStatus(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetStatus,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetStatus(self, *_args, **_kwargs)
         return val
     def GetStatus(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetStatus,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetStatus(self, *_args, **_kwargs)
         return val
     def SetMouseDownCaptures(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMouseDownCaptures,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMouseDownCaptures(self, *_args, **_kwargs)
         return val
     def GetMouseDownCaptures(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetMouseDownCaptures,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetMouseDownCaptures(self, *_args, **_kwargs)
         return val
     def SetCursor(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetCursor,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetCursor(self, *_args, **_kwargs)
         return val
     def GetCursor(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCursor,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCursor(self, *_args, **_kwargs)
         return val
     def SetControlCharSymbol(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetControlCharSymbol,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetControlCharSymbol(self, *_args, **_kwargs)
         return val
     def GetControlCharSymbol(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetControlCharSymbol,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetControlCharSymbol(self, *_args, **_kwargs)
         return val
     def WordPartLeft(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordPartLeft,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordPartLeft(self, *_args, **_kwargs)
         return val
     def WordPartLeftExtend(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordPartLeftExtend,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordPartLeftExtend(self, *_args, **_kwargs)
         return val
     def WordPartRight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordPartRight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordPartRight(self, *_args, **_kwargs)
         return val
     def WordPartRightExtend(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_WordPartRightExtend,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_WordPartRightExtend(self, *_args, **_kwargs)
         return val
     def SetVisiblePolicy(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetVisiblePolicy,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetVisiblePolicy(self, *_args, **_kwargs)
         return val
     def DelLineLeft(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_DelLineLeft,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_DelLineLeft(self, *_args, **_kwargs)
         return val
     def DelLineRight(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_DelLineRight,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_DelLineRight(self, *_args, **_kwargs)
         return val
     def SetXOffset(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetXOffset,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetXOffset(self, *_args, **_kwargs)
         return val
     def GetXOffset(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetXOffset,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetXOffset(self, *_args, **_kwargs)
+        return val
+    def ChooseCaretX(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_ChooseCaretX(self, *_args, **_kwargs)
         return val
     def SetXCaretPolicy(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetXCaretPolicy,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetXCaretPolicy(self, *_args, **_kwargs)
         return val
     def SetYCaretPolicy(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetYCaretPolicy,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetYCaretPolicy(self, *_args, **_kwargs)
+        return val
+    def SetPrintWrapMode(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetPrintWrapMode(self, *_args, **_kwargs)
+        return val
+    def GetPrintWrapMode(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_GetPrintWrapMode(self, *_args, **_kwargs)
+        return val
+    def SetHotspotActiveForeground(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetHotspotActiveForeground(self, *_args, **_kwargs)
+        return val
+    def SetHotspotActiveBackground(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetHotspotActiveBackground(self, *_args, **_kwargs)
+        return val
+    def SetHotspotActiveUnderline(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SetHotspotActiveUnderline(self, *_args, **_kwargs)
         return val
     def StartRecord(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StartRecord,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StartRecord(self, *_args, **_kwargs)
         return val
     def StopRecord(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StopRecord,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StopRecord(self, *_args, **_kwargs)
         return val
     def SetLexer(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLexer,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLexer(self, *_args, **_kwargs)
         return val
     def GetLexer(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLexer,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLexer(self, *_args, **_kwargs)
         return val
     def Colourise(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_Colourise,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_Colourise(self, *_args, **_kwargs)
         return val
     def SetProperty(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetProperty,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetProperty(self, *_args, **_kwargs)
         return val
     def SetKeyWords(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetKeyWords,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetKeyWords(self, *_args, **_kwargs)
         return val
     def SetLexerLanguage(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLexerLanguage,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLexerLanguage(self, *_args, **_kwargs)
         return val
     def GetCurrentLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetCurrentLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetCurrentLine(self, *_args, **_kwargs)
         return val
     def StyleSetSpec(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetSpec,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetSpec(self, *_args, **_kwargs)
         return val
     def StyleSetFont(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetFont,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetFont(self, *_args, **_kwargs)
         return val
     def StyleSetFontAttr(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_StyleSetFontAttr,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_StyleSetFontAttr(self, *_args, **_kwargs)
         return val
     def CmdKeyExecute(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_CmdKeyExecute,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_CmdKeyExecute(self, *_args, **_kwargs)
         return val
     def SetMargins(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetMargins,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetMargins(self, *_args, **_kwargs)
         return val
     def GetSelection(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetSelection,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetSelection(self, *_args, **_kwargs)
         return val
     def PointFromPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_PointFromPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_PointFromPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def ScrollToLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ScrollToLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ScrollToLine(self, *_args, **_kwargs)
         return val
     def ScrollToColumn(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_ScrollToColumn,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_ScrollToColumn(self, *_args, **_kwargs)
         return val
     def SendMsg(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SendMsg,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SendMsg(self, *_args, **_kwargs)
         return val
     def SetVScrollBar(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetVScrollBar,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetVScrollBar(self, *_args, **_kwargs)
         return val
     def SetHScrollBar(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetHScrollBar,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetHScrollBar(self, *_args, **_kwargs)
         return val
     def GetLastKeydownProcessed(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_GetLastKeydownProcessed,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_GetLastKeydownProcessed(self, *_args, **_kwargs)
         return val
     def SetLastKeydownProcessed(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextCtrl_SetLastKeydownProcessed,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextCtrl_SetLastKeydownProcessed(self, *_args, **_kwargs)
+        return val
+    def SaveFile(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_SaveFile(self, *_args, **_kwargs)
+        return val
+    def LoadFile(self, *_args, **_kwargs):
+        val = stc_c.wxStyledTextCtrl_LoadFile(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxStyledTextCtrl instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxStyledTextCtrl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxStyledTextCtrl(wxStyledTextCtrlPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(stc_c.new_wxStyledTextCtrl,_args,_kwargs)
+        self.this = stc_c.new_wxStyledTextCtrl(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -1053,143 +1142,143 @@ class wxStyledTextEventPtr(wxCommandEventPtr):
             except:
                 pass
     def SetPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetPosition(self, *_args, **_kwargs)
         return val
     def SetKey(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetKey,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetKey(self, *_args, **_kwargs)
         return val
     def SetModifiers(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetModifiers,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetModifiers(self, *_args, **_kwargs)
         return val
     def SetModificationType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetModificationType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetModificationType(self, *_args, **_kwargs)
         return val
     def SetText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetText(self, *_args, **_kwargs)
         return val
     def SetLength(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetLength,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetLength(self, *_args, **_kwargs)
         return val
     def SetLinesAdded(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetLinesAdded,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetLinesAdded(self, *_args, **_kwargs)
         return val
     def SetLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetLine(self, *_args, **_kwargs)
         return val
     def SetFoldLevelNow(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetFoldLevelNow,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetFoldLevelNow(self, *_args, **_kwargs)
         return val
     def SetFoldLevelPrev(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetFoldLevelPrev,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetFoldLevelPrev(self, *_args, **_kwargs)
         return val
     def SetMargin(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetMargin,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetMargin(self, *_args, **_kwargs)
         return val
     def SetMessage(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetMessage,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetMessage(self, *_args, **_kwargs)
         return val
     def SetWParam(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetWParam,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetWParam(self, *_args, **_kwargs)
         return val
     def SetLParam(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetLParam,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetLParam(self, *_args, **_kwargs)
         return val
     def SetListType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetListType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetListType(self, *_args, **_kwargs)
         return val
     def SetX(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetX,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetX(self, *_args, **_kwargs)
         return val
     def SetY(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetY,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetY(self, *_args, **_kwargs)
         return val
     def SetDragText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetDragText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetDragText(self, *_args, **_kwargs)
         return val
     def SetDragAllowMove(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetDragAllowMove,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetDragAllowMove(self, *_args, **_kwargs)
         return val
     def SetDragResult(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_SetDragResult,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_SetDragResult(self, *_args, **_kwargs)
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetPosition,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetPosition(self, *_args, **_kwargs)
         return val
     def GetKey(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetKey,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetKey(self, *_args, **_kwargs)
         return val
     def GetModifiers(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetModifiers,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetModifiers(self, *_args, **_kwargs)
         return val
     def GetModificationType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetModificationType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetModificationType(self, *_args, **_kwargs)
         return val
     def GetText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetText(self, *_args, **_kwargs)
         return val
     def GetLength(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetLength,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetLength(self, *_args, **_kwargs)
         return val
     def GetLinesAdded(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetLinesAdded,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetLinesAdded(self, *_args, **_kwargs)
         return val
     def GetLine(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetLine,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetLine(self, *_args, **_kwargs)
         return val
     def GetFoldLevelNow(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetFoldLevelNow,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetFoldLevelNow(self, *_args, **_kwargs)
         return val
     def GetFoldLevelPrev(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetFoldLevelPrev,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetFoldLevelPrev(self, *_args, **_kwargs)
         return val
     def GetMargin(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetMargin,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetMargin(self, *_args, **_kwargs)
         return val
     def GetMessage(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetMessage,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetMessage(self, *_args, **_kwargs)
         return val
     def GetWParam(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetWParam,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetWParam(self, *_args, **_kwargs)
         return val
     def GetLParam(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetLParam,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetLParam(self, *_args, **_kwargs)
         return val
     def GetListType(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetListType,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetListType(self, *_args, **_kwargs)
         return val
     def GetX(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetX,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetX(self, *_args, **_kwargs)
         return val
     def GetY(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetY,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetY(self, *_args, **_kwargs)
         return val
     def GetDragText(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetDragText,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetDragText(self, *_args, **_kwargs)
         return val
     def GetDragAllowMove(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetDragAllowMove,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetDragAllowMove(self, *_args, **_kwargs)
         return val
     def GetDragResult(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetDragResult,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetDragResult(self, *_args, **_kwargs)
         return val
     def GetShift(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetShift,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetShift(self, *_args, **_kwargs)
         return val
     def GetControl(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetControl,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetControl(self, *_args, **_kwargs)
         return val
     def GetAlt(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_GetAlt,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_GetAlt(self, *_args, **_kwargs)
         return val
     def Clone(self, *_args, **_kwargs):
-        val = apply(stc_c.wxStyledTextEvent_Clone,(self,) + _args, _kwargs)
+        val = stc_c.wxStyledTextEvent_Clone(self, *_args, **_kwargs)
         if val: val = wxEventPtr(val) 
         return val
     def __repr__(self):
-        return "<C wxStyledTextEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxStyledTextEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxStyledTextEvent(wxStyledTextEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(stc_c.new_wxStyledTextEvent,_args,_kwargs)
+        self.this = stc_c.new_wxStyledTextEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1215,6 +1304,7 @@ wxSTC_EOL_CRLF = stc_c.wxSTC_EOL_CRLF
 wxSTC_EOL_CR = stc_c.wxSTC_EOL_CR
 wxSTC_EOL_LF = stc_c.wxSTC_EOL_LF
 wxSTC_CP_UTF8 = stc_c.wxSTC_CP_UTF8
+wxSTC_CP_DBCS = stc_c.wxSTC_CP_DBCS
 wxSTC_MARKER_MAX = stc_c.wxSTC_MARKER_MAX
 wxSTC_MARK_CIRCLE = stc_c.wxSTC_MARK_CIRCLE
 wxSTC_MARK_ROUNDRECT = stc_c.wxSTC_MARK_ROUNDRECT
@@ -1241,6 +1331,7 @@ wxSTC_MARK_CIRCLEMINUSCONNECTED = stc_c.wxSTC_MARK_CIRCLEMINUSCONNECTED
 wxSTC_MARK_BACKGROUND = stc_c.wxSTC_MARK_BACKGROUND
 wxSTC_MARK_DOTDOTDOT = stc_c.wxSTC_MARK_DOTDOTDOT
 wxSTC_MARK_ARROWS = stc_c.wxSTC_MARK_ARROWS
+wxSTC_MARK_PIXMAP = stc_c.wxSTC_MARK_PIXMAP
 wxSTC_MARK_CHARACTER = stc_c.wxSTC_MARK_CHARACTER
 wxSTC_MARKNUM_FOLDEREND = stc_c.wxSTC_MARKNUM_FOLDEREND
 wxSTC_MARKNUM_FOLDEROPENMID = stc_c.wxSTC_MARKNUM_FOLDEROPENMID
@@ -1301,10 +1392,21 @@ wxSTC_FIND_WHOLEWORD = stc_c.wxSTC_FIND_WHOLEWORD
 wxSTC_FIND_MATCHCASE = stc_c.wxSTC_FIND_MATCHCASE
 wxSTC_FIND_WORDSTART = stc_c.wxSTC_FIND_WORDSTART
 wxSTC_FIND_REGEXP = stc_c.wxSTC_FIND_REGEXP
+wxSTC_FIND_POSIX = stc_c.wxSTC_FIND_POSIX
 wxSTC_FOLDLEVELBASE = stc_c.wxSTC_FOLDLEVELBASE
 wxSTC_FOLDLEVELWHITEFLAG = stc_c.wxSTC_FOLDLEVELWHITEFLAG
 wxSTC_FOLDLEVELHEADERFLAG = stc_c.wxSTC_FOLDLEVELHEADERFLAG
+wxSTC_FOLDLEVELBOXHEADERFLAG = stc_c.wxSTC_FOLDLEVELBOXHEADERFLAG
+wxSTC_FOLDLEVELBOXFOOTERFLAG = stc_c.wxSTC_FOLDLEVELBOXFOOTERFLAG
+wxSTC_FOLDLEVELCONTRACTED = stc_c.wxSTC_FOLDLEVELCONTRACTED
+wxSTC_FOLDLEVELUNINDENT = stc_c.wxSTC_FOLDLEVELUNINDENT
 wxSTC_FOLDLEVELNUMBERMASK = stc_c.wxSTC_FOLDLEVELNUMBERMASK
+wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED = stc_c.wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED
+wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED = stc_c.wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED
+wxSTC_FOLDFLAG_LINEAFTER_EXPANDED = stc_c.wxSTC_FOLDFLAG_LINEAFTER_EXPANDED
+wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED = stc_c.wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED
+wxSTC_FOLDFLAG_LEVELNUMBERS = stc_c.wxSTC_FOLDFLAG_LEVELNUMBERS
+wxSTC_FOLDFLAG_BOX = stc_c.wxSTC_FOLDFLAG_BOX
 wxSTC_TIME_FOREVER = stc_c.wxSTC_TIME_FOREVER
 wxSTC_WRAP_NONE = stc_c.wxSTC_WRAP_NONE
 wxSTC_WRAP_WORD = stc_c.wxSTC_WRAP_WORD
@@ -1389,6 +1491,12 @@ wxSTC_LEX_PHP = stc_c.wxSTC_LEX_PHP
 wxSTC_LEX_BAAN = stc_c.wxSTC_LEX_BAAN
 wxSTC_LEX_MATLAB = stc_c.wxSTC_LEX_MATLAB
 wxSTC_LEX_SCRIPTOL = stc_c.wxSTC_LEX_SCRIPTOL
+wxSTC_LEX_ASM = stc_c.wxSTC_LEX_ASM
+wxSTC_LEX_CPPNOCASE = stc_c.wxSTC_LEX_CPPNOCASE
+wxSTC_LEX_FORTRAN = stc_c.wxSTC_LEX_FORTRAN
+wxSTC_LEX_F77 = stc_c.wxSTC_LEX_F77
+wxSTC_LEX_CSS = stc_c.wxSTC_LEX_CSS
+wxSTC_LEX_POV = stc_c.wxSTC_LEX_POV
 wxSTC_LEX_AUTOMATIC = stc_c.wxSTC_LEX_AUTOMATIC
 wxSTC_P_DEFAULT = stc_c.wxSTC_P_DEFAULT
 wxSTC_P_COMMENTLINE = stc_c.wxSTC_P_COMMENTLINE
@@ -1614,6 +1722,9 @@ wxSTC_ERR_DIFF_CHANGED = stc_c.wxSTC_ERR_DIFF_CHANGED
 wxSTC_ERR_DIFF_ADDITION = stc_c.wxSTC_ERR_DIFF_ADDITION
 wxSTC_ERR_DIFF_DELETION = stc_c.wxSTC_ERR_DIFF_DELETION
 wxSTC_ERR_DIFF_MESSAGE = stc_c.wxSTC_ERR_DIFF_MESSAGE
+wxSTC_ERR_PHP = stc_c.wxSTC_ERR_PHP
+wxSTC_ERR_ELF = stc_c.wxSTC_ERR_ELF
+wxSTC_ERR_IFC = stc_c.wxSTC_ERR_IFC
 wxSTC_BAT_DEFAULT = stc_c.wxSTC_BAT_DEFAULT
 wxSTC_BAT_COMMENT = stc_c.wxSTC_BAT_COMMENT
 wxSTC_BAT_WORD = stc_c.wxSTC_BAT_WORD
@@ -1650,22 +1761,29 @@ wxSTC_AVE_DEFAULT = stc_c.wxSTC_AVE_DEFAULT
 wxSTC_AVE_COMMENT = stc_c.wxSTC_AVE_COMMENT
 wxSTC_AVE_NUMBER = stc_c.wxSTC_AVE_NUMBER
 wxSTC_AVE_WORD = stc_c.wxSTC_AVE_WORD
-wxSTC_AVE_KEYWORD = stc_c.wxSTC_AVE_KEYWORD
-wxSTC_AVE_STATEMENT = stc_c.wxSTC_AVE_STATEMENT
 wxSTC_AVE_STRING = stc_c.wxSTC_AVE_STRING
 wxSTC_AVE_ENUM = stc_c.wxSTC_AVE_ENUM
 wxSTC_AVE_STRINGEOL = stc_c.wxSTC_AVE_STRINGEOL
 wxSTC_AVE_IDENTIFIER = stc_c.wxSTC_AVE_IDENTIFIER
 wxSTC_AVE_OPERATOR = stc_c.wxSTC_AVE_OPERATOR
+wxSTC_AVE_WORD1 = stc_c.wxSTC_AVE_WORD1
+wxSTC_AVE_WORD2 = stc_c.wxSTC_AVE_WORD2
+wxSTC_AVE_WORD3 = stc_c.wxSTC_AVE_WORD3
+wxSTC_AVE_WORD4 = stc_c.wxSTC_AVE_WORD4
+wxSTC_AVE_WORD5 = stc_c.wxSTC_AVE_WORD5
+wxSTC_AVE_WORD6 = stc_c.wxSTC_AVE_WORD6
 wxSTC_ADA_DEFAULT = stc_c.wxSTC_ADA_DEFAULT
-wxSTC_ADA_COMMENT = stc_c.wxSTC_ADA_COMMENT
-wxSTC_ADA_NUMBER = stc_c.wxSTC_ADA_NUMBER
 wxSTC_ADA_WORD = stc_c.wxSTC_ADA_WORD
-wxSTC_ADA_STRING = stc_c.wxSTC_ADA_STRING
-wxSTC_ADA_CHARACTER = stc_c.wxSTC_ADA_CHARACTER
-wxSTC_ADA_OPERATOR = stc_c.wxSTC_ADA_OPERATOR
 wxSTC_ADA_IDENTIFIER = stc_c.wxSTC_ADA_IDENTIFIER
+wxSTC_ADA_NUMBER = stc_c.wxSTC_ADA_NUMBER
+wxSTC_ADA_DELIMITER = stc_c.wxSTC_ADA_DELIMITER
+wxSTC_ADA_CHARACTER = stc_c.wxSTC_ADA_CHARACTER
+wxSTC_ADA_CHARACTEREOL = stc_c.wxSTC_ADA_CHARACTEREOL
+wxSTC_ADA_STRING = stc_c.wxSTC_ADA_STRING
 wxSTC_ADA_STRINGEOL = stc_c.wxSTC_ADA_STRINGEOL
+wxSTC_ADA_LABEL = stc_c.wxSTC_ADA_LABEL
+wxSTC_ADA_COMMENTLINE = stc_c.wxSTC_ADA_COMMENTLINE
+wxSTC_ADA_ILLEGAL = stc_c.wxSTC_ADA_ILLEGAL
 wxSTC_BAAN_DEFAULT = stc_c.wxSTC_BAAN_DEFAULT
 wxSTC_BAAN_COMMENT = stc_c.wxSTC_BAAN_COMMENT
 wxSTC_BAAN_COMMENTDOC = stc_c.wxSTC_BAAN_COMMENTDOC
@@ -1733,6 +1851,58 @@ wxSTC_SCRIPTOL_WORD2 = stc_c.wxSTC_SCRIPTOL_WORD2
 wxSTC_SCRIPTOL_COMMENTDOCKEYWORD = stc_c.wxSTC_SCRIPTOL_COMMENTDOCKEYWORD
 wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR = stc_c.wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR
 wxSTC_SCRIPTOL_COMMENTBASIC = stc_c.wxSTC_SCRIPTOL_COMMENTBASIC
+wxSTC_ASM_DEFAULT = stc_c.wxSTC_ASM_DEFAULT
+wxSTC_ASM_COMMENT = stc_c.wxSTC_ASM_COMMENT
+wxSTC_ASM_NUMBER = stc_c.wxSTC_ASM_NUMBER
+wxSTC_ASM_STRING = stc_c.wxSTC_ASM_STRING
+wxSTC_ASM_OPERATOR = stc_c.wxSTC_ASM_OPERATOR
+wxSTC_ASM_IDENTIFIER = stc_c.wxSTC_ASM_IDENTIFIER
+wxSTC_ASM_CPUINSTRUCTION = stc_c.wxSTC_ASM_CPUINSTRUCTION
+wxSTC_ASM_MATHINSTRUCTION = stc_c.wxSTC_ASM_MATHINSTRUCTION
+wxSTC_ASM_REGISTER = stc_c.wxSTC_ASM_REGISTER
+wxSTC_ASM_DIRECTIVE = stc_c.wxSTC_ASM_DIRECTIVE
+wxSTC_ASM_DIRECTIVEOPERAND = stc_c.wxSTC_ASM_DIRECTIVEOPERAND
+wxSTC_F_DEFAULT = stc_c.wxSTC_F_DEFAULT
+wxSTC_F_COMMENT = stc_c.wxSTC_F_COMMENT
+wxSTC_F_NUMBER = stc_c.wxSTC_F_NUMBER
+wxSTC_F_STRING1 = stc_c.wxSTC_F_STRING1
+wxSTC_F_STRING2 = stc_c.wxSTC_F_STRING2
+wxSTC_F_STRINGEOL = stc_c.wxSTC_F_STRINGEOL
+wxSTC_F_OPERATOR = stc_c.wxSTC_F_OPERATOR
+wxSTC_F_IDENTIFIER = stc_c.wxSTC_F_IDENTIFIER
+wxSTC_F_WORD = stc_c.wxSTC_F_WORD
+wxSTC_F_WORD2 = stc_c.wxSTC_F_WORD2
+wxSTC_F_WORD3 = stc_c.wxSTC_F_WORD3
+wxSTC_F_PREPROCESSOR = stc_c.wxSTC_F_PREPROCESSOR
+wxSTC_F_OPERATOR2 = stc_c.wxSTC_F_OPERATOR2
+wxSTC_F_LABEL = stc_c.wxSTC_F_LABEL
+wxSTC_F_CONTINUATION = stc_c.wxSTC_F_CONTINUATION
+wxSTC_CSS_DEFAULT = stc_c.wxSTC_CSS_DEFAULT
+wxSTC_CSS_TAG = stc_c.wxSTC_CSS_TAG
+wxSTC_CSS_CLASS = stc_c.wxSTC_CSS_CLASS
+wxSTC_CSS_PSEUDOCLASS = stc_c.wxSTC_CSS_PSEUDOCLASS
+wxSTC_CSS_UNKNOWN_PSEUDOCLASS = stc_c.wxSTC_CSS_UNKNOWN_PSEUDOCLASS
+wxSTC_CSS_OPERATOR = stc_c.wxSTC_CSS_OPERATOR
+wxSTC_CSS_IDENTIFIER = stc_c.wxSTC_CSS_IDENTIFIER
+wxSTC_CSS_UNKNOWN_IDENTIFIER = stc_c.wxSTC_CSS_UNKNOWN_IDENTIFIER
+wxSTC_CSS_VALUE = stc_c.wxSTC_CSS_VALUE
+wxSTC_CSS_COMMENT = stc_c.wxSTC_CSS_COMMENT
+wxSTC_CSS_ID = stc_c.wxSTC_CSS_ID
+wxSTC_CSS_IMPORTANT = stc_c.wxSTC_CSS_IMPORTANT
+wxSTC_CSS_DIRECTIVE = stc_c.wxSTC_CSS_DIRECTIVE
+wxSTC_CSS_DOUBLESTRING = stc_c.wxSTC_CSS_DOUBLESTRING
+wxSTC_CSS_SINGLESTRING = stc_c.wxSTC_CSS_SINGLESTRING
+wxSTC_POV_DEFAULT = stc_c.wxSTC_POV_DEFAULT
+wxSTC_POV_COMMENT = stc_c.wxSTC_POV_COMMENT
+wxSTC_POV_COMMENTLINE = stc_c.wxSTC_POV_COMMENTLINE
+wxSTC_POV_COMMENTDOC = stc_c.wxSTC_POV_COMMENTDOC
+wxSTC_POV_NUMBER = stc_c.wxSTC_POV_NUMBER
+wxSTC_POV_WORD = stc_c.wxSTC_POV_WORD
+wxSTC_POV_STRING = stc_c.wxSTC_POV_STRING
+wxSTC_POV_OPERATOR = stc_c.wxSTC_POV_OPERATOR
+wxSTC_POV_IDENTIFIER = stc_c.wxSTC_POV_IDENTIFIER
+wxSTC_POV_BRACE = stc_c.wxSTC_POV_BRACE
+wxSTC_POV_WORD2 = stc_c.wxSTC_POV_WORD2
 wxSTC_CMD_REDO = stc_c.wxSTC_CMD_REDO
 wxSTC_CMD_SELECTALL = stc_c.wxSTC_CMD_SELECTALL
 wxSTC_CMD_UNDO = stc_c.wxSTC_CMD_UNDO
@@ -1780,6 +1950,7 @@ wxSTC_CMD_DELWORDRIGHT = stc_c.wxSTC_CMD_DELWORDRIGHT
 wxSTC_CMD_LINECUT = stc_c.wxSTC_CMD_LINECUT
 wxSTC_CMD_LINEDELETE = stc_c.wxSTC_CMD_LINEDELETE
 wxSTC_CMD_LINETRANSPOSE = stc_c.wxSTC_CMD_LINETRANSPOSE
+wxSTC_CMD_LINEDUPLICATE = stc_c.wxSTC_CMD_LINEDUPLICATE
 wxSTC_CMD_LOWERCASE = stc_c.wxSTC_CMD_LOWERCASE
 wxSTC_CMD_UPPERCASE = stc_c.wxSTC_CMD_UPPERCASE
 wxSTC_CMD_LINESCROLLDOWN = stc_c.wxSTC_CMD_LINESCROLLDOWN
@@ -1789,12 +1960,22 @@ wxSTC_CMD_HOMEDISPLAY = stc_c.wxSTC_CMD_HOMEDISPLAY
 wxSTC_CMD_HOMEDISPLAYEXTEND = stc_c.wxSTC_CMD_HOMEDISPLAYEXTEND
 wxSTC_CMD_LINEENDDISPLAY = stc_c.wxSTC_CMD_LINEENDDISPLAY
 wxSTC_CMD_LINEENDDISPLAYEXTEND = stc_c.wxSTC_CMD_LINEENDDISPLAYEXTEND
+wxSTC_CMD_HOMEWRAP = stc_c.wxSTC_CMD_HOMEWRAP
+wxSTC_CMD_HOMEWRAPEXTEND = stc_c.wxSTC_CMD_HOMEWRAPEXTEND
+wxSTC_CMD_LINEENDWRAP = stc_c.wxSTC_CMD_LINEENDWRAP
+wxSTC_CMD_LINEENDWRAPEXTEND = stc_c.wxSTC_CMD_LINEENDWRAPEXTEND
+wxSTC_CMD_VCHOMEWRAP = stc_c.wxSTC_CMD_VCHOMEWRAP
+wxSTC_CMD_VCHOMEWRAPEXTEND = stc_c.wxSTC_CMD_VCHOMEWRAPEXTEND
 wxSTC_CMD_WORDPARTLEFT = stc_c.wxSTC_CMD_WORDPARTLEFT
 wxSTC_CMD_WORDPARTLEFTEXTEND = stc_c.wxSTC_CMD_WORDPARTLEFTEXTEND
 wxSTC_CMD_WORDPARTRIGHT = stc_c.wxSTC_CMD_WORDPARTRIGHT
 wxSTC_CMD_WORDPARTRIGHTEXTEND = stc_c.wxSTC_CMD_WORDPARTRIGHTEXTEND
 wxSTC_CMD_DELLINELEFT = stc_c.wxSTC_CMD_DELLINELEFT
 wxSTC_CMD_DELLINERIGHT = stc_c.wxSTC_CMD_DELLINERIGHT
+wxSTC_CMD_PARADOWN = stc_c.wxSTC_CMD_PARADOWN
+wxSTC_CMD_PARADOWNEXTEND = stc_c.wxSTC_CMD_PARADOWNEXTEND
+wxSTC_CMD_PARAUP = stc_c.wxSTC_CMD_PARAUP
+wxSTC_CMD_PARAUPEXTEND = stc_c.wxSTC_CMD_PARAUPEXTEND
 STC_USE_DND = stc_c.STC_USE_DND
 wxEVT_STC_CHANGE = stc_c.wxEVT_STC_CHANGE
 wxEVT_STC_STYLENEEDED = stc_c.wxEVT_STC_STYLENEEDED
@@ -1819,6 +2000,9 @@ wxEVT_STC_START_DRAG = stc_c.wxEVT_STC_START_DRAG
 wxEVT_STC_DRAG_OVER = stc_c.wxEVT_STC_DRAG_OVER
 wxEVT_STC_DO_DROP = stc_c.wxEVT_STC_DO_DROP
 wxEVT_STC_ZOOM = stc_c.wxEVT_STC_ZOOM
+wxEVT_STC_HOTSPOT_CLICK = stc_c.wxEVT_STC_HOTSPOT_CLICK
+wxEVT_STC_HOTSPOT_DCLICK = stc_c.wxEVT_STC_HOTSPOT_DCLICK
+wxEVT_STC_CALLTIP_CLICK = stc_c.wxEVT_STC_CALLTIP_CLICK
 
 
 #-------------- USER INCLUDE -----------------------
diff --git a/wxPython/contrib/stc/stc_.i b/wxPython/contrib/stc/stc_.i
index 2f0ef5416a..fef927b591 100644
--- a/wxPython/contrib/stc/stc_.i
+++ b/wxPython/contrib/stc/stc_.i
@@ -114,6 +114,14 @@ def EVT_STC_DO_DROP(win, id, func):
 def EVT_STC_ZOOM(win, id, func):
     win.Connect(id, -1, wxEVT_STC_ZOOM, func)
 
+def EVT_STC_HOTSPOT_CLICK(win, id, func):
+    win.Connect(id, -1, wxEVT_STC_HOTSPOT_CLICK, func)
+
+def EVT_STC_HOTSPOT_DCLICK(win, id, func):
+    win.Connect(id, -1, wxEVT_STC_HOTSPOT_DCLICK, func)
+
+def EVT_STC_CALLTIP_CLICK(win, id, func):
+    win.Connect(id, -1, wxEVT_STC_CALLTIP_CLICK, func)
 "
 
 //----------------------------------------------------------------------
diff --git a/wxPython/contrib/xrc/xrc.py b/wxPython/contrib/xrc/xrc.py
index 79f0b6a62c..0ff99fdb75 100644
--- a/wxPython/contrib/xrc/xrc.py
+++ b/wxPython/contrib/xrc/xrc.py
@@ -63,96 +63,96 @@ class wxXmlResourcePtr(wxObjectPtr):
             except:
                 pass
     def Load(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_Load,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_Load(self, *_args, **_kwargs)
         return val
     def LoadFromString(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_LoadFromString,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_LoadFromString(self, *_args, **_kwargs)
         return val
     def InitAllHandlers(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_InitAllHandlers,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_InitAllHandlers(self, *_args, **_kwargs)
         return val
     def AddHandler(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_AddHandler,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_AddHandler(self, *_args, **_kwargs)
         return val
     def InsertHandler(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_InsertHandler,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_InsertHandler(self, *_args, **_kwargs)
         return val
     def ClearHandlers(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_ClearHandlers,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_ClearHandlers(self, *_args, **_kwargs)
         return val
     def LoadMenu(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_LoadMenu,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_LoadMenu(self, *_args, **_kwargs)
         return val
     def LoadMenuBar(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_LoadMenuBar,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_LoadMenuBar(self, *_args, **_kwargs)
         return val
     def LoadMenuBarOnFrame(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_LoadMenuBarOnFrame,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_LoadMenuBarOnFrame(self, *_args, **_kwargs)
         return val
     def LoadToolBar(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_LoadToolBar,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_LoadToolBar(self, *_args, **_kwargs)
         return val
     def LoadDialog(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_LoadDialog,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_LoadDialog(self, *_args, **_kwargs)
         if val: val = wxDialogPtr(val) 
         return val
     def LoadOnDialog(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_LoadOnDialog,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_LoadOnDialog(self, *_args, **_kwargs)
         return val
     def LoadPanel(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_LoadPanel,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_LoadPanel(self, *_args, **_kwargs)
         if val: val = wxPanelPtr(val) 
         return val
     def LoadOnPanel(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_LoadOnPanel,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_LoadOnPanel(self, *_args, **_kwargs)
         return val
     def LoadFrame(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_LoadFrame,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_LoadFrame(self, *_args, **_kwargs)
         return val
     def LoadOnFrame(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_LoadOnFrame,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_LoadOnFrame(self, *_args, **_kwargs)
         return val
     def LoadObject(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_LoadObject,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_LoadObject(self, *_args, **_kwargs)
         return val
     def LoadOnObject(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_LoadOnObject,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_LoadOnObject(self, *_args, **_kwargs)
         return val
     def LoadBitmap(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_LoadBitmap,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_LoadBitmap(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) ; val.thisown = 1
         return val
     def LoadIcon(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_LoadIcon,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_LoadIcon(self, *_args, **_kwargs)
         if val: val = wxIconPtr(val) ; val.thisown = 1
         return val
     def AttachUnknownControl(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_AttachUnknownControl,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_AttachUnknownControl(self, *_args, **_kwargs)
         return val
     def GetVersion(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_GetVersion,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_GetVersion(self, *_args, **_kwargs)
         return val
     def CompareVersion(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_CompareVersion,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_CompareVersion(self, *_args, **_kwargs)
         return val
     def GetFlags(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_GetFlags,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_GetFlags(self, *_args, **_kwargs)
         return val
     def SetFlags(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResource_SetFlags,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResource_SetFlags(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxXmlResource instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxXmlResource instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxXmlResource(wxXmlResourcePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(xrcc.new_wxXmlResource,_args,_kwargs)
+        self.this = xrcc.new_wxXmlResource(*_args,**_kwargs)
         self.thisown = 1
         self.InitAllHandlers()
 
 
 
 def wxEmptyXmlResource(*_args,**_kwargs):
-    val = wxXmlResourcePtr(apply(xrcc.new_wxEmptyXmlResource,_args,_kwargs))
+    val = wxXmlResourcePtr(xrcc.new_wxEmptyXmlResource(*_args,**_kwargs))
     val.thisown = 1
     val.InitAllHandlers()
     return val
@@ -163,13 +163,13 @@ class wxXmlSubclassFactoryPtr :
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlSubclassFactory__setCallbackInfo,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlSubclassFactory__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxXmlSubclassFactory instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxXmlSubclassFactory instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxXmlSubclassFactory(wxXmlSubclassFactoryPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(xrcc.new_wxXmlSubclassFactory,_args,_kwargs)
+        self.this = xrcc.new_wxXmlSubclassFactory(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxXmlSubclassFactory)
 
@@ -181,29 +181,29 @@ class wxXmlPropertyPtr :
         self.this = this
         self.thisown = 0
     def GetName(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlProperty_GetName,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlProperty_GetName(self, *_args, **_kwargs)
         return val
     def GetValue(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlProperty_GetValue,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlProperty_GetValue(self, *_args, **_kwargs)
         return val
     def GetNext(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlProperty_GetNext,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlProperty_GetNext(self, *_args, **_kwargs)
         if val: val = wxXmlPropertyPtr(val) 
         return val
     def SetName(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlProperty_SetName,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlProperty_SetName(self, *_args, **_kwargs)
         return val
     def SetValue(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlProperty_SetValue,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlProperty_SetValue(self, *_args, **_kwargs)
         return val
     def SetNext(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlProperty_SetNext,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlProperty_SetNext(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxXmlProperty instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxXmlProperty instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxXmlProperty(wxXmlPropertyPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(xrcc.new_wxXmlProperty,_args,_kwargs)
+        self.this = xrcc.new_wxXmlProperty(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -220,86 +220,86 @@ class wxXmlNodePtr :
             except:
                 pass
     def AddChild(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_AddChild,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_AddChild(self, *_args, **_kwargs)
         return val
     def InsertChild(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_InsertChild,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_InsertChild(self, *_args, **_kwargs)
         return val
     def RemoveChild(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_RemoveChild,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_RemoveChild(self, *_args, **_kwargs)
         return val
     def AddProperty(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_AddProperty,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_AddProperty(self, *_args, **_kwargs)
         return val
     def AddPropertyName(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_AddPropertyName,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_AddPropertyName(self, *_args, **_kwargs)
         return val
     def DeleteProperty(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_DeleteProperty,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_DeleteProperty(self, *_args, **_kwargs)
         return val
     def GetType(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_GetType,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_GetType(self, *_args, **_kwargs)
         return val
     def GetName(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_GetName,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_GetName(self, *_args, **_kwargs)
         return val
     def GetContent(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_GetContent,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_GetContent(self, *_args, **_kwargs)
         return val
     def GetParent(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_GetParent,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_GetParent(self, *_args, **_kwargs)
         if val: val = wxXmlNodePtr(val) 
         return val
     def GetNext(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_GetNext,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_GetNext(self, *_args, **_kwargs)
         if val: val = wxXmlNodePtr(val) 
         return val
     def GetChildren(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_GetChildren,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_GetChildren(self, *_args, **_kwargs)
         if val: val = wxXmlNodePtr(val) 
         return val
     def GetProperties(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_GetProperties,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_GetProperties(self, *_args, **_kwargs)
         if val: val = wxXmlPropertyPtr(val) 
         return val
     def GetPropVal(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_GetPropVal,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_GetPropVal(self, *_args, **_kwargs)
         return val
     def HasProp(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_HasProp,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_HasProp(self, *_args, **_kwargs)
         return val
     def SetType(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_SetType,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_SetType(self, *_args, **_kwargs)
         return val
     def SetName(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_SetName,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_SetName(self, *_args, **_kwargs)
         return val
     def SetContent(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_SetContent,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_SetContent(self, *_args, **_kwargs)
         return val
     def SetParent(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_SetParent,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_SetParent(self, *_args, **_kwargs)
         return val
     def SetNext(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_SetNext,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_SetNext(self, *_args, **_kwargs)
         return val
     def SetChildren(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_SetChildren,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_SetChildren(self, *_args, **_kwargs)
         return val
     def SetProperties(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlNode_SetProperties,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlNode_SetProperties(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxXmlNode instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxXmlNode instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxXmlNode(wxXmlNodePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(xrcc.new_wxXmlNode,_args,_kwargs)
+        self.this = xrcc.new_wxXmlNode(*_args,**_kwargs)
         self.thisown = 1
 
 
 
 def wxXmlNodeEasy(*_args,**_kwargs):
-    val = wxXmlNodePtr(apply(xrcc.new_wxXmlNodeEasy,_args,_kwargs))
+    val = wxXmlNodePtr(xrcc.new_wxXmlNodeEasy(*_args,**_kwargs))
     val.thisown = 1
     return val
 
@@ -315,61 +315,61 @@ class wxXmlDocumentPtr(wxObjectPtr):
             except:
                 pass
     def Load(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlDocument_Load,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlDocument_Load(self, *_args, **_kwargs)
         return val
     def LoadFromStream(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlDocument_LoadFromStream,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlDocument_LoadFromStream(self, *_args, **_kwargs)
         return val
     def Save(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlDocument_Save,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlDocument_Save(self, *_args, **_kwargs)
         return val
     def SaveToStream(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlDocument_SaveToStream,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlDocument_SaveToStream(self, *_args, **_kwargs)
         return val
     def IsOk(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlDocument_IsOk,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlDocument_IsOk(self, *_args, **_kwargs)
         return val
     def GetRoot(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlDocument_GetRoot,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlDocument_GetRoot(self, *_args, **_kwargs)
         if val: val = wxXmlNodePtr(val) 
         return val
     def GetVersion(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlDocument_GetVersion,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlDocument_GetVersion(self, *_args, **_kwargs)
         return val
     def GetFileEncoding(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlDocument_GetFileEncoding,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlDocument_GetFileEncoding(self, *_args, **_kwargs)
         return val
     def SetRoot(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlDocument_SetRoot,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlDocument_SetRoot(self, *_args, **_kwargs)
         return val
     def SetVersion(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlDocument_SetVersion,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlDocument_SetVersion(self, *_args, **_kwargs)
         return val
     def SetFileEncoding(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlDocument_SetFileEncoding,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlDocument_SetFileEncoding(self, *_args, **_kwargs)
         return val
     def GetEncoding(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlDocument_GetEncoding,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlDocument_GetEncoding(self, *_args, **_kwargs)
         return val
     def SetEncoding(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlDocument_SetEncoding,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlDocument_SetEncoding(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxXmlDocument instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxXmlDocument instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxXmlDocument(wxXmlDocumentPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(xrcc.new_wxXmlDocument,_args,_kwargs)
+        self.this = xrcc.new_wxXmlDocument(*_args,**_kwargs)
         self.thisown = 1
 
 
 
 def wxXmlDocumentFromStream(*_args,**_kwargs):
-    val = wxXmlDocumentPtr(apply(xrcc.new_wxXmlDocumentFromStream,_args,_kwargs))
+    val = wxXmlDocumentPtr(xrcc.new_wxXmlDocumentFromStream(*_args,**_kwargs))
     val.thisown = 1
     return val
 
 def wxEmptyXmlDocument(*_args,**_kwargs):
-    val = wxXmlDocumentPtr(apply(xrcc.new_wxEmptyXmlDocument,_args,_kwargs))
+    val = wxXmlDocumentPtr(xrcc.new_wxEmptyXmlDocument(*_args,**_kwargs))
     val.thisown = 1
     return val
 
@@ -379,124 +379,124 @@ class wxXmlResourceHandlerPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler__setCallbackInfo,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def CreateResource(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_CreateResource,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_CreateResource(self, *_args, **_kwargs)
         return val
     def SetParentResource(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_SetParentResource,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_SetParentResource(self, *_args, **_kwargs)
         return val
     def GetResource(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetResource,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetResource(self, *_args, **_kwargs)
         if val: val = wxXmlResourcePtr(val) 
         return val
     def GetNode(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetNode,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetNode(self, *_args, **_kwargs)
         if val: val = wxXmlNodePtr(val) 
         return val
     def GetClass(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetClass,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetClass(self, *_args, **_kwargs)
         return val
     def GetParent(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetParent,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetParent(self, *_args, **_kwargs)
         return val
     def GetInstance(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetInstance,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetInstance(self, *_args, **_kwargs)
         return val
     def GetParentAsWindow(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetParentAsWindow,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetParentAsWindow(self, *_args, **_kwargs)
         return val
     def GetInstanceAsWindow(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetInstanceAsWindow,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetInstanceAsWindow(self, *_args, **_kwargs)
         return val
     def IsOfClass(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_IsOfClass,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_IsOfClass(self, *_args, **_kwargs)
         return val
     def GetNodeContent(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetNodeContent,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetNodeContent(self, *_args, **_kwargs)
         return val
     def HasParam(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_HasParam,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_HasParam(self, *_args, **_kwargs)
         return val
     def GetParamNode(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetParamNode,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetParamNode(self, *_args, **_kwargs)
         if val: val = wxXmlNodePtr(val) 
         return val
     def GetParamValue(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetParamValue,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetParamValue(self, *_args, **_kwargs)
         return val
     def AddStyle(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_AddStyle,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_AddStyle(self, *_args, **_kwargs)
         return val
     def AddWindowStyles(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_AddWindowStyles,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_AddWindowStyles(self, *_args, **_kwargs)
         return val
     def GetStyle(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetStyle,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetStyle(self, *_args, **_kwargs)
         return val
     def GetText(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetText,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetText(self, *_args, **_kwargs)
         return val
     def GetID(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetID,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetID(self, *_args, **_kwargs)
         return val
     def GetName(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetName,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetName(self, *_args, **_kwargs)
         return val
     def GetBool(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetBool,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetBool(self, *_args, **_kwargs)
         return val
     def GetLong(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetLong,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetLong(self, *_args, **_kwargs)
         return val
     def GetColour(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetColour,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetSize(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetSize,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetPosition,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetDimension(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetDimension,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetDimension(self, *_args, **_kwargs)
         return val
     def GetBitmap(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetBitmap,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetBitmap(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) ; val.thisown = 1
         return val
     def GetIcon(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetIcon,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetIcon(self, *_args, **_kwargs)
         if val: val = wxIconPtr(val) ; val.thisown = 1
         return val
     def GetFont(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetFont,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def SetupWindow(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_SetupWindow,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_SetupWindow(self, *_args, **_kwargs)
         return val
     def CreateChildren(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_CreateChildren,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_CreateChildren(self, *_args, **_kwargs)
         return val
     def CreateChildrenPrivately(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_CreateChildrenPrivately,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_CreateChildrenPrivately(self, *_args, **_kwargs)
         return val
     def CreateResFromNode(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_CreateResFromNode,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_CreateResFromNode(self, *_args, **_kwargs)
         return val
     def GetCurFileSystem(self, *_args, **_kwargs):
-        val = apply(xrcc.wxXmlResourceHandler_GetCurFileSystem,(self,) + _args, _kwargs)
+        val = xrcc.wxXmlResourceHandler_GetCurFileSystem(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxXmlResourceHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxXmlResourceHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxXmlResourceHandler(wxXmlResourceHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(xrcc.new_wxXmlResourceHandler,_args,_kwargs)
+        self.this = xrcc.new_wxXmlResourceHandler(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxXmlResourceHandler)
 
@@ -512,12 +512,12 @@ wxXmlResource_AddSubclassFactory = xrcc.wxXmlResource_AddSubclassFactory
 wxXmlResource_GetXRCID = xrcc.wxXmlResource_GetXRCID
 
 def wxXmlResource_Get(*_args, **_kwargs):
-    val = apply(xrcc.wxXmlResource_Get,_args,_kwargs)
+    val = xrcc.wxXmlResource_Get(*_args,**_kwargs)
     if val: val = wxXmlResourcePtr(val)
     return val
 
 def wxXmlResource_Set(*_args, **_kwargs):
-    val = apply(xrcc.wxXmlResource_Set,_args,_kwargs)
+    val = xrcc.wxXmlResource_Set(*_args,**_kwargs)
     if val: val = wxXmlResourcePtr(val)
     return val
 
diff --git a/wxPython/demo/About.py b/wxPython/demo/About.py
index 3e22739553..43ac255556 100644
--- a/wxPython/demo/About.py
+++ b/wxPython/demo/About.py
@@ -1,12 +1,12 @@
 import sys
 
-from   wxPython.wx       import *
-from   wxPython.html     import *
-import wxPython.lib.wxpTag
+import wx                  # This module uses the new wx namespace
+import wx.html
+import wx.lib.wxpTag
 
 #---------------------------------------------------------------------------
 
-class MyAboutBox(wxDialog):
+class MyAboutBox(wx.Dialog):
     text = '''
 <html>
 <body bgcolor="#AC76DE">
@@ -29,36 +29,40 @@ sit back and enjoy.  Be sure to take a peek at the source code for each
 demo item so you can learn how to use the classes yourself.</p>
 
 <p><b>wxPython</b> is brought to you by <b>Robin Dunn</b> and<br>
-<b>Total Control Software,</b> Copyright (c) 1997-2002.</p>
+<b>Total Control Software,</b> Copyright (c) 1997-2003.</p>
 
 <p>
 <font size="-1">Please see <i>license.txt</i> for licensing information.</font>
 </p>
 
-<p><wxp class="wxButton">
+<p><wxp module="wx" class="Button">
     <param name="label" value="Okay">
-    <param name="id"    value="wxID_OK">
+    <param name="id"    value="ID_OK">
 </wxp></p>
 </center>
 </body>
 </html>
 '''
     def __init__(self, parent):
-        wxDialog.__init__(self, parent, -1, 'About the wxPython demo',)
-        html = wxHtmlWindow(self, -1, size=(420, -1))
+        wx.Dialog.__init__(self, parent, -1, 'About the wxPython demo',)
+        html = wx.html.HtmlWindow(self, -1, size=(420, -1))
         py_version = sys.version.split()[0]
-        html.SetPage(self.text % (wx.__version__, py_version))
-        btn = html.FindWindowById(wxID_OK)
+        html.SetPage(self.text % (wx.VERSION_STRING, py_version))
+        btn = html.FindWindowById(wx.ID_OK)
         btn.SetDefault()
         ir = html.GetInternalRepresentation()
         html.SetSize( (ir.GetWidth()+25, ir.GetHeight()+25) )
         self.SetClientSize(html.GetSize())
-        self.CentreOnParent(wxBOTH)
+        self.CentreOnParent(wx.BOTH)
 
 #---------------------------------------------------------------------------
 
 
 
-
-
+if __name__ == '__main__':
+    app = wx.PySimpleApp()
+    dlg = MyAboutBox(None)
+    dlg.ShowModal()
+    dlg.Destroy()
+    app.MainLoop()
 
diff --git a/wxPython/demo/AnalogClockWindow.py b/wxPython/demo/AnalogClockWindow.py
new file mode 100644
index 0000000000..7d85145a33
--- /dev/null
+++ b/wxPython/demo/AnalogClockWindow.py
@@ -0,0 +1,79 @@
+
+
+
+from wxPython.wx import *
+from wxPython.lib.analogclock import AnalogClockWindow
+
+#----------------------------------------------------------------------
+
+class TestPanel(wxPanel):
+    def __init__(self, parent, log):
+        self.log = log
+        wxPanel.__init__(self, parent, -1)
+
+        c1 = AnalogClockWindow(self)
+        c1.SetBackgroundColour("RED")
+        c1.SetHandsColour("BLUE")
+        c1.SetTickMarkColours("WHITE")
+
+        c2 = AnalogClockWindow(self)
+        c2.SetBackgroundColour("WHITE")
+        c2.SetHandsColour("RED")
+        c2.SetTickMarkColours("BLUE")
+
+        c3 = AnalogClockWindow(self)
+        c3.SetBackgroundColour("BLUE")
+        c3.SetHandsColour("WHITE")
+        c3.SetTickMarkColours("RED")
+
+        c4 = AnalogClockWindow(self, style=wxRAISED_BORDER)
+        c4.SetTickMarkStyle(AnalogClockWindow.TICKS_CIRCLE)
+
+        c5 = AnalogClockWindow(self)
+        c5.SetTickMarkStyle(AnalogClockWindow.TICKS_NONE)
+
+        c6 = AnalogClockWindow(self, style=wxSUNKEN_BORDER)
+
+
+        # layout the clocks in a grid
+        gs = wxGridSizer(2, 3, 4, 4)
+        gs.Add(c1, 0, wxEXPAND)
+        gs.Add(c2, 0, wxEXPAND)
+        gs.Add(c3, 0, wxEXPAND)
+        gs.Add(c4, 0, wxEXPAND)
+        gs.Add(c5, 0, wxEXPAND)
+        gs.Add(c6, 0, wxEXPAND)
+
+        # put it in another sizer for a border
+        sizer = wxBoxSizer(wxVERTICAL)
+        sizer.Add(gs, 1, wxEXPAND|wxALL, 10)
+
+        self.SetSizer(sizer)
+
+
+#----------------------------------------------------------------------
+
+def runTest(frame, nb, log):
+    win = TestPanel(nb, log)
+    return win
+
+#----------------------------------------------------------------------
+
+
+
+overview = """<html><body>
+<h2><center>AnalogClockWindow</center></h2>
+
+This is a nice little clock class that was contributed to by several
+members of the wxPython-users group.
+
+</body></html>
+"""
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/ColourDB.py b/wxPython/demo/ColourDB.py
index 8e00407dba..05fbccdad1 100644
--- a/wxPython/demo/ColourDB.py
+++ b/wxPython/demo/ColourDB.py
@@ -127,3 +127,10 @@ def runTest(frame, nb, log):
 
 overview = """
 """
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/ContextHelp.py b/wxPython/demo/ContextHelp.py
index c115f22c44..7bca0c5156 100644
--- a/wxPython/demo/ContextHelp.py
+++ b/wxPython/demo/ContextHelp.py
@@ -90,3 +90,10 @@ help into your applicaiton using the wxSimpleHelpProvider class.
 
 #----------------------------------------------------------------------
 
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/DragAndDrop.py b/wxPython/demo/DragAndDrop.py
index e99abc3660..c69091d378 100644
--- a/wxPython/demo/DragAndDrop.py
+++ b/wxPython/demo/DragAndDrop.py
@@ -206,11 +206,38 @@ def runTest(frame, nb, log):
 
 
 
-overview = """\
-This demo shows some examples of data transfer through clipboard or drag and drop. In wxWindows, these two ways to transfer data (either between different applications or inside one and the same) are very similar which allows to implement both of them using almost the same code - or, in other words, if you implement drag and drop support for your application, you get clipboard support for free and vice versa.
+overview = """<html><body>\
+This demo shows some examples of data transfer through clipboard or
+drag and drop. In wxWindows, these two ways to transfer data (either
+between different applications or inside one and the same) are very
+similar which allows to implement both of them using almost the same
+code - or, in other words, if you implement drag and drop support for
+your application, you get clipboard support for free and vice versa.
+<p>
+At the heart of both clipboard and drag and drop operations lies the
+wxDataObject class. The objects of this class (or, to be precise,
+classes derived from it) represent the data which is being carried by
+the mouse during drag and drop operation or copied to or pasted from
+the clipboard. wxDataObject is a "smart" piece of data because it
+knows which formats it supports (see GetFormatCount and GetAllFormats)
+and knows how to render itself in any of them (see GetDataHere). It
+can also receive its value from the outside in a format it supports if
+it implements the SetData method. Please see the documentation of this
+class for more details.
+<p>
+Both clipboard and drag and drop operations have two sides: the source
+and target, the data provider and the data receiver. These which may
+be in the same application and even the same window when, for example,
+you drag some text from one position to another in a word
+processor. Let us describe what each of them should do.
+</body></html>
+"""
 
-At the heart of both clipboard and drag and drop operations lies the wxDataObject class. The objects of this class (or, to be precise, classes derived from it) represent the data which is being carried by the mouse during drag and drop operation or copied to or pasted from the clipboard. wxDataObject is a "smart" piece of data because it knows which formats it supports (see GetFormatCount and GetAllFormats) and knows how to render itself in any of them (see GetDataHere). It can also receive its value from the outside in a format it supports if it implements the SetData method. Please see the documentation of this class for more details.
 
-Both clipboard and drag and drop operations have two sides: the source and target, the data provider and the data receiver. These which may be in the same application and even the same window when, for example, you drag some text from one position to another in a word processor. Let us describe what each of them should do.
 
-"""
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/FancyText.py b/wxPython/demo/FancyText.py
index f504ccc21c..959a0dd1b5 100644
--- a/wxPython/demo/FancyText.py
+++ b/wxPython/demo/FancyText.py
@@ -38,3 +38,11 @@ def runTest(frame, nb, log):
 
 overview = fancytext.__doc__.replace("<", "&lt;")
 
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/FileBrowseButton.py b/wxPython/demo/FileBrowseButton.py
index 9967ea355f..798f201259 100644
--- a/wxPython/demo/FileBrowseButton.py
+++ b/wxPython/demo/FileBrowseButton.py
@@ -74,3 +74,12 @@ overview = """<html><body>
 """ % ( FileBrowseButton.__doc__,
         FileBrowseButtonWithHistory.__doc__ ,
         str(DirBrowseButton.__doc__) )
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/FontEnumerator.py b/wxPython/demo/FontEnumerator.py
index 67b5f6ef10..3ac7e51d4a 100644
--- a/wxPython/demo/FontEnumerator.py
+++ b/wxPython/demo/FontEnumerator.py
@@ -24,7 +24,7 @@ class TestPanel(wxPanel):
         row = wxBoxSizer(wxHORIZONTAL)
         row.Add(s1, 0, wxALL, 5)
         row.Add(self.lb1, 0, wxALL, 5)
-        row.Add(self.txt, 0, wxALL, 5)
+        row.Add(self.txt, 0, wxALL|wxADJUST_MINSIZE, 5)
 
         sizer = wxBoxSizer(wxVERTICAL)
         sizer.Add(row, 0, wxALL, 30)
@@ -32,13 +32,27 @@ class TestPanel(wxPanel):
         self.Layout()
 
         self.lb1.SetSelection(0)
+        self.OnSelect(None)
+        wxFutureCall(300, self.SetTextSize)
+
+
+    def SetTextSize(self):
+        self.txt.SetSize(self.txt.GetBestSize())
 
 
     def OnSelect(self, evt):
+        #print "OnSelect: "
         face = self.lb1.GetStringSelection()
+        #print '\t '+face
         font = wxFont(28, wxDEFAULT, wxNORMAL, wxNORMAL, False, face)
+        #print "\t got font"
+        self.txt.SetLabel(face)
+        #print "\t set label"
         self.txt.SetFont(font)
-        self.txt.SetSize(self.txt.GetBestSize())
+        #print "\t set font"
+        #self.txt.SetSize(self.txt.GetBestSize())
+        #print "\t set size"
+
 
 ##         st = font.GetNativeFontInfo().ToString()
 ##         ni2 = wxNativeFontInfo()
diff --git a/wxPython/demo/GridDragAndDrop.py b/wxPython/demo/GridDragAndDrop.py
new file mode 100644
index 0000000000..aae9d5f2dc
--- /dev/null
+++ b/wxPython/demo/GridDragAndDrop.py
@@ -0,0 +1,104 @@
+"""
+Example showing how to make a grid a drop target for files.
+
+"""
+
+from wxPython.wx import *
+from wxPython.grid import *
+
+#---------------------------------------------------------------------------
+# Set VIRTUAL to 1 to use a virtual grid
+
+VIRTUAL = 1
+
+class GridFileDropTarget(wxFileDropTarget):
+    def __init__(self, grid):
+        wxFileDropTarget.__init__(self)
+        self.grid = grid
+
+    def OnDropFiles(self, x, y, filenames):
+        # the x,y coordinates here are Unscrolled coordinates.  They must be changed
+        # to scrolled coordinates.
+        x, y = self.grid.CalcUnscrolledPosition(x, y)
+
+        # now we need to get the row and column from the grid
+        # but we need to first remove the RowLabel and ColumnLabel
+        # bounding boxes
+        # Why this isn't done for us, I'll never know...
+        x = x - self.grid.GetGridRowLabelWindow().GetRect().width
+        y = y - self.grid.GetGridColLabelWindow().GetRect().height
+        col = self.grid.XToCol(x)
+        row = self.grid.YToRow(y)
+
+        if row > -1 and col > -1:
+            self.grid.SetCellValue(row, col, filenames[0])
+            self.grid.AutoSizeColumn(col)
+            self.grid.Refresh()
+
+
+
+class FooTable(wxPyGridTableBase):
+    def __init__(self):
+        wxPyGridTableBase.__init__(self)
+        self.dropTargets = {(0,0):"Drag",
+                            (1,0):"A",
+                            (2,0):"File",
+                            (3,0):"To",
+                            (4,0):"A",
+                            (5,0):"Cell"}
+    def GetNumberCols(self):
+        return 100
+    def GetNumberRows(self):
+        return 100
+    def GetValue(self, row, col):
+        return self.dropTargets.get((row, col), "")
+
+
+
+class SimpleGrid(wxGrid):
+    def __init__(self, parent, log):
+        wxGrid.__init__(self, parent, -1)
+        self.log = log
+        self.moveTo = None
+        if VIRTUAL:
+            self.table = FooTable()
+            self.SetTable(self.table)
+        else:
+            self.CreateGrid(25, 25)
+
+        # set the drag and drop target
+        dropTarget = GridFileDropTarget(self)
+        self.SetDropTarget(dropTarget)
+        self.EnableDragRowSize()
+        self.EnableDragColSize()
+
+    def SetCellValue(self, row, col, value):
+        if VIRTUAL:
+            self.table.dropTargets[row, col] = value
+        else:
+            wxGrid.SetCellValue(self, row, col, value)
+
+
+
+class TestFrame(wxFrame):
+    def __init__(self, parent, log):
+        wxFrame.__init__(self, parent, -1, "DragAndDrop Grid", size=(640,480))
+        grid = SimpleGrid(self, log)
+
+
+
+#---------------------------------------------------------------------------
+
+if __name__ == '__main__':
+    import sys
+    app = wxPySimpleApp()
+    frame = TestFrame(None, sys.stdout)
+    frame.Show(True)
+    app.MainLoop()
+
+
+#---------------------------------------------------------------------------
+
+
+
+
diff --git a/wxPython/demo/GridSimple.py b/wxPython/demo/GridSimple.py
index 89c2ec6e07..267867c434 100644
--- a/wxPython/demo/GridSimple.py
+++ b/wxPython/demo/GridSimple.py
@@ -64,6 +64,11 @@ class SimpleGrid(wxGrid): ##, wxGridAutoEditMixin):
         self.SetCellValue(11, 1, "This cell is set to span 3 rows and 3 columns");
 
 
+        editor = wxGridCellTextEditor()
+        editor.SetParameters('10')
+        self.SetCellEditor(0, 4, editor)
+        self.SetCellValue(0, 4, "Limited text")
+
 
         # test all the events
         EVT_GRID_CELL_LEFT_CLICK(self, self.OnCellLeftClick)
diff --git a/wxPython/demo/ImageBrowser.py b/wxPython/demo/ImageBrowser.py
index 4e234695e0..4a38b95d7c 100644
--- a/wxPython/demo/ImageBrowser.py
+++ b/wxPython/demo/ImageBrowser.py
@@ -4,7 +4,7 @@
 #
 # Author:       Lorne White (email: lorne.white@telusplanet.net)
 #
-# Version       0.5 
+# Version       0.5
 # Date:         Feb 26, 2001
 # Licence:      wxWindows license
 #----------------------------------------------------------------------------
@@ -20,11 +20,11 @@ def runTest(frame, nb, log):
     initial_dir = os.path.join(dir, 'bitmaps')  # set the initial directory for the demo bitmaps
     win = ImageDialog(frame, initial_dir)   # open the image browser dialog
     win.Centre()
-    if win.ShowModal() == wxID_OK:      
+    if win.ShowModal() == wxID_OK:
         log.WriteText("You Selected File: " + win.GetFile())        # show the selected file
     else:
         log.WriteText("You pressed Cancel\n")
-            
+
 #---------------------------------------------------------------------------
 
 
@@ -38,3 +38,12 @@ def runTest(frame, nb, log):
 
 overview = """\
 """
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/LayoutAnchors.py b/wxPython/demo/LayoutAnchors.py
index 04b0c3f92c..f4aa323ed6 100644
--- a/wxPython/demo/LayoutAnchors.py
+++ b/wxPython/demo/LayoutAnchors.py
@@ -136,5 +136,8 @@ overview = """<html><body>
 
 
 
-
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
 
diff --git a/wxPython/demo/Layoutf.py b/wxPython/demo/Layoutf.py
index cde4ad405f..b92faffeda 100644
--- a/wxPython/demo/Layoutf.py
+++ b/wxPython/demo/Layoutf.py
@@ -60,3 +60,12 @@ def runTest(frame, nb, log):
 
 
 overview = Layoutf.__doc__
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/Main.py b/wxPython/demo/Main.py
index 40f9425b84..fd557f0171 100644
--- a/wxPython/demo/Main.py
+++ b/wxPython/demo/Main.py
@@ -12,10 +12,9 @@
 #----------------------------------------------------------------------------
 
 import sys, os, time
-from   wxPython.wx import *
-from   wxPython.html import wxHtmlWindow
 
-##from wxPython.stc import *
+import wx                  # This module uses the new wx namespace
+import wx.html
 
 import images
 
@@ -26,9 +25,14 @@ import images
 _treeList = [
     # new stuff
     ('Recent Additions', [
-        'wxIntCtrl',
-        'wxPyColourChooser',
         'wxScrolledPanel',
+        'ShapedWindow',
+        'NewNamespace',
+        'PopupMenu',
+        'AnalogClockWindow',
+        'MaskedEditControls',
+        'wxTreeListCtrl',
+        'wxGrid_MegaExample',
         ]),
 
     # managed windows == things with a (optional) caption you can close
@@ -45,6 +49,7 @@ _treeList = [
         'wxColourDialog',
         'wxDirDialog',
         'wxFileDialog',
+        'wxFileDialog_Save',
         'wxFindReplaceDialog',
         'wxFontDialog',
         'wxMessageDialog',
@@ -65,6 +70,7 @@ _treeList = [
 
     # core controls
     ('Core Windows/Controls', [
+        'PopupMenu',
         'wxButton',
         'wxCheckBox',
         'wxCheckListBox',
@@ -73,6 +79,7 @@ _treeList = [
         'wxGauge',
         'wxGenericDirCtrl',
         'wxGrid',
+        'wxGrid_MegaExample',
         'wxListBox',
         'wxListCtrl',
         'wxListCtrl_virtual',
@@ -101,14 +108,16 @@ _treeList = [
     ('More Windows/Controls', [
         #'wxFloatBar',          deprecated
         #'wxMVCTree',           deprecated
-        #'wxRightTextCtrl',    deprecated as we have wxTE_RIGHT now.
+        #'wxRightTextCtrl',     deprecated as we have wxTE_RIGHT now.
+        'AnalogClockWindow',
         'ColourSelect',
         'ContextHelp',
         'FancyText',
         'FileBrowseButton',
         'GenericButtons',
+        'MaskedEditControls',
+        'PyShell',
         'PyCrust',
-        'PyCrustWithFilling',
         'SplitTree',
         'TablePrint',
         'Throbber',
@@ -128,6 +137,7 @@ _treeList = [
         'wxStyledTextCtrl_1',
         'wxStyledTextCtrl_2',
         'wxTimeCtrl',
+        'wxTreeListCtrl',
         ]),
 
     # How to lay out the controls in a frame/dialog
@@ -204,9 +214,9 @@ _treeList = [
 
 #---------------------------------------------------------------------------
 
-class MyLog(wxPyLog):
+class MyLog(wx.PyLog):
     def __init__(self, textCtrl, logTime=0):
-        wxPyLog.__init__(self)
+        wx.PyLog.__init__(self)
         self.tc = textCtrl
         self.logTime = logTime
 
@@ -218,10 +228,63 @@ class MyLog(wxPyLog):
             self.tc.AppendText(message + '\n')
 
 
-class MyTP(wxPyTipProvider):
+class MyTP(wx.PyTipProvider):
     def GetTip(self):
         return "This is my tip"
 
+#---------------------------------------------------------------------------
+# A class to be used to display source code in the demo.  Try using the
+# wxSTC in the wxStyledTextCtrl_2 sample first, fall back to wxTextCtrl
+# if there is an error, such as the stc module not being present.
+
+try:
+    ##raise ImportError
+    from wx import stc
+    from wxStyledTextCtrl_2 import PythonSTC
+    class DemoCodeViewer(PythonSTC):
+        def __init__(self, parent, ID):
+            PythonSTC.__init__(self, parent, ID)
+            self.SetEdgeMode(stc.STC_EDGE_NONE)
+            self.SetSelBackground(True, wx.SystemSettings_GetColour(wx.SYS_COLOUR_HIGHLIGHT))
+            self.SetSelForeground(True, wx.SystemSettings_GetColour(wx.SYS_COLOUR_HIGHLIGHTTEXT))
+
+        # Some methods to make it compatible with how the wxTextCtrl is used
+        def SetValue(self, value):
+            self.SetReadOnly(False)
+            self.SetText(value)
+            self.SetReadOnly(True)
+
+        def Clear(self):
+            self.ClearAll()
+
+        def SetInsertionPoint(self, pos):
+            self.SetCurrentPos(pos)
+
+        def ShowPosition(self, pos):
+            self.GotoPos(pos)
+
+        def GetLastPosition(self):
+            return self.GetLength()
+
+        def GetRange(self, start, end):
+            return self.GetTextRange(start, end)
+
+        def GetSelection(self):
+            return self.GetAnchor(), self.GetCurrentPos()
+
+        def SetSelection(self, start, end):
+            self.SetSelectionStart(start)
+            self.SetSelectionEnd(end)
+
+
+except ImportError:
+    class DemoCodeViewer(wx.TextCtrl):
+        def __init__(self, parent, ID):
+            wx.TextCtrl.__init__(self, parent, ID, style =
+                                 wx.TE_MULTILINE | wx.TE_READONLY |
+                                 wx.HSCROLL | wx.TE_RICH2 | wx.TE_NOHIDESEL)
+
+
 #---------------------------------------------------------------------------
 
 def opj(path):
@@ -231,12 +294,12 @@ def opj(path):
 
 #---------------------------------------------------------------------------
 
-class wxPythonDemo(wxFrame):
+class wxPythonDemo(wx.Frame):
     overviewText = "wxPython Overview"
 
     def __init__(self, parent, id, title):
-        wxFrame.__init__(self, parent, -1, title, size = (800, 600),
-                         style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE)
+        wx.Frame.__init__(self, parent, -1, title, size = (800, 600),
+                         style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE)
 
         self.cwd = os.getcwd()
         self.curOverview = ""
@@ -245,97 +308,97 @@ class wxPythonDemo(wxFrame):
         icon = images.getMondrianIcon()
         self.SetIcon(icon)
 
-        if wxPlatform == '__WXMSW__':
+        if wx.Platform == '__WXMSW__':
             # setup a taskbar icon, and catch some events from it
-            self.tbicon = wxTaskBarIcon()
+            self.tbicon = wx.TaskBarIcon()
             self.tbicon.SetIcon(icon, "wxPython Demo")
-            EVT_TASKBAR_LEFT_DCLICK(self.tbicon, self.OnTaskBarActivate)
-            EVT_TASKBAR_RIGHT_UP(self.tbicon, self.OnTaskBarMenu)
-            EVT_MENU(self.tbicon, self.TBMENU_RESTORE, self.OnTaskBarActivate)
-            EVT_MENU(self.tbicon, self.TBMENU_CLOSE, self.OnTaskBarClose)
+            wx.EVT_TASKBAR_LEFT_DCLICK(self.tbicon, self.OnTaskBarActivate)
+            wx.EVT_TASKBAR_RIGHT_UP(self.tbicon, self.OnTaskBarMenu)
+            wx.EVT_MENU(self.tbicon, self.TBMENU_RESTORE, self.OnTaskBarActivate)
+            wx.EVT_MENU(self.tbicon, self.TBMENU_CLOSE, self.OnTaskBarClose)
 
-        wxCallAfter(self.ShowTip)
+        wx.CallAfter(self.ShowTip)
 
         self.otherWin = None
-        EVT_IDLE(self, self.OnIdle)
-        EVT_CLOSE(self, self.OnCloseWindow)
-        EVT_ICONIZE(self, self.OnIconfiy)
-        EVT_MAXIMIZE(self, self.OnMaximize)
+        wx.EVT_IDLE(self, self.OnIdle)
+        wx.EVT_CLOSE(self, self.OnCloseWindow)
+        wx.EVT_ICONIZE(self, self.OnIconfiy)
+        wx.EVT_MAXIMIZE(self, self.OnMaximize)
 
-        self.Centre(wxBOTH)
-        self.CreateStatusBar(1, wxST_SIZEGRIP)
+        self.Centre(wx.BOTH)
+        self.CreateStatusBar(1, wx.ST_SIZEGRIP)
 
-        splitter = wxSplitterWindow(self, -1, style=wxNO_3D|wxSP_3D)
-        splitter2 = wxSplitterWindow(splitter, -1, style=wxNO_3D|wxSP_3D)
+        splitter = wx.SplitterWindow(self, -1, style=wx.NO_3D|wx.SP_3D)
+        splitter2 = wx.SplitterWindow(splitter, -1, style=wx.NO_3D|wx.SP_3D)
 
         def EmptyHandler(evt): pass
-        EVT_ERASE_BACKGROUND(splitter, EmptyHandler)
-        EVT_ERASE_BACKGROUND(splitter2, EmptyHandler)
+        wx.EVT_ERASE_BACKGROUND(splitter, EmptyHandler)
+        wx.EVT_ERASE_BACKGROUND(splitter2, EmptyHandler)
 
         # Prevent TreeCtrl from displaying all items after destruction when True
         self.dying = False
 
         # Make a File menu
-        self.mainmenu = wxMenuBar()
-        menu = wxMenu()
-        exitID = wxNewId()
+        self.mainmenu = wx.MenuBar()
+        menu = wx.Menu()
+        exitID = wx.NewId()
         menu.Append(exitID, 'E&xit\tAlt-X', 'Get the heck outta here!')
-        EVT_MENU(self, exitID, self.OnFileExit)
-        wxApp_SetMacExitMenuItemId(exitID)
+        wx.EVT_MENU(self, exitID, self.OnFileExit)
+        wx.App_SetMacExitMenuItemId(exitID)
         self.mainmenu.Append(menu, '&File')
 
         # Make a Demo menu
-        menu = wxMenu()
+        menu = wx.Menu()
         for item in _treeList:
-            submenu = wxMenu()
+            submenu = wx.Menu()
             for childItem in item[1]:
-                mID = wxNewId()
+                mID = wx.NewId()
                 submenu.Append(mID, childItem)
-                EVT_MENU(self, mID, self.OnDemoMenu)
-            menu.AppendMenu(wxNewId(), item[0], submenu)
+                wx.EVT_MENU(self, mID, self.OnDemoMenu)
+            menu.AppendMenu(wx.NewId(), item[0], submenu)
         self.mainmenu.Append(menu, '&Demo')
 
 
         # Make a Help menu
-        helpID = wxNewId()
-        findID = wxNewId()
-        findnextID = wxNewId()
-        menu = wxMenu()
+        helpID = wx.NewId()
+        findID = wx.NewId()
+        findnextID = wx.NewId()
+        menu = wx.Menu()
         menu.Append(findID, '&Find\tCtrl-F', 'Find in the Demo Code')
         menu.Append(findnextID, 'Find &Next\tF3', 'Find Next')
         menu.AppendSeparator()
         menu.Append(helpID, '&About\tCtrl-H', 'wxPython RULES!!!')
-        wxApp_SetMacAboutMenuItemId(helpID)
-        EVT_MENU(self, helpID, self.OnHelpAbout)
-        EVT_MENU(self, findID, self.OnHelpFind)
-        EVT_MENU(self, findnextID, self.OnFindNext)
-        EVT_COMMAND_FIND(self, -1, self.OnFind)
-        EVT_COMMAND_FIND_NEXT(self, -1, self.OnFind)
-        EVT_COMMAND_FIND_CLOSE(self, -1 , self.OnFindClose)
+        wx.App_SetMacAboutMenuItemId(helpID)
+        wx.EVT_MENU(self, helpID, self.OnHelpAbout)
+        wx.EVT_MENU(self, findID, self.OnHelpFind)
+        wx.EVT_MENU(self, findnextID, self.OnFindNext)
+        wx.EVT_COMMAND_FIND(self, -1, self.OnFind)
+        wx.EVT_COMMAND_FIND_NEXT(self, -1, self.OnFind)
+        wx.EVT_COMMAND_FIND_CLOSE(self, -1 , self.OnFindClose)
         self.mainmenu.Append(menu, '&Help')
         self.SetMenuBar(self.mainmenu)
 
-        self.finddata = wxFindReplaceData()
+        self.finddata = wx.FindReplaceData()
 
         if 0:
             # This is another way to set Accelerators, in addition to
             # using the '\t<key>' syntax in the menu items.
-            aTable = wxAcceleratorTable([(wxACCEL_ALT,  ord('X'), exitID),
-                                         (wxACCEL_CTRL, ord('H'), helpID),
-                                         (wxACCEL_CTRL, ord('F'), findID),
-                                         (wxACCEL_NORMAL, WXK_F3, findnextID)])
+            aTable = wx.AcceleratorTable([(wx.ACCEL_ALT,  ord('X'), exitID),
+                                          (wx.ACCEL_CTRL, ord('H'), helpID),
+                                          (wx.ACCEL_CTRL, ord('F'), findID),
+                                          (wx.ACCEL_NORMAL, WXK_F3, findnextID)
+                                          ])
             self.SetAcceleratorTable(aTable)
 
 
         # Create a TreeCtrl
-        tID = wxNewId()
+        tID = wx.NewId()
         self.treeMap = {}
-        self.tree = wxTreeCtrl(splitter, tID,
-                               style=wxTR_HAS_BUTTONS |
-                               wxTR_HAS_VARIABLE_ROW_HEIGHT
+        self.tree = wx.TreeCtrl(splitter, tID,
+                                style=wx.TR_HAS_BUTTONS |
+                                wx.TR_HAS_VARIABLE_ROW_HEIGHT
                                )
 
-        #self.tree.SetBackgroundColour(wxNamedColour("Pink"))
         root = self.tree.AddRoot("wxPython Overview")
         firstChild = None
         for item in _treeList:
@@ -347,57 +410,56 @@ class wxPythonDemo(wxFrame):
 
         self.tree.Expand(root)
         self.tree.Expand(firstChild)
-        EVT_TREE_ITEM_EXPANDED   (self.tree, tID, self.OnItemExpanded)
-        EVT_TREE_ITEM_COLLAPSED  (self.tree, tID, self.OnItemCollapsed)
-        EVT_TREE_SEL_CHANGED     (self.tree, tID, self.OnSelChanged)
-        EVT_LEFT_DOWN            (self.tree,      self.OnTreeLeftDown)
+        wx.EVT_TREE_ITEM_EXPANDED   (self.tree, tID, self.OnItemExpanded)
+        wx.EVT_TREE_ITEM_COLLAPSED  (self.tree, tID, self.OnItemCollapsed)
+        wx.EVT_TREE_SEL_CHANGED     (self.tree, tID, self.OnSelChanged)
+        wx.EVT_LEFT_DOWN            (self.tree,      self.OnTreeLeftDown)
 
         # Create a Notebook
-        self.nb = wxNotebook(splitter2, -1, style=wxCLIP_CHILDREN)
+        self.nb = wx.Notebook(splitter2, -1, style=wx.CLIP_CHILDREN)
 
-        # Set up a wxHtmlWindow on the Overview Notebook page
+        # Set up a wx.html.HtmlWindow on the Overview Notebook page
         # we put it in a panel first because there seems to be a
         # refresh bug of some sort (wxGTK) when it is directly in
         # the notebook...
         if 0:  # the old way
-            self.ovr = wxHtmlWindow(self.nb, -1, size=(400, 400))
+            self.ovr = wx.html.HtmlWindow(self.nb, -1, size=(400, 400))
             self.nb.AddPage(self.ovr, self.overviewText)
 
-        else:  # hopefully I can remove this hacky code soon, see bug #216861
-            panel = wxPanel(self.nb, -1, style=wxCLIP_CHILDREN)
-            self.ovr = wxHtmlWindow(panel, -1, size=(400, 400))
+        else:  # hopefully I can remove this hacky code soon, see SF bug #216861
+            panel = wx.Panel(self.nb, -1, style=wx.CLIP_CHILDREN)
+            self.ovr = wx.html.HtmlWindow(panel, -1, size=(400, 400))
             self.nb.AddPage(panel, self.overviewText)
 
             def OnOvrSize(evt, ovr=self.ovr):
                 ovr.SetSize(evt.GetSize())
 
-            EVT_SIZE(panel, OnOvrSize)
-            EVT_ERASE_BACKGROUND(panel, EmptyHandler)
+            wx.EVT_SIZE(panel, OnOvrSize)
+            wx.EVT_ERASE_BACKGROUND(panel, EmptyHandler)
 
 
         self.SetOverview(self.overviewText, overview)
 
 
-        # Set up a TextCtrl on the Demo Code Notebook page
-        self.txt = wxTextCtrl(self.nb, -1,
-                              style = wxTE_MULTILINE|wxTE_READONLY|
-                              wxHSCROLL|wxTE_RICH2|wxTE_NOHIDESEL)
+        # Set up a notebook page for viewing the source code of each sample
+        self.txt = DemoCodeViewer(self.nb, -1)
         self.nb.AddPage(self.txt, "Demo Code")
+        self.GetDemoFile('Main.py')
 
 
         # Set up a log on the View Log Notebook page
-        self.log = wxTextCtrl(splitter2, -1,
-                              style = wxTE_MULTILINE|wxTE_READONLY|wxHSCROLL)
+        self.log = wx.TextCtrl(splitter2, -1,
+                              style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)
 
         # Set the wxWindows log target to be this textctrl
-        #wxLog_SetActiveTarget(wxLogTextCtrl(self.log))
+        #wx.Log_SetActiveTarget(wx.LogTextCtrl(self.log))
 
-        # But instead of the above we want to show how to use our own wxLog class
-        wxLog_SetActiveTarget(MyLog(self.log))
+        # But instead of the above we want to show how to use our own wx.Log class
+        wx.Log_SetActiveTarget(MyLog(self.log))
 
         # for serious debugging
-        #wxLog_SetActiveTarget(wxLogStderr())
-        #wxLog_SetTraceMask(wxTraceMessages)
+        #wx.Log_SetActiveTarget(wx.LogStderr())
+        #wx.Log_SetTraceMask(wx.TraceMessages)
 
         self.Show(True)
 
@@ -425,14 +487,14 @@ class wxPythonDemo(wxFrame):
                 self.tree.EnsureVisible(selectedDemo)
 
 
-        wxLogMessage('window handle: %s' % self.GetHandle())
+        wx.LogMessage('window handle: %s' % self.GetHandle())
 
 
     #---------------------------------------------
     def WriteText(self, text):
         if text[-1:] == '\n':
             text = text[:-1]
-        wxLogMessage(text)
+        wx.LogMessage(text)
 
 
     def write(self, txt):
@@ -441,13 +503,13 @@ class wxPythonDemo(wxFrame):
     #---------------------------------------------
     def OnItemExpanded(self, event):
         item = event.GetItem()
-        wxLogMessage("OnItemExpanded: %s" % self.tree.GetItemText(item))
+        wx.LogMessage("OnItemExpanded: %s" % self.tree.GetItemText(item))
         event.Skip()
 
     #---------------------------------------------
     def OnItemCollapsed(self, event):
         item = event.GetItem()
-        wxLogMessage("OnItemCollapsed: %s" % self.tree.GetItemText(item))
+        wx.LogMessage("OnItemCollapsed: %s" % self.tree.GetItemText(item))
         event.Skip()
 
     #---------------------------------------------
@@ -478,7 +540,7 @@ class wxPythonDemo(wxFrame):
             if self.window is not None:
                 if hasattr(self.window, "ShutdownDemo"):
                     self.window.ShutdownDemo()
-            wxSafeYield() # in case the page has pending events
+            wx.SafeYield() # in case the page has pending events
             self.nb.DeletePage(2)
 
         if itemText == self.overviewText:
@@ -489,19 +551,19 @@ class wxPythonDemo(wxFrame):
 
         else:
             if os.path.exists(itemText + '.py'):
-                wxBeginBusyCursor()
-                wxLogMessage("Running demo %s.py..." % itemText)
+                wx.BeginBusyCursor()
+                wx.LogMessage("Running demo %s.py..." % itemText)
                 try:
                     self.GetDemoFile(itemText + '.py')
                     module = __import__(itemText, globals())
                     self.SetOverview(itemText + " Overview", module.overview)
                 finally:
-                    wxEndBusyCursor()
+                    wx.EndBusyCursor()
                 self.tree.Refresh()
 
                 # in case runTest is modal, make sure things look right...
                 self.nb.Refresh();
-                wxSafeYield()
+                wx.SafeYield()
 
                 self.window = module.runTest(self, self.nb, self) ###
                 if self.window is not None:
@@ -523,7 +585,7 @@ class wxPythonDemo(wxFrame):
         try:
             self.txt.SetValue(open(filename).read())
         except IOError:
-            self.txt.WriteText("Cannot open %s file." % filename)
+            self.txt.SetValue("Cannot open %s file." % filename)
 
         self.txt.SetInsertionPoint(0)
         self.txt.ShowPosition(0)
@@ -550,10 +612,10 @@ class wxPythonDemo(wxFrame):
 
     def OnHelpFind(self, event):
         self.nb.SetSelection(1)
-        self.finddlg = wxFindReplaceDialog(self, self.finddata, "Find",
-                        wxFR_NOUPDOWN |
-                        wxFR_NOMATCHCASE |
-                        wxFR_NOWHOLEWORD)
+        self.finddlg = wx.FindReplaceDialog(self, self.finddata, "Find",
+                        wx.FR_NOUPDOWN |
+                        wx.FR_NOMATCHCASE |
+                        wx.FR_NOWHOLEWORD)
         self.finddlg.Show(True)
 
     def OnFind(self, event):
@@ -568,9 +630,9 @@ class wxPythonDemo(wxFrame):
             start = 0
             loc = textstring.find(findstring, start)
         if loc == -1:
-            dlg = wxMessageDialog(self, 'Find String Not Found',
+            dlg = wx.MessageDialog(self, 'Find String Not Found',
                           'Find String Not Found in Demo File',
-                          wxOK | wxICON_INFORMATION)
+                          wx.OK | wx.ICON_INFORMATION)
             dlg.ShowModal()
             dlg.Destroy()
         if self.finddlg:
@@ -579,8 +641,8 @@ class wxPythonDemo(wxFrame):
                 return
             else:
                 self.finddlg.Destroy()
-        self.txt.SetSelection(loc, loc + len(findstring))
         self.txt.ShowPosition(loc)
+        self.txt.SetSelection(loc, loc + len(findstring))
 
 
 
@@ -620,9 +682,9 @@ class wxPythonDemo(wxFrame):
         except IOError:
             showTip, index = (1, 0)
         if showTip:
-            tp = wxCreateFileTipProvider(opj("data/tips.txt"), index)
+            tp = wx.CreateFileTipProvider(opj("data/tips.txt"), index)
             ##tp = MyTP(0)
-            showTip = wxShowTip(self, tp)
+            showTip = wx.ShowTip(self, tp)
             index = tp.GetCurrentTip()
             open(opj("data/showTips"), "w").write(str( (showTip, index) ))
 
@@ -652,7 +714,7 @@ class wxPythonDemo(wxFrame):
     TBMENU_CLOSE   = 1001
 
     def OnTaskBarMenu(self, evt):
-        menu = wxMenu()
+        menu = wx.Menu()
         menu.Append(self.TBMENU_RESTORE, "Restore wxPython Demo")
         menu.Append(self.TBMENU_CLOSE,   "Close")
         self.tbicon.PopupMenu(menu)
@@ -662,19 +724,19 @@ class wxPythonDemo(wxFrame):
     def OnTaskBarClose(self, evt):
         self.Close()
 
-        # because of the way wxTaskBarIcon.PopupMenu is implemented we have to
+        # because of the way wx.TaskBarIcon.PopupMenu is implemented we have to
         # prod the main idle handler a bit to get the window to actually close
-        wxGetApp().ProcessIdle()
+        wx.GetApp().ProcessIdle()
 
 
     #---------------------------------------------
     def OnIconfiy(self, evt):
-        wxLogMessage("OnIconfiy")
+        wx.LogMessage("OnIconfiy")
         evt.Skip()
 
     #---------------------------------------------
     def OnMaximize(self, evt):
-        wxLogMessage("OnMaximize")
+        wx.LogMessage("OnMaximize")
         evt.Skip()
 
 
@@ -683,14 +745,14 @@ class wxPythonDemo(wxFrame):
 #---------------------------------------------------------------------------
 #---------------------------------------------------------------------------
 
-class MySplashScreen(wxSplashScreen):
+class MySplashScreen(wx.SplashScreen):
     def __init__(self):
-        bmp = wxImage(opj("bitmaps/splash.gif")).ConvertToBitmap()
-        wxSplashScreen.__init__(self, bmp,
-                                wxSPLASH_CENTRE_ON_SCREEN|wxSPLASH_TIMEOUT,
+        bmp = wx.Image(opj("bitmaps/splash.gif")).ConvertToBitmap()
+        wx.SplashScreen.__init__(self, bmp,
+                                wx.SPLASH_CENTRE_ON_SCREEN|wx.SPLASH_TIMEOUT,
                                 4000, None, -1,
-                                style = wxSIMPLE_BORDER|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP)
-        EVT_CLOSE(self, self.OnClose)
+                                style = wx.SIMPLE_BORDER|wx.FRAME_NO_TASKBAR|wx.STAY_ON_TOP)
+        wx.EVT_CLOSE(self, self.OnClose)
 
     def OnClose(self, evt):
         frame = wxPythonDemo(None, -1, "wxPython: (A Demonstration)")
@@ -698,7 +760,7 @@ class MySplashScreen(wxSplashScreen):
         evt.Skip()  # Make sure the default handler runs too...
 
 
-class MyApp(wxApp):
+class MyApp(wx.App):
     def OnInit(self):
         """
         Create and show the splash screen.  It will then create and show
@@ -706,10 +768,10 @@ class MyApp(wxApp):
         """
 
         #import locale
-        #self.locale = wxLocale(wxLANGUAGE_FRENCH)
+        #self.locale = wx.Locale(wx.LANGUAGE_FRENCH)
         #locale.setlocale(locale.LC_ALL, 'fr')
 
-        wxInitAllImageHandlers()
+        wx.InitAllImageHandlers()
         splash = MySplashScreen()
         splash.Show()
         return True
@@ -724,7 +786,7 @@ def main():
         os.chdir(demoPath)
     except:
         pass
-    app = MyApp(wxPlatform == "__WXMAC__")
+    app = MyApp(wx.Platform == "__WXMAC__")
     app.MainLoop()
 
 
@@ -733,76 +795,36 @@ def main():
 
 
 overview = """<html><body>
- <h2>Python</h2>
-
- Python is an interpreted, interactive, object-oriented programming
- language often compared to Tcl, Perl, Scheme, or Java.
-
- <p> Python combines remarkable power with very clear syntax. It has
- modules, classes, exceptions, very high level dynamic data types, and
- dynamic typing.  There are interfaces to many system calls and
- libraries, and new built-in modules are easily written in C or
- C++. Python is also usable as an extension language for applications
- that need a programmable interface.  <p>
-
- <h2>wxWindows</h2>
-
- wxWindows is a free C++ framework designed to make cross-platform
- programming child's play. Well, almost. wxWindows 2 supports Windows
- 3.1/95/98/NT, Unix with GTK/Motif/Lesstif, with a Mac version
- underway. Other ports are under consideration.  <p>
-
- wxWindows is a set of libraries that allows C++ applications to
- compile and run on several different types of computers, with minimal
- source code changes.  There is one library per supported GUI (such as
- Motif, or Windows). As well as providing a common API (Application
- Programming Interface) for GUI functionality, it provides
- functionality for accessing some commonly-used operating system
- facilities, such as copying or deleting files. wxWindows is a
- 'framework' in the sense that it provides a lot of built-in
- functionality, which the application can use or replace as required,
- thus saving a great deal of coding effort. Basic data structures such
- as strings, linked lists and hash tables are also supported.
-
- <p>
- <h2>wxPython</h2>
-
- wxPython is a Python extension module that encapsulates the wxWindows
- GUI classes. Currently it is only available for the Win32 and GTK
- ports of wxWindows, but as soon as the other ports are brought up to
- the same level as Win32 and GTK, it should be fairly trivial to
- enable wxPython to be used with the new GUI.
-
- <p>
-
- The wxPython extension module attempts to mirror the class heiarchy
- of wxWindows as closely as possible. This means that there is a
- wxFrame class in wxPython that looks, smells, tastes and acts almost
- the same as the wxFrame class in the C++ version. Unfortunately,
- because of differences in the languages, wxPython doesn't match
- wxWindows exactly, but the differences should be easy to absorb
- because they are natural to Python. For example, some methods that
- return multiple values via argument pointers in C++ will return a
- tuple of values in Python.
-
- <p>
-
- There is still much to be done for wxPython, many classes still need
- to be mirrored. Also, wxWindows is still somewhat of a moving target
- so it is a bit of an effort just keeping wxPython up to date. On the
- other hand, there are enough of the core classes completed that
- useful applications can be written.
-
- <p>
-
- wxPython is close enough to the C++ version that the majority of
- the wxPython documentation is actually just notes attached to the C++
- documents that describe the places where wxPython is different. There
- is also a series of sample programs included, and a series of
- documentation pages that assist the programmer in getting started
- with wxPython.
-
- """
+<h2>wxPython</h2>
+
+<p> wxPython is a <b>GUI toolkit</b> for the <a
+href="http://www.python.org/">Python</a> programming language.  It
+allows Python programmers to create programs with a robust, highly
+functional graphical user interface, simply and easily.  It is
+implemented as a Python extension module (native code) that wraps the
+popular <a href="http://wxwindows.org/front.htm">wxWindows</a> cross
+platform GUI library, which is written in C++.
+
+<p> Like Python and wxWindows, wxPython is <b>Open Source</b> which
+means that it is free for anyone to use and the source code is
+available for anyone to look at and modify.  Or anyone can contribute
+fixes or enhnacments to the project.
+
+<p> wxPython is a <b>cross-platform</b> toolkit.  This means that the
+same program will run on multiple platforms without modification.
+Currently supported platforms are 32-bit Microsoft Windows, most Unix
+or unix-like systems, and Macintosh OS X. Since the language is
+Python, wxPython programs are <b>simple, easy</b> to write and easy to
+understand.
+
+<p> <b>This demo</b> is not only a collection of test cases for
+wxPython, but is also designed to help you learn about and how to use
+wxPython.  Each sample is listed in the tree control on the left.
+When a sample is selected in the tree then a module is loaded and run
+(usually in a tab of this notebook,) and the source code of the module
+is loaded in another tab for you to browse and learn from.
+
+"""
 
 
 #----------------------------------------------------------------------------
diff --git a/wxPython/demo/MaskedEditControls.py b/wxPython/demo/MaskedEditControls.py
new file mode 100644
index 0000000000..92a6cf3d77
--- /dev/null
+++ b/wxPython/demo/MaskedEditControls.py
@@ -0,0 +1,540 @@
+from wxPython.wx import *
+from wxPython.lib.maskededit import Field, wxMaskedTextCtrl, wxMaskedComboBox, wxIpAddrCtrl, states, months
+from wxPython.lib.maskededit import __doc__ as overviewdoc
+from wxPython.lib.maskededit import autoformats
+from wxPython.lib.scrolledpanel import wxScrolledPanel
+import string, sys, traceback
+
+class demoMixin:
+    """
+    Centralized routines common to demo pages, to remove repetition.
+    """
+    def labelGeneralTable(self, sizer):
+        description = wxStaticText( self, -1, "Description", )
+        mask        = wxStaticText( self, -1, "Mask Value" )
+        formatcode  = wxStaticText( self, -1, "Format" )
+        regex       = wxStaticText( self, -1, "Regexp Validator(opt.)" )
+        ctrl        = wxStaticText( self, -1, "wxMaskedEdit Ctrl" )
+
+        description.SetFont( wxFont(9, wxSWISS, wxNORMAL, wxBOLD))
+        mask.SetFont( wxFont(9, wxSWISS, wxNORMAL, wxBOLD))
+        formatcode.SetFont( wxFont(9, wxSWISS, wxNORMAL, wxBOLD) )
+        regex.SetFont( wxFont(9, wxSWISS, wxNORMAL, wxBOLD))
+        ctrl.SetFont( wxFont(9, wxSWISS, wxNORMAL, wxBOLD))
+
+        sizer.Add(description)
+        sizer.Add(mask)
+        sizer.Add(formatcode)
+        sizer.Add(regex)
+        sizer.Add(ctrl)
+
+
+    def layoutGeneralTable(self, controls, sizer):
+        for control in controls:
+            sizer.Add( wxStaticText( self, -1, control[0]) )
+            sizer.Add( wxStaticText( self, -1, control[1]) )
+            sizer.Add( wxStaticText( self, -1, control[3]) )
+            sizer.Add( wxStaticText( self, -1, control[4]) )
+
+            if control in controls:
+                newControl  = wxMaskedTextCtrl( self, -1, "",
+                                                mask         = control[1],
+                                                excludeChars = control[2],
+                                                formatcodes  = control[3],
+                                                includeChars = "",
+                                                validRegex   = control[4],
+                                                validRange   = control[5],
+                                                choices      = control[6],
+                                                choiceRequired = True,
+                                                defaultValue = control[7],
+                                                demo         = True,
+                                                name         = control[0])
+            self.editList.append(newControl)
+            sizer.Add(newControl)
+
+
+    def changeControlParams(self, event, parameter, checked_value, notchecked_value):
+        if event.Checked(): value = checked_value
+        else:               value = notchecked_value
+        kwargs = {parameter: value}
+        for control in self.editList:
+            control.SetCtrlParameters(**kwargs)
+            control.Refresh()
+        self.Refresh()
+
+
+
+#----------------------------------------------------------------------------
+class demoPage1(wxScrolledPanel, demoMixin):
+    def __init__(self, parent, log):
+        wxScrolledPanel.__init__(self, parent, -1)
+        self.sizer = wxBoxSizer( wxVERTICAL )
+        self.editList  = []
+
+        label = wxStaticText( self, -1, """\
+Here are some basic wxMaskedTextCtrls to give you an idea of what you can do
+with this control.  Note that all controls have been auto-sized by including 'F' in
+the format codes.
+
+Try entering nonsensical or partial values in validated fields to see what happens.
+Note that the State and Last Name fields are list-limited (valid last names are:
+Smith, Jones, Williams).  Signs on numbers can be toggled with the minus key.
+""")
+        label.SetForegroundColour( "Blue" )
+        header = wxBoxSizer( wxHORIZONTAL )
+        header.Add( label, 0, flag=wxALIGN_LEFT|wxALL, border = 5 )
+
+        highlight = wxCheckBox( self, -1, "Highlight Empty" )
+        disallow =  wxCheckBox( self, -1, "Disallow Empty" )
+        showFill = wxCheckBox( self, -1, "change fillChar" )
+
+        vbox = wxBoxSizer( wxVERTICAL )
+        vbox.Add( highlight, 0, wxALIGN_LEFT|wxALL, 5 )
+        vbox.Add( disallow, 0, wxALIGN_LEFT|wxALL, 5 )
+        vbox.Add( showFill, 0, wxALIGN_LEFT|wxALL, 5 )
+        header.AddSpacer(15, 0)
+        header.Add(vbox, 0, flag=wxALIGN_LEFT|wxALL, border=5 )
+
+        EVT_CHECKBOX( self, highlight.GetId(), self.onHighlightEmpty )
+        EVT_CHECKBOX( self, disallow.GetId(), self.onDisallowEmpty )
+        EVT_CHECKBOX( self, showFill.GetId(), self.onShowFill )
+
+        grid = wxFlexGridSizer( 0, 5, vgap=10, hgap=10 )
+        self.labelGeneralTable(grid)
+
+        # The following list is of the controls for the demo. Feel free to play around with
+        # the options!
+        controls = [
+        #description        mask                    excl format     regexp                              range,list,initial
+       ("Phone No",         "(###) ###-#### x:###", "", 'F^-',     "^\(\d{3}\) \d{3}-\d{4}",           '','',''),
+       ("Social Sec#",      "###-##-####",          "", 'F',        "\d{3}-\d{2}-\d{4}",                '','',''),
+       ("Full Name",        "C{14}",                "", 'F_',       '^[A-Z][a-zA-Z]+ [A-Z][a-zA-Z]+',   '','',''),
+       ("Last Name Only",   "C{14}",                "", 'F {list}', '^[A-Z][a-zA-Z]+',                  '',('Smith','Jones','Williams'),''),
+       ("Zip plus 4",       "#{5}-#{4}",            "", 'F',        "\d{5}-(\s{4}|\d{4})",              '','',''),
+       ("Customer No",      "\CAA-###",             "", 'F!',       "C[A-Z]{2}-\d{3}",                  '','',''),
+       ("Invoice Total",    "#{9}.##",              "", 'F-_,',     "",                                 '','',''),
+       ("Integer",          "#{9}",                 "", 'F-_',      "",                                 '','',''),
+       ]
+
+        self.layoutGeneralTable(controls, grid)
+        self.sizer.Add( header, 0, flag=wxALIGN_LEFT|wxALL, border=5 )
+        self.sizer.Add( grid, 0, flag= wxALIGN_LEFT|wxLEFT, border=5 )
+        self.SetSizer(self.sizer)
+        self.SetupScrolling()
+        self.SetAutoLayout(1)
+
+
+    def onDisallowEmpty( self, event ):
+        """ Set emptyInvalid parameter on/off """
+        self.changeControlParams( event, "emptyInvalid", True, False )
+
+    def onHighlightEmpty( self, event ):
+        """ Highlight empty values"""
+        self.changeControlParams( event, "emptyBackgroundColor", "Blue", "White" )
+
+    def onShowFill( self, event ):
+        """ Set fillChar parameter to '?' or ' ' """
+        self.changeControlParams( event, "fillChar", '?', ' ' )
+
+
+class demoPage2(wxScrolledPanel, demoMixin):
+    def __init__( self, parent, log ):
+        self.log = log
+        wxScrolledPanel.__init__( self, parent, -1 )
+        self.sizer = wxBoxSizer( wxVERTICAL )
+
+        label = wxStaticText( self, -1, """\
+All these controls have been created by passing a single parameter, the autoformat code.
+The class contains an internal dictionary of types and formats (autoformats).
+Many of these already do complicated validation; To see some examples, try
+29 Feb 2002 vs. 2004 for the date formats, or email address validation.
+""")
+
+        label.SetForegroundColour( "Blue" )
+        self.sizer.Add( label, 0, wxALIGN_LEFT|wxALL, 5 )
+
+        description = wxStaticText( self, -1, "Description")
+        autofmt     = wxStaticText( self, -1, "AutoFormat Code")
+        ctrl        = wxStaticText( self, -1, "wxMaskedEdit Control")
+
+        description.SetFont( wxFont( 9, wxSWISS, wxNORMAL, wxBOLD ) )
+        autofmt.SetFont( wxFont( 9, wxSWISS, wxNORMAL, wxBOLD ) )
+        ctrl.SetFont( wxFont( 9, wxSWISS, wxNORMAL, wxBOLD ) )
+
+        grid = wxFlexGridSizer( 0, 3, vgap=10, hgap=5 )
+        grid.Add( description, 0, wxALIGN_LEFT )
+        grid.Add( autofmt,     0, wxALIGN_LEFT )
+        grid.Add( ctrl,        0, wxALIGN_LEFT )
+
+        for autoformat, desc in autoformats:
+            grid.Add( wxStaticText( self, -1, desc), 0, wxALIGN_LEFT )
+            grid.Add( wxStaticText( self, -1, autoformat), 0, wxALIGN_LEFT )
+            grid.Add( wxMaskedTextCtrl( self, -1, "",
+                                              autoformat       = autoformat,
+                                              demo             = True,
+                                              name             = autoformat),
+                            0, wxALIGN_LEFT )
+
+        self.sizer.Add( grid, 0, wxALIGN_LEFT|wxALL, border=5 )
+        self.SetSizer( self.sizer )
+        self.SetAutoLayout( 1 )
+        self.SetupScrolling()
+
+
+class demoPage3(wxScrolledPanel, demoMixin):
+    def __init__(self, parent, log):
+        self.log = log
+        wxScrolledPanel.__init__(self, parent, -1)
+        self.sizer = wxBoxSizer( wxVERTICAL )
+        self.editList  = []
+
+        label = wxStaticText( self, -1, """\
+Here wxMaskedTextCtrls that have default values.  The states
+control has a list of valid values, and the unsigned integer
+has a legal range specified.
+""")
+        label.SetForegroundColour( "Blue" )
+        requireValid =  wxCheckBox( self, -1, "Require Valid Value" )
+        EVT_CHECKBOX( self, requireValid.GetId(), self.onRequireValid )
+
+        header = wxBoxSizer( wxHORIZONTAL )
+        header.Add( label, 0, flag=wxALIGN_LEFT|wxALL, border = 5)
+        header.AddSpacer(75, 0)
+        header.Add( requireValid, 0, flag=wxALIGN_LEFT|wxALL, border=10 )
+
+        grid = wxFlexGridSizer( 0, 5, vgap=10, hgap=10 )
+        self.labelGeneralTable( grid )
+
+        controls = [
+        #description        mask                    excl format     regexp                              range,list,initial
+       ("U.S. State (2 char)",      "AA",            "", 'F!_',       "[A-Z]{2}",                         '',states, states[0]),
+       ("Integer (signed)",         "#{6}",          "", 'F-_R',      "",                                 '','', '0     '),
+       ("Integer (unsigned)\n(1-399)","######",      "", 'F_',        "",                                 (1,399),'', '1     '),
+       ("Float (signed)",           "#{6}.#{9}",     "", 'F-_R',      "",                                 '','', '000000.000000000'),
+       ("Date (MDY) + Time",        "##/##/#### ##:##:## AM",  'BCDEFGHIJKLMNOQRSTUVWXYZ','DF!',"",          '','', wxDateTime_Now().Format("%m/%d/%Y %I:%M:%S %p")),
+       ]
+        self.layoutGeneralTable( controls, grid )
+
+        self.sizer.Add( header, 0, flag=wxALIGN_LEFT|wxALL, border=5 )
+        self.sizer.Add( grid, 0, flag=wxALIGN_LEFT|wxALL, border=5 )
+
+        self.SetSizer( self.sizer )
+        self.SetAutoLayout( 1 )
+        self.SetupScrolling()
+
+    def onRequireValid( self, event ):
+        """ Set validRequired parameter on/off """
+        self.changeControlParams( event, "validRequired", True, False )
+
+
+class demoPage4(wxScrolledPanel, demoMixin):
+    def __init__( self, parent, log ):
+        self.log = log
+        wxScrolledPanel.__init__( self, parent, -1 )
+        self.sizer = wxBoxSizer( wxVERTICAL )
+
+        label = wxStaticText( self, -1, """\
+These controls have field-specific choice lists and allow autocompletion.
+
+Down arrow or Page Down in an uncompleted field with an auto-completable field will attempt
+to auto-complete a field if it has a choice list.
+Page Down and Shift-Down arrow will also auto-complete, or cycle through the complete list.
+Page Up and Shift-Up arrow will similarly cycle backwards through the list.
+""")
+
+        label.SetForegroundColour( "Blue" )
+        self.sizer.Add( label, 0, wxALIGN_LEFT|wxALL, 5 )
+
+        description  = wxStaticText( self, -1, "Description" )
+        autofmt      = wxStaticText( self, -1, "AutoFormat Code" )
+        fields       = wxStaticText( self, -1, "Field Objects" )
+        ctrl         = wxStaticText( self, -1, "wxMaskedEdit Control" )
+
+        description.SetFont( wxFont( 9, wxSWISS, wxNORMAL, wxBOLD ) )
+        autofmt.SetFont( wxFont( 9, wxSWISS, wxNORMAL, wxBOLD ) )
+        fields.SetFont( wxFont( 9, wxSWISS, wxNORMAL, wxBOLD ) )
+        ctrl.SetFont( wxFont( 9, wxSWISS, wxNORMAL, wxBOLD ) )
+
+        grid = wxFlexGridSizer( 0, 4, vgap=10, hgap=10 )
+        grid.Add( description, 0, wxALIGN_LEFT )
+        grid.Add( autofmt,     0, wxALIGN_LEFT )
+        grid.Add( fields,      0, wxALIGN_LEFT )
+        grid.Add( ctrl,        0, wxALIGN_LEFT )
+
+        autoformat = "USPHONEFULLEXT"
+        fieldsDict = {0: Field(choices=["617","781","508","978","413"], choiceRequired=True)}
+        fieldsLabel = """\
+{0: Field(choices=[
+            "617","781",
+            "508","978","413"],
+          choiceRequired=True)}"""
+        grid.Add( wxStaticText( self, -1, "Restricted Area Code"), 0, wxALIGN_LEFT )
+        grid.Add( wxStaticText( self, -1, autoformat), 0, wxALIGN_LEFT )
+        grid.Add( wxStaticText( self, -1, fieldsLabel), 0, wxALIGN_LEFT )
+        grid.Add( wxMaskedTextCtrl( self, -1, "",
+                                    autoformat       = autoformat,
+                                    fields           = fieldsDict,
+                                    demo             = True,
+                                    name             = autoformat),
+                  0, wxALIGN_LEFT )
+
+        autoformat = "EXPDATEMMYY"
+        fieldsDict = {1: Field(choices=["03", "04", "05"], choiceRequired=True)}
+        fieldsLabel = """\
+{1: Field(choices=[
+            "03", "04", "05"],
+          choiceRequired=True)}"""
+        exp =  wxMaskedTextCtrl( self, -1, "",
+                                 autoformat       = autoformat,
+                                 fields           = fieldsDict,
+                                 demo             = True,
+                                 name             = autoformat)
+
+        grid.Add( wxStaticText( self, -1, "Restricted Expiration"), 0, wxALIGN_LEFT )
+        grid.Add( wxStaticText( self, -1, autoformat), 0, wxALIGN_LEFT )
+        grid.Add( wxStaticText( self, -1, fieldsLabel), 0, wxALIGN_LEFT )
+        grid.Add( exp, 0, wxALIGN_LEFT )
+
+        fieldsDict = {0: Field(choices=["02134","02155"], choiceRequired=True),
+                      1: Field(choices=["1234", "5678"],  choiceRequired=False)}
+        fieldsLabel = """\
+{0: Field(choices=["02134","02155"],
+          choiceRequired=True),
+ 1: Field(choices=["1234", "5678"],
+          choiceRequired=False)}"""
+        autoformat = "USZIPPLUS4"
+        zip =  wxMaskedTextCtrl( self, -1, "",
+                                 autoformat       = autoformat,
+                                 fields           = fieldsDict,
+                                 demo             = True,
+                                 name             = autoformat)
+
+        grid.Add( wxStaticText( self, -1, "Restricted Zip + 4"), 0, wxALIGN_LEFT )
+        grid.Add( wxStaticText( self, -1, autoformat), 0, wxALIGN_LEFT )
+        grid.Add( wxStaticText( self, -1, fieldsLabel), 0, wxALIGN_LEFT )
+        grid.Add( zip, 0, wxALIGN_LEFT )
+
+        self.sizer.Add( grid, 0, wxALIGN_LEFT|wxALL, border=5 )
+        self.SetSizer( self.sizer )
+        self.SetAutoLayout(1)
+        self.SetupScrolling()
+
+
+class demoPage5(wxScrolledPanel, demoMixin):
+    def __init__( self, parent, log ):
+        self.log = log
+        wxScrolledPanel.__init__( self, parent, -1 )
+        self.sizer = wxBoxSizer( wxVERTICAL )
+        label = wxStaticText( self, -1, """\
+These are examples of wxMaskedComboBox and wxIpAddrCtrl, and more useful
+configurations of a wxMaskedTextCtrl for integer and floating point input.
+""")
+        label.SetForegroundColour( "Blue" )
+        self.sizer.Add( label, 0, wxALIGN_LEFT|wxALL, 5 )
+
+        numerators = [ str(i) for i in range(1, 4) ]
+        denominators = [ string.ljust(str(i), 2) for i in [2,3,4,5,8,16,32,64] ]
+        fieldsDict = {0: Field(choices=numerators, choiceRequired=False),
+                      1: Field(choices=denominators, choiceRequired=True)}
+        choices = []
+        for n in numerators:
+            for d in denominators:
+                if n != d:
+                    choices.append( '%s/%s' % (n,d) )
+
+
+        text1 = wxStaticText( self, -1, """\
+A masked ComboBox for fraction selection.
+Choices for each side of the fraction can be
+selected with PageUp/Down:""")
+
+        fraction = wxMaskedComboBox( self, -1, "",
+                                     choices = choices,
+                                     choiceRequired = True,
+                                     mask = "#/##",
+                                     formatcodes = "F_",
+                                     validRegex = "^\d\/\d\d?",
+                                     fields = fieldsDict )
+
+
+        text2 = wxStaticText( self, -1, """
+A masked ComboBox to validate
+text from a list of numeric codes:""")
+
+        choices = ["91", "136", "305", "4579"]
+        code = wxMaskedComboBox( self, -1, choices[0],
+                                 choices = choices,
+                                 choiceRequired = True,
+                                 formatcodes = "F_r",
+                                 mask = "####")
+
+
+        text3 = wxStaticText( self, -1, """\
+A masked state selector; only "legal" values
+can be entered:""")
+
+        state = wxMaskedComboBox( self, -1, states[0],
+                                  choices = states,
+                                  autoformat="USSTATE")
+
+        text4 = wxStaticText( self, -1, "An empty IP Address entry control:")
+        ip_addr1 = wxIpAddrCtrl( self, -1, style = wxTE_PROCESS_TAB )
+
+
+        text5 = wxStaticText( self, -1, "An IP Address control with a restricted mask:")
+        ip_addr2 = wxIpAddrCtrl( self, -1, mask=" 10.  1.109.###" )
+
+
+        text6 = wxStaticText( self, -1, """\
+An IP Address control with restricted choices
+of form: 10. (1|2) . (129..255) . (0..255)""")
+        ip_addr3 = wxIpAddrCtrl( self, -1, mask=" 10.  #.###.###")
+        ip_addr3.SetFieldParameters(0, validRegex="1|2" )   # requires entry to match or not allowed
+
+
+        # This allows any value in penultimate field, but colors anything outside of the range invalid:
+        ip_addr3.SetFieldParameters(1, validRange=(129,255), validRequired=False )
+
+        text7 = wxStaticText( self, -1, """\
+A right-insert integer entry control:""")
+        intctrl = wxMaskedTextCtrl(self, -1, name='intctrl', mask="#{9}", formatcodes = '_-r,F')
+
+        text8 = wxStaticText( self, -1, """\
+A floating point entry control
+with right-insert for ordinal:""")
+        self.floatctrl = wxMaskedTextCtrl(self, -1, name='floatctrl', mask="#{9}.#{2}", formatcodes="F,_-R")
+        self.floatctrl.SetFieldParameters(0, formatcodes='r<', validRequired=True)  # right-insert, require explicit cursor movement to change fields
+        self.floatctrl.SetFieldParameters(1, defaultValue='00')                     # don't allow blank fraction
+
+        text9 = wxStaticText( self, -1, """\
+Use this control to programmatically set
+the value of the above float control:""")
+        number_combo = wxComboBox(self, -1, choices = [ '', '111', '222.22', '-3', '54321.666666666', '-1353.978',
+                                                        '1234567', '-1234567', '123456789', '-123456789.1',
+                                                        '1234567890.', '-1234567890.1' ])
+
+        grid = wxFlexGridSizer( 0, 2, vgap=10, hgap = 5 )
+        grid.Add( text1, 0, wxALIGN_LEFT )
+        grid.Add( fraction, 0, wxALIGN_LEFT )
+        grid.Add( text2, 0, wxALIGN_LEFT )
+        grid.Add( code, 0, wxALIGN_LEFT )
+        grid.Add( text3, 0, wxALIGN_LEFT )
+        grid.Add( state, 0, wxALIGN_LEFT )
+        grid.Add( text4, 0, wxALIGN_LEFT )
+        grid.Add( ip_addr1, 0, wxALIGN_LEFT )
+        grid.Add( text5, 0, wxALIGN_LEFT )
+        grid.Add( ip_addr2, 0, wxALIGN_LEFT )
+        grid.Add( text6, 0, wxALIGN_LEFT )
+        grid.Add( ip_addr3, 0, wxALIGN_LEFT )
+        grid.Add( text7, 0, wxALIGN_LEFT )
+        grid.Add( intctrl, 0, wxALIGN_LEFT )
+        grid.Add( text8, 0, wxALIGN_LEFT )
+        grid.Add( self.floatctrl, 0, wxALIGN_LEFT )
+        grid.Add( text9, 0, wxALIGN_LEFT )
+        grid.Add( number_combo, 0, wxALIGN_LEFT )
+
+        self.sizer.Add( grid, 0, wxALIGN_LEFT|wxALL, border=5 )
+        self.SetSizer( self.sizer )
+        self.SetAutoLayout(1)
+        self.SetupScrolling()
+
+        EVT_COMBOBOX( self, fraction.GetId(), self.OnComboChange )
+        EVT_COMBOBOX( self, code.GetId(), self.OnComboChange )
+        EVT_COMBOBOX( self, state.GetId(), self.OnComboChange )
+        EVT_TEXT( self, fraction.GetId(), self.OnComboChange )
+        EVT_TEXT( self, code.GetId(), self.OnComboChange )
+        EVT_TEXT( self, state.GetId(), self.OnComboChange )
+
+        EVT_TEXT( self, ip_addr1.GetId(), self.OnIpAddrChange )
+        EVT_TEXT( self, ip_addr2.GetId(), self.OnIpAddrChange )
+        EVT_TEXT( self, ip_addr3.GetId(), self.OnIpAddrChange )
+        EVT_TEXT( self, intctrl.GetId(), self.OnTextChange )
+        EVT_TEXT( self, self.floatctrl.GetId(), self.OnTextChange )
+        EVT_COMBOBOX( self, number_combo.GetId(), self.OnNumberSelect )
+
+
+    def OnComboChange( self, event ):
+        ctl = self.FindWindowById( event.GetId() )
+        if not ctl.IsValid():
+            self.log.write('current value not a valid choice')
+
+    def OnIpAddrChange( self, event ):
+        ip_addr = self.FindWindowById( event.GetId() )
+        if ip_addr.IsValid():
+            self.log.write('new addr = %s\n' % ip_addr.GetAddress() )
+
+    def OnTextChange( self, event ):
+        ctl = self.FindWindowById( event.GetId() )
+        if ctl.IsValid():
+            self.log.write('new value = %s\n' % ctl.GetValue() )
+
+    def OnNumberSelect( self, event ):
+        value = event.GetString()
+
+        # Format choice to fit into format for #{9}.#{2}, with sign position reserved:
+        # (ordinal + fraction == 11 + decimal point + sign == 13)
+        #
+        # Note: since self.floatctrl a right-aligned control, you could also just use
+        #   "%.2f", but this wouldn't work properly for a left-aligned control.
+        #   (See .SetValue() documentation in Overview.)
+        #
+        if value:
+            floattext = "%13.2f" % float(value)
+        else:
+            floattext = value   # clear the value again
+        try:
+            self.floatctrl.SetValue(floattext)
+        except:
+            type, value, tb = sys.exc_info()
+            for line in traceback.format_exception_only(type, value):
+                self.log.write(line)
+
+# ---------------------------------------------------------------------
+class TestMaskedTextCtrls(wxNotebook):
+    def __init__(self, parent, id, log):
+        wxNotebook.__init__(self, parent, id)
+        self.log = log
+
+        win = demoPage1(self, log)
+        self.AddPage(win, "General examples")
+
+        win = demoPage2(self, log)
+        self.AddPage(win, 'Auto-formatted controls')
+
+        win = demoPage3(self, log)
+        self.AddPage(win, "Using default values")
+
+        win = demoPage4(self, log)
+        self.AddPage(win, 'Using auto-complete fields')
+
+        win = demoPage5(self, log)
+        self.AddPage(win, 'Other masked controls')
+
+
+#----------------------------------------------------------------------------
+
+def runTest(frame, nb, log):
+    testWin = TestMaskedTextCtrls(nb, -1, log)
+    return testWin
+
+def RunStandalone():
+    app = wxPySimpleApp()
+    frame = wxFrame(None, -1, "Test wxMaskedTextCtrl", size=(640, 480))
+    win = TestMaskedTextCtrls(frame, -1, sys.stdout)
+    frame.Show(True)
+    app.MainLoop()
+#----------------------------------------------------------------------------
+if __name__ == "__main__":
+    RunStandalone()
+
+
+overview = """<html>
+<PRE><FONT SIZE=-1>
+""" + overviewdoc + """
+</FONT></PRE>
+"""
+
+if __name__ == "__main__":
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/NewNamespace.py b/wxPython/demo/NewNamespace.py
new file mode 100644
index 0000000000..97b04d190c
--- /dev/null
+++ b/wxPython/demo/NewNamespace.py
@@ -0,0 +1,47 @@
+
+import wx                  # This module uses the new wx namespace
+from wx import html
+from Main import opj
+
+#----------------------------------------------------------------------
+
+class TestPanel(wx.Panel):
+    def __init__(self, parent, log):
+        self.log = log
+        wx.Panel.__init__(self, parent, -1)
+
+        hwin = html.HtmlWindow(self, -1)
+        hwin.LoadFile(opj('data/wxPackage.html'))
+
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(hwin, 1, wx.EXPAND)
+
+        self.SetSizer(sizer)
+
+
+#----------------------------------------------------------------------
+
+def runTest(frame, nb, log):
+    win = TestPanel(nb, log)
+    return win
+
+#----------------------------------------------------------------------
+
+
+
+overview = """<html><body>
+<h2><center>Using the New Namespace</center></h2>
+
+This sample isn't really a demo, but rather a place to display the
+introductory doc for using the new namespace.
+
+</body></html>
+"""
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/OOR.py b/wxPython/demo/OOR.py
index e0e84b0112..d58bc42bbd 100644
--- a/wxPython/demo/OOR.py
+++ b/wxPython/demo/OOR.py
@@ -136,3 +136,12 @@ and the second will show #2 (<i>working as of 2.3.2</i>)
 
 </body></html>
 """
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/PopupMenu.py b/wxPython/demo/PopupMenu.py
new file mode 100644
index 0000000000..97966273e3
--- /dev/null
+++ b/wxPython/demo/PopupMenu.py
@@ -0,0 +1,148 @@
+
+from wxPython.wx import *
+import images
+
+#----------------------------------------------------------------------
+
+text = """\
+
+Right-click on the panel (or Ctrl-click on the Mac) to show a popup
+menu.  Then look at the code for this sample.  Notice how the
+PopupMenu method is similar to the ShowModal method of a wxDialog in
+that it doesn't return until the popup menu has been dismissed.  The
+event handlers for the popup menu items can either be attached to the
+menu itself, or to the window that invokes PopupMenu.
+"""
+
+#----------------------------------------------------------------------
+
+class TestPanel(wxPanel):
+    def __init__(self, parent, log):
+        self.log = log
+        wxPanel.__init__(self, parent, -1)
+        box = wxBoxSizer(wxVERTICAL)
+
+        # Make and layout the controls
+        fs = self.GetFont().GetPointSize()
+        bf = wxFont(fs+4, wxSWISS, wxNORMAL, wxBOLD)
+        nf = wxFont(fs+2, wxSWISS, wxNORMAL, wxNORMAL)
+
+        t = wxStaticText(self, -1, "PopupMenu")
+        t.SetFont(bf)
+        box.Add(t, 0, wxCENTER|wxALL, 5)
+
+        box.Add(wxStaticLine(self, -1), 0, wxEXPAND)
+        box.Add(10,20)
+
+        t = wxStaticText(self, -1, text)
+        t.SetFont(nf)
+        box.Add(t, 0, wxCENTER|wxALL, 5)
+
+        self.SetSizer(box)
+
+        EVT_RIGHT_UP(self, self.OnRightClick)
+
+
+    def OnRightClick(self, event):
+        self.log.WriteText("OnRightClick\n")
+
+        # only do this part the first time so the events are only bound once
+        if not hasattr(self, "popupID1"):
+            self.popupID1 = wxNewId()
+            self.popupID2 = wxNewId()
+            self.popupID3 = wxNewId()
+            self.popupID4 = wxNewId()
+            self.popupID5 = wxNewId()
+            self.popupID6 = wxNewId()
+            self.popupID7 = wxNewId()
+            self.popupID8 = wxNewId()
+            self.popupID9 = wxNewId()
+            EVT_MENU(self, self.popupID1, self.OnPopupOne)
+            EVT_MENU(self, self.popupID2, self.OnPopupTwo)
+            EVT_MENU(self, self.popupID3, self.OnPopupThree)
+            EVT_MENU(self, self.popupID4, self.OnPopupFour)
+            EVT_MENU(self, self.popupID5, self.OnPopupFive)
+            EVT_MENU(self, self.popupID6, self.OnPopupSix)
+            EVT_MENU(self, self.popupID7, self.OnPopupSeven)
+            EVT_MENU(self, self.popupID8, self.OnPopupEIght)
+            EVT_MENU(self, self.popupID9, self.OnPopupNine)
+
+        # make a menu
+        menu = wxMenu()
+        # Show how to put an icon in the menu
+        item = wxMenuItem(menu, self.popupID1,"One")
+        item.SetBitmap(images.getSmilesBitmap())
+        menu.AppendItem(item)
+        # add some other items
+        menu.Append(self.popupID2, "Two")
+        menu.Append(self.popupID3, "Three")
+        menu.Append(self.popupID4, "Four")
+        menu.Append(self.popupID5, "Five")
+        menu.Append(self.popupID6, "Six")
+        # make a submenu
+        sm = wxMenu()
+        sm.Append(self.popupID8, "sub item 1")
+        sm.Append(self.popupID9, "sub item 1")
+        menu.AppendMenu(self.popupID7, "Test Submenu", sm)
+
+
+        # Popup the menu.  If an item is selected then its handler
+        # will be called before PopupMenu returns.
+        self.PopupMenu(menu, event.GetPosition())
+        menu.Destroy()
+
+
+    def OnPopupOne(self, event):
+        self.log.WriteText("Popup one\n")
+
+    def OnPopupTwo(self, event):
+        self.log.WriteText("Popup two\n")
+
+    def OnPopupThree(self, event):
+        self.log.WriteText("Popup three\n")
+
+    def OnPopupFour(self, event):
+        self.log.WriteText("Popup four\n")
+
+    def OnPopupFive(self, event):
+        self.log.WriteText("Popup five\n")
+
+    def OnPopupSix(self, event):
+        self.log.WriteText("Popup six\n")
+
+    def OnPopupSeven(self, event):
+        self.log.WriteText("Popup seven\n")
+
+    def OnPopupEIght(self, event):
+        self.log.WriteText("Popup eight\n")
+
+    def OnPopupNine(self, event):
+        self.log.WriteText("Popup nine\n")
+
+
+
+
+
+#----------------------------------------------------------------------
+
+def runTest(frame, nb, log):
+    win = TestPanel(nb, log)
+    return win
+
+#----------------------------------------------------------------------
+
+
+
+overview = """<html><body>
+<h2><center>PopupMenu</center></h2>
+""" + text + """
+</body></html>
+"""
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/PrintFramework.py b/wxPython/demo/PrintFramework.py
index 36c3ea5a2b..d7a78e1dd4 100644
--- a/wxPython/demo/PrintFramework.py
+++ b/wxPython/demo/PrintFramework.py
@@ -79,7 +79,7 @@ class MyPrintout(wxPrintout):
 
         #-------------------------------------------
 
-        self.canvas.DoDrawing(dc)
+        self.canvas.DoDrawing(dc, True)
         dc.DrawText("Page: %d" % page, marginX/2, maxY-marginY)
 
         return True
@@ -176,3 +176,12 @@ def runTest(frame, nb, log):
 overview = """\
 """
 
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/PyCrust.py b/wxPython/demo/PyCrust.py
index 4d2ae22b32..5bf452e2cc 100644
--- a/wxPython/demo/PyCrust.py
+++ b/wxPython/demo/PyCrust.py
@@ -1,20 +1,18 @@
 
-
-from wxPython.lib.PyCrust import shell, version
+from wx import py
 
 
 #----------------------------------------------------------------------
 
-intro = 'Welcome To PyCrust %s - The Flakiest Python Shell' % version.VERSION
+intro = 'Welcome To PyCrust %s - The Flakiest Python Shell' % py.version.VERSION
 
 def runTest(frame, nb, log):
-    win = shell.Shell(nb, -1, introText=intro)
+    win = py.crust.Crust(nb, intro=intro)
     return win
 
 #----------------------------------------------------------------------
 
-overview = shell.__doc__
-
+overview = py.filling.__doc__ + "\n\n" + py.crust.__doc__
 
 if __name__ == '__main__':
     import sys,os
diff --git a/wxPython/demo/PyCrustWithFilling.py b/wxPython/demo/PyCrustWithFilling.py
deleted file mode 100644
index a90c61649a..0000000000
--- a/wxPython/demo/PyCrustWithFilling.py
+++ /dev/null
@@ -1,28 +0,0 @@
-
-from wxPython.wx import wxSplitterWindow
-from wxPython.lib.PyCrust import shell, version, filling
-
-
-#----------------------------------------------------------------------
-
-intro = 'Welcome To PyCrust %s - The Flakiest Python Shell' % version.VERSION
-
-def runTest(frame, nb, log):
-    win = wxSplitterWindow(nb, -1, size=(640, 480))
-    shellWin = shell.Shell(win, -1, introText=intro)
-    fillingWin = filling.Filling(win, -1, size=(640, 480),
-                                 rootObject=shellWin.interp.locals,
-                                 rootIsNamespace=1
-                                 )
-    win.SplitHorizontally(shellWin, fillingWin)
-    return win
-
-#----------------------------------------------------------------------
-
-overview = filling.__doc__
-
-if __name__ == '__main__':
-    import sys,os
-    import run
-    run.main(['', os.path.basename(sys.argv[0])])
-
diff --git a/wxPython/demo/PyShell.py b/wxPython/demo/PyShell.py
new file mode 100644
index 0000000000..d93fc9b4ca
--- /dev/null
+++ b/wxPython/demo/PyShell.py
@@ -0,0 +1,23 @@
+
+
+from wx import py
+
+
+#----------------------------------------------------------------------
+
+intro = 'Welcome To PyCrust %s - The Flakiest Python Shell' % py.version.VERSION
+
+def runTest(frame, nb, log):
+    win = py.shell.Shell(nb, -1, introText=intro)
+    return win
+
+#----------------------------------------------------------------------
+
+overview = py.shell.__doc__
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/PythonEvents.py b/wxPython/demo/PythonEvents.py
index d7454aac6b..98301706ff 100644
--- a/wxPython/demo/PythonEvents.py
+++ b/wxPython/demo/PythonEvents.py
@@ -83,3 +83,10 @@ This demo is a contrived example of defining an event class in wxPython and send
 
 
 
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/ShapedWindow.py b/wxPython/demo/ShapedWindow.py
new file mode 100644
index 0000000000..f5097a91f5
--- /dev/null
+++ b/wxPython/demo/ShapedWindow.py
@@ -0,0 +1,122 @@
+
+from wxPython.wx import *
+import images
+
+#----------------------------------------------------------------------
+
+class TestFrame(wxFrame):
+    def __init__(self, parent, log):
+        self.log = log
+        wxFrame.__init__(self, parent, -1, "Shaped Window",
+                         style =
+                           wxFRAME_SHAPED
+                         | wxSIMPLE_BORDER
+                         | wxFRAME_NO_TASKBAR
+                         | wxSTAY_ON_TOP
+                         )
+
+        self.hasShape = False
+        self.delta = wxPoint(0,0)
+
+        EVT_LEFT_DCLICK(self, self.OnDoubleClick)
+        EVT_LEFT_DOWN(self, self.OnLeftDown)
+        EVT_LEFT_UP(self, self.OnLeftUp)
+        EVT_MOTION(self, self.OnMouseMove)
+        EVT_RIGHT_UP(self, self.OnExit)
+        EVT_PAINT(self, self.OnPaint)
+
+        self.bmp = images.getTuxBitmap()
+        w, h = self.bmp.GetWidth(), self.bmp.GetHeight()
+        self.SetClientSize( (w, h) )
+
+        if wxPlatform != "__WXMAC__":
+            # wxMac clips the tooltip to the window shape, YUCK!!!
+            self.SetToolTipString("Right-click to close the window\n"
+                                  "Double-click the image to set/unset the window shape")
+
+        if wxPlatform == "__WXGTK__":
+            # wxGTK requires that the window be created before you can
+            # set its shape, so delay the call to SetWindowShape until
+            # this event.
+            EVT_WINDOW_CREATE(self, self.SetWindowShape)
+        else:
+            # On wxMSW and wxMac the window has already been created, so go for it.
+            self.SetWindowShape()
+
+        dc = wxClientDC(self)
+        dc.DrawBitmap(self.bmp, 0,0, True)
+
+
+    def SetWindowShape(self, *evt):
+        # Use the bitmap's mask to determine the region
+        r = wxRegionFromBitmap(self.bmp)
+        self.hasShape = self.SetShape(r)
+
+
+    def OnDoubleClick(self, evt):
+        if self.hasShape:
+            self.SetShape(wxRegion())
+            self.hasShape = False
+        else:
+            self.SetWindowShape()
+
+
+    def OnPaint(self, evt):
+        dc = wxPaintDC(self)
+        dc.DrawBitmap(self.bmp, 0,0, True)
+
+    def OnExit(self, evt):
+        self.Close()
+
+
+    def OnLeftDown(self, evt):
+        self.CaptureMouse()
+        pos = self.ClientToScreen(evt.GetPosition())
+        origin = self.GetPosition()
+        dx = pos.x - origin.x
+        dy = pos.y - origin.y
+        self.delta = wxPoint(dx, dy)
+
+
+    def OnLeftUp(self, evt):
+        if self.HasCapture():
+            self.ReleaseMouse()
+
+
+    def OnMouseMove(self, evt):
+        if evt.Dragging() and evt.LeftIsDown():
+            pos = self.ClientToScreen(evt.GetPosition())
+            fp = (pos.x - self.delta.x, pos.y - self.delta.y)
+            self.Move(fp)
+
+
+#----------------------------------------------------------------------
+
+def runTest(frame, nb, log):
+    win = TestFrame(nb, log)
+    frame.otherWin = win
+    win.Show(True)
+
+
+#----------------------------------------------------------------------
+
+
+
+overview = """<html><body>
+<h2><center>Shaped Window</center></h2>
+
+Top level windows now have a SetShape method that lets you set a
+non-rectangular shape for the window using a wxRegion.  All pixels
+outside of the region will not be drawn and the window will not be
+sensitive to the mouse in those areas either.
+
+</body></html>
+"""
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/Sizers.py b/wxPython/demo/Sizers.py
index ab95d06fd7..0fb4657edc 100644
--- a/wxPython/demo/Sizers.py
+++ b/wxPython/demo/Sizers.py
@@ -141,11 +141,11 @@ def makeBoxInBox(win):
     box.Add(wxButton(win, 1010, "one"), 0, wxEXPAND)
 
     box2 = wxBoxSizer(wxHORIZONTAL)
-    box2.AddMany([ (wxButton(win, 1010, "two"), 0, wxEXPAND),
-                   (wxButton(win, 1010, "three"), 0, wxEXPAND),
-                   (wxButton(win, 1010, "four"), 0, wxEXPAND),
-                   (wxButton(win, 1010, "five"), 0, wxEXPAND),
-                   ])
+    box2.Add(wxButton(win, 1010, "two"), 0, wxEXPAND)
+    btn3 = wxButton(win, 1010, "three")
+    box2.Add(btn3, 0, wxEXPAND)
+    box2.Add(wxButton(win, 1010, "four"), 0, wxEXPAND)
+    box2.Add(wxButton(win, 1010, "five"), 0, wxEXPAND)
 
     box3 = wxBoxSizer(wxVERTICAL)
     box3.AddMany([ (wxButton(win, 1010, "six"),   0, wxEXPAND),
@@ -159,6 +159,8 @@ def makeBoxInBox(win):
 
     box.Add(wxButton(win, 1010, "ten"), 0, wxEXPAND)
 
+    ##box.Hide(btn3)
+
     return box
 
 #----------------------------------------------------------------------
diff --git a/wxPython/demo/SlashDot.py b/wxPython/demo/SlashDot.py
deleted file mode 100644
index eb0ded644e..0000000000
--- a/wxPython/demo/SlashDot.py
+++ /dev/null
@@ -1,379 +0,0 @@
-#!/usr/bin/python
-"""This is SlashDot 1.2
-
-    It's the obligatory Slashdot.org headlines reader that
-any modern widget set/library must have in order to be taken
-seriously :-)
-
-    Usage is quite simple; wxSlash attempts to download the
-'ultramode.txt' file from http://slashdot.org, which
-contains the headlines in a computer friendly format. It
-then displays said headlines in a wxWindows list control.
-
-    You can read articles using either Python's html library
-or an external browser. Uncheck the 'browser->internal' menu
-item to use the latter option.  Use the settings dialog box
-to set which external browser is started.
-
-    This code is available under the wxWindows license, see
-elsewhere. If you modify this code, be aware of the fact
-that slashdot.org's maintainer, CmdrTaco, explicitly asks
-'ultramode.txt' downloaders not to do this automatically
-more than twice per hour. If this feature is abused,
-CmdrTaco may remove the ultramode file completely and that
-will make a *lot* of people unhappy.
-
-    I want to thank Alex Shnitman whose slashes.pl
-(Perl/GTK) script gave me the idea for this applet.
-
-    Have fun with it,
-
-    Harm van der Heijden (H.v.d.Heijden@phys.tue.nl)
-"""
-
-from wxPython.wx import *
-from httplib import HTTP
-from htmllib import HTMLParser
-import os
-import re
-import formatter
-
-class HTMLTextView(wxFrame):
-    def __init__(self, parent, id, title='HTMLTextView', url=None):
-        wxFrame.__init__(self, parent, id, title, wxPyDefaultPosition,
-                         wxSize(600,400))
-
-        EVT_CLOSE(self, self.OnCloseWindow)
-        self.mainmenu = wxMenuBar()
-
-        menu = wxMenu()
-        menu.Append(201, '&Open URL...', 'Open URL')
-        EVT_MENU(self, 201, self.OnFileOpen)
-        menu.Append(209, 'E&xit', 'Exit viewer')
-        EVT_MENU(self, 209, self.OnFileExit)
-
-        self.mainmenu.Append(menu, '&File')
-        self.SetMenuBar(self.mainmenu)
-        self.CreateStatusBar(1)
-
-        self.text = wxTextCtrl(self, -1, "", wxPyDefaultPosition,
-                               wxPyDefaultSize, wxTE_MULTILINE | wxTE_READONLY)
-
-        if (url):
-            self.OpenURL(url)
-
-    def logprint(self, x):
-        self.SetStatusText(x)
-
-    def OpenURL(self, url):
-        self.url = url
-        m = re.match('file:(\S+)\s*', url)
-        if m:
-            f = open(m.groups()[0],'r')
-        else:
-            m = re.match('http://([^/]+)(/\S*)\s*', url)
-            if m:
-                host = m.groups()[0]
-                path = m.groups()[1]
-            else:
-                m = re.match('http://(\S+)\s*', url)
-                if not m:
-                    # Invalid URL
-                    self.logprint("Invalid or unsupported URL: %s" % (url))
-                    return
-                host = m.groups()[0]
-                path = ''
-            f = RetrieveAsFile(host,path,self.logprint)
-        if not f:
-            self.logprint("Could not open %s" % (url))
-            return
-        self.logprint("Receiving data...")
-        data = f.read()
-        tmp = open('tmphtml.txt','w')
-        fmt = formatter.AbstractFormatter(formatter.DumbWriter(tmp))
-        p = HTMLParser(fmt)
-        self.logprint("Parsing data...")
-        p.feed(data)
-        p.close()
-        tmp.close()
-        tmp = open('tmphtml.txt', 'r')
-        self.text.SetValue(tmp.read())
-        self.SetTitle(url)
-        self.logprint(url)
-
-    def OnFileOpen(self, event):
-        dlg = wxTextEntryDialog(self, "Enter URL to open:", "")
-        if dlg.ShowModal() == wxID_OK:
-            url = dlg.GetValue()
-        else:
-            url = None
-        if url:
-            self.OpenURL(url)
-
-    def OnFileExit(self, event):
-        self.Close()
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-
-
-def ParseSlashdot(f):
-    art_sep = re.compile('%%\r?\n')
-    line_sep = re.compile('\r?\n')
-    data = f.read()
-    list = art_sep.split(data)
-    art_list = []
-    for i in range(1,len(list)-1):
-        art_list.append(line_sep.split(list[i]))
-    return art_list
-
-def myprint(x):
-    print x
-
-def RetrieveAsFile(host, path='', logprint = myprint):
-    try:
-        h = HTTP(host)
-    except:
-        logprint("Failed to create HTTP connection to %s... is the network available?" % (host))
-        return None
-    h.putrequest('GET',path)
-    h.putheader('Accept','text/html')
-    h.putheader('Accept','text/plain')
-    h.endheaders()
-    errcode, errmsg, headers = h.getreply()
-    if errcode != 200:
-        logprint("HTTP error code %d: %s" % (errcode, errmsg))
-        return None
-    f = h.getfile()
-#    f = open('/home/harm/ultramode.txt','r')
-    return f
-
-
-class AppStatusBar(wxStatusBar):
-    def __init__(self, parent):
-        wxStatusBar.__init__(self,parent, -1)
-        self.SetFieldsCount(2)
-        self.SetStatusWidths([-1, 100])
-        self.but = wxButton(self, 1001, "Refresh")
-        EVT_BUTTON(self, 1001, parent.OnViewRefresh)
-        EVT_SIZE(self, self.OnSize)
-        self.OnSize(None)
-
-    def logprint(self,x):
-        self.SetStatusText(x,0)
-
-    def OnSize(self, event):
-        rect = self.GetFieldRect(1)
-        self.but.SetPosition(wxPoint(rect.x+2, rect.y+2))
-        self.but.SetSize(wxSize(rect.width-4, rect.height-4))
-
-# This is a simple timer class to start a function after a short delay;
-class QuickTimer(wxTimer):
-    def __init__(self, func, wait=100):
-        wxTimer.__init__(self)
-        self.callback = func
-        self.Start(wait); # wait .1 second (.001 second doesn't work. why?)
-    def Notify(self):
-        self.Stop();
-        apply(self.callback, ());
-
-class AppFrame(wxFrame):
-    def __init__(self, parent, id, title):
-        wxFrame.__init__(self, parent, id, title, wxPyDefaultPosition,
-                         wxSize(650, 250))
-
-        # if the window manager closes the window:
-        EVT_CLOSE(self, self.OnCloseWindow);
-
-        # Now Create the menu bar and items
-        self.mainmenu = wxMenuBar()
-
-        menu = wxMenu()
-        menu.Append(209, 'E&xit', 'Enough of this already!')
-        EVT_MENU(self, 209, self.OnFileExit)
-        self.mainmenu.Append(menu, '&File')
-        menu = wxMenu()
-        menu.Append(210, '&Refresh', 'Refresh headlines')
-        EVT_MENU(self, 210, self.OnViewRefresh)
-        menu.Append(211, '&Slashdot Index', 'View Slashdot index')
-        EVT_MENU(self, 211, self.OnViewIndex)
-        menu.Append(212, 'Selected &Article', 'View selected article')
-        EVT_MENU(self, 212, self.OnViewArticle)
-        self.mainmenu.Append(menu, '&View')
-        menu = wxMenu()
-        menu.Append(220, '&Internal', 'Use internal text browser',True)
-        menu.Check(220, True)
-        self.UseInternal = 1;
-        EVT_MENU(self, 220, self.OnBrowserInternal)
-        menu.Append(222, '&Settings...', 'External browser Settings')
-        EVT_MENU(self, 222, self.OnBrowserSettings)
-        self.mainmenu.Append(menu, '&Browser')
-        menu = wxMenu()
-        menu.Append(230, '&About', 'Some documentation');
-        EVT_MENU(self, 230, self.OnAbout)
-        self.mainmenu.Append(menu, '&Help')
-
-        self.SetMenuBar(self.mainmenu)
-
-        if wxPlatform == '__WXGTK__':
-            # I like lynx. Also Netscape 4.5 doesn't react to my cmdline opts
-            self.BrowserSettings = "xterm -e lynx %s &"
-        elif wxPlatform == '__WXMSW__':
-            # netscape 4.x likes to hang out here...
-            self.BrowserSettings = '\\progra~1\\Netscape\\Communicator\\Program\\netscape.exe %s'
-        else:
-            # a wild guess...
-            self.BrowserSettings = 'netscape %s'
-
-        # A status bar to tell people what's happening
-        self.sb = AppStatusBar(self)
-        self.SetStatusBar(self.sb)
-
-        self.list = wxListCtrl(self, 1100, style=wxLC_REPORT)
-        self.list.InsertColumn(0, 'Subject')
-        self.list.InsertColumn(1, 'Date')
-        self.list.InsertColumn(2, 'Posted by')
-        self.list.InsertColumn(3, 'Comments')
-        self.list.SetColumnWidth(0, 300)
-        self.list.SetColumnWidth(1, 150)
-        self.list.SetColumnWidth(2, 100)
-        self.list.SetColumnWidth(3, 100)
-
-        EVT_LIST_ITEM_SELECTED(self, 1100, self.OnItemSelected)
-        EVT_LEFT_DCLICK(self.list, self.OnLeftDClick)
-
-        self.logprint("Connecting to slashdot... Please wait.")
-        # wxYield doesn't yet work here. That's why we use a timer
-        # to make sure that we see some GUI stuff before the slashdot
-        # file is transfered.
-        self.timer = QuickTimer(self.DoRefresh, 1000)
-
-    def logprint(self, x):
-        self.sb.logprint(x)
-
-    def OnFileExit(self, event):
-        self.Destroy()
-
-    def DoRefresh(self):
-        f = RetrieveAsFile('slashdot.org','/ultramode.txt',self.sb.logprint)
-        art_list = ParseSlashdot(f)
-        self.list.DeleteAllItems()
-        self.url = []
-        self.current = -1
-        i = 0;
-        for article in art_list:
-            self.list.InsertStringItem(i, article[0])
-            self.list.SetStringItem(i, 1, article[2])
-            self.list.SetStringItem(i, 2, article[3])
-            self.list.SetStringItem(i, 3, article[6])
-            self.url.append(article[1])
-            i = i + 1
-        self.logprint("File retrieved OK.")
-
-    def OnViewRefresh(self, event):
-        self.logprint("Connecting to slashdot... Please wait.");
-        wxYield()
-        self.DoRefresh()
-
-    def DoViewIndex(self):
-        if self.UseInternal:
-            self.view = HTMLTextView(self, -1, 'slashdot.org',
-                                     'http://slashdot.org')
-            self.view.Show(True)
-        else:
-            self.logprint(self.BrowserSettings % ('http://slashdot.org'))
-            #os.system(self.BrowserSettings % ('http://slashdot.org'))
-            wxExecute(self.BrowserSettings % ('http://slashdot.org'))
-        self.logprint("OK")
-
-    def OnViewIndex(self, event):
-        self.logprint("Starting browser... Please wait.")
-        wxYield()
-        self.DoViewIndex()
-
-    def DoViewArticle(self):
-        if self.current<0: return
-        url = self.url[self.current]
-        if self.UseInternal:
-            self.view = HTMLTextView(self, -1, url, url)
-            self.view.Show(True)
-        else:
-            self.logprint(self.BrowserSettings % (url))
-            os.system(self.BrowserSettings % (url))
-        self.logprint("OK")
-
-    def OnViewArticle(self, event):
-        self.logprint("Starting browser... Please wait.")
-        wxYield()
-        self.DoViewArticle()
-
-    def OnBrowserInternal(self, event):
-        if self.mainmenu.Checked(220):
-            self.UseInternal = 1
-        else:
-            self.UseInternal = 0
-
-    def OnBrowserSettings(self, event):
-        dlg = wxTextEntryDialog(self, "Enter command to view URL.\nUse %s as a placeholder for the URL.", "", self.BrowserSettings);
-        if dlg.ShowModal() == wxID_OK:
-            self.BrowserSettings = dlg.GetValue()
-
-    def OnAbout(self, event):
-        dlg = wxMessageDialog(self, __doc__, "wxSlash", wxOK | wxICON_INFORMATION)
-        dlg.ShowModal()
-
-    def OnItemSelected(self, event):
-        self.current = event.m_itemIndex
-        self.logprint("URL: %s" % (self.url[self.current]))
-
-    def OnLeftDClick(self, event):
-        (x,y) = event.Position();
-        # Actually, we should convert x,y to logical coords using
-        # a dc, but only for a wxScrolledWindow widget.
-        # Now wxGTK derives wxListCtrl from wxScrolledWindow,
-        # and wxMSW from wxControl... So that doesn't work.
-        #dc = wxClientDC(self.list)
-        ##self.list.PrepareDC(dc)
-        #x = dc.DeviceToLogicalX( event.GetX() )
-        #y = dc.DeviceToLogicalY( event.GetY() )
-        id = self.list.HitTest(wxPoint(x,y))
-        #print "Double click at %d %d" % (x,y), id
-        # Okay, we got a double click. Let's assume it's the current selection
-        wxYield()
-        self.OnViewArticle(event)
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-
-
-#---------------------------------------------------------------------------
-# if running standalone
-
-if __name__ == '__main__':
-    class MyApp(wxApp):
-        def OnInit(self):
-            frame = AppFrame(None, -1, "Slashdot Breaking News")
-            frame.Show(True)
-            self.SetTopWindow(frame)
-            return True
-
-    app = MyApp(0)
-    app.MainLoop()
-
-
-
-#---------------------------------------------------------------------------
-# if running as part of the Demo Framework...
-
-def runTest(frame, nb, log):
-    win = AppFrame(None, -1, "Slashdot Breaking News")
-    frame.otherWin = win
-    win.Show(True)
-
-
-overview = __doc__
-
-
-#----------------------------------------------------------------------------
-
-
diff --git a/wxPython/demo/TablePrint.py b/wxPython/demo/TablePrint.py
index 51b075c3da..7b370709d9 100644
--- a/wxPython/demo/TablePrint.py
+++ b/wxPython/demo/TablePrint.py
@@ -205,3 +205,12 @@ when the framework allows for it.
 
 """ % os.path.join(os.path.dirname(wxPython.lib.printout.__file__), "printout.py")
 
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/Threads.py b/wxPython/demo/Threads.py
index 4c165eeb89..05883731b9 100644
--- a/wxPython/demo/Threads.py
+++ b/wxPython/demo/Threads.py
@@ -244,3 +244,11 @@ ProcessEvent does, it processes it later from the context of the GUI
 thread.
 
 """
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/URLDragAndDrop.py b/wxPython/demo/URLDragAndDrop.py
index 16b3b96006..51c1a340ad 100644
--- a/wxPython/demo/URLDragAndDrop.py
+++ b/wxPython/demo/URLDragAndDrop.py
@@ -121,3 +121,12 @@ def runTest(frame, nb, log):
 
 overview = """\
 """
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/Unicode.py b/wxPython/demo/Unicode.py
index c6910a05c4..ec8a052bf9 100644
--- a/wxPython/demo/Unicode.py
+++ b/wxPython/demo/Unicode.py
@@ -139,3 +139,12 @@ and then pass the unicode to the wxPython method.
 
 </body></html>
 """
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/XMLtreeview.py b/wxPython/demo/XMLtreeview.py
index d57642958e..081ac5f0f6 100644
--- a/wxPython/demo/XMLtreeview.py
+++ b/wxPython/demo/XMLtreeview.py
@@ -110,3 +110,11 @@ else:
 overview = """\
 """
 
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/bmp_source/Tux.png b/wxPython/demo/bmp_source/Tux.png
new file mode 100644
index 0000000000000000000000000000000000000000..fcc18c1296d650b9ad75f9dc61b15d6cb0d09b03
GIT binary patch
literal 31315
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

literal 0
HcmV?d00001

diff --git a/wxPython/demo/data/stc.h.html b/wxPython/demo/data/stc.h.html
index 87f144bf8d..d2fb4ca78e 100644
--- a/wxPython/demo/data/stc.h.html
+++ b/wxPython/demo/data/stc.h.html
@@ -1,7 +1,7 @@
 <html>
 <head>
-<title>/home/others/projects/wx2.3/contrib/include/wx/stc/stc.h.html</title>
-<meta name="Generator" content="Vim/6.0">
+<title>/home/work/projects/wx2.4/contrib/include/wx/stc/stc.h.html</title>
+<meta name="Generator" content="Vim/6.1">
 </head>
 <body bgcolor="#f5deb3" text="#000000">
 <pre>
@@ -31,6 +31,30 @@
 <font color="#a020f0">#include </font><font color="#ff00ff">&lt;wx/wx.h&gt;</font>
 <font color="#a020f0">#include </font><font color="#ff00ff">&lt;wx/dnd.h&gt;</font>
 
+<font color="#a020f0">#ifndef SWIG</font>
+<font color="#0000ff">/*</font>
+<font color="#0000ff"> * If we're using wx in Dynamic Library format do we</font>
+<font color="#0000ff"> * want wxStyledTextCtrl to be in DLL form as well?</font>
+<font color="#0000ff"> */</font>
+<font color="#a020f0">#if defined(WXUSINGDLL) &amp;&amp; \</font>
+<font color="#a020f0">    (defined(WXMAKING_STC_DLL) || defined(WXUSING_STC_DLL))</font>
+
+<font color="#a020f0">#if defined(WXMAKING_STC_DLL)</font>
+    <font color="#0000ff">// When building the DLL WXSTC_DECLSPEC exports classes</font>
+<font color="#a020f0">#   define WXSTC_DECLSPEC            WXEXPORT</font>
+<font color="#a020f0">#elif defined(WXUSING_STC_DLL)</font>
+    <font color="#0000ff">// When using the DLL WXSTC_DECLSPEC imports classes</font>
+<font color="#a020f0">#   define WXSTC_DECLSPEC            WXIMPORT</font>
+<font color="#a020f0">#endif</font> <font color="#0000ff">// defined(WXBUILD_STC_DLL)</font>
+
+<font color="#a020f0">#else</font>
+<font color="#0000ff">// When building the static library nullify the effect of WXSTC_DECLSPEC</font>
+<font color="#a020f0">#define WXSTC_DECLSPEC</font>
+<font color="#a020f0">#endif</font> <font color="#0000ff">// WXUSINGDLL &amp;&amp; (WXMAKING_STC_DLL || WXUSING_STC_DLL)</font>
+
+<font color="#a020f0">#endif</font> <font color="#0000ff">// SWIG</font>
+
+
 <font color="#0000ff">//----------------------------------------------------------------------</font>
 
 <font color="#0000ff">// Should a wxPopupWindow be used for the call tips and autocomplete windows?</font>
@@ -50,12 +74,6 @@
 <font color="#a020f0">#define wxSTC_START </font><font color="#ff00ff">2000</font>
 <font color="#a020f0">#define wxSTC_OPTIONAL_START </font><font color="#ff00ff">3000</font>
 <font color="#a020f0">#define wxSTC_LEXER_START </font><font color="#ff00ff">4000</font>
-
-<font color="#0000ff">// Redoes the next action on the undo history.</font>
-<font color="#a020f0">#define wxSTC_CMD_REDO </font><font color="#ff00ff">2011</font>
-
-<font color="#0000ff">// Select all the text in the document.</font>
-<font color="#a020f0">#define wxSTC_CMD_SELECTALL </font><font color="#ff00ff">2013</font>
 <font color="#a020f0">#define wxSTC_WS_INVISIBLE </font><font color="#ff00ff">0</font>
 <font color="#a020f0">#define wxSTC_WS_VISIBLEALWAYS </font><font color="#ff00ff">1</font>
 <font color="#a020f0">#define wxSTC_WS_VISIBLEAFTERINDENT </font><font color="#ff00ff">2</font>
@@ -66,6 +84,9 @@
 <font color="#0000ff">// The SC_CP_UTF8 value can be used to enter Unicode mode.</font>
 <font color="#0000ff">// This is the same value as CP_UTF8 in Windows</font>
 <font color="#a020f0">#define wxSTC_CP_UTF8 </font><font color="#ff00ff">65001</font>
+
+<font color="#0000ff">// The SC_CP_DBCS value can be used to indicate a DBCS mode for GTK+.</font>
+<font color="#a020f0">#define wxSTC_CP_DBCS </font><font color="#ff00ff">1</font>
 <font color="#a020f0">#define wxSTC_MARKER_MAX </font><font color="#ff00ff">31</font>
 <font color="#a020f0">#define wxSTC_MARK_CIRCLE </font><font color="#ff00ff">0</font>
 <font color="#a020f0">#define wxSTC_MARK_ROUNDRECT </font><font color="#ff00ff">1</font>
@@ -96,6 +117,7 @@
 <font color="#a020f0">#define wxSTC_MARK_BACKGROUND </font><font color="#ff00ff">22</font>
 <font color="#a020f0">#define wxSTC_MARK_DOTDOTDOT </font><font color="#ff00ff">23</font>
 <font color="#a020f0">#define wxSTC_MARK_ARROWS </font><font color="#ff00ff">24</font>
+<font color="#a020f0">#define wxSTC_MARK_PIXMAP </font><font color="#ff00ff">25</font>
 <font color="#a020f0">#define wxSTC_MARK_CHARACTER </font><font color="#ff00ff">10000</font>
 
 <font color="#0000ff">// Markers used for outlining column.</font>
@@ -174,22 +196,20 @@
 <font color="#a020f0">#define wxSTC_FIND_MATCHCASE </font><font color="#ff00ff">4</font>
 <font color="#a020f0">#define wxSTC_FIND_WORDSTART </font><font color="#ff00ff">0x00100000</font>
 <font color="#a020f0">#define wxSTC_FIND_REGEXP </font><font color="#ff00ff">0x00200000</font>
-
-<font color="#0000ff">// Undo one action in the undo history.</font>
-<font color="#a020f0">#define wxSTC_CMD_UNDO </font><font color="#ff00ff">2176</font>
-
-<font color="#0000ff">// Cut the selection to the clipboard.</font>
-<font color="#a020f0">#define wxSTC_CMD_CUT </font><font color="#ff00ff">2177</font>
-
-<font color="#0000ff">// Copy the selection to the clipboard.</font>
-<font color="#a020f0">#define wxSTC_CMD_COPY </font><font color="#ff00ff">2178</font>
-
-<font color="#0000ff">// Paste the contents of the clipboard into the document replacing the selection.</font>
-<font color="#a020f0">#define wxSTC_CMD_PASTE </font><font color="#ff00ff">2179</font>
 <font color="#a020f0">#define wxSTC_FOLDLEVELBASE </font><font color="#ff00ff">0x400</font>
 <font color="#a020f0">#define wxSTC_FOLDLEVELWHITEFLAG </font><font color="#ff00ff">0x1000</font>
 <font color="#a020f0">#define wxSTC_FOLDLEVELHEADERFLAG </font><font color="#ff00ff">0x2000</font>
+<font color="#a020f0">#define wxSTC_FOLDLEVELBOXHEADERFLAG </font><font color="#ff00ff">0x4000</font>
+<font color="#a020f0">#define wxSTC_FOLDLEVELBOXFOOTERFLAG </font><font color="#ff00ff">0x8000</font>
+<font color="#a020f0">#define wxSTC_FOLDLEVELCONTRACTED </font><font color="#ff00ff">0x10000</font>
+<font color="#a020f0">#define wxSTC_FOLDLEVELUNINDENT </font><font color="#ff00ff">0x20000</font>
 <font color="#a020f0">#define wxSTC_FOLDLEVELNUMBERMASK </font><font color="#ff00ff">0x0FFF</font>
+<font color="#a020f0">#define wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED </font><font color="#ff00ff">0x0002</font>
+<font color="#a020f0">#define wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED </font><font color="#ff00ff">0x0004</font>
+<font color="#a020f0">#define wxSTC_FOLDFLAG_LINEAFTER_EXPANDED </font><font color="#ff00ff">0x0008</font>
+<font color="#a020f0">#define wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED </font><font color="#ff00ff">0x0010</font>
+<font color="#a020f0">#define wxSTC_FOLDFLAG_LEVELNUMBERS </font><font color="#ff00ff">0x0040</font>
+<font color="#a020f0">#define wxSTC_FOLDFLAG_BOX </font><font color="#ff00ff">0x0001</font>
 <font color="#a020f0">#define wxSTC_TIME_FOREVER </font><font color="#ff00ff">10000000</font>
 <font color="#a020f0">#define wxSTC_WRAP_NONE </font><font color="#ff00ff">0</font>
 <font color="#a020f0">#define wxSTC_WRAP_WORD </font><font color="#ff00ff">1</font>
@@ -197,163 +217,11 @@
 <font color="#a020f0">#define wxSTC_CACHE_CARET </font><font color="#ff00ff">1</font>
 <font color="#a020f0">#define wxSTC_CACHE_PAGE </font><font color="#ff00ff">2</font>
 <font color="#a020f0">#define wxSTC_CACHE_DOCUMENT </font><font color="#ff00ff">3</font>
-
-<font color="#0000ff">// Move caret down one line.</font>
-<font color="#a020f0">#define wxSTC_CMD_LINEDOWN </font><font color="#ff00ff">2300</font>
-
-<font color="#0000ff">// Move caret down one line extending selection to new caret position.</font>
-<font color="#a020f0">#define wxSTC_CMD_LINEDOWNEXTEND </font><font color="#ff00ff">2301</font>
-
-<font color="#0000ff">// Move caret up one line.</font>
-<font color="#a020f0">#define wxSTC_CMD_LINEUP </font><font color="#ff00ff">2302</font>
-
-<font color="#0000ff">// Move caret up one line extending selection to new caret position.</font>
-<font color="#a020f0">#define wxSTC_CMD_LINEUPEXTEND </font><font color="#ff00ff">2303</font>
-
-<font color="#0000ff">// Move caret left one character.</font>
-<font color="#a020f0">#define wxSTC_CMD_CHARLEFT </font><font color="#ff00ff">2304</font>
-
-<font color="#0000ff">// Move caret left one character extending selection to new caret position.</font>
-<font color="#a020f0">#define wxSTC_CMD_CHARLEFTEXTEND </font><font color="#ff00ff">2305</font>
-
-<font color="#0000ff">// Move caret right one character.</font>
-<font color="#a020f0">#define wxSTC_CMD_CHARRIGHT </font><font color="#ff00ff">2306</font>
-
-<font color="#0000ff">// Move caret right one character extending selection to new caret position.</font>
-<font color="#a020f0">#define wxSTC_CMD_CHARRIGHTEXTEND </font><font color="#ff00ff">2307</font>
-
-<font color="#0000ff">// Move caret left one word.</font>
-<font color="#a020f0">#define wxSTC_CMD_WORDLEFT </font><font color="#ff00ff">2308</font>
-
-<font color="#0000ff">// Move caret left one word extending selection to new caret position.</font>
-<font color="#a020f0">#define wxSTC_CMD_WORDLEFTEXTEND </font><font color="#ff00ff">2309</font>
-
-<font color="#0000ff">// Move caret right one word.</font>
-<font color="#a020f0">#define wxSTC_CMD_WORDRIGHT </font><font color="#ff00ff">2310</font>
-
-<font color="#0000ff">// Move caret right one word extending selection to new caret position.</font>
-<font color="#a020f0">#define wxSTC_CMD_WORDRIGHTEXTEND </font><font color="#ff00ff">2311</font>
-
-<font color="#0000ff">// Move caret to first position on line.</font>
-<font color="#a020f0">#define wxSTC_CMD_HOME </font><font color="#ff00ff">2312</font>
-
-<font color="#0000ff">// Move caret to first position on line extending selection to new caret position.</font>
-<font color="#a020f0">#define wxSTC_CMD_HOMEEXTEND </font><font color="#ff00ff">2313</font>
-
-<font color="#0000ff">// Move caret to last position on line.</font>
-<font color="#a020f0">#define wxSTC_CMD_LINEEND </font><font color="#ff00ff">2314</font>
-
-<font color="#0000ff">// Move caret to last position on line extending selection to new caret position.</font>
-<font color="#a020f0">#define wxSTC_CMD_LINEENDEXTEND </font><font color="#ff00ff">2315</font>
-
-<font color="#0000ff">// Move caret to first position in document.</font>
-<font color="#a020f0">#define wxSTC_CMD_DOCUMENTSTART </font><font color="#ff00ff">2316</font>
-
-<font color="#0000ff">// Move caret to first position in document extending selection to new caret position.</font>
-<font color="#a020f0">#define wxSTC_CMD_DOCUMENTSTARTEXTEND </font><font color="#ff00ff">2317</font>
-
-<font color="#0000ff">// Move caret to last position in document.</font>
-<font color="#a020f0">#define wxSTC_CMD_DOCUMENTEND </font><font color="#ff00ff">2318</font>
-
-<font color="#0000ff">// Move caret to last position in document extending selection to new caret position.</font>
-<font color="#a020f0">#define wxSTC_CMD_DOCUMENTENDEXTEND </font><font color="#ff00ff">2319</font>
-
-<font color="#0000ff">// Move caret one page up.</font>
-<font color="#a020f0">#define wxSTC_CMD_PAGEUP </font><font color="#ff00ff">2320</font>
-
-<font color="#0000ff">// Move caret one page up extending selection to new caret position.</font>
-<font color="#a020f0">#define wxSTC_CMD_PAGEUPEXTEND </font><font color="#ff00ff">2321</font>
-
-<font color="#0000ff">// Move caret one page down.</font>
-<font color="#a020f0">#define wxSTC_CMD_PAGEDOWN </font><font color="#ff00ff">2322</font>
-
-<font color="#0000ff">// Move caret one page down extending selection to new caret position.</font>
-<font color="#a020f0">#define wxSTC_CMD_PAGEDOWNEXTEND </font><font color="#ff00ff">2323</font>
-
-<font color="#0000ff">// Switch from insert to overtype mode or the reverse.</font>
-<font color="#a020f0">#define wxSTC_CMD_EDITTOGGLEOVERTYPE </font><font color="#ff00ff">2324</font>
-
-<font color="#0000ff">// Cancel any modes such as call tip or auto-completion list display.</font>
-<font color="#a020f0">#define wxSTC_CMD_CANCEL </font><font color="#ff00ff">2325</font>
-
-<font color="#0000ff">// Delete the selection or if no selection, the character before the caret.</font>
-<font color="#a020f0">#define wxSTC_CMD_DELETEBACK </font><font color="#ff00ff">2326</font>
-
-<font color="#0000ff">// If selection is empty or all on one line replace the selection with a tab character.</font>
-<font color="#0000ff">// If more than one line selected, indent the lines.</font>
-<font color="#a020f0">#define wxSTC_CMD_TAB </font><font color="#ff00ff">2327</font>
-
-<font color="#0000ff">// Dedent the selected lines.</font>
-<font color="#a020f0">#define wxSTC_CMD_BACKTAB </font><font color="#ff00ff">2328</font>
-
-<font color="#0000ff">// Insert a new line, may use a CRLF, CR or LF depending on EOL mode.</font>
-<font color="#a020f0">#define wxSTC_CMD_NEWLINE </font><font color="#ff00ff">2329</font>
-
-<font color="#0000ff">// Insert a Form Feed character.</font>
-<font color="#a020f0">#define wxSTC_CMD_FORMFEED </font><font color="#ff00ff">2330</font>
-
-<font color="#0000ff">// Move caret to before first visible character on line.</font>
-<font color="#0000ff">// If already there move to first character on line.</font>
-<font color="#a020f0">#define wxSTC_CMD_VCHOME </font><font color="#ff00ff">2331</font>
-
-<font color="#0000ff">// Like VCHome but extending selection to new caret position.</font>
-<font color="#a020f0">#define wxSTC_CMD_VCHOMEEXTEND </font><font color="#ff00ff">2332</font>
-
-<font color="#0000ff">// Magnify the displayed text by increasing the sizes by 1 point.</font>
-<font color="#a020f0">#define wxSTC_CMD_ZOOMIN </font><font color="#ff00ff">2333</font>
-
-<font color="#0000ff">// Make the displayed text smaller by decreasing the sizes by 1 point.</font>
-<font color="#a020f0">#define wxSTC_CMD_ZOOMOUT </font><font color="#ff00ff">2334</font>
-
-<font color="#0000ff">// Delete the word to the left of the caret.</font>
-<font color="#a020f0">#define wxSTC_CMD_DELWORDLEFT </font><font color="#ff00ff">2335</font>
-
-<font color="#0000ff">// Delete the word to the right of the caret.</font>
-<font color="#a020f0">#define wxSTC_CMD_DELWORDRIGHT </font><font color="#ff00ff">2336</font>
-
-<font color="#0000ff">// Cut the line containing the caret.</font>
-<font color="#a020f0">#define wxSTC_CMD_LINECUT </font><font color="#ff00ff">2337</font>
-
-<font color="#0000ff">// Delete the line containing the caret.</font>
-<font color="#a020f0">#define wxSTC_CMD_LINEDELETE </font><font color="#ff00ff">2338</font>
-
-<font color="#0000ff">// Switch the current line with the previous.</font>
-<font color="#a020f0">#define wxSTC_CMD_LINETRANSPOSE </font><font color="#ff00ff">2339</font>
-
-<font color="#0000ff">// Transform the selection to lower case.</font>
-<font color="#a020f0">#define wxSTC_CMD_LOWERCASE </font><font color="#ff00ff">2340</font>
-
-<font color="#0000ff">// Transform the selection to upper case.</font>
-<font color="#a020f0">#define wxSTC_CMD_UPPERCASE </font><font color="#ff00ff">2341</font>
-
-<font color="#0000ff">// Scroll the document down, keeping the caret visible.</font>
-<font color="#a020f0">#define wxSTC_CMD_LINESCROLLDOWN </font><font color="#ff00ff">2342</font>
-
-<font color="#0000ff">// Scroll the document up, keeping the caret visible.</font>
-<font color="#a020f0">#define wxSTC_CMD_LINESCROLLUP </font><font color="#ff00ff">2343</font>
-
-<font color="#0000ff">// Delete the selection or if no selection, the character before the caret.</font>
-<font color="#0000ff">// Will not delete the character before at the start of a line.</font>
-<font color="#a020f0">#define wxSTC_CMD_DELETEBACKNOTLINE </font><font color="#ff00ff">2344</font>
-
-<font color="#0000ff">// Move caret to first position on display line.</font>
-<font color="#a020f0">#define wxSTC_CMD_HOMEDISPLAY </font><font color="#ff00ff">2345</font>
-
-<font color="#0000ff">// Move caret to first position on display line extending selection to </font>
-<font color="#0000ff">// new caret position.</font>
-<font color="#a020f0">#define wxSTC_CMD_HOMEDISPLAYEXTEND </font><font color="#ff00ff">2346</font>
-
-<font color="#0000ff">// Move caret to last position on display line.</font>
-<font color="#a020f0">#define wxSTC_CMD_LINEENDDISPLAY </font><font color="#ff00ff">2347</font>
-
-<font color="#0000ff">// Move caret to last position on display line extending selection to new </font>
-<font color="#0000ff">// caret position.</font>
-<font color="#a020f0">#define wxSTC_CMD_LINEENDDISPLAYEXTEND </font><font color="#ff00ff">2348</font>
 <font color="#a020f0">#define wxSTC_EDGE_NONE </font><font color="#ff00ff">0</font>
 <font color="#a020f0">#define wxSTC_EDGE_LINE </font><font color="#ff00ff">1</font>
 <font color="#a020f0">#define wxSTC_EDGE_BACKGROUND </font><font color="#ff00ff">2</font>
 <font color="#a020f0">#define wxSTC_CURSORNORMAL -</font><font color="#ff00ff">1</font>
-<font color="#a020f0">#define wxSTC_CURSORWAIT </font><font color="#ff00ff">3</font>
+<font color="#a020f0">#define wxSTC_CURSORWAIT </font><font color="#ff00ff">4</font>
 
 <font color="#0000ff">// Constants for use with SetVisiblePolicy, similar to SetCaretPolicy.</font>
 <font color="#a020f0">#define wxSTC_VISIBLE_SLOP </font><font color="#ff00ff">0x01</font>
@@ -461,6 +329,11 @@
 <font color="#a020f0">#define wxSTC_LEX_BAAN </font><font color="#ff00ff">31</font>
 <font color="#a020f0">#define wxSTC_LEX_MATLAB </font><font color="#ff00ff">32</font>
 <font color="#a020f0">#define wxSTC_LEX_SCRIPTOL </font><font color="#ff00ff">33</font>
+<font color="#a020f0">#define wxSTC_LEX_ASM </font><font color="#ff00ff">34</font>
+<font color="#a020f0">#define wxSTC_LEX_CPPNOCASE </font><font color="#ff00ff">35</font>
+<font color="#a020f0">#define wxSTC_LEX_FORTRAN </font><font color="#ff00ff">36</font>
+<font color="#a020f0">#define wxSTC_LEX_F77 </font><font color="#ff00ff">37</font>
+<font color="#a020f0">#define wxSTC_LEX_CSS </font><font color="#ff00ff">38</font>
 
 <font color="#0000ff">// When a lexer specifies its language as SCLEX_AUTOMATIC it receives a</font>
 <font color="#0000ff">// value assigned in sequence from SCLEX_AUTOMATIC+1.</font>
@@ -729,6 +602,7 @@
 <font color="#a020f0">#define wxSTC_ERR_DIFF_ADDITION </font><font color="#ff00ff">11</font>
 <font color="#a020f0">#define wxSTC_ERR_DIFF_DELETION </font><font color="#ff00ff">12</font>
 <font color="#a020f0">#define wxSTC_ERR_DIFF_MESSAGE </font><font color="#ff00ff">13</font>
+<font color="#a020f0">#define wxSTC_ERR_PHP </font><font color="#ff00ff">14</font>
 
 <font color="#0000ff">// Lexical states for SCLEX_BATCH</font>
 <font color="#a020f0">#define wxSTC_BAT_DEFAULT </font><font color="#ff00ff">0</font>
@@ -775,24 +649,31 @@
 <font color="#a020f0">#define wxSTC_AVE_COMMENT </font><font color="#ff00ff">1</font>
 <font color="#a020f0">#define wxSTC_AVE_NUMBER </font><font color="#ff00ff">2</font>
 <font color="#a020f0">#define wxSTC_AVE_WORD </font><font color="#ff00ff">3</font>
-<font color="#a020f0">#define wxSTC_AVE_KEYWORD </font><font color="#ff00ff">4</font>
-<font color="#a020f0">#define wxSTC_AVE_STATEMENT </font><font color="#ff00ff">5</font>
 <font color="#a020f0">#define wxSTC_AVE_STRING </font><font color="#ff00ff">6</font>
 <font color="#a020f0">#define wxSTC_AVE_ENUM </font><font color="#ff00ff">7</font>
 <font color="#a020f0">#define wxSTC_AVE_STRINGEOL </font><font color="#ff00ff">8</font>
 <font color="#a020f0">#define wxSTC_AVE_IDENTIFIER </font><font color="#ff00ff">9</font>
 <font color="#a020f0">#define wxSTC_AVE_OPERATOR </font><font color="#ff00ff">10</font>
+<font color="#a020f0">#define wxSTC_AVE_WORD1 </font><font color="#ff00ff">11</font>
+<font color="#a020f0">#define wxSTC_AVE_WORD2 </font><font color="#ff00ff">12</font>
+<font color="#a020f0">#define wxSTC_AVE_WORD3 </font><font color="#ff00ff">13</font>
+<font color="#a020f0">#define wxSTC_AVE_WORD4 </font><font color="#ff00ff">14</font>
+<font color="#a020f0">#define wxSTC_AVE_WORD5 </font><font color="#ff00ff">15</font>
+<font color="#a020f0">#define wxSTC_AVE_WORD6 </font><font color="#ff00ff">16</font>
 
 <font color="#0000ff">// Lexical states for SCLEX_ADA</font>
 <font color="#a020f0">#define wxSTC_ADA_DEFAULT </font><font color="#ff00ff">0</font>
-<font color="#a020f0">#define wxSTC_ADA_COMMENT </font><font color="#ff00ff">1</font>
-<font color="#a020f0">#define wxSTC_ADA_NUMBER </font><font color="#ff00ff">2</font>
-<font color="#a020f0">#define wxSTC_ADA_WORD </font><font color="#ff00ff">3</font>
-<font color="#a020f0">#define wxSTC_ADA_STRING </font><font color="#ff00ff">4</font>
+<font color="#a020f0">#define wxSTC_ADA_WORD </font><font color="#ff00ff">1</font>
+<font color="#a020f0">#define wxSTC_ADA_IDENTIFIER </font><font color="#ff00ff">2</font>
+<font color="#a020f0">#define wxSTC_ADA_NUMBER </font><font color="#ff00ff">3</font>
+<font color="#a020f0">#define wxSTC_ADA_DELIMITER </font><font color="#ff00ff">4</font>
 <font color="#a020f0">#define wxSTC_ADA_CHARACTER </font><font color="#ff00ff">5</font>
-<font color="#a020f0">#define wxSTC_ADA_OPERATOR </font><font color="#ff00ff">6</font>
-<font color="#a020f0">#define wxSTC_ADA_IDENTIFIER </font><font color="#ff00ff">7</font>
+<font color="#a020f0">#define wxSTC_ADA_CHARACTEREOL </font><font color="#ff00ff">6</font>
+<font color="#a020f0">#define wxSTC_ADA_STRING </font><font color="#ff00ff">7</font>
 <font color="#a020f0">#define wxSTC_ADA_STRINGEOL </font><font color="#ff00ff">8</font>
+<font color="#a020f0">#define wxSTC_ADA_LABEL </font><font color="#ff00ff">9</font>
+<font color="#a020f0">#define wxSTC_ADA_COMMENTLINE </font><font color="#ff00ff">10</font>
+<font color="#a020f0">#define wxSTC_ADA_ILLEGAL </font><font color="#ff00ff">11</font>
 
 <font color="#0000ff">// Lexical states for SCLEX_BAAN</font>
 <font color="#a020f0">#define wxSTC_BAAN_DEFAULT </font><font color="#ff00ff">0</font>
@@ -873,6 +754,252 @@
 <font color="#a020f0">#define wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR </font><font color="#ff00ff">18</font>
 <font color="#a020f0">#define wxSTC_SCRIPTOL_COMMENTBASIC </font><font color="#ff00ff">19</font>
 
+<font color="#0000ff">// Lexical states for SCLEX_ASM</font>
+<font color="#a020f0">#define wxSTC_ASM_DEFAULT </font><font color="#ff00ff">0</font>
+<font color="#a020f0">#define wxSTC_ASM_COMMENT </font><font color="#ff00ff">1</font>
+<font color="#a020f0">#define wxSTC_ASM_NUMBER </font><font color="#ff00ff">2</font>
+<font color="#a020f0">#define wxSTC_ASM_STRING </font><font color="#ff00ff">3</font>
+<font color="#a020f0">#define wxSTC_ASM_OPERATOR </font><font color="#ff00ff">4</font>
+<font color="#a020f0">#define wxSTC_ASM_IDENTIFIER </font><font color="#ff00ff">5</font>
+<font color="#a020f0">#define wxSTC_ASM_CPUINSTRUCTION </font><font color="#ff00ff">6</font>
+<font color="#a020f0">#define wxSTC_ASM_MATHINSTRUCTION </font><font color="#ff00ff">7</font>
+<font color="#a020f0">#define wxSTC_ASM_REGISTER </font><font color="#ff00ff">8</font>
+<font color="#a020f0">#define wxSTC_ASM_DIRECTIVE </font><font color="#ff00ff">9</font>
+<font color="#a020f0">#define wxSTC_ASM_DIRECTIVEOPERAND </font><font color="#ff00ff">10</font>
+
+<font color="#0000ff">// Lexical states for SCLEX_FORTRAN</font>
+<font color="#a020f0">#define wxSTC_F_DEFAULT </font><font color="#ff00ff">0</font>
+<font color="#a020f0">#define wxSTC_F_COMMENT </font><font color="#ff00ff">1</font>
+<font color="#a020f0">#define wxSTC_F_NUMBER </font><font color="#ff00ff">2</font>
+<font color="#a020f0">#define wxSTC_F_STRING1 </font><font color="#ff00ff">3</font>
+<font color="#a020f0">#define wxSTC_F_STRING2 </font><font color="#ff00ff">4</font>
+<font color="#a020f0">#define wxSTC_F_STRINGEOL </font><font color="#ff00ff">5</font>
+<font color="#a020f0">#define wxSTC_F_OPERATOR </font><font color="#ff00ff">6</font>
+<font color="#a020f0">#define wxSTC_F_IDENTIFIER </font><font color="#ff00ff">7</font>
+<font color="#a020f0">#define wxSTC_F_WORD </font><font color="#ff00ff">8</font>
+<font color="#a020f0">#define wxSTC_F_WORD2 </font><font color="#ff00ff">9</font>
+<font color="#a020f0">#define wxSTC_F_WORD3 </font><font color="#ff00ff">10</font>
+<font color="#a020f0">#define wxSTC_F_PREPROCESSOR </font><font color="#ff00ff">11</font>
+<font color="#a020f0">#define wxSTC_F_OPERATOR2 </font><font color="#ff00ff">12</font>
+<font color="#a020f0">#define wxSTC_F_LABEL </font><font color="#ff00ff">13</font>
+<font color="#a020f0">#define wxSTC_F_CONTINUATION </font><font color="#ff00ff">14</font>
+
+<font color="#0000ff">// Lexical states for SCLEX_CSS</font>
+<font color="#a020f0">#define wxSTC_CSS_DEFAULT </font><font color="#ff00ff">0</font>
+<font color="#a020f0">#define wxSTC_CSS_TAG </font><font color="#ff00ff">1</font>
+<font color="#a020f0">#define wxSTC_CSS_CLASS </font><font color="#ff00ff">2</font>
+<font color="#a020f0">#define wxSTC_CSS_PSEUDOCLASS </font><font color="#ff00ff">3</font>
+<font color="#a020f0">#define wxSTC_CSS_UNKNOWN_PSEUDOCLASS </font><font color="#ff00ff">4</font>
+<font color="#a020f0">#define wxSTC_CSS_OPERATOR </font><font color="#ff00ff">5</font>
+<font color="#a020f0">#define wxSTC_CSS_IDENTIFIER </font><font color="#ff00ff">6</font>
+<font color="#a020f0">#define wxSTC_CSS_UNKNOWN_IDENTIFIER </font><font color="#ff00ff">7</font>
+<font color="#a020f0">#define wxSTC_CSS_VALUE </font><font color="#ff00ff">8</font>
+<font color="#a020f0">#define wxSTC_CSS_COMMENT </font><font color="#ff00ff">9</font>
+<font color="#a020f0">#define wxSTC_CSS_ID </font><font color="#ff00ff">10</font>
+<font color="#a020f0">#define wxSTC_CSS_IMPORTANT </font><font color="#ff00ff">11</font>
+<font color="#a020f0">#define wxSTC_CSS_DIRECTIVE </font><font color="#ff00ff">12</font>
+
+
+<font color="#0000ff">//-----------------------------------------</font>
+<font color="#0000ff">// Commands that can be bound to keystrokes</font>
+
+<font color="#0000ff">// Redoes the next action on the undo history.</font>
+<font color="#a020f0">#define wxSTC_CMD_REDO </font><font color="#ff00ff">2011</font>
+
+<font color="#0000ff">// Select all the text in the document.</font>
+<font color="#a020f0">#define wxSTC_CMD_SELECTALL </font><font color="#ff00ff">2013</font>
+
+<font color="#0000ff">// Undo one action in the undo history.</font>
+<font color="#a020f0">#define wxSTC_CMD_UNDO </font><font color="#ff00ff">2176</font>
+
+<font color="#0000ff">// Cut the selection to the clipboard.</font>
+<font color="#a020f0">#define wxSTC_CMD_CUT </font><font color="#ff00ff">2177</font>
+
+<font color="#0000ff">// Copy the selection to the clipboard.</font>
+<font color="#a020f0">#define wxSTC_CMD_COPY </font><font color="#ff00ff">2178</font>
+
+<font color="#0000ff">// Paste the contents of the clipboard into the document replacing the selection.</font>
+<font color="#a020f0">#define wxSTC_CMD_PASTE </font><font color="#ff00ff">2179</font>
+
+<font color="#0000ff">// Clear the selection.</font>
+<font color="#a020f0">#define wxSTC_CMD_CLEAR </font><font color="#ff00ff">2180</font>
+
+<font color="#0000ff">// Move caret down one line.</font>
+<font color="#a020f0">#define wxSTC_CMD_LINEDOWN </font><font color="#ff00ff">2300</font>
+
+<font color="#0000ff">// Move caret down one line extending selection to new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_LINEDOWNEXTEND </font><font color="#ff00ff">2301</font>
+
+<font color="#0000ff">// Move caret up one line.</font>
+<font color="#a020f0">#define wxSTC_CMD_LINEUP </font><font color="#ff00ff">2302</font>
+
+<font color="#0000ff">// Move caret up one line extending selection to new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_LINEUPEXTEND </font><font color="#ff00ff">2303</font>
+
+<font color="#0000ff">// Move caret left one character.</font>
+<font color="#a020f0">#define wxSTC_CMD_CHARLEFT </font><font color="#ff00ff">2304</font>
+
+<font color="#0000ff">// Move caret left one character extending selection to new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_CHARLEFTEXTEND </font><font color="#ff00ff">2305</font>
+
+<font color="#0000ff">// Move caret right one character.</font>
+<font color="#a020f0">#define wxSTC_CMD_CHARRIGHT </font><font color="#ff00ff">2306</font>
+
+<font color="#0000ff">// Move caret right one character extending selection to new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_CHARRIGHTEXTEND </font><font color="#ff00ff">2307</font>
+
+<font color="#0000ff">// Move caret left one word.</font>
+<font color="#a020f0">#define wxSTC_CMD_WORDLEFT </font><font color="#ff00ff">2308</font>
+
+<font color="#0000ff">// Move caret left one word extending selection to new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_WORDLEFTEXTEND </font><font color="#ff00ff">2309</font>
+
+<font color="#0000ff">// Move caret right one word.</font>
+<font color="#a020f0">#define wxSTC_CMD_WORDRIGHT </font><font color="#ff00ff">2310</font>
+
+<font color="#0000ff">// Move caret right one word extending selection to new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_WORDRIGHTEXTEND </font><font color="#ff00ff">2311</font>
+
+<font color="#0000ff">// Move caret to first position on line.</font>
+<font color="#a020f0">#define wxSTC_CMD_HOME </font><font color="#ff00ff">2312</font>
+
+<font color="#0000ff">// Move caret to first position on line extending selection to new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_HOMEEXTEND </font><font color="#ff00ff">2313</font>
+
+<font color="#0000ff">// Move caret to last position on line.</font>
+<font color="#a020f0">#define wxSTC_CMD_LINEEND </font><font color="#ff00ff">2314</font>
+
+<font color="#0000ff">// Move caret to last position on line extending selection to new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_LINEENDEXTEND </font><font color="#ff00ff">2315</font>
+
+<font color="#0000ff">// Move caret to first position in document.</font>
+<font color="#a020f0">#define wxSTC_CMD_DOCUMENTSTART </font><font color="#ff00ff">2316</font>
+
+<font color="#0000ff">// Move caret to first position in document extending selection to new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_DOCUMENTSTARTEXTEND </font><font color="#ff00ff">2317</font>
+
+<font color="#0000ff">// Move caret to last position in document.</font>
+<font color="#a020f0">#define wxSTC_CMD_DOCUMENTEND </font><font color="#ff00ff">2318</font>
+
+<font color="#0000ff">// Move caret to last position in document extending selection to new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_DOCUMENTENDEXTEND </font><font color="#ff00ff">2319</font>
+
+<font color="#0000ff">// Move caret one page up.</font>
+<font color="#a020f0">#define wxSTC_CMD_PAGEUP </font><font color="#ff00ff">2320</font>
+
+<font color="#0000ff">// Move caret one page up extending selection to new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_PAGEUPEXTEND </font><font color="#ff00ff">2321</font>
+
+<font color="#0000ff">// Move caret one page down.</font>
+<font color="#a020f0">#define wxSTC_CMD_PAGEDOWN </font><font color="#ff00ff">2322</font>
+
+<font color="#0000ff">// Move caret one page down extending selection to new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_PAGEDOWNEXTEND </font><font color="#ff00ff">2323</font>
+
+<font color="#0000ff">// Switch from insert to overtype mode or the reverse.</font>
+<font color="#a020f0">#define wxSTC_CMD_EDITTOGGLEOVERTYPE </font><font color="#ff00ff">2324</font>
+
+<font color="#0000ff">// Cancel any modes such as call tip or auto-completion list display.</font>
+<font color="#a020f0">#define wxSTC_CMD_CANCEL </font><font color="#ff00ff">2325</font>
+
+<font color="#0000ff">// Delete the selection or if no selection, the character before the caret.</font>
+<font color="#a020f0">#define wxSTC_CMD_DELETEBACK </font><font color="#ff00ff">2326</font>
+
+<font color="#0000ff">// If selection is empty or all on one line replace the selection with a tab character.</font>
+<font color="#0000ff">// If more than one line selected, indent the lines.</font>
+<font color="#a020f0">#define wxSTC_CMD_TAB </font><font color="#ff00ff">2327</font>
+
+<font color="#0000ff">// Dedent the selected lines.</font>
+<font color="#a020f0">#define wxSTC_CMD_BACKTAB </font><font color="#ff00ff">2328</font>
+
+<font color="#0000ff">// Insert a new line, may use a CRLF, CR or LF depending on EOL mode.</font>
+<font color="#a020f0">#define wxSTC_CMD_NEWLINE </font><font color="#ff00ff">2329</font>
+
+<font color="#0000ff">// Insert a Form Feed character.</font>
+<font color="#a020f0">#define wxSTC_CMD_FORMFEED </font><font color="#ff00ff">2330</font>
+
+<font color="#0000ff">// Move caret to before first visible character on line.</font>
+<font color="#0000ff">// If already there move to first character on line.</font>
+<font color="#a020f0">#define wxSTC_CMD_VCHOME </font><font color="#ff00ff">2331</font>
+
+<font color="#0000ff">// Like VCHome but extending selection to new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_VCHOMEEXTEND </font><font color="#ff00ff">2332</font>
+
+<font color="#0000ff">// Magnify the displayed text by increasing the sizes by 1 point.</font>
+<font color="#a020f0">#define wxSTC_CMD_ZOOMIN </font><font color="#ff00ff">2333</font>
+
+<font color="#0000ff">// Make the displayed text smaller by decreasing the sizes by 1 point.</font>
+<font color="#a020f0">#define wxSTC_CMD_ZOOMOUT </font><font color="#ff00ff">2334</font>
+
+<font color="#0000ff">// Delete the word to the left of the caret.</font>
+<font color="#a020f0">#define wxSTC_CMD_DELWORDLEFT </font><font color="#ff00ff">2335</font>
+
+<font color="#0000ff">// Delete the word to the right of the caret.</font>
+<font color="#a020f0">#define wxSTC_CMD_DELWORDRIGHT </font><font color="#ff00ff">2336</font>
+
+<font color="#0000ff">// Cut the line containing the caret.</font>
+<font color="#a020f0">#define wxSTC_CMD_LINECUT </font><font color="#ff00ff">2337</font>
+
+<font color="#0000ff">// Delete the line containing the caret.</font>
+<font color="#a020f0">#define wxSTC_CMD_LINEDELETE </font><font color="#ff00ff">2338</font>
+
+<font color="#0000ff">// Switch the current line with the previous.</font>
+<font color="#a020f0">#define wxSTC_CMD_LINETRANSPOSE </font><font color="#ff00ff">2339</font>
+
+<font color="#0000ff">// Duplicate the current line.</font>
+<font color="#a020f0">#define wxSTC_CMD_LINEDUPLICATE </font><font color="#ff00ff">2404</font>
+
+<font color="#0000ff">// Transform the selection to lower case.</font>
+<font color="#a020f0">#define wxSTC_CMD_LOWERCASE </font><font color="#ff00ff">2340</font>
+
+<font color="#0000ff">// Transform the selection to upper case.</font>
+<font color="#a020f0">#define wxSTC_CMD_UPPERCASE </font><font color="#ff00ff">2341</font>
+
+<font color="#0000ff">// Scroll the document down, keeping the caret visible.</font>
+<font color="#a020f0">#define wxSTC_CMD_LINESCROLLDOWN </font><font color="#ff00ff">2342</font>
+
+<font color="#0000ff">// Scroll the document up, keeping the caret visible.</font>
+<font color="#a020f0">#define wxSTC_CMD_LINESCROLLUP </font><font color="#ff00ff">2343</font>
+
+<font color="#0000ff">// Delete the selection or if no selection, the character before the caret.</font>
+<font color="#0000ff">// Will not delete the character before at the start of a line.</font>
+<font color="#a020f0">#define wxSTC_CMD_DELETEBACKNOTLINE </font><font color="#ff00ff">2344</font>
+
+<font color="#0000ff">// Move caret to first position on display line.</font>
+<font color="#a020f0">#define wxSTC_CMD_HOMEDISPLAY </font><font color="#ff00ff">2345</font>
+
+<font color="#0000ff">// Move caret to first position on display line extending selection to</font>
+<font color="#0000ff">// new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_HOMEDISPLAYEXTEND </font><font color="#ff00ff">2346</font>
+
+<font color="#0000ff">// Move caret to last position on display line.</font>
+<font color="#a020f0">#define wxSTC_CMD_LINEENDDISPLAY </font><font color="#ff00ff">2347</font>
+
+<font color="#0000ff">// Move caret to last position on display line extending selection to new</font>
+<font color="#0000ff">// caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_LINEENDDISPLAYEXTEND </font><font color="#ff00ff">2348</font>
+
+<font color="#0000ff">// Move to the previous change in capitalisation.</font>
+<font color="#a020f0">#define wxSTC_CMD_WORDPARTLEFT </font><font color="#ff00ff">2390</font>
+
+<font color="#0000ff">// Move to the previous change in capitalisation extending selection</font>
+<font color="#0000ff">// to new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_WORDPARTLEFTEXTEND </font><font color="#ff00ff">2391</font>
+
+<font color="#0000ff">// Move to the change next in capitalisation.</font>
+<font color="#a020f0">#define wxSTC_CMD_WORDPARTRIGHT </font><font color="#ff00ff">2392</font>
+
+<font color="#0000ff">// Move to the next change in capitalisation extending selection</font>
+<font color="#0000ff">// to new caret position.</font>
+<font color="#a020f0">#define wxSTC_CMD_WORDPARTRIGHTEXTEND </font><font color="#ff00ff">2393</font>
+
+<font color="#0000ff">// Delete back from the current position to the start of the line.</font>
+<font color="#a020f0">#define wxSTC_CMD_DELLINELEFT </font><font color="#ff00ff">2395</font>
+
+<font color="#0000ff">// Delete forwards from the current position to the end of the line.</font>
+<font color="#a020f0">#define wxSTC_CMD_DELLINERIGHT </font><font color="#ff00ff">2396</font>
+
+
 <font color="#0000ff">// END of generated section</font>
 <font color="#0000ff">//----------------------------------------------------------------------</font>
 
@@ -880,8 +1007,11 @@
 <font color="#2e8b57"><b>class</b></font>  WordList;
 <font color="#2e8b57"><b>struct</b></font> SCNotification;
 
-
-<font color="#2e8b57"><b>extern</b></font> <font color="#2e8b57"><b>const</b></font> wxChar* wxSTCNameStr;
+<font color="#a020f0">#ifndef SWIG</font>
+<font color="#2e8b57"><b>extern</b></font> WXSTC_DECLSPEC <font color="#2e8b57"><b>const</b></font> wxChar* wxSTCNameStr;
+<font color="#2e8b57"><b>class</b></font> WXSTC_DECLSPEC wxStyledTextCtrl;
+<font color="#2e8b57"><b>class</b></font> WXSTC_DECLSPEC wxStyledTextEvent;
+<font color="#a020f0">#endif</font>
 
 <font color="#0000ff">//----------------------------------------------------------------------</font>
 
@@ -1043,8 +1173,8 @@
     <font color="#0000ff">// Set the symbol used for a particular marker number,</font>
     <font color="#0000ff">// and optionally the fore and background colours.</font>
     <font color="#2e8b57"><b>void</b></font> MarkerDefine(<font color="#2e8b57"><b>int</b></font> markerNumber, <font color="#2e8b57"><b>int</b></font> markerSymbol,
-                         <font color="#2e8b57"><b>const</b></font> wxColour&amp; foreground = wxNullColour,
-                         <font color="#2e8b57"><b>const</b></font> wxColour&amp; background = wxNullColour);
+                <font color="#2e8b57"><b>const</b></font> wxColour&amp; foreground = wxNullColour,
+                <font color="#2e8b57"><b>const</b></font> wxColour&amp; background = wxNullColour);
 
     <font color="#0000ff">// Set the foreground colour used for a particular marker number.</font>
     <font color="#2e8b57"><b>void</b></font> MarkerSetForeground(<font color="#2e8b57"><b>int</b></font> markerNumber, <font color="#2e8b57"><b>const</b></font> wxColour&amp; fore);
@@ -1070,6 +1200,9 @@
     <font color="#0000ff">// Find the previous line before lineStart that includes a marker in mask.</font>
     <font color="#2e8b57"><b>int</b></font> MarkerPrevious(<font color="#2e8b57"><b>int</b></font> lineStart, <font color="#2e8b57"><b>int</b></font> markerMask);
 
+    <font color="#0000ff">// Define a marker from a bitmap</font>
+    <font color="#2e8b57"><b>void</b></font> MarkerDefineBitmap(<font color="#2e8b57"><b>int</b></font> markerNumber, <font color="#2e8b57"><b>const</b></font> wxBitmap&amp; bmp);
+
     <font color="#0000ff">// Set a margin to be either numeric or symbolic.</font>
     <font color="#2e8b57"><b>void</b></font> SetMarginType(<font color="#2e8b57"><b>int</b></font> margin, <font color="#2e8b57"><b>int</b></font> marginType);
 
@@ -1291,6 +1424,19 @@
     <font color="#0000ff">// after the inserted text upon completion.</font>
     <font color="#2e8b57"><b>bool</b></font> AutoCompGetDropRestOfWord();
 
+    <font color="#0000ff">// Register an image for use in autocompletion lists.</font>
+    <font color="#2e8b57"><b>void</b></font> RegisterImage(<font color="#2e8b57"><b>int</b></font> type, <font color="#2e8b57"><b>const</b></font> wxBitmap&amp; bmp);
+
+    <font color="#0000ff">// Clear all the registered images.</font>
+    <font color="#2e8b57"><b>void</b></font> ClearRegisteredImages();
+
+    <font color="#0000ff">// Retrieve the auto-completion list type-separator character.</font>
+    <font color="#2e8b57"><b>int</b></font> AutoCompGetTypeSeparator();
+
+    <font color="#0000ff">// Change the type-separator character in the string setting up an auto-completion list.</font>
+    <font color="#0000ff">// Default is '?' but can be changed if items contain '?'.</font>
+    <font color="#2e8b57"><b>void</b></font> AutoCompSetTypeSeparator(<font color="#2e8b57"><b>int</b></font> separatorCharacter);
+
     <font color="#0000ff">// Set the number of spaces used for one level of indentation.</font>
     <font color="#2e8b57"><b>void</b></font> SetIndent(<font color="#2e8b57"><b>int</b></font> indentSize);
 
@@ -1379,14 +1525,14 @@
 
     <font color="#0000ff">// On Windows, will draw the document into a display context such as a printer.</font>
     <font color="#2e8b57"><b>int</b></font> FormatRange(<font color="#2e8b57"><b>bool</b></font>   doDraw,
-                               <font color="#2e8b57"><b>int</b></font>    startPos,
-                               <font color="#2e8b57"><b>int</b></font>    endPos,
-                               wxDC*  draw,
-                               wxDC*  target,  <font color="#0000ff">// Why does it use two? Can they be the same?</font>
-                               wxRect renderRect,
-                               wxRect pageRect);
-
-    <font color="#0000ff">// Retrieve the line at the top of the display.</font>
+               <font color="#2e8b57"><b>int</b></font>    startPos,
+               <font color="#2e8b57"><b>int</b></font>    endPos,
+               wxDC*  draw,
+               wxDC*  target,  <font color="#0000ff">// Why does it use two? Can they be the same?</font>
+               wxRect renderRect,
+               wxRect pageRect);
+
+    <font color="#0000ff">// Retrieve the display line at the top of the display.</font>
     <font color="#2e8b57"><b>int</b></font> GetFirstVisibleLine();
 
     <font color="#0000ff">// Retrieve the contents of a line.</font>
@@ -1582,7 +1728,7 @@
     <font color="#0000ff">// Ensure a particular line is visible by expanding any header line hiding it.</font>
     <font color="#2e8b57"><b>void</b></font> EnsureVisible(<font color="#2e8b57"><b>int</b></font> line);
 
-    <font color="#0000ff">// Set some debugging options for folding.</font>
+    <font color="#0000ff">// Set some style options for folding.</font>
     <font color="#2e8b57"><b>void</b></font> SetFoldFlags(<font color="#2e8b57"><b>int</b></font> flags);
 
     <font color="#0000ff">// Ensure a particular line is visible by expanding any header line hiding it.</font>
@@ -1648,17 +1794,51 @@
     <font color="#0000ff">// Retrieve the height of a particular line of text in pixels.</font>
     <font color="#2e8b57"><b>int</b></font> TextHeight(<font color="#2e8b57"><b>int</b></font> line);
 
+    <font color="#0000ff">// Show or hide the vertical scroll bar.</font>
+    <font color="#2e8b57"><b>void</b></font> SetUseVerticalScrollBar(<font color="#2e8b57"><b>bool</b></font> show);
+
+    <font color="#0000ff">// Is the vertical scroll bar visible?</font>
+    <font color="#2e8b57"><b>bool</b></font> GetUseVerticalScrollBar();
+
+    <font color="#0000ff">// Append a string to the end of the document without changing the selection.</font>
+    <font color="#2e8b57"><b>void</b></font> AppendText(<font color="#2e8b57"><b>int</b></font> length, <font color="#2e8b57"><b>const</b></font> wxString&amp; text);
+
+    <font color="#0000ff">// Is drawing done in two phases with backgrounds drawn before foregrounds?</font>
+    <font color="#2e8b57"><b>bool</b></font> GetTwoPhaseDraw();
+
+    <font color="#0000ff">// In twoPhaseDraw mode, drawing is performed in two phases, first the background</font>
+    <font color="#0000ff">// and then the foreground. This avoids chopping off characters that overlap the next run.</font>
+    <font color="#2e8b57"><b>void</b></font> SetTwoPhaseDraw(<font color="#2e8b57"><b>bool</b></font> twoPhase);
+
+    <font color="#0000ff">// Make the target range start and end be the same as the selection range start and end.</font>
+    <font color="#2e8b57"><b>void</b></font> TargetFromSelection();
+
+    <font color="#0000ff">// Join the lines in the target.</font>
+    <font color="#0000ff">// This is an experimental feature and may be changed or removed.</font>
+    <font color="#2e8b57"><b>void</b></font> LinesJoin();
+
+    <font color="#0000ff">// Split the lines in the target into lines that are less wide than pixelWidth</font>
+    <font color="#0000ff">// where possible.</font>
+    <font color="#2e8b57"><b>void</b></font> LinesSplit(<font color="#2e8b57"><b>int</b></font> pixelWidth);
+
+    <font color="#0000ff">// Set the colours used as a chequerboard pattern in the fold margin</font>
+    <font color="#2e8b57"><b>void</b></font> SetFoldMarginColour(<font color="#2e8b57"><b>bool</b></font> useSetting, <font color="#2e8b57"><b>const</b></font> wxColour&amp; back);
+    <font color="#2e8b57"><b>void</b></font> SetFoldMarginHiColour(<font color="#2e8b57"><b>bool</b></font> useSetting, <font color="#2e8b57"><b>const</b></font> wxColour&amp; fore);
+
+    <font color="#0000ff">// Duplicate the current line.</font>
+    <font color="#2e8b57"><b>void</b></font> LineDuplicate();
+
     <font color="#0000ff">// Move caret to first position on display line.</font>
     <font color="#2e8b57"><b>void</b></font> HomeDisplay();
 
-    <font color="#0000ff">// Move caret to first position on display line extending selection to </font>
+    <font color="#0000ff">// Move caret to first position on display line extending selection to</font>
     <font color="#0000ff">// new caret position.</font>
     <font color="#2e8b57"><b>void</b></font> HomeDisplayExtend();
 
     <font color="#0000ff">// Move caret to last position on display line.</font>
     <font color="#2e8b57"><b>void</b></font> LineEndDisplay();
 
-    <font color="#0000ff">// Move caret to last position on display line extending selection to new </font>
+    <font color="#0000ff">// Move caret to last position on display line extending selection to new</font>
     <font color="#0000ff">// caret position.</font>
     <font color="#2e8b57"><b>void</b></font> LineEndDisplayExtend();
 
@@ -1812,6 +1992,9 @@
     <font color="#2e8b57"><b>void</b></font> SetXOffset(<font color="#2e8b57"><b>int</b></font> newOffset);
     <font color="#2e8b57"><b>int</b></font> GetXOffset();
 
+    <font color="#0000ff">// Set the last x chosen value to be the caret x position</font>
+    <font color="#2e8b57"><b>void</b></font> ChooseCaretX();
+
     <font color="#0000ff">// Set the way the caret is kept visible when going sideway.</font>
     <font color="#0000ff">// The exclusion zone is given in pixels.</font>
     <font color="#2e8b57"><b>void</b></font> SetXCaretPolicy(<font color="#2e8b57"><b>int</b></font> caretPolicy, <font color="#2e8b57"><b>int</b></font> caretSlop);
@@ -1820,6 +2003,12 @@
     <font color="#0000ff">// The exclusion zone is given in lines.</font>
     <font color="#2e8b57"><b>void</b></font> SetYCaretPolicy(<font color="#2e8b57"><b>int</b></font> caretPolicy, <font color="#2e8b57"><b>int</b></font> caretSlop);
 
+    <font color="#0000ff">// Set printing to line wrapped (SC_WRAP_WORD) or not line wrapped (SC_WRAP_NONE).</font>
+    <font color="#2e8b57"><b>void</b></font> SetPrintWrapMode(<font color="#2e8b57"><b>int</b></font> mode);
+
+    <font color="#0000ff">// Is printing line wrapped.</font>
+    <font color="#2e8b57"><b>int</b></font> GetPrintWrapMode();
+
     <font color="#0000ff">// Start notifying the container of all key presses and commands.</font>
     <font color="#2e8b57"><b>void</b></font> StartRecord();
 
@@ -1940,6 +2129,7 @@
     <font color="#2e8b57"><b>void</b></font> OnMouseMove(wxMouseEvent&amp; evt);
     <font color="#2e8b57"><b>void</b></font> OnMouseLeftUp(wxMouseEvent&amp; evt);
     <font color="#2e8b57"><b>void</b></font> OnMouseRightUp(wxMouseEvent&amp; evt);
+    <font color="#2e8b57"><b>void</b></font> OnMouseMiddleUp(wxMouseEvent&amp; evt);
     <font color="#2e8b57"><b>void</b></font> OnContextMenu(wxContextMenuEvent&amp; evt);
     <font color="#2e8b57"><b>void</b></font> OnMouseWheel(wxMouseEvent&amp; evt);
     <font color="#2e8b57"><b>void</b></font> OnChar(wxKeyEvent&amp; evt);
@@ -1975,7 +2165,7 @@
 
 <font color="#0000ff">//----------------------------------------------------------------------</font>
 
-<font color="#0000ff">// SWIG can't handle &quot;#if&quot; type of conditionals, onlu &quot;#ifdef&quot;</font>
+<font color="#0000ff">// SWIG can't handle &quot;#if&quot; type of conditionals, only &quot;#ifdef&quot;</font>
 <font color="#a020f0">#ifdef SWIG</font>
 <font color="#a020f0">#define STC_USE_DND </font><font color="#ff00ff">1</font>
 <font color="#a020f0">#else</font>
diff --git a/wxPython/demo/data/wxPackage.html b/wxPython/demo/data/wxPackage.html
new file mode 100644
index 0000000000..5b2fb06588
--- /dev/null
+++ b/wxPython/demo/data/wxPackage.html
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<meta name="generator" content="Docutils 0.2.8: http://docutils.sourceforge.net/" />
+<title>The wxPython wx Package</title>
+<meta name="author" content="Patrick K. O'Brien" />
+<meta name="organization" content="Orbtech" />
+<meta name="date" content="2003-05-08" />
+<link rel="stylesheet" href="default.css" type="text/css" />
+</head>
+<body>
+<div class="document" id="the-wxpython-wx-package">
+<h1 class="title">The wxPython wx Package</h1>
+<h2 class="subtitle" id="or-how-to-survive-the-new-wx-namespace-changes">Or, how to survive the new wx namespace changes.</h2>
+<table class="docinfo" frame="void" rules="none">
+<col class="docinfo-name" />
+<col class="docinfo-content" />
+<tbody valign="top">
+<tr><th class="docinfo-name">Author:</th>
+<td>Patrick K. O'Brien</td></tr>
+<tr><th class="docinfo-name">Contact:</th>
+<td><a class="first last reference" href="mailto:pobrien&#64;orbtech.com">pobrien&#64;orbtech.com</a></td></tr>
+<tr><th class="docinfo-name">Organization:</th>
+<td><a class="first last reference" href="http://www.orbtech.com/">Orbtech</a></td></tr>
+<tr><th class="docinfo-name">Date:</th>
+<td>2003-05-08</td></tr>
+<tr><th class="docinfo-name">Revision:</th>
+<td>1.1.2.4</td></tr>
+</tbody>
+</table>
+<div class="contents topic" id="contents">
+<p class="topic-title"><a name="contents">Contents</a></p>
+<ul class="simple">
+<li><a class="reference" href="#introduction" id="id1" name="id1">Introduction</a></li>
+<li><a class="reference" href="#why-change-anything" id="id2" name="id2">Why change anything?</a></li>
+<li><a class="reference" href="#what-does-the-new-wx-package-do" id="id3" name="id3">What does the new wx package do?</a></li>
+<li><a class="reference" href="#will-any-of-this-effect-my-existing-code" id="id4" name="id4">Will any of this effect my existing code?</a></li>
+<li><a class="reference" href="#how-does-the-new-wx-package-work" id="id5" name="id5">How does the new wx package work?</a></li>
+<li><a class="reference" href="#what-about-all-the-other-modules-like-grid-html-and-stc" id="id6" name="id6">What about all the other modules, like grid, html, and stc?</a></li>
+<li><a class="reference" href="#how-do-i-use-this-new-wx-package" id="id7" name="id7">How do I use this new wx package?</a></li>
+<li><a class="reference" href="#what-are-the-issues-with-converting-old-code-to-use-the-new-wx-package" id="id8" name="id8">What are the issues with converting old code to use the new wx package?</a></li>
+<li><a class="reference" href="#where-can-i-find-example-programs-using-the-new-wx-syntax" id="id9" name="id9">Where can I find example programs using the new wx syntax?</a></li>
+</ul>
+</div>
+<div class="section" id="introduction">
+<h1><a class="toc-backref" href="#id1" name="introduction">Introduction</a></h1>
+<p>Big things sometimes come in small packages.  This is certainly true
+of the new wx package, which is being introduced in wxPython 2.4.1 as
+a way to allow the &quot;wx&quot; prefix to be dropped from the names of all
+wxPython classes, functions, and constants.  This document should
+answer all the questions you might have concerning the new wx package.
+If not, feel free to contact the author.  I hope you like the new wx
+package as much as I do.</p>
+</div>
+<div class="section" id="why-change-anything">
+<h1><a class="toc-backref" href="#id2" name="why-change-anything">Why change anything?</a></h1>
+<p>This change is being made for a couple of reasons.  The first reason
+is to discourage the use of <tt class="literal"><span class="pre">import</span> <span class="pre">*</span></tt>, which is a dangerous
+technique that can create name conflicts and bloated namespaces.</p>
+<p>The second reason is to remove what some perceive to be a &quot;wart.&quot;  For
+example, the following code is rather ugly in that the &quot;wx&quot; prefix on
+the wxFrame class name is no longer useful when you're using the wx
+module prefix:</p>
+<pre class="literal-block">
+from wxPython import wx
+
+class Frame(wx.wxFrame)
+</pre>
+<p>The new wx package allows you to write code like this, instead:</p>
+<pre class="literal-block">
+import wx
+
+class Frame(wx.Frame)
+</pre>
+<p>The third reason is that the wxWindows project intends to do the same
+thing (implement a new wx namespace and drop the &quot;wx&quot; prefix) and we
+want wxPython to lead the way.</p>
+</div>
+<div class="section" id="what-does-the-new-wx-package-do">
+<h1><a class="toc-backref" href="#id3" name="what-does-the-new-wx-package-do">What does the new wx package do?</a></h1>
+<p>As a way of getting to this new syntax as quickly as possible, the
+code in this new wx package was created.  What it does is alter the
+existing wx namespace dynamically.  By making the changes on-the-fly
+at runtime, we can try out the new syntax before any permanent changes
+are made to the underlying class library.  The downside of making
+these changes at runtime is that there is a slight delay when you
+<tt class="literal"><span class="pre">import</span> <span class="pre">wx</span></tt>; the upside is that you can start using the new syntax
+now.</p>
+</div>
+<div class="section" id="will-any-of-this-effect-my-existing-code">
+<h1><a class="toc-backref" href="#id4" name="will-any-of-this-effect-my-existing-code">Will any of this effect my existing code?</a></h1>
+<p>No.  Your existing code will continue to work and be supported for
+some time.  It will be up to you to decide when to switch to the new
+syntax.  But all new documentation and code examples will use the new
+syntax.  So don't wait too long.  You wouldn't want anyone calling you
+old-fashioned, would you?</p>
+</div>
+<div class="section" id="how-does-the-new-wx-package-work">
+<h1><a class="toc-backref" href="#id5" name="how-does-the-new-wx-package-work">How does the new wx package work?</a></h1>
+<p>It's pretty simple, and pretty clever.  The wx directory contains an
+<tt class="literal"><span class="pre">__init__.py</span></tt> file, making it a Python package.  (In contrast, the
+old wxPython.wx module is a module, not a package.)  When you <tt class="literal"><span class="pre">import</span>
+<span class="pre">wx</span></tt> the code in the <tt class="literal"><span class="pre">__init__.py</span></tt> file is executed, and that's
+where all the magic takes place.  Let's take a look at the code inside
+the <tt class="literal"><span class="pre">__init__.py</span></tt> file:</p>
+<pre class="literal-block">
+&quot;&quot;&quot;wx package
+
+Provides a way to drop the wx prefix from wxPython objects.&quot;&quot;&quot;
+
+__author__ = &quot;Patrick K. O'Brien &lt;pobrien&#64;orbtech.com&gt;&quot;
+__cvsid__ = &quot;$Id$&quot;
+__revision__ = &quot;$Revision$&quot;[11:-2]
+
+from wxPython import wx
+
+import types
+
+d_new = globals()
+d_old = wx.__dict__
+
+for old, obj in d_old.items():
+    if type(obj) is types.ModuleType or old.startswith('_'):
+        # Skip modules and private names.
+        continue
+    new = old
+    if old.startswith('EVT_'):
+        # Leave name unmodified; add to the new wx namespace.
+        d_new[new] = obj
+    elif old.startswith('wxEVT_'):
+        # Leave name unmodified; add to the new wx namespace.
+        d_new[new] = obj
+    else:
+        if old.startswith('wx'):
+            # Remove the 'wx' prefix.
+            new = old[2:]
+        # Add to the new wx package namespace.
+        d_new[new] = obj
+
+del d_new
+del d_old
+del new
+del obj
+del old
+del types
+
+del wx
+
+</pre>
+<p>Namespaces in Python are implemented as dictionaries.  The dictionary
+used to create the wx package's namespace is accessible using the
+<tt class="literal"><span class="pre">globals()</span></tt> function.  The dictionary used to create the old
+wxPython.wx module's namespace is <tt class="literal"><span class="pre">wx.__dict__</span></tt>.  Once we have these
+two dictionaries, it's a simple matter of iterating through one,
+changing the names, adding the renamed object to the other dictionary,
+and cleaning up a few local variables and imported modules.  Voila!</p>
+</div>
+<div class="section" id="what-about-all-the-other-modules-like-grid-html-and-stc">
+<h1><a class="toc-backref" href="#id6" name="what-about-all-the-other-modules-like-grid-html-and-stc">What about all the other modules, like grid, html, and stc?</a></h1>
+<p>There's more to wxPython than just the wx namespace.  And we've got
+those extra modules covered as well.  For each of those modules (as
+well as the lib package) we've got matching modules in the new wx
+package.  Let's take a look at a few of them.</p>
+<p>Here is <tt class="literal"><span class="pre">html.py</span></tt>:</p>
+<pre class="literal-block">
+&quot;&quot;&quot;Provides a way to drop the wx prefix from wxPython objects.&quot;&quot;&quot;
+
+__author__ = &quot;Patrick K. O'Brien &lt;pobrien&#64;orbtech.com&gt;&quot;
+__cvsid__ = &quot;$Id$&quot;
+__revision__ = &quot;$Revision$&quot;[11:-2]
+
+import wx
+from wx import prefix
+
+from wxPython import html
+prefix.rename(d_new=globals(), d_old=html.__dict__)
+del html
+
+del prefix
+del wx
+
+</pre>
+<p>And here is <tt class="literal"><span class="pre">lib/dialogs.py</span></tt>:</p>
+<pre class="literal-block">
+&quot;&quot;&quot;Provides a way to drop the wx prefix from wxPython objects.&quot;&quot;&quot;
+
+__author__ = &quot;Patrick K. O'Brien &lt;pobrien&#64;orbtech.com&gt;&quot;
+__cvsid__ = &quot;$Id$&quot;
+__revision__ = &quot;$Revision$&quot;[11:-2]
+
+import wx
+from wx import prefix
+
+from wxPython.lib import dialogs
+prefix.rename(d_new=globals(), d_old=dialogs.__dict__)
+del dialogs
+
+del prefix
+del wx
+
+</pre>
+<p>As you can see, they both rely on the <tt class="literal"><span class="pre">prefix.rename()</span></tt> function
+defined in <tt class="literal"><span class="pre">prefix.py</span></tt>:</p>
+<pre class="literal-block">
+&quot;&quot;&quot;Renaming utility.
+
+Provides a way to drop the wx prefix from wxPython objects.&quot;&quot;&quot;
+
+__author__ = &quot;Patrick K. O'Brien &lt;pobrien&#64;orbtech.com&gt;&quot;
+__cvsid__ = &quot;$Id$&quot;
+__revision__ = &quot;$Revision$&quot;[11:-2]
+
+import types
+
+def rename(d_new, d_old):
+    for old, obj in d_old.items():
+        if type(obj) is types.ModuleType or old.startswith('_'):
+            # Skip modules and private names.
+            continue
+##         mod = d_old['__name__']
+##         if hasattr(obj, '__module__') and not obj.__module__.startswith(mod):
+##             # Skip objects imported from other modules, except those
+##             # related to the current module, such as stc_.
+##             continue
+        new = old
+        if old.startswith('EVT_') or old.startswith('wxEVT_'):
+            # Leave these names unmodified.
+            pass 
+        elif old.startswith('wx'):
+            new = old[2:]
+        if new:
+            d_new[new] = d_old[old]
+
+</pre>
+<p>Again, the technique is very similar to the one used by the wx
+package.</p>
+</div>
+<div class="section" id="how-do-i-use-this-new-wx-package">
+<h1><a class="toc-backref" href="#id7" name="how-do-i-use-this-new-wx-package">How do I use this new wx package?</a></h1>
+<p>The wx package is automatically created when you install wxPython
+version 2.4.1 or higher.  So all you have to do is:</p>
+<pre class="literal-block">
+import wx
+</pre>
+</div>
+<div class="section" id="what-are-the-issues-with-converting-old-code-to-use-the-new-wx-package">
+<h1><a class="toc-backref" href="#id8" name="what-are-the-issues-with-converting-old-code-to-use-the-new-wx-package">What are the issues with converting old code to use the new wx package?</a></h1>
+<p>Obviously, you need to change your import statements from:</p>
+<pre class="literal-block">
+from wxPython import wx
+</pre>
+<p>or:</p>
+<pre class="literal-block">
+from wxPython.wx import *
+</pre>
+<p>to:</p>
+<pre class="literal-block">
+import wx
+</pre>
+<p>Then you need to refer to wx attributes without a &quot;wx&quot; prefix, such
+as:</p>
+<pre class="literal-block">
+class MyFrame(wx.Frame):
+</pre>
+<p>In most cases, existing code can be modified with a simple search and
+replace.</p>
+<p>One extra issue you might run into when converting existing code is
+that the wx.__version__ attribute is no longer available, since the
+new wx namespace doesn't include any private attributes from the old
+wxPython.wx namespace.  The solution is to use the wx.VERSION_STRING
+attribute, which was introduced in wxPython 2.4.1.</p>
+</div>
+<div class="section" id="where-can-i-find-example-programs-using-the-new-wx-syntax">
+<h1><a class="toc-backref" href="#id9" name="where-can-i-find-example-programs-using-the-new-wx-syntax">Where can I find example programs using the new wx syntax?</a></h1>
+<p>Example programs are included in the wxPython/samples/wx_examples
+directory, and are documented in the <a class="reference" href="wxPythonExamples.html">wxPythonExamples</a> documentation
+file.  Also, all the code in the py package uses the new wx syntax.
+You can learn more about these in the <a class="reference" href="PyManual.html">PyManual</a>.</p>
+</div>
+</div>
+<hr class="footer"/>
+<div class="footer">
+<a class="reference" href="wxPackage.txt">View document source</a>.
+Generated on: 2003-06-04 18:07 UTC.
+Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
+</div>
+</body>
+</html>
diff --git a/wxPython/demo/demoMainLoop.py b/wxPython/demo/demoMainLoop.py
index 3d66c2ae4c..73146d1d7d 100755
--- a/wxPython/demo/demoMainLoop.py
+++ b/wxPython/demo/demoMainLoop.py
@@ -9,48 +9,48 @@ in Python.  This is not part of the demo framework.
 """
 
 
-from wxPython.wx import *
+import wx                  # This module uses the new wx namespace
 import time
 
 
 #---------------------------------------------------------------------------
 
-class MyFrame(wxFrame):
+class MyFrame(wx.Frame):
 
     def __init__(self, parent, id, title):
-        wxFrame.__init__(self, parent, id, title,
-                         wxPoint(100, 100), wxSize(160, 150))
+        wx.Frame.__init__(self, parent, id, title,
+                         wx.Point(100, 100), wx.Size(160, 150))
 
-        EVT_SIZE(self, self.OnSize)
-        EVT_MOVE(self, self.OnMove)
-        EVT_CLOSE(self, self.OnCloseWindow)
-        EVT_IDLE(self, self.OnIdle)
+        wx.EVT_SIZE(self, self.OnSize)
+        wx.EVT_MOVE(self, self.OnMove)
+        wx.EVT_CLOSE(self, self.OnCloseWindow)
+        wx.EVT_IDLE(self, self.OnIdle)
 
         self.count = 0
 
-        panel = wxPanel(self, -1)
-        wxStaticText(panel, -1, "Size:",
-                     wxDLG_PNT(panel, wxPoint(4, 4)),  wxDefaultSize)
-        wxStaticText(panel, -1, "Pos:",
-                     wxDLG_PNT(panel, wxPoint(4, 16)), wxDefaultSize)
+        panel = wx.Panel(self, -1)
+        wx.StaticText(panel, -1, "Size:",
+                     wx.DLG_PNT(panel, wx.Point(4, 4)),  wx.DefaultSize)
+        wx.StaticText(panel, -1, "Pos:",
+                     wx.DLG_PNT(panel, wx.Point(4, 16)), wx.DefaultSize)
 
-        wxStaticText(panel, -1, "Idle:",
-                     wxDLG_PNT(panel, wxPoint(4, 28)), wxDefaultSize)
+        wx.StaticText(panel, -1, "Idle:",
+                     wx.DLG_PNT(panel, wx.Point(4, 28)), wx.DefaultSize)
 
-        self.sizeCtrl = wxTextCtrl(panel, -1, "",
-                                   wxDLG_PNT(panel, wxPoint(24, 4)),
-                                   wxDLG_SZE(panel, wxSize(36, -1)),
-                                   wxTE_READONLY)
+        self.sizeCtrl = wx.TextCtrl(panel, -1, "",
+                                   wx.DLG_PNT(panel, wx.Point(24, 4)),
+                                   wx.DLG_SZE(panel, wx.Size(36, -1)),
+                                   wx.TE_READONLY)
 
-        self.posCtrl = wxTextCtrl(panel, -1, "",
-                                  wxDLG_PNT(panel, wxPoint(24, 16)),
-                                  wxDLG_SZE(panel, wxSize(36, -1)),
-                                  wxTE_READONLY)
+        self.posCtrl = wx.TextCtrl(panel, -1, "",
+                                  wx.DLG_PNT(panel, wx.Point(24, 16)),
+                                  wx.DLG_SZE(panel, wx.Size(36, -1)),
+                                  wx.TE_READONLY)
 
-        self.idleCtrl = wxTextCtrl(panel, -1, "",
-                                   wxDLG_PNT(panel, wxPoint(24, 28)),
-                                   wxDLG_SZE(panel, wxSize(36, -1)),
-                                   wxTE_READONLY)
+        self.idleCtrl = wx.TextCtrl(panel, -1, "",
+                                   wx.DLG_PNT(panel, wx.Point(24, 28)),
+                                   wx.DLG_SZE(panel, wx.Size(36, -1)),
+                                   wx.TE_READONLY)
 
 
     def OnCloseWindow(self, event):
@@ -74,7 +74,7 @@ class MyFrame(wxFrame):
 
 #---------------------------------------------------------------------------
 
-class MyApp(wxApp):
+class MyApp(wx.App):
     def MainLoop(self):
         # This outer loop determines when to exit the application,  for
         # this example we let the main frame reset this flag when it
diff --git a/wxPython/demo/encode_bitmaps.py b/wxPython/demo/encode_bitmaps.py
index b3d027eb11..5cff6582ce 100644
--- a/wxPython/demo/encode_bitmaps.py
+++ b/wxPython/demo/encode_bitmaps.py
@@ -60,6 +60,7 @@ command_lines = [
     "-a -u -n WizTest1 bmp_source/wiztest1.bmp images.py",
     "-a -u -n WizTest2 bmp_source/wiztest2.bmp images.py",
 
+    "-a -u -n Tux bmp_source/Tux.png images.py",
 
 
     "   -u -c bmp_source/001.png throbImages.py",
diff --git a/wxPython/demo/images.py b/wxPython/demo/images.py
index 8e35d1c1f2..7cee82fd0a 100644
--- a/wxPython/demo/images.py
+++ b/wxPython/demo/images.py
@@ -1,5 +1,5 @@
 #----------------------------------------------------------------------
-# This file was generated by encode_bitmaps.py
+# This file was generated by C:\PROJECTS\wx\wxPython\demo\encode_bitmaps.py
 #
 from wxPython.wx import wxImageFromStream, wxBitmapFromImage
 from wxPython.wx import wxEmptyIcon
@@ -4060,3 +4060,1318 @@ def getWizTest2Image():
     stream = cStringIO.StringIO(getWizTest2Data())
     return wxImageFromStream(stream)
 
+#----------------------------------------------------------------------
+def getTuxData():
+    return \
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01G\x00\x00\x01h\x08\x06\x00\
+\x00\x00\xc4\xb39\x88\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00 \
+\x00IDATx\x9c\xec\xbd{\x90[\xd7\x9d\xdf\xf9\xb9\xc0\x05\xee\x01\x1a\xdd\xb8\
+\r5\xbb\xd1\xad\x96\x08R4\t\xd2\xb4\xd4R\xf4h9\x9aq{\xec\x1d\xd3\xb3\xde\x0c\
+5\xebJ8\xb3\xceF\xf3\xaa\xd5&U\x1b\xa7\xb2\x95q6\x7f\xacg\xabRQ\xaa65N\xd5n\
+\x8dk\xaaR\xe3\xdd\xa8\x12M\xfe\xb0\x95\xa9YGI\x94X3\xf6jh\xd9\xb1h[\x96ZZ\
+\x99\x04%\x8a\x04)\xaa\x1b\xdd\x04\x81\x83\xe7\xdd?.\x0e\xfa\x02}\x01\\\xa0\
+\x1f\xecn\x9eO\x15\n\xc0}\x9c{.\xba\xf1\xc5\xefu\xce1l\xdbF\xa3\xd1h4\x9d\
+\x84\xeet\x074\x1a\x8df/\xa2\xc5Q\xa3\xd1h|\xd0\xe2\xa8\xd1h4>hq\xd4h4\x1a\
+\x1f\xb48j4\x1a\x8d\x0fZ\x1c5\x1a\x8d\xc6\x07-\x8e\x1a\x8dF\xe3\x83\x16G\x8d\
+F\xa3\xf1A\x8b\xa3F\xa3\xd1\xf8\xa0\xc5Q\xa3\xd1h|\xd0\xe2\xa8\xd1h4>hq\xd4h\
+4\x1a\x1f\xb48j4\x1a\x8d\x0fZ\x1c5\x1a\x8d\xc6\x07-\x8e\x1a\x8dF\xe3\x83\x16\
+G\x8dF\xa3\xf1A\x8b\xa3F\xa3\xd1\xf8\xa0\xc5Q\xa3\xd1h|\xd0\xe2\xa8\xd1h4>hq\
+\xd4h4\x1a\x1f\xb48j4\x1a\x8d\x0fZ\x1c5\x1a\x8d\xc6\x07-\x8e\x1a\x8dF\xe3\
+\x83\x16G\x8dF\xa3\xf1A\x8b\xa3F\xa3\xd1\xf8\xa0\xc5Q\xa3\xd1h|\xd0\xe2\xa8\
+\xd1h4>hq\xd4h4\x1a\x1f\xb48j4\x1a\x8d\x0fZ\x1c5\x1a\x8d\xc6\x07-\x8e\x1a\
+\x8dF\xe3\x83\x16G\x8dF\xa3\xf1A\x8b\xa3F\xa3\xd1\xf8\xa0\xc5Q\xa3\xd1h|\xd0\
+\xe2\xa8\xd1h4>\x98w\xba\x03\x9a\x83\xc1\xfaz\xd1Q\xaf\'&\x12\xc6\x9d\xec\
+\x8bF\xb3\x1dhq\xd4\xf4\xc5+z\xdbu\x8e\x16O\xcd~@\x8b\xa3f\x13\xa3\x08\xe2V\
+\xdb\xd7\x82\xa9\xd9khq\xd4\xb4\xd9iQ\x0crm-\x92\x9a\xbd\x82\x16\xc7\xbb\x9c\
+;)\x88~\xe8\xd8\xa5f\xaf\xa0\xc5\xf1.e\xaf\x89\xa2\x1f\xda\x9a\xd4\xdcIt)\
+\xcf]\xc8~\x10F/\xeb\xebEg\xbf\xf5Y\xb3\xff\xd1\x96\xe3]\xc4~\x17\x18mIjv\
+\x13m9\xde%\xecwa\x14\x9e\x9fqmIjv\x03-\x8ew\x01\x07AHd\xbdS \xe1`\xdc\x97f\
+\xefb\xd8\xb6}\xa7\xfb\xa0\xd9!\xee&\xf1\xd0\xae\xb6f\xbb\xd1\x96\xe3\x01e\
+\xbf\n\xa307\x1e\xc3\xb0_\xefW\xb3w\xd1\t\x99\x03\xc8~\x14\x8ax\\ \x84\x85\
+\x10\x02\x00)%!Y\x01\xa0T\x92\x81\xdaX_/:\xda\x82\xd4l\x17Z\x1c5w\x1c\xaf0\n\
+\x11\xeb\x10H)\xcb\x08a!e\x85fU"\xeb\xfd\xdbr\x7f\x18>\xce\xc4\xc4e-\x92\x9a\
+-\xa1\xc5\xf1\x80\xb1\xdf\xacF\xe5>{\x85Q=@\t\xa4\xfb(\x14V\t\x05\x12\xc9\
+\x9f\xb1\xbe\xfeqG\x0b\xa4f+\xe8\x84\xcc\x01b\xbf\t#lX\x8d\xb6=\x89\x10\x02\
+\xdb\xb6\x11B\x90H$\xa8V]\x05\xacV%\x85B\xa1-\x90\x85\xc2Z +R[\x90\x9a\xad\
+\xa0-\xc7\x03\xc2~\x15\xc6n\x940&\x12\t\x84\x10H)\xa9V\xdd\x98\xa3\x94\x1b\
+\xb1G)-X_\x1bhABb{;\xad\xb9k\xd0\xe2\xa8\xb9c4\xab\x92Pt\xc3\x85V\xcf\xd1\
+\xa8\xd9r\xad\xadV\xbcQ\x10\x8d\nVV\\\xeb\xd1\xb6\')\x14V\x01\x08\xc9J\xdf\
+\x84\x8dN\xd2hFE\x97\xf2\x1c\x00\xf6\xa3\xd5\x08\xb4\xad>)\xa5G\x18]!T\xae\
+\xb6\xebn\xbb\xc9\x1a%\x9a@G\xe2fP\xd9\xcf~\xfd|4w\x16-\x8e\x9a=\x81\x12\xc8\
+\r\xab1\xd6\xde\xa7^\xab}*.\t`\xdbI\xe2\x13I-\x90\x9amG\x8b\xe3>\xe7 |\xe9\
+\x95\xd0\r"\x1a\xdd8\xae[@C\xd1`mh4A\xd11G\xcd\x9e\xc0O U\x9d\xa3z],\x16\x07\
+\x9e\xa3\xe3\x8f\x9a\xedB[\x8e\xfb\x98\x83`5z\xe9\x16;)\xcbHY\xa1PX\xa3X,R,\
+\x16\xdb5\x8f\xa3r\xd0>3\xcd\xce\xa1-G\xcd\x1dC\x98 \x84\xd5~/\xa5$\x91H\xb4\
+\xea\x19\x0b\xed2\x9ej\xb5\xde!\x8c\xfd\xc4Q\x98\x04\xa8\x7f\xd4h\x06\xa3\
+\xc5q\x9frP- \xe5:{\x9f\xbbEQ\x95\xf1\x08\x11kY\x972\xf0\xf0B\xd0\xee\xb5&\
+\x18Z\x1c5w\x8cPT e\xa5]\xec\xad2\xd67o\xdeD\x08A\xa1P\x00\xf0\x15F\xb5\xdd}\
+v\'\xa8\xd0\x16\xa3f;\xd1\xe2\xa8\xb9\xa3t\xbb\xd5\xca\x9dV\xef\xdd\xe7r\x87\
+\x10\xaa\xa4\x8b0]\x81\r:k\x8f\x17m=j\x06\xa1\xc5q\x1frP\\j?Q\xf3\xc6\x13\
+\x95\x95({L]&\xeb@}\xf4\xe4\x8cF\xd3\x0f-\x8e\x9a;\x86*\xdcn\xbb\xc5]\x89\
+\x96\xd2\xc0\xb1\xd3[c}\xfd\xb0\x9e\xb9G\xd3\x13]\xca\xa3\xb9c\xc8\xba;\xbe\
+\x1a6\x04\x12\\Q\\Y\xd9Yat\xf9\xd9N_@\xb3\x8f\xd1\xe2\xb8\xcf8(.\xb5B\x8dliV\
+\xa5+\x88\xb2\xb2\xab\x89\x95\x83\xf6yj\xb6\x0f\xedVk\xee(\xddq\xc4Q\x92+\
+\x1a\xcdN\xa0-G\x8dF\xa3\xf1A\x8b\xa3\xe6\xaeG\xbb\xd6\x1a?\xb48j4\x1a\x8d\
+\x0fZ\x1c5\x1a\x8d\xc6\x07-\x8e\xfb\x08\xed\xfe\xed\x1c\xfa\xb3\xd5t\xa3\xc5\
+Q\xb3\'\x184\x93\xb7F\xb3\xdb\xe8\x7f\xc9\xbb\x085\x16\x19<\xc5\xd7w`\xb2\
+\x065\xad\x98\xf79>\x91$$+]c\xad\xfd\x87\rj4\xbb\x81\x16\xc7\x03\x8cW\x0c;\
+\xb6\x0b\x0bZ"\x14\x1ab\xaa\xaf\xed\xa2\xbd\xb0\x96\xe7Y\xae\xac\x91J%\x01\
+\xdakX\xabG>\x9f\'\x9f\xcfk\x91\xd4\xec*Z\x1c\x0f ~\xebA\xabePm;\xd9^{\xc5\
+\x9d\x16l\x95B\x01\x04\xbb+\x90~\xac\xac\xac\x01\xae\xc5h\xdbI\xd2\xe9Y\xa6\
+\xa6\xa6\x98\x9a\x9a\xc2\xb6mr\xb9K\xedc4\x9a\x9d&\x1ctq#\xcd\x9d\xa7R\xa9~u\
+\xd01\xc2\x04#\xec\xfe\xe65\xab\x92r\xa5N\xadV\xa7\xde\x84Z\xadN\xa3\xd1\xc0\
+4\xc3LM\x1dj\t\xcf!L\xd3\xa4R\xaba\x18\x06\xb5\xda\xd6\x15R\x98Po\x8e~~\xadV\
+\xe7\xd6\xad\xdbT*eB\xa10\x13\x13\x13\x1c=z\x14!b\xac\xad\xadR.W\x0672\x02\
+\x96\x15\xfd\xfd\x1diX\xb3/\xd1\x96\xe3\x01BY\x8c\xfd\xdcO\xb5\xafPX\xc3\xb6\
+\x93\xd8\xf6$\xe9t\x1a\x80|\xfe\xda\x96\\l\x15C\x0cr\xbe\x8a3\xaa\x1f\xe7Bam\
+S\xbf\xdd\xb1\xd6\xcb\x14\n\x05N\x9f>M:\x9d&\x939Bi\xfd\xc2\x8eX\xb9z\x8eG\
+\x8d\x17-\x8e\x07\x88\xa019u\\\xa9$)\x14\xd6\x90R\x92\xc9dZ\xf1\xbdk\xac\xdc\
+\xb8>\x92\xf8\x0c:\'\x1e\x17\xa4\xd3i\x8e\x1f\xcf\x92J\xd9m\x17_\xad0x\xe3\
+\xc6u~\xf4\xa3\x0b\\}/\xd7n\xabT\x92\xee{Y&\x9b=\x89m\xdb\xa4\xa6g\xb8z\xf5\
+\xfa\xf0\x1d\xd4h\x86@\x8b\xe3\x01G\x98\x90\x9a\x9e\xe9Xo\xc5\x1b\xb7+\x95$\
+\xf9|\x1e!D\xdb\x82\x94R"\xb7)\xb6\'L\x98\xbb?\xd3\xb2\xfa2mA\x14B`Y\x82\xc9\
+I\xbb}l6{\x92O|b\x81\xb7\xdf^\xe6\xc2\x85\x0b\xe4r9J%\xd7\x92Ub\x98\xcd\x9e$\
+\x9d\x9e\xddt\x1f\x1a\xcdv\xa3\xc5\xf1\x80\x92J\xb9\t\x8dS\xa7\xb2\xdc\x7f\
+\x7f\x86d\xd2\x15\xa1\xeb\xd7\xafq\xe5\xca\x07\xfc\xf0\x87?h\x0b\x8ekA\xae"\
+\x84\xc0\xb6ml{\xb2c9\x82A\xc4\xe3\xfeK\x15\xc4\xe3\x82L&\xc3\xa9SY&&ll\xdbF\
+\x88\rA\xb4,\xd1\xb1\x1c\xab\x12\xe8\x93\'\xb3,..\xf2\xe2\x8b/r\xfe\xfc\xf9\
+\x8eP@>\x9f\x1f\xa9\x8f\x1a\xcd\xb0hq<\x80\xcc\xcd\xcd\xf0\xe8\xa3\x8fq\xec\
+\xd81fg\xd3$\x93\xae0\x01\xcc\xce\xa6\x99\x99\x99e~\xfe^\xce\x9f\xff>\xcb\
+\xcb\xcb\xae\xebz\xf5:\x85\xc2Z\xdbz\x1c\x06?\x81J\xa5\x92d\xb3\'\xc9f\xb3mQ\
+\xb4,A<.:DQ\x95\xeb\x00\xc4\x84E,\xe6f\xd2S\x936\xb6\xfd\x0c\xd1\xa8\xe0/\
+\xfe\xe2\x15J%I\xa9$\xb9\xf8\xcer;V)\x84\xa5\xc5Q\xb3c\xe8l\xf5>"H\xb6znn\
+\x86\xa5\xa5Os\xfc\xf8q\xe6\xe7\xe7I$\x12n\x9cn\xd2&i\xdbLMMq\xef\\\x1a\x07\
+\x03\xdb\xb6\x89\xc7\x13\xac\xac|H\xb9\\\xa1V\xab\xb3\xbaZ\xc00\x1cL\xd3\x0c\
+\x94\x15\xf6\xcbL\xa7RI\x1e\x7f\xfcI\x8e\x1c\xc9tX\x8b\x89D\x02\xd34\xdb\x82\
+\x98H$\x18O\x8cQ\xaf7\x88\t\x8b\xa4=I\xd84\t\x9b&c\x89\x04\xd1\x88Iz6M\xa9$Y\
+Y\xf9\x10\xa7\xe6N\x84[.W\xa8\x95o\x13\xb1\xc4\xb6e\xd8\x15:c\xadQh\xcb\xf1\
+\x00\x11\x8f\x0b\x1e|\xf0a2\x99\x0c\x93\x93v\xdbMNM\xdaD-\xf7G\xb0Zq-\xad#\
+\x99\xc3T*\xb2m\xb5\xbd\xf6\xda_v\xd4\x19\x8eJ*\x95da\xe1a\xe6\xe6\xd2\xd8\
+\xb6\xcd\xec\xack\x89&\x93v\x87\x95\x08\x1b\x96\xa2\xb2\x16\xd5~\xefR\xacB\
+\x08\x9e|r\x91\x1b7\xf2\xe4r\x97\xda\xb1PY\x878h\xebQ\xb3chq<@\xa4\xd3iN\x9d\
+\xcabY\x1b\xae\xab\x12\xc6n\x0f\xa1\\.\xb7\xe3\x90\x8f<\xb2@\xb5*\xb9p\xe1uJ\
+\xebnIM<.\xda\xa59\xfd\xe8\xde\x9fN\xcf\xb6\x12/v\x87K\x1fk\x8d\xc8QB\xa8\
+\xc4Z\xd1\xdd\xbfjER.\xbbY\xecx\\\xb0\xb8\xf8\x04\xf9\xfc5\x84\xb9\xb1\xb6Li\
+}\xcdw\x04\x90F\xb3\x1dhq< \xc4\xe3\x82\xd3\xa7O#\x84\x1b\xd7S\xee\xac\x17)e\
+\xdbr\x8c\xc5b-+\xcduy\x17\x17\x17\xc9\xe5r\xae\xd5X\x97#Yc\xa9T\x92S\xa7\
+\xb2\x08a\x91L\xda$\x936\xb3\xe9\x19\x92\xf6\xa4+\x901\xb7?\x96\xb5\x11oT\
+\xfdR\x16#\xd0Z\xbbZ\xb4\xc5\x11\xdc!\x85\x8f>\xfa\x18/\xbf\xfcr{9V\xbd4\xab\
+f\'\xd1\xe2x@\xb0\xed$SSSX\x96h[\x841a\x11\xb5D[\x98,\x8f\xb5V\xa9H\x0eg2\\\
+\xbb\x96g\xad\xb0\xca\xb5\xfcu\x1eyd\x81?{\xf1\xc5\x91\xfb\x90\xcd\x9e\xe4\
+\xfe\xfb3\xcc\xce\xa69|\xd8-\xdfQ\xd6\xa3\x12B\xbf\xa1\x8d^J%\xc9\xdc\\\x9a\
+\x95\x95\x02kk\x05\x96\xdfz\x0b)%\xab\xab\x05\xa6\xa6\xa6H\xa7\xd3\\\xbc\x98\
+\x1b\xb9\x8f\x83\xd0\x85\xe0\x1a\x85\x16\xc7\x03\x800!\x939\x82m\xdbLNnXkJ\
+\x98R)\xdb\xf7\xbcRIr\xe4H\x86RIr\xfd\xba["\xf3\xea\xab\x7f9R\x81\xb5\xdb\
+\x87\x0c\xd9l\x96\xd9\xf4\x0c\xd9\x93\'\x99\x99I\x0f\x14\xc3n\xd4\xf1B\x08R)\
+\xb7\x04iyy\xb9mU\x1e?\x9e\xed(\x12\xd7hv\n-\x8e\x07\x84\xb99\xd7J;u2\xcb\
+\xe1L\xa6C\x98T\x0cQ=+\xd4\xebx\\p\xe4H\x06\xcb\x12<\xfa\xe8c\xfc\xe9\x9f\
+\xfe\xd9\xd0\xd7OM\xcfp\xe2D\x96\xa3G2\x9b\xae\xef\xc7\xd5\xaby~|\xe1u.\xe5.\
+c\xdb6\x0b\x0b\x0bd2\x99\x8e>\x95J\x92T\xca\xe6\x93\x9f\\\xc4\xb6m.\\\xb8\
+\x80\x94\x92\x9f\xfc\xe4u=BF\xb3\xe3hq<\x00\x84\xa2\x82\xe9\xe9\x19\x0e\x1f\
+\xcep\xfcD\xb6U\xa2\xe3\x8a\x8b\x94\xb2\x15Kt\xe3zj\x98\xa0\x9fp\xd9\xb6\xcd\
+\x17\xbe\xf0\x05\xfe\xc3\xb7\xfflh\xcb\xcc\xb6\'9r$\xc3D\xd2n\xd73\xfa\xb1\
+\xb2R\xe0\x85\x17^\xe0\x1b\xdf\xf8\x06\xb9\xdc\xa5vR%\x9dN\xb3\xb4\xb4\xc4\
+\x97\xbf\xfceN\x9d\xca\x02\x9d.\xf8\xa9S\xee}I)I\xa7g\xb58jv\x1c-\x8e\x07\
+\x00\xdbN23\xb3\x91%V\xa2\x92\xcb\xe5x\xee\xb9\xe78\x7f\xfe|{\x04L&s\x84g\
+\x9f}\x963g\xcelr\xb7\xe3q\xc1\xc2\xc2\x02s\xf7g\xfa\xc6\xf5\xfc\xb2\xd8\xde\
+\xe2q!6[\xa9\xe0\n\xe3s\xcf=\xc77\xbe\xf1\xc7\xed\xb2!7y\xe4\xce\xe3\xf8\xd2\
+K\xff\x8e\xe5\xe5e\xfe\xe1W~\x8f\xcf\xff\xca\xe7}\xee\xd3M\x1c\xbd\xf2\xca+\
+\xed\xe2u\x8df\xa7\xd0\xcb$\x1c\x00\x84\x88q\xe4H\xa6\xc3-\xbdz5\xcf\xb3\xcf\
+>\xcb\xbf\xfaW/p\xf1\xa2\x9b\x85\x16"F>\x9f\xe7\xcb_\xfe\xbb|\xedk_ce\xa5\
+\xb0\xa9\xadL&\xc3\xf1\xe3\xd9\x9e\xd7\x8a\xc7\x85o\xf9L4\xda9\xea\xa5[\x18K\
+%\xc9\x1f\xfe\xe1\xd7\xf9\xfa\xd7\xbf\xde1&:\x9b\xcdr\xee\xdc\xafs\xf6\xecY\
+\x1e|\xf0a\xf2\xf9<\xbf\xf7\x95\x7f\xc87\xbf\xf9\xe2&\xf1S\xc3\x11\x1f~x\xa1\
+c\xc6p\x8df\'\xd0\xe2x\x00P\x93:(\x8b\xadT\x92|\xfd\xeb_\xe7\xd5W\xcf\x03\
+\xae\xa5\xb7\xb0\xb0\xc0\xd9\xb3gYZZ"\x9b=\xc9\x0b/\xbc\xc0\x0b/\xbc\xb0I\
+\x80\x84\x10<\xf2\xc8\x82;\xa5X\\\xb4\xeb\x1d\xbb\xe9\xde\x16\x8d\x9a\xed\
+\xf3\xbb)\x95$\xaf}\xff<\xff\xfc\x9f\xffA\xc7\xf5\x84I;\xd1\x92\xc9d\xf8\xcc\
+g\x96XZZBJ\xc9s\xcf=\xd7\x9ex\xc2K<.\xc8\x9e8\xe1{\x1d\x8df;\xd1\xe2\xb8\xaf\
+\xf8\xb8\xef\xd6\xa9\xa9\xa9\x8eR\x99B\xa1\xc0\x8b\x9e\x92\x1cYwEH\x95\xd8d\
+\xb3Y\x84\x10<\xf7\xdc?ayy\xb9\xa3-5\xad\x98\xd7m\xf6Z\x8aBX\x08au\xec\x17&$\
+\x12\x89\x9e\xbd\x96R\xf2\xbf\xff\xb3\xafm\x9aEG\xd6]\xd7\xff\xfc\xf9\xf3\
+\xe4r9\x00N\x9e\xccr\xfa\xf4i\x96\x97\x97\xf9\xda\xd7\xbe\xe6\xdb\xde\xe1\
+\xcc\x11l{r\xe8L\xb8F3\x0cZ\x1c\x0f\x00\xd5j\xbd\xa3\x88\xfa\xc7\x17^o\x8b\
+\x8d"\x9f\xbf\xc6\xeb\xaf_\xa0R\x91\xa4\xd3\xee\xd0\xbe\xabW\xaf\xf3\x8do\
+\xfcq\x87uV*Iw\xc8a*I\xb3*\xdbb\x98J%\x99\x9b\x9b!\x9d\x9e%\x9d\x9e%\x95J\
+\xb6\xadG%\x94\xb1\x1e\xae\xeeO~|\x81\xbf\xf8\x8bW|\xf7\x95J\x92W_=\xcf+\xaf\
+\xbc\xc2\xeaj\x81RI2?\x7f/\xcd\xaa\xe4\xfc\xf9\xf3\\\xbf\x9e\xdftN&\x93\xe1\
+\xd8\xb1c\xda\xb5\xd6\xec(Z\x1c\xf7\x15?\xf3\xdd\xaa\\Zp\xc5\xe6\xdf\xbd\xf4\
+\xd2&w\xf4\xea\xd5\xeb\xedzA)\xddB\xebx\\p\xfe\xfc\xf7)\x146\xc7\x1e\x01\xcf\
+\xec7\xa25\x9d\xd8,\xf7\xdf\xef\n\xd3SO\xfd\x02\x9f\xfc\xc5%\xe6\xe6f\x10&T\
+\xab\x92\xb2\xcf\x98\xecRI\xf2\xcdo}k`\xf2$\x9f\xbfF.\x97\xe3\xfa\xf5k\x08\
+\x11#>\x91l\x0b\xba\x1f\xc7\x8e\x1d\xdb\xd2\x18p\x8df\x10:[}\x00P.\xadJ\x84\
+\\\xbcx\xd9\xf7\xb8|\xfe\x1a\xef\xbe\xfb.\x89D\x82\xe9\xe9\x19l\xdb\x15\xa0w\
+\xde^fn\xae3\xdb\xac\xf0N\x00\xe1\x0e\xeb\x93\xed\xe9\xcf\xc0\x1d\x15\x93\
+\xb7\'\xa9V\xfdk\x7f\xa4\x94\\\xb8\xf0\xe3\xbe\xfdO\xa5\x92\xad\xe3.\x90N\
+\xa7[\x8fYr\xb9\x1co\xbd\xb5\xec\x9b\xf9\xced2}\xdb\xd4h\xb6\x8a\x16\xc7\x03\
+@\xb5\xda\xe9\x16\xaf\xaf\xfb[\x82\x85\xc2\x1a\xef\xbe\xfb.\xc7\x8e\x1dk\xaf\
+\x1f\xf3\xe6\x9b\xcb\xbc~\xe1\x02K\x9f^\x02\\1sE\xb0\xd3*\xeb\x9e\xe4A\x08\
+\x0b\xdb\x9e\x04 \x9f\xcf#\xa5\xe4\xf2\xe5\x1c\x99L\x06)7\xc4LJw\xa6q?\\Q\
+\xac\xb4\x8e\xab\x90\xcb\xe5\xc8\xe5r\xed\xe4\x12\xb8\x93\xf3\xfa\xa1\x132\
+\x9a\x9dF\x8b\xe3>bb"a\xac\xaf\x17\x9d\xee\xed\xd5j\xbd\xed.+\x178\x1e\x17\
+\x9b\x16\xcbjV\xdd\x19\xbf\x8b\xc5"\x17/^&\x9fw\x85\xe7\xd2\xa5K\x1d\xed-//\
+\xfb/\xb4U\xef\x14a\xb5\x84*\xb8\x02\xf9\xado\xbd\xc8\xe1\xc3\x1b\xd3\xa5\rJ\
+\x98\xa8\x04M\xb7\xcb\xad\xfa\xa5\xae\xe1\x15[\xd8\x98\xa8B\xa3\xd9It\xcc\
+\xf1\x80\xa1j\x01\x85\xb0|\xeb\x11\x95e\xe8\x8dS\xc2\x86@-//\xf3\xd2K/\x05\
+\x9a\nL-\xd0\xa5\xca\x87r\xb9K\\\xbe\x9c\xa3\\\xde\x10\xbbJe\xf8B\xed\x95\
+\x95\xb5\x8e\xcc\xb6\x16B\xcd\x9d@[\x8e\x07\x80b\xb1\xd8\x8e\r\x96Jn6\xba\
+\xb4\xbe\xb6\xc9\xf2\x93uZ\x93\xc5^jY\x9a\x1b.-\xa8\xa1}\xff\xda\x9d7\xd1\
+\x90\xdc3\x05\xa9q\x83d,D"\xde\xe0v=\x8cS\x85J3\x82\xacT\xa88\x0e \xb9]\x84\
+\x0f\x0bn1\xfa\xeb\xaf_\xe0\x89\'\x16\xdb\xd6\x9e\x9a!hT\xbc\xf1\xcd\x8e{\
+\x91ROt\xab\xd9Q\xb48\x1e\x00\n\x85\x02\xd5\xca\x86[\xfd\xe4\xe2\x13\xae\xe5\
+\xd7c\xae\xc3\x95\x95\xb5\x0e\xf1\x14\xc2\x82\xea\r^z\xe9U.\xfe\xe8\xff\xe2\
+\xccC\r\x1e|\x00\x8e\xde\x1f!.\\/>aY\x14+\rJ\xd4\x99\xb6L\x8a\x950%i\xb0^\
+\xadQ\xb8\x19\xe6Go\x87\xf8`\xf5}\x96\x97\xddYtfg\xd3\x9e,\xf7\xe8\xd3\x8ce\
+\xb3\xd9M\xee\xb9\x94\x92\xb5\xb5\xcdqQ\x8df;\xd1\xe2x\x00\xc8\xe7\xaf\xb1\
+\xb2\xba\x91\x84\xc9\x9e<\x89m\'\xfbZU^\xabR\xca\n\xdf\xfb\xceK\xdc\xfa\xd1\
+\xd7y\xe6\xb3M>6\xddD\xa4#\xc4\x85\x01\xb8S\x1b\x9a\xb2I]\x84(IW0\xc7\x08s\
+\x1b\x87\xc9\x90`\xb5\xd9\xe4\xf3\xbf\xe4\xf0\xf3k\x0e\xef]z\x8b\x1f\xbe\xf4\
+\x7f\x00p\xee\xdc9\x00\x96\x96\x96\xda\xa3u\x86A\x8d\xf5\xf6\xcbV\xaf\xae\
+\xfa\'\x9d4\x9a\xedB\xc7\x1c\x0f\x00j\xc9R\xc5\x91#\x19\xce\x9d\xfbu\xdfa\
+\x7f\xdd\xdc7\x05\xf6\xea\xbf\xa4\xf8\xd6\xdf\xe7\xe3G~\xce\x89\xfb\x1c\xa6\
+\xd3!\xa6\xec\x10S\xb1\x10\x93\xa1\x10\x86\x08Q\x17\x06c\x18-\xc1\x84\xdb\
+\xb8\x16e%\xea>\xc7\x85\xc1\'\x8e\x98\xfc\xf5_\x82\xdf{\xfam\xec\xc2\xb3\xfc\
+\x87\x17\xfeg\n\x85\x02g\xcf\x9e%56\xfc}\x9d;w\x8eG\x1eY\xe8\x10F7\xceY\xe0\
+\x8d7\xde\xd0.\xb5fG\xd1\xab\x0f\xee3\xfcV \xac\xd5\xea\x1c9r\x98\xd3\xa7?\
+\x81m\xdb\xd4juN\x9e\xcc\xf2\xe7\xdf\xfd\x1e\x86\xe1p\xeb\xd6\xedM\xed\x08\
+\x13>\x99\r\xf3\xbb\xff\xb5\xc9S\xc7\x1d\xc6\xac\x10\xb2\xe8\xd00C$\xa2\x0e\
+\xe3\xd1\x102\xec\xd0\x08CTB\x14\xa3-\x88\x00\xab\x850\x17s\r\xdey\xc7\xe0\
+\x83\x0f\xe0g\x17\r"M\x83\x90\x1d"iC&mrH\xfc\x98\xcb?\xfaC\x9c\xf0\x0ck\xb7\
+\xe1\'o\xe6\x02\xdf\xe7\xd1\xa3\x19\x9e{\xee\xb9\xf6\x02]\x8a[\xb7\x8a\\\xb9\
+r\x85?\xfa\xa3?\xc20\x9c@+$\x0e\x8b^\x81P\x03Z\x1c\xf7\x1d\xbd\x96g\x8dD"<\
+\xf5\xd4S\xd8\xb6\x8di\x9aLOOq\xcf=S\xbc\xf8\xe2\x8b\x9b\x04\xe4\xc4\x1c\xfc\
+\xad_\x80\xa7\xffj\x84\xd9I\xa8VC\xbc\x9dw\xb0\x0c\x83\xb9i\x87\xd8\x94A\xcc\
+0h\x84\xdd\xe3\xcb\xa6\x81iB\xdd\x0cA\xdd\x15H\x87&+\xe5&\x1f\xae\x86\xb9Yh\
+\x90{\xbf\xc9\xadr\x13;a\x12\x8f5\x89\x98\x06\x11\xd3`j\xd2!V\xfb.3\xd6eB\
+\xe1&\xab\x05X/\xf5\xbf\xc7\xa3G3\xfc\xf3\xaf\xfd\x01\xbf\xf8\x8b\xbf\xb0i_>\
+\x9f\xe7{\xdf\xfb\x1e/\xbe\xf8"\xeb\xeb\x9bE\x7f;\xd0\xe2\xa8\x01\x1ds<0\xe4\
+\xf3\xf9M\x05\xd4\xbf\xf6kg\xc9\xe7\xf3|\xe5+_i\xbb\xa0\x9f{0\xc4\x99\xc7M\
+\xe6S\x90\x18s\xb0BMnFC\xcc&\x0c\x8e=\xe0`\xcf\x1aL\x86:\xa3-1\x1c\xca\x18\
+\xee\xb3\x08\xe1\xc8&!\xcb\xe4\x81Yx`\xb6\xc9\xcd\x15\x8b\xeb7j j\x8c\xc7\
+\x1d\x0c\x11\x02\x01\xc8\r\x97\xfb\xf1l\x98\x8fgC\\\xbed\xf0\xa7\xaf\xd4\xf9\
+\x7f\xbe\xdf\xe0\xed\xab\x9b\xef\xe3\xd4\xa9,\xff\xf4\xb9\x7f\xc2\xa7\x96>\
+\xbdi\xdf\xcaJ\x81rY\xf2\xedoo\x1e\x1e\xb9\x9d\xe8ud4\xa0\xc5\xf1\xc0p\xf5\
+\xbd\x1c\x17.\\`aa\xa1\xa3\x00\xfb\x99g\x9e\xa1R\x91\xfc\xc1\x1f\xfc\x01\x9f\
+\x98\xfa\x90/~\xd2`:\xd9 \x1a\x0f!\x84\xc1D\x0c\xe6\x92\xd0\x889\x1c\x12\x9d\
+\xa2hHp|\x1c\x0bC\x84\x88\xe1@\xcc5-\xc7\xec&S)\x88\x8b(\x86p\x88\t\x101\x08\
+\x87\x8ep\xbb\x99\x03\xc0\xc1!\x8eA\xe6\xa4\xc1o\xcf\x86\xf8\x9bgB|\xf7\xc7\
+\xf0\xe7\xaf7x7\xefp\xcb8\xcc\x993\x9f\xe3\xd9g\xff\xc7\xf6L\xe0^VV\xdc\xa1\
+\x8b\xcb\xcb\xcb\xbc\xf6\xda_n\xef\x87\xa7\xd1\xf8\xa0\xc5\xf1\x80 \xebp\xe1\
+\xc2\x05\n\x85\x02\xb6m\xb73\xbc\xf1\xb8\xe0\x7f\xf8\xcd_\xe3P\xfd\x02\xe1\
+\xeb\xdfd\xc2\xda\x10F\xdbv\x98\x88\x87\x88Z`\xb5\x841\x1a2\xa86\x1d_QD\x18\
+\xc4\xba69\xa1)\x8c\xe6MbG\x0e\x03\x10\'F\xdd\xaa\xd0t\xae\x11"\x82\x00\xaaN\
+\x88(\r$\x06\x938L\xa6CH\x1b\xfe\x9bY\x87\xcf,\x85\xf9\xf0Z\x88\xe5+\xd7\x88\
+\xcd\x94\x90R\xb2\xb2R\xe8\x98\xa5\\Y\x89\x85B\x81\xe7\x9f\x7f~\xd3\xd4g\x1a\
+\xcdN\xa0\xc5\xf1\x00q\xe1\xc2\xeb\xed\xf9\x19\xdd\x89\x19\xdc5W~\xf8\xef\
+\xfe\x88\xb1\xd5o\x12K@8\xa2,\xc6\x061\xb1!\x8cJ\x14+Q\x07\xa3\xe5\xb1v[\x8e\
+e\t1\x01!\x8f\x85\xd94\x040\x0f@\xd4\nQ\xa7B\xd8\x98%\x14\x8aR\xb3*\xc0\xfd\
+\x98@8\x1e%\xda\xb8L\x13\x08Uk\x08\x1c\xe2F\x88\x92p\x88\x0b\x87C\xb3\x0e\
+\xd5\xd5\x17X{\xf5U~\xf0\xfac\x18\xa9O\x92\x98y\x90L&C\xa5")\x97\xdd)\xcc^~\
+\xf9\xe5]\xf8$5\x1a0z\x8d@\xd0\xecM\xfc\xc6V{\xf9\xa5_Z\xe2\xef}\xf9\xefr8s\
+\x84t:\xcd\xf9\x7f\xf3,\x95\xf7\xbeM,\n\xe1\x88\x83\x10\x06\x860\x98\x8e5pl\
+\xb74g\xacU\xcb\xe8\x08\xb0\xaaF[ \x950\x961\x88\xb5^{\x85\xd1\xb4\xc2`\xcc\
+\x02`DC8\xd5&F\xd4\xddor?\xd4\xaf\xd2t\xee!d|\xd4:\xe1\n\xd4\xdc\xe4P\xa3\
+\x15\x8f\xa4\xec>K\t\xd5B\x93u\xc0(8\x94\xa5\xc3\xb5\xd2,+\xd5y\x8aU\xc9\x8d\
+\xa2\xe0;\xaf\xfc\x80\x1f\xbc\x13\xd9\x95\x12\x1e\x1ds\xd4h\xcbq\xdf\xf1qz\
+\xcd\xeb\x08p\xfe\xfcy.\xe5\xce2\x93\x9e\xe5\xdb\xff\xe2\xcb\x8c\xad~\x9b\
+\xa8\xd1 \x1c\t1a9\x88X\x93\x90\x15"d\x19\x8c\x01\x16\x9d\x1aPm\xb6\xb2\xd1\
+\x1e\x8b1\x86\x03\x18\x94%\x8cy\xb6W\xab3D\xa3\xd7:\x04\x12Z\xc2\x08`\xce\
+\xb9\x85\xb4u\xc0\xf99\xb0yr\xdap\xe8\x08\x8d\xe6%\x84\x80\xf8d\x98\xa8\x05\
+\xd8\x0e%\xe90-\xafs\xbb|\x9d\xdbkM\xaeM\x18\xa4>\x19b\xcc\x94\xbc\xf2\xa6\
+\xd05\x8e\x9a\x1dG\x8b\xe3\xbe\xa3\xb70*\xfe\xf3\x9f~\x9d\xea\x9b\x7f\x9f\
+\xe9\xf101\xcbu\xa5\xadP\x93P\xeb\xafm\x19\x0e\x91\x90+\x8a\x15\xd9l\xc7\x1b\
+\xad\xaaAEt\x19\xa6\xc2\x15\xc5\x18\xb4\xadGhY\x8d\\\x07c\xb6m5FB\xd1\xd6N\
+\xf7\xa9Y\xab\x102>\xa2n\xd61\xb1\xdaV#@\xb8UL\x8e\xb8\x0c\xd2\xa0\x19\x8d@\
+\xb5\x86\x00\xc2\x93!\x84t\xa0\xec\x10\x950i\x8fc\xaf\xdf\xe2\xd8\x0cL\xa7\
+\xa2\x80\x16H\xcd\xce\xa3\xc5\xf1\x80q\x9f-y,\xf563"\x82\xd2\x1f+\xd4$\x16\
+\x83h\x94\x96\xd5\x88k\xa1\x01ua\xb4\xed\xb9js#\xde\xe8\x88\x96;\xcdF\x9c\
+\xb1)\x9b=\xaf\xebZ\x8dsP\xdf\xa8\xcf\tE,\xa8\x83Ik\xf4N\xa4S \xd5\xb60\x15\
+\xc2\x910Xaw\x7fk[\x03\x88\xc7>\x06\x93@\xec\x1d(\x8f\xb1\xf0\xb1[\x84\xabQ\
+\x8a\xa5\x1a?\xcci\x81\xd4\xec\x1cZ\x1c\x0f\x10\x0f\x1d1\xf8\xeb\x8f\xc1\xfd\
+s\x11&\xac\x06\xd0\xb2\x1a#\x06\x11\x00\x9c\x0e\xab\xb1\xee\x897\xc2\xe6\xb2\
+\x9d\x98\xd8H\xc24e\xb3\x1dol\x1as\xc0\xf5\xf6q\xa1\xda\x8c\xfb"\x02\x98s\
+\x1b\r\xd4}\n\x19#>\xeb\xbet\x8b\xa6\x12\xc8\x08P{\x97&\x8f\x13\x9f<\x8e\x11\
+\xaf\x01p\xec\x81[<\xf5P\x98K7$\xa5\x01\x05\xe5\x1a\xcd\xa8\xe8\xb1\xd5\x07\
+\x84\xfb\xa6\xe0o<\x15\xe2\xfe\xb9\x08\xa2\xe5\xdd\x86#a\xac\x90k\xed\x19Q\
+\x87\x980\x08Y\x1bb\xe8M\xc4\x80\xebVw\xe3\x97\x88\x89F[\xc2\xd8r\xa9\x9b\
+\x91\xeb\x9b\xce\x83\xd7\xdc\x04\x8cye\xf3.%\x84\xb5\xca\xc6\xeb\x88\xd5)\
+\x9c\xad}\xb5\xa6\x89!WpD\n\xc7\x8a &o\x13\x9d\x84\xec<\xcc\xda:g\xa2\xd99\
+\xb48\x1e\x00\x84\t\xa7\xe6B\xccO4\x11QZ\t\x980\xf1\x96\xf5(\xe2n\x1c1d\x19D\
+B\x1b.\xb5B\xb9\xd2j\x12\t\xf7$7\xd6\xe8G\xb5:\xd3~m\xd6M\x90\xcf\xb8.\xb4\
+\x97\xfa\xfc\xc6k%\x82\xea\xa1,E?A\x04jM\x93\xdb\xab\x0e\xef_\x84|\xae\xce\
+\x95\xab\xefRZ\xfb\xb9{\x0f\x15\x03\xd1\xd2S\xc3\xb4\x02M\xae1\n\x83\xaa\x02\
+4\x07\x1f\xedV\xef3\xfc\x96J8<\r\x9fz\xc8\x80\xb8I\xd4h\xb4\xb7[\x11\x83J\
+\xcd=4&:\x85\xd1\x12\xa1\xd6\x94c!*Q\x07\xabjP\x95\x9d\xc5\xdfcv\xcb\x8d\xf6\
+\xc4\x1a\xbd\x89\x18w\xc3\x1c\xa6\xf9\x9f\xdd\xe4K[\xe8^\xeb\xfc\xcf\xea\x16\
+N\xaf\xe5\xd8\xe5R7\xa4\xc3\xdaj\x8d\x9f\xbcU\xe5\xea\x95\x08\xa9\xf1&q\xe1\
+\xf0\xd8\x89\x12\xa5\xc9\x9b\xc4q\xc7f\xdf\xb8\xd5@Vj\x9b\x97r\xd0h\xb6\t-\
+\x8e\xfb\x9cx\\\x90\x99\xaa2?\xd1\xc4\xaa5\xc1\n\xb5\xad\xc6J\r&b\x06"\x14\
+\x01j\x1d\xe7\xdd\xc6a\x0c\xa3\x9d\x84\xa9\xe2\x11F5-Y\xa1\xb9\xa9\xe8\xbbZ\
+\x9d!j\xb9\xef#\xd1L{\xbb\x9b|\xb9\xea\x96\xec(1T\xe2\xa7\xf0\xba\xd0>\xc2x{\
+\xd5ae\xd5\xe0\xa7o\x97Y\xf9\xd0\xa2^\x03y\xcb\xe0\x01\xbb\xc9j\xe1\x16c\x15\
+\xa8\x02\x85\x82\xc1\xcaZ\x98\xf7\xd7\x12\x80\x1e-\xa3\xd9\x19\xb48\x1e\x00\
+\xee\xb9\'\x8c\x15\xa9\x13\x8aF\x80\x06\x8dZ\x03,\xd7r4\xa2\x0eF\xb4\xb6\xe9\
+\x9c1\x0c\xa2!\xa3\xedJ[U\x83\n\x9d\x9ed\xac+A\xd3\xb6\x1a\x99\xa5Zi\x126:3\
+\xcf\xcdH\x1d\xb3F\xa7\xcb\xec\x15\xc4nZ\xfb\xcae\x83\xa6l\xf2\xe7\xe7%\xeb\
+\xeb01\x01\xa9\xf1&\x87,\x83\xd9\xb4CY\xbab\\\xad\xc0\x9ac\x02\rV\nu\xa8ha\
+\xd4\xec\x1cZ\x1c\x0f\x00\xf3c5\xaaDQZ\x16\x8e\x84\x81F\xc71!\xcb\xe8p\xa9a\
+\xa3t\xc7+\x92\xe0?L\xb0\x8d1K\xd8\x98\xed\x10N\xd7\x9d~\x8dPw\x99\x8e\xd7r\
+\xf4Z\x8a\x9e\xe3\xcae\x83w\xdfj\xf0\xe37\xc0\xb4\xe0\xa8\x15&\x16\x82\xa8\
+\xdd$&\x0c\x9a\x15\xb0\x0chV\xa0f\x19\xc4\xa9s\xd5pX\x97a\xa0wi\xd1v\xa0g\
+\xe7\xb9\xbb\xd1\xe2x\x00\xa8G\xc2D\xa9A\xab`\x07\\\xabQ\xc4\x1dD(J\xb7K\r\
+\x1b\x82\xa82\xd4\xed\xe1\x82\xc2 &\xdd\x111\xde\xf2\x1d\xf7 7\xce\xd8p\xae\
+\xb5]\xeaf\xad\x02\xb5\xef\xba\xfb\xbbKr\xfcJt\xd4\xcb\xa6\xc9\xda\xf5\x1a\
+\xaf](\xf3\xde\xc50\xf7\xcf\x85\xb8/\x1e&\xda\xca\xb4\x87\xac\x10\xe0\xb4\
+\xb3\xeb\xcd\x8aC\xb3\xe2\xbe\x1fs\xdc}\xd2\x11\x80\xaes\xd4\xec\x0cZ\x1c\
+\xf79\xcd\xaa\xa4$CT[3\xe0D\xe3-Q1]KP\xb9\xd4\x91.#P\tcG\x86\x1a\xdc9\x18\
+\xc5fc\xc9\xb4\xc2T+Mb\xe2^\xf7\xba\xad\xd1/!|b\x8c\xdd%:]\x16e\xb9l\xf0\xfe\
+r\x9d\xd7~\xeaP\xbd\x1d\xe1\x91{\x9bL\xc4\x1c\x8c\x960\x8aP\x14\xc3\xa8\x11\
+\xb2\x0c\x9a\x95\xce\xfe5+\x0e"\xdc$d5\x10F\x8d\x9d.s\xd4\xd6\xe3\xdd\x8b\
+\x16\xc7}\x8e\xac\xc3[\xd7\x0cR6\x1c\x1a\x83y\x0c\x9c\x84\xc3\xb4g4L\xb70\
+\xc2FM\xa3U5\x08[Pr\x1c\x84\x00\xd9\xaa}\xf4\x8e\x88qc\x8d.\xcd\xc8uB\xb5\
+\x19\x1a\xce5\x9a\x91Pg\x8c\x116\ta\xad\xd2@\xfd\x9b\xd5+\rn\x17\x9a\xbcv\
+\xa1\xcc\xc5w\xe0\x81T\x94\xa9\xc3\xee\x9c\x92\xae\x9b\xae4h\xc3\xd2\xf5\n\
+\xa4S\x8d`Dk\x94\xcb\xb0r\x13Vvf"p\x8d\x06\xd0\xe2x \xf8\xc1;\x11\nk\x15\xd2\
+\xe3\x06\x891\xf8+\xc7\x0c\xe2\x9f0\xb8\xd7#\x8c\xde\xa9\xc9\x14m\xab\xb1\
+\xf5$%\xe0\x8d%\xb6\\\xeaz\xa5\x81i\x85\x89Z\xee\x18\xea\x06\xd7\x88Do\xf4\
+\xcc>\xd7\x9a&\xa1j\x8d\xaa\x13\xc2\xb4\xdc\xf3\x9b\xb2\xc9\x079\x83W\x7f\
+\xe4\xd0\xacF8\x9d6\x98L4\x111\xf7\xe2e\xe9\x16\xa9{\xf1Z\x8dN5\xd2>\xee\xcd\
+\x8fL~~\xb53\xa6\xeaG<.\xb0\xed$B\xc4(\x14V\xf5<\x90\x9a\xa1\xd0\xe2x\x00(\
+\x95$\xff\xdfuAz\xbc\xcaX\xd8\xe1\xe7W\x0cn\x16\x1d\x16\x1f68\x9619$:\x8b\
+\x01\xabM\x87h\xc8h[\x8d\x00%\x8b\xf6\xb2\x06\n\xaf\xc5\x08\x80s\x8d\x88\x15\
+nY\x83a\xdf\x98b\xadiR\xaf4P\xe3\x0b\xaak5>\xc8\x19\xbc\xf6S\x87\x95|\x8d\
+\xf9\x89&\xf3\xb3!&bn&]\x84\xa2\x9b\xb2\xe9\xde8#\xb8\xc2(\x9bc8\xd5\x02\xeb\
+e\xf8\xf6\xf7*\xbc_\x18\x1coL\xa7\xd3,--\x91N\xa7\xc9\xe5r\x9c?\x7f\x9e\xab\
+\xef\xe5\x86\xae\x8d\xd4\xae\xf5\xdd\x89\x16\xc7\x03B\xa9$\xc9\xdd\x84\x99\t\
+\x83d\xb4\x01%x\xe5\xcf\x9b\xbcw\xb5\xc9g\x1e\x0e\x11\x9d\x84C\xadc\x1d\x01\
+\x15\x1c\xe2\x86A\xc9i\xad\xf3R1(\t\xc3u\xa7\x8d\xb9V\x1e\xf8z{4L4z\xbd-\x8c\
+\x115A\x84\xa2C\x14]\x8bNY\x8a\xdf;\xdf\xe0\xcdK\r\x8e\x1f2x\xf0p\x98\xb1\
+\xf10\xe3\xe1f[\x18\xfd\xf0Z\x8c\xa5uX/W\xb1"\xae\x80\xbe\xfcf\x98\xf3\x17\
+\x13\x94J\x83\xad\xc0Ba\x15)]\x01\xcdd2\xd8v\x92\xf3\xe7\xbfO>\x7f\x8d\xabW\
+\xfd\x86<j4\x1b\xe8\xd5\x07\xf7!\xbdV ,7\x04\xf7\x8c5\x99\x1ew0#\xae\xedV\
+\xbe\xedpu\xbd\xc9=\x93\x82\xf8x\x93\xb0\x03V\xd3]Y0b\x18D\x0c\x83\x9a0\xa8\
+\xb5~&\x9d\xc8\xbdD\xad\x10\x8d\x86C\xd8\x9c l\x1a\x84M\x03(\xd2l\xb8\xa2\
+\xd5l84\x9dP\xfbQ\x95\x8e\xbbM6\xf9\xe8C\xb8z\xa5\xc9\x7f\xf8\xf7M^\xfan\x8d\
+\x06a\x1e\x9ek0\x9f6\x99L4\x19\x8b71\xc2\xb4-F#\xbcQ\x8e\x13\xb2\x0c\x0c\xd3\
+\xc0iy\xcce\xe9\xb0^\x84R%L\xc8hru\xed\x01^\xf9y\x8a\xcb\xd7\x8a\x18\x86A\
+\xad\xd6\xdf\x04\x8c\xc5\x04\x89\xc48\xf3\xf3\xeePF!b\xcc\xcf\xcf3?\x7f\x1fk\
+k\x05\x0c\xc3\xc10\x0c\xc2N\x9d\xfa\x80\xaa \xbd"\xe1\xdd\x87\x16\xc7}H\xef\
+\xe5YM\xd6\x9b)\xa6&\xab\xc4\xc7\x0c\xc4x\x84\xb0\xd3\xe4\xf6:\\\xbaf "M\xa2\
+\th\x84!\xd1t\xd7\xa5\xae\t\x03\x81\x83\x1930#Pg\x82F\xc3!&\xee\xa5RYo\t#@q\
+\xd3\xf5\xea\x95\x06\xb7>jP\x93\x0eo\xbe]\xe6\xcd\x1f\x85\xf8O\xaf\x19\xfc\
+\xc5\x9f\xd71\xea\rN\xdd\x1b\xe2\xc4\x8c\xc3\xa1\x94\xc1\xc4\xb8\x83\xd5\xfa\
+W\xeb\xe5J7+\x0e\xcdr\x04Y\x9b\xa0\xb8.Y)\x86\xa8TO\xc0\xc4,\xeb\xd1ORO\xff2\
+\x99\xd3\x9f\xe1\xca\x95\x0f(\x14V\x07\xaeY\x1d\x8b\t\xc0\xc0\xb6m\x12\x89\
+\x04\x00cc\tb1\xc1\xfc\xfc\xbd\xcc\xcf\xdf\xc7\xf4t\x9a\xf5\xe2-\x1a\x8dF_\
+\xb1\xadT\xaa_\xd5\x02yw\xa1\xdd\xea\x03H\xde\xf8\xab<\xfeP\x1ay\xe3<\x8d\
+\x9b\x97)aP\xbbU\xe5\xcf\xbe\x13\xe2\xc4\xbd&\x1f;\xde\xe4\xde\xa4\xc3\xd4$4\
+\xec0\x08\x83\x90\xe3\xc6\x08C\\\xa5i\xccQ\x96\x1f\x10\x8d^\xa7.;\x13\x1fM\
+\xd9\xa4,\xe1\xda5\x87\x0f\x0b5\xd6.\x99|P\xac\xb2~;\xcaX\xa3\xc6}\x13p\xe2\
+\xa1\x08"\x1a&1\xe60a9X\xa6;+\x90B6\xab\xc40\xa88\x9e0\x9et\xdd\xe9j\xb5\x8a\
+l40\xc4a\x9a\x93\x8f16\xf9(Nl\x8a\x98Hc\xc8<\x8eH\xf3\xf4\xd3g\xf9\xc3?\xcc#\
+ee\xe0|\x8eRJ\xae^\xcd\x93N\xa7\x01\xa8T$\x96%\x98\x99\x99eff\x96JE\x92J\xd9\
+\xbc\xf2\xcaw\xf4\xdc\x90\x9a\x0e\xb48\x1e\x10\x84\xe9\xd6<\x16\n\x90H$H\x1d\
+=C\xe2\x81\xbf\xc2;\x7f\xf9\x7f2v\xeb}\x00\x92\x95&o\x7fP\xe7\xed\x0f\xdc\
+\xb5\xa4\xe7f\xe0\xfe9\x10\xc9\x06\xb1\xb8\xebW&\xa2\x16\x13\xb1\xcb\x84,\
+\x93+7\xca\x00\x94K!d\xa5\t2\xc2\xca\xad\x10+\xf9:7\x8b\xee\xf2\t\x99\x99\
+\x06s\x96\xc1\x03)\x88E#\x84#\x0eV\xa8A,\x06\x11\xdc\xa4\x8b\xe33\x15ZY:\xa8\
+4y\xb5\ne\xf7RT\x9b\'\xb1f\xef\xc7\x9c{\x1c\xcbZ\xc4\xb4\x04\xd5\x8a+Z\x8ep\
+\x05.{\xe2\x04KKK\xbc\xf8\xe2\xb7\xfa\n\xda\xca\xca\x1aR\xba\xd6\xe5\xdc\\\
+\x9a\xc3\x873\xed}\x95V\x9b\x96%H\xa7\xd3\xa4\xd3\xb3\x03\xe3\x90:1sw\xa1\
+\xc5\xf1\x00!\xeb\x90\x9a\xb08}\xfa4\x93v\x92X,\xcd\xf1\'\xff\x0e\x97\xff\
+\xfc\x1f\xe1T\x1b\x8cM\xc0\xf8T\x98\xe2\xad&\xb7\x8bM*+\xffg\x02\xd0\x00\x00\
+ \x00IDAT\xf0\xeem\x08YM\xe2\xd1\x08\xa1h\x08)\xeb\xd4\xeb\rT\xada\xb1.H\x98\
+\xae\x90\x98f\x93\x19a0vO\x98\x8f\xcdBbL\x15P\xba\x85\xe7j\xc6qpg\x1dw\xaa\
+\xeek\x95|)\xcbZ\xa7\x05Yrg\r\xaa4C\xd4\x98AL\x9e \x9a\xfe<\x8d\xc9\xd34\x80\
+\xa8G\x18\xbd\xc4b1\x96\x96\x968\x7f\xfe\xfc\xc0\xf2\x9cRI\x92\xcf\xe7\xc9\
+\xe5rm\xeb\xd1\xb2\x04\x96%\xda\x02)\x84`z:\xcd\xdc\xdc\x0c\x85\xc2\x9a\xb6 \
+5\x80\x16\xc7\x03\x83\xac\xbb\xd6\xa3mO\xb2\xb0\xb0@\xac\xa5R\x13\xe9Op\xf8S\
+\xff\x98\x8b\xff\xefW\xa0\x0e\xb1f\x93\xc9{\xc2\x88Y\xb7L\xa7\xec@\xd4\n\x93\
+\x98hbMV(\x97B\x84*&M\xcb\xb5$C\x95:`\xb6\x86\xecm \xc2\xae\xbb\xed\x8a\xa02\
+\xa6<\xb3\x8aW!&"\x94\xa5+\xb2\xe5\x96\xd8z\x05\x11\xa0Q\x0b\xe1L|\x1cs\xe63\
+\x84\xe6>\x8b\xd9\nLv\xc7\xc2\xbd"\x19\xb5\x04\x93v\x92aV\xce\xcc\xe5rd\xb3\
+\'\x98\x99q\x87@*\xf7Zq\xeaT\x96T\xca\x1eX\xee\xa3\xad\xc7\xbb\x07-\x8e\x07\
+\x04aB(*\xb0m\x9b\xd4\xe4\x86h\x94\xcbe&\xd2\x9f\xe0\xd0\xb1\xdf`e\xf9O\x88\
+\xd7kH\xe9\x16|[\xadLq\xc2\x8a\x90\xb0\xc2\xccLG\x88\xc5\x1c\x1c\xd9D\xd5)\
+\x96Z\xb5\x8f\x15\x19\xc6)T\x11\xa1(\xb2Ym\xb7\xefT\x8d\xb65\xa8^+\xb1T\x96\
+\xa2S5\xa8\xe1\xd0\xaco\x08c\xb5\xd4\xc4\x88\xcfB\xfaQ\xe2\'\x9em\xb7W\xadH&\
+\x92\x1b\xfd\xf7\x8a\xa4\x12\xc8jE\x12\x8b\xc5\x98\x9a\x9a\n\xfc\xf9HY\xe6\
+\xc2\x85\x1f\xb3\xb8\x18#\xd9j\xdf+\x90B\xb8\xee\xb5m\xdb\\\xbc\x18\xb8Y\xcd\
+\x01F\x8b\xe3\x01\xc1\x15\xc6$B\x08\xca\xe5r\xdbr\x8c\xc5b\x94\xcbe\xee}\xe8\
+\xbf\xc3\xa9\xd5X\xfd\xf97\x89\x96k\x98\x11(\xd7!d\x86X\xa9\x00\x95\x06\xc9|\
+\x13\xd2&\xe0Z\x95\xa25qn\xb8\x0c\xa2Rk\xcd\x0e^\xed\xacOTk[\xb7,D%\x8c\x15e\
+y\xd5[\xefkPi\x1a\xd4k\'h\xd6\x96\t\xdd\xf3 \xe1\x99\xcf\x10\x9d\xfbl\xc7}D-\
+\x81\x94r\x93\xe5\xa8\xf6y-\xc8c\xc7\x8e\x11\x8f\xbb\xc7\xf5s\x85\x9bU\xc9\
+\xca\r\x89\x94\x92l6\x8b\x10\xa2-\x8a\x95\x8a\xbb=\x9f\xcfS,\x16)\x14\n\x08\
+\x93\xbe\x85\xe2\xdaz\xbc;\xd0\xe2x\x80\x10\xc2\x15\xc4\xb2\xac\xb4\xc5\x11h\
+\xbf\xbe\xef\xf4\x19\x00*?\xff\x13\xea50#P-7\xb1\xc2M\x8a\xeb\x11\n\x0e$c\
+\x10w\xeaDB\xee\xa8\x19Q\x81u\xe9N\x1b\xe6T#\x88\x90\x9bmV1\xc4n\xd6\xcb\x9d\
+\xa3lJ\x15w\xe2\xddR%L)\xea\x10O\xac!\xcd%\xc6\x0f\xff*Q\xfbx\xc7\xb1e\x95\
+\x95\xe9\xb8\'\x81\x10\xa2]\xcc\xedeaa\x01\xdbN\xb2r\xa3\x7f"E\t]HV\xb8y\xf3\
+&\xe9t\xba\xc3j\x94\xb2\xcc\xcaJ\x81w\xdeY&\x9f\xcf\x07\x1aA\xa3\x05\xf2\xe0\
+\xa3\xeb\x1c\xf7\x19\xbd\xd66\t;u\xc6\x936\xa6i\xf2\xd4SO\xb5j\xfc\\\xca\xe5\
+2\x91H\x04\xcc\x04\xc9T\x9a\xdbu\x81q\xfb-j\x15\x87j$\x82\xd1h\x12\xaa51Ca\
+\x1a\xc5:!\x1c\xa4t0K\x11\x8a\xe5:\x96\x13A\xd6\x1a\xd4\x9d\x06\xb5J\x13\x1a\
+\x06uO\xd5t\xa5\x0e\xa5\x8a\xd3\xb6\x16K\x950R:T\xab\x10\n\x87\xa85B4#\xd3D\
+\xad\x04\xa1\xd9s\x8c\x7f\xeco\x12\x16\xf7\x00`\xc8<F\xbd\x08f\xc2\xed\xa3\
+\xba\x1f\xd3\xc4\xb6\xdd\xfb\x01\x98\x9ct_\x8f%\x12\xdc\xbe\xed\xd6\\\x8e\
+\x8f\'p\x80\x1f\xff\xf4g\x81\n\xb9\xc3N\x1d+\x16\xc74M\xa4\x94T*e\n\x855\x8a\
+\xc5\xdb\\\xbe\x9c#\x9f\xbf\xc6\xfaz\xf0\xd9,t\xdd\xe3\xc1F[\x8e\x07\x84Pt#v\
+\xd6me)\xd7:\x16\x8b\xe1\x884\xf7\x9d>\xc3G\x91:\x1f,\xff)N\xb5A)\x1a\x81J\
+\x8d\xd5"\x94\xaba*M7\xf3,#5\xc0@\xe2>[\xad\xff\x16%\x82j}\x9aR%\xec\xce>\
+\x0e\xc8J\x13a\xb9\xcfc\tW\xec\xe2V\x83\xdb\xd6!BG~s\x93\xb5\xa8\xcas\x14QK\
+\xb4\xadE\x00\xdb\xb6\xdb\xafgf\xdc{\x8b\xc5\x04\xe5\xb2\xa4P(\xb0\xb4\xf4i^\
+z\xe9\xdfs\xf1bn\xe0g$\xeb\x90\xcb]"\x9f\xbf\x06@6{\x92hTp\xe3F\x9e\\\xee\
+\xd2\xd0\x13Sh\xeb\xf1`\xa3\xc5\xf1\x80\xd0\xacJ\xa4,\xf7\x8c\xd7)\xd7\xda\
+\x15\xc94\xa9\x87~\x87ft\x8a\x1b\xcb\xff\x82\xe2\xad\x06\x8e\x11\xa2\xbeZC\
+\xc6B4\xabM\x84\x15\xa2\xe47\xd7\x19\xae\xd8\xddj\r\x98\x91\x95&\x95Z\xa7\
+\xc9V\xa95I&\xdcs\xcd\xc8q\x8a\x93\xc7HL?E\xd3#\x8c\xaa\xa0\xdb\x1b\x1f\xf5\
+\n\xa3W\x14\xd5s<.\x88\xc7\x05\xa9\x94\xcd\xcaJ\x01)%\xe9t\x9a\xd3\xa7O\x93\
+\xcf\xe7\x03\x95\xe0\xb8\x02\xe8\x8a\xa0\xfa\xact\xf9\x8e\xc6\x0f-\x8e\xfb\
+\x88\xa0\xcb\x85\xfa\xc5\xe7\x14\xb1X\xac-LS\'\xcf\x12\x9d|\x80k\xff\xe5\x8f\
+Y\xfb\xe8m D\xa5\x04\xd52\x98\x91&1\xcb\xdfO]\xf1\xbc\xbeUtc\x97uO\xf8qj\xd2\
+}v&>Ns\xe63\xc4\xe7>\xbbiA\x83\x92\x93$\x06\x9b\x841\x9dNwX\x8e*\xe1\x02n\
+\xd2E\xbdW\xc7\x16\n\x05\xbe\xf8\xc5/\xf2\xbd\xef}\xd7\xfd\x81\x18b\xc6\x1d\
+\xafP\x8e\x8a\xb6\x1e\x0f.:\xe6\xb8O\x18$\x8c\xf5\xa6;\xb6\xda\xb6\'Y\\\\d|<\
+A\xd4\x12\x8c%\xdc\xb8\\\xa3\xe1Q\r3\x81!\xf3`&\xb0\x123\x8c\xdd\xf7\x8b$\
+\xc6\x92\xc85I\xa9\xfa!\x15\xc7\xc0i\x1a4jn\xdc\xb0\xdf\x03\xa0\xd9t\x05r,\
+\x0e\xd1\xf8\'\x89\xde\x93\xc6\xba\xef)bG\xbfDx\xf2\xc1\x8e~\xaa\xf8\xa7\x8a\
+/\xaa>&\x12\t\xa6\xa6\xa6\xda\xc2\x18\x8f\x0b"\x91\xce\xdfn\xef\xfbH\xc4$\
+\x1c6\xa9T$\x89D\x82\x9b7?\xe2\xad\x9f\xbd10\xee\xb8\x9d\xa4RI\x9cZ\x85pD\
+\xc7\x1e\x0f"\xdar< (\x8bJJ\xc9\xa4\x9ddz&\xbd\xe9\x18o\x19\x8c\xd7\xa5\x8d\
+\xc5b\xc4N\x9e\xe5\xd0\x91E\xde\x7f\xe3%n_\xff\t\xd5\xe2\xbbT\xaa\x9b\x9ahc\
+\x19M"\x89,Q\xa3\x8c\x11\xbe\x97\xa8\xf5!\xe1\xe9\x07I\x1c\xca\xb4\xcbs\xbcj\
+\xae\xacUo\xfc\xd3\xcf\x8dV\xc2\x18\xf4\x9egf\xd2X\x96\xe0\xec\xd9\xb3\xbc\
+\xf2\xcawX\xb9q}\xd7\xd6\xb2\x96\xb2B(*\xb4\xf5x@\xd1\xe2\xb8\x0f\x08\xeaN\
+\x03\xdc\x7f\x7f\x86\xa4=\x89m\xdb\xed\xe1q\xde8\xa4W \xbd\xe5>\xe0\n\xe6\
+\xfc\xa3\xcf`\xc8<\x1f\xac\x82s\xe3?Q+\xbcO\xb3\xb6\x8a\xd1tG\x968!7\x99\x11\
+\x8aL2n\x87\x89\x89q\xea\xc9\xbfJ\xd2>\xb4)\xb9\x02\x1b\xa2\xe8\x15\xe3\xa4\
+\xed\xfa\xddJ\x0cc\xb1\xce$\xcc0\xb8Bj\xf3\xf0\xc3\x0b\x9c9\xf3y^x\xe1\x05\
+\xa8\xefN\xfc\xb0T\x92\x08\xd3-\xc0\xd7\x1c<\x8ca\x86`i\xee\x0cA\xc4Q\x98p\
+\xf4x\x96\xaf\x7f\xfd\xebd\xb3Y`#\xf6X(\xb8\xc9\x0b)\xa5\xefX\xe5~\xa8\xda\
+\xc3p\xe5\xfdM\xfb\x1a\xd6}\x9b\x04V\xe1\x97pQt[\x8c\xe0f\xa5\x83Z\x8c\xbdx\
+\xe5;\xaf\xf0\xdf\xff\xad\xbf\xb5\xeb\x13\xd9\xc6\xe3\x82RI\xa2\xad\xc7\x83\
+\x85\xfe\xcd\xdb\xe3\x04\xb5\x1aCQ\xc1\xb3\xcf>\xcb\'?\xb9\xd8\x91yU\xa5/\
+\xfd\x924\n\xbf\x89\x1e\xda\xc2\x16;\xeesF\xef\xc9!\x94\x15\xe9M\xb8\x00\x9b\
+\xcat\xbc\xcf[\xe5\xc1\x87\x16XZ\xfa4/\xbe\xf8"\xd0\x7f\xd4\xccv"\x84\x85\
+\x10\x16++k\xda\xbd>@\xf8\xd7jh\xf6\x04\xc3\xb8\xd3\xbf\xf8\x8bK|\xfe\xf3\
+\xee\x08\x98n\x0b\xcc\xb2\x82\xb9\xacA\xad\xca\xa8g\xc2\x86\xees\x0c\x99\xdf\
+t\xac\xb2\x14U\\1\x16\xeb\x8c1\xfa\xf5y\x14R)\x9b\xdf\xfa\xcdg\xda\xb3\xef\
+\xc0\xee\xb8\xbcjZ\xb4\xed\xb8\x07\xcd\xdeA\x8b\xe3\x1eF}\xb1\x07}\xc1S\xa9$\
+\xbf\xf5[\xcf0\xe3I\xc2\xc4\xe3\x9b\x05I\x08\xd1!l\n\xbfm\xfd\xe8\'\xa2\xde\
+\xb8c/k\xd1+\xd6\xc3$`\x82\xf0\xf8\x13\x8b\x9c9\xf39\x84pW\x0e\xdb\x8d\xe4\
+\x8c\xb2P\x85\xb0\x86\xfaA\xd3\xecm\xb4[\xbdG\xa9\x96\x8aN|"IHV\xdc/\xfa\xfa\
+\x9a\xef\x17]\x98p\xee\xdc9\x16\x17\x177\xedS\xb10W\x88\\\xd7uu\xb5\xb0I\xdc\
+\x86\x8dC\x06\xc1o\xa4\x0b\xb0c\xa2\xa8\x88\xc7\x05\xbf\xf6\xf4\xd3\x9c?\xff\
+}\xa4\\\xde5\xd7\xba\xb4\xbeF|"\xb9+\xd7\xd2\xec\x0e\xdar\xdc\x83\xd4\xebuG\
+\r\x07\xb4m\xf7\x0b\x17\x9fH\xfaZ\x90\x8f<\xbe\xc83\xcf\xfcf_\xb1QV\xa4e\t&\
+\'\xed@\x96\xe2\xb0\xd6\xa4\x97\x89\xa4\xbd\xc9\x85\x86\r\x0b2\x95\xb2\xdb\
+\xc2\xbd\x13\xb8\xd6\xe3\x99\xf6g\xb7\x1b\xc8zK \xe3B[\x8f\x07\x04-\x8e{\x0c\
+\xf5\xc5r\x83\xfc\xde\xf1\xd2\x9b\x17\x93J\xa5\x92<\xf3\xcc3d2\x19\x84\xf0\
+\x17\x1b%\x98\xee\x02\xf7\xaeK\x1b$\x012\x8a5\xe9\x8d/\x82\xbb\xc0\x95\xd5\
+\x15o\xf4\x8a\xe2N\xc5\xe8\xe2q\xb7\xee1\x939\xe2\xfe0\xec\x92\x7f$\xeb\x1b.\
+\xb6\x16\xc8\xfd\x8fv\xab\xf7 \xcd\xaa\x84V\xcc\x0c6JrBQ\xd1\xae\xe1\x13&<\
+\xf5\xd4/\xf0\xe9O/\x01\xc1\x85FYs\xbd\xb2\xcc\xa3\xe2u\xa3\xbd\xa2\xe8\x97p\
+\xd9\xc9\xc4\x85\x12\xa7G\x1eY\xe0\xe9\xa7\xcf\xb2\xbc\xfc\x16\xa5\xaa\x1e7\
+\xad\x19\x1em9\xee!\x94\xb5!\xeb\xee\xb8\xdfB\xc1}\xa8U\xf6\xbc\x96\xe1\xd1\
+\xe3Y\xbe\xf4\xa5/\x91LnL\xd00\x08\xaf{m\xdb\xc1\xdc\xeb (7zr\xd2\xeeH\xb8t\
+\xbb\xfa\xbb\x11\xffS\x93S\x00\x9c={\x96tz\xb6=c\xd1n\xa3\xad\xc7\xfd\x8d\
+\x16\xc7=\x82\xdf\x17I\x89\x89w\xc2\x05p\xdd\xe93g\xce\xb0\xb4\xb4\xd4\x8e\
+\xdf\r\x837{\xbd\x15\xa2\x96`\xa2%\xce^Q\xb4m\x9bTj\xc3u\xf7\xba\xf6\xbb\xc9\
+\xccL\x9a3g\xce\xd0\xacJ=\x8aE34Z\x1c\xf7\x00\xfd,\x0c\xaf@\x82\xebNg\xb3\'9\
+{\xf6\xec\xc8\xc3\xed\xbc\xc9\x19\xefz-\xc3\x10mY\x9f\xcaZ\xec\x8e+\xaak\xdd\
+IT\xec1>\x91\xdc\xb5\xf1\xd6\xddh\xebq\xff\xa2\xc5q\x9f\x91\x9a\x9e\xe1s\x9f\
+;\xc3\xc2\xc2\xc2\x96\xc4\xc7\xb6m\x92I\x9bt:\xcd\xf4L\x9a\x89\xa4+\x94*\xa9\
+\xd2\x0be-\xce\xce\xa6\xdb\xb1E\xef\xdc\x8bA\xd6t\xd9M\x16\x16\x16x\xea\xa9_\
+\xb8\xa3\x96\xa3\x16\xc8\xfd\x89v6\xee0\xc3~q\x1e|\xf0a\x9e~\xfa\xec\x96\xae\
+\xe9\x15U\xef\x1a-\x95\x8a\xa4\\\x96\xbe\x13\xe6z3\xd0@G\xac\xd3O\xa4\xef\
+\xb4\xd5\xa8\x88\xc7\x05\xbf\xfb;\xbf\xcd\xcb/\xbf\xbck\x13Rh\x0e\x06Z\x1c\
+\xef \xc3\n\xe3\xa9SY~\xe37\xce\x91\xc9d\xb6E|\xbc\xeeo\xa9\xe4\x8a\xa2e\xc9\
+\xf6l>@\xc7\xda\xce\xdd\xd9\xe7\xeeX\xe8^\xe5\x89\xc5\'\xc9d2\xbc\xf9\xe6\
+\xf2\x1d\xeb\x83\x9e\xd6l\xff\xa1\xc5\xf1\x0e1\x8a\xab\xb5\xb0\xb0\xc0\xd2\
+\xd2\xd2\x8e\x8d,\xf1\xa3{*\xb1\xdd\xa8S\xdcnR)\x9b\xa5\xa5O\xddQq\x04-\x90\
+\xfb\r-\x8ew\x80Q\x84qnn\x86\xdf\xfa\xcdg\x98\x9b\xdb<g\xe2v\xe1]\x82\xa0\
+\xdb\xb5\xde\xad:\xc5\x9dba\xe1\xe1=\x11\x0f\xd5\x02\xb9\x7f\xd0\t\x99}\xc2\
+\x993\x9f\xe7\xc1\x87\x16v\xedz\xdd\x8bZ\xedw\x16\x16\x16\xda\x93Q\xdcit\x82\
+f\x7f\xa0\xc5q\x97\x19\xe5\x8bq\xf4h\x86\xdf\xf8\xf5s[\xaeK\x0c\x82W\x0c\x0f\
+\x82(\x82k)f2\x192\x99#{&\x8b\xae\x05r\xef\xa3\xc5q\x17\x19\xe5\x0b\x11\x8f\
+\x0b\xce\x9c\xf9\x1c\xc7O\xb8\xb3{\xef\xe4\x97\xbb{\x14\xceAA-\xe7\xba\xb8\
+\xf8\x84^\xd6@\x13\x18-\x8e\xbb\xc4\xa8\x96B:\x9d\xe6\xd7\x9e~\x1ap\xc7X\xef\
+\xe4l6\x07\xd5jT\xcf\x8b\x8bO"\xeb\xdc\xb1\xe1\x84\xddh\xebqo\xa3\xc5q\x17\
+\xd8\xca\x97\xe0\x91G\x16\x98\x9eI\xef\x8aK\r{\xa7x{\'\xc8f\xb3\xc4\xe3\xc2\
+\x9d\xd8c\x8f\xa0\x05r\xef\xa2\xc5q\x8f"L7\xd6\xf8\xcb\xbf\xec.}\xa0\xb2\xc7\
+;][\xb8\x172\xba\xdb\x85\xfa\xac\xd4\xbd\xa4\xd3i2\x99\x0c\xb2\xbe\xb7,c-\
+\x90{\x13-\x8e;\xcc(\xff\xf8\xc2t\'\xb7\xcdd2\xcc\xa6g\xda\xdb\xd5\xd4e\xbb5\
+\xbb\xcd~\x15Ho\xec\xd4{\x0fB\x88\xf6\x8c\xe9{\xed\xde\xb4@\xee=\xb48\xee \
+\xa3\xfe\xc3\x87\xa2\x02\xdb\x9e$\x93\xc9t,k\xba\x9d\x8bQ\r\xa2\xdb\xea\xda\
+\x0f(Q\xf4~>\xdeU\x17\x958\xee\xe6\x04\xb8\xc3\xa0\x05ro\xa1\xc5q\x87\xd8\
+\xea?\xba\x94e\x0e\x1f\xceP.\x97\xdb\xe3\x9ew\xd3r\xdc\xcd\xebl\x15%\x8ajmn\
+\xf5Z\xa1\xb6K)9z$\xe3n\xab\xef\xcd\xac\xb5\x16\xc8\xbd\x83\x16\xc7\x1d`\xbb\
+\xfe\xc1\x95\x05\xd4\xbd\xe6\xf4NZt~\xe5<w\xb2\xc4\xc7\xaf/\xea\xd9\xdb/\xf5\
+\x19I))\x14\n\x00\xedg/\x873\x19\xd2\xe9\xb4\x9b\x99\xdf\xa3\x0bbi\x81\xdc\
+\x1bhq\xdcf\xb6\xeb\x1f;\x9d\x9e%\x99\xb4Y-\xacQ\xadHVW\x0b\x1d\x96\xd1v\x08\
+d\xb7\xd0xQ"\xe3\x15\xe6;!\x92~\xf7\xe9}\xef\xb5\n\x95\x85]\xa9H\xd6\xd6\nmk\
+[=\x80\xf6\x14k\xde\xf91\xf7"Z \xef<{\xf4_C3??\xdf~].\x97\x89Z\x82B\xa1\xd0^\
+\xb0\xbe[ \x87\x89Cz\xe3r^\xcb\xab\xdbB\xf5n\xf7N@\xd1-V\xde\xb6\xfa\xbd\xf6\
+\xcb\xb4w\xef\xeb%\xbe\xdd\xae\xb2\xea\x9bB\xcd$T.\xbb\xcf\xb1\x98h\xbf\x06W\
+\x14\xd5}\x1c=\x9aayy\xd9w\xd12\x8dF\xa1\xc5q\x1b\xd9\x8e_{e\xc9\xcc\xcf\xdf\
+\x0b\xb8\x02P\x96\x82Xe\xc3]\xf4N.\xab\x18F\x80\xd46\xd5\xbe\x9f(zQ\xd6\x98\
+\x94\x1b\x13Sx\xaf?H\x14\xbb\xfb\xe2\xc5{}\xaf\x10\xf7\xeaS\xa5kQ0\xaf\x00\
+\xaa6\xba\x9fU_\xd5\xf4kO<\xb1\xc8\xab\xaf\xfe\xa5k\x85\xef\xa1\x9a\xc7n\xf4\
+$\x15w\x16-\x8e\xdb\xc4v\xb9A\xa1\xa8@\x08\x8b\x99\x99Y`c\x86\x9c\x95\xd5\
+\x02\xa9I\xbb-\x90\xee\xa4\xb3\x9dK\x1cxk!\xbd\xf4\xb2\xcc\xbc\xc2\xd4-:JH*\
+\x15\x89e\x89\xb6@*\x0bL\xf5\xad\xbb\xcdnk6\xa80{\xaf\xdf\x1d+\xece\xd1v\xff\
+@\x0c\x12y\xd5\xe7\xcf}\xee\x0c\xdf\xfa\xd6\x8b,/\xbf\xd5\xb1\xa2\xe3^D\x0b\
+\xe4\x9dC\x8b\xe3\x1e"\x95J"e\x05!\xdc\xf5]\xa0S\x04\xca\xe52@+\x16\xe8\xba\
+\x8d\xde5\xa8\xbb\xa7\x1a\xf3sS\xbb\x85J\x1d\xeb\x8d\xd9\xc1\x86X)\x91Lv\xad\
+5\xd3k:\xb3\xee\xf7\xdd\xab\x0fv\x1f\xdb\xed\x0ew[|\xfd\x04O\xed\xabVd{i\x07\
+\xefr\xb3~\xcb\xcfZ\x96;\t\xc5\xff\xf6\xfb_\xe5\x1f\xfc\xdeW\xf8\xd1\x8f.\
+\xf4l\x7f\xaf\xa0\x05\xf2\xce\x10\xde\xadai\x07\x99\xed\xb2\x1ac1\x81i\x9aLM\
+\x1d\xe2\xd1G\x1f\xc54\xdd\xdf\xaez]\xad\x0ee\x00\x0e!\xc3\xc0aC\x0c\r\x03\
+\x1a\r\xf7\x18\xd34\xa9\xd7\xebLL$:\xc4(\x121)\x95$\x91\x88I$\xe2\xb6[\xab\
+\xd5\x89\xc7\x05\x91\x88\x89\xe3\xb8b\xa3\xda\x81\ra\xb4m\x1b\xd34\xdb\x8f\
+\x89\x89DG;\x8a\xee\xf7\xdd\xfbT\x1f\xe2qA\xadV\xa7^\xaf\xb7E\xd606\xce\xaf\
+\xd7\xeb\x98\xa6\xb9I\x18\xab\x15\xb7\x7fa\xd3l\xbfn4\xeam\x11T\xaf\xc3\xa6I\
+\xb8\xf5\xd9\x85\xbb>C\xf5\xfc\xc0\xb1c\x9c:\x99\xe5\x87\xff\xe5\x87\xdc\xbe\
+]\xa4V\xbbC+p\x05\xc4\xb2\xa2\xbf\x7f\xa7\xfbp\xb7\xa1-\xc7=\x84\x12\noL\xd1\
+k\r\xc6\x84E,\x16#jm\xc4\xfc\xd4\x9a.J\xc8\xfa\xfd\xd8\xf5\xb3\xf0\xbc\xe7*k\
+\xae{Y\x84\xed\xa0{b\x8bn\xf7X\xb9\xf0\xdeX\xa2\x12I\xef\xc2_\xdd\x8b\x80)\
+\x81\xec\xb6\x14\xfdPY\xec\xc7\x9fX\xe4\x9f>\xf7O\xf8\xbb_\xfe{\\\xbc\x98\
+\xeb{\xce\xdc\xdc\x0c\xb6=I\xa1\xb0\xea\x869V\xd6\x06^g;\xd1\xd6\xe3\xee\xa3\
+\xc5q\x8blgM\xa3\x101\xa4,w\xc4\xf4\xa4\xdcp\x9d\x950n\xbc\x17\xed\xb5\xa2\
+\xc1]\x0e\xa0;\xfe7\xcc\xf5\xbd\xe5.\xbb1\x1a\xc7;\x0bPw\xbd\xa2\x12I\xc0W(\
+\xfd\xac\xca~\xab&z\xcf_]-\xb4\xef\xf1\xf3\xbf\xf2y.\xe5.\xf3\xd5\xaf\xfe\
+\xaf=\x05/\x1e\x17d2G\x98\x9a\x9a\x02\xe0\xca\x95+\xd8v\x81|>\xbfo\n\xe55\
+\xc3\xa3\xdd\xea-R\xa9T\xbf\xba\x1d\xed\x84\x9d:\x11\xcbBJ\xc9\xf1\xe3\'9y2\
+\x8bi\x9a$\x12\tR\x936\xb1\x98\xbb$j"\x91h[\x96\x89D\x82D"\xd1vu\x01_w7(\xe5\
+\xb2l\xbb\x9d\xaa\xddQ\xdb\n\x8a\xd7\xd5\xaf\xd5\xdcp@8l"\x84\x1bb\xf0>\x1b\
+\xc6\x86\xa5\xac\xfeo\x95\xab\xef\xfd\x85\xf2\xba\xdc\xde\x87r\xb1\xd5}\xd5\
+\xebu\xc6\xc7\x13|\xfc\xe3\xa7\xc9\xe5.\xf3\xf6\xdb\xcb\xbe\xeeu\xadV\xe7\
+\xa3\x8fn211\x81mO06\x96 \x1e\x8fS\xaf\xd7\xa9T$a\xa7N\xbd\xb9\xa3\x1f\x13\
+\xe0\xfe\xafi\xf7z\xf7\xd0\xe2\xb8\x05\xb6\xb3Pw\xc2N\xb6\xe3\x85\x8f=\xf6\
+\x18\xc7\x8e\x1dC\x08Aj\xd2]Kz,\x91`r\xd2\x15G%\x8c\xa6i\xb6c\x86\xdd(\xd1\
+\xe9\xf5\xde\xefx\x15\xebS\x8fQ\xac\xc6A\xd7\xe9>\xc6{\xacw[$b\x12\x8b\tb1\
+\xc1\xf8\xb8+\x98\xea\x9e\x95X\xaa\xe3M\x8f\xe8\xd5\xeb\xf5v\xccQ=\xbcq\xc9p\
+\xeb\x18\xd5\x86\x12\xe4\xd3\xa7Os\xfe\xfcy\xde\x7f\xff\x8ao\x9f\x95@\x86\
+\xc3&\xeb\xeb\xeb\x08!\xda\xb1X#\x1c\xa6\xd1h\xec\x8aHjq\xdc=\xb48n\x81\xed\
+\xb2\x1a\x01\x8e\x1c9\xd2*\xf2\x9e\xe5\x0b_\xf8\x02\xb3\xe9\x19&\xc6\xc7\xdb\
+\xd6\xe2\xf8x\x82d\xd2\xfd2\xa6Rv\xdb\xd2\xea%Dj{w\x12\xc6+L\xdd"\xa5\xd6\
+\xacV\x024HL\xfd\xc4\xd7\xaf\xed^}\x0b\x8aJ\xe2(\xc1T\x96\xa5\xfa\xa1P}U\t-\
+\xd8\x10J\xa0m5v[\x90\xaa\x1f\xe1\xb0\xc9\xf4\xf4\x14G2\x19^\xfeO\xff\x91[\
+\xb7n\xfb\xf6\xa3V\xab\xb3\xfaa\x9e\xf7?\xc8\xb3\xb6\xb6\x8a\x101\xa6\xa6\
+\xa60\xcd\x08\xa6i\xd2p\x1c\x0c\xc3\xd8\xd1\xe4\x8e\xb6\x1ew\x0f-\x8e#\xb2\
+\x9dV\xa3\x1botc~_\xf8\xc2\x178}\xfa\x13maT\x16\x8a\x12\x02\x95\x85\x0e\xea>\
+\xf7\xcb(w\xef+\x97e\x87\xb8x3\xdc\xb0YL{Y\x80\xdd\xef\x83X\x93\xdd\x0cj[=\
+\x1c\x87M.\xb8:^\xfdo\xab?\x94\xb2$\xab\x15\x89\x83\x9b\xb9\x8eDZn\xb9\x03\
+\xf7\xce\xcf\x13\x89D\xf8\xeew^\xeei\x01\xaa\xed\xe5r\x85\xb5\xb5\x02\xa6i27\
+7\xcf\xf8x\x020Z\xee\xbfC\xb9\xbcs\xa3o\xb48\xee\x0eZ\x1cGd\x18\xabQ\x98\x10\
+m\xb9\x81~V\xc5\xa1C\xf7P\xaf\xd79v\xecc\x9c=\xfb4\xd3\x87\xa6\x98H\xda\x1dn\
+\xb4\xfa;\xf9\x89b/\x01\x1b\x16\xc7\xd9\x88\xe1\xf9]k\x98\xd2\x1d\xbf\xe3z\
+\xf5\xd3\xef\xf50m+\xab\xd1+\x94\xa6ib\xb4r\xbb\xea\xb3\xeb\xb6$\xeb\xf5\x8d\
+r"U\xd0~\xe2D\x96\xef\xff\xe0\x87\\\xba\x94\x1bx\xedZ\xad\xce\xed\xdbE\xd6\
+\xd6V\x99\x9a:D*5E\xa3Qo\x95D5v\xcc\x82\xd4\xe2\xb8;hq\x1c\x91\xa0\xe2\x18\
+\x8f\x0b&\xef\xb9\x87tz\x16p|]6\xd7\xea\x80\xb3g\x9f\xe6\xd1G\x1fe\xcc\x13WT\
+q\xad\xee\xd8\xe2\xa0\xb8\x9d\x1f\xfd\xe2\x90\xde\xfaC\xd5\xefQ\x85\xb6\xd7y\
+\xbd\xfa9\xa8\xffA\xc5\xdf\xcf\x9a\xf4\x8a$\xb0)y\xa3\xdco!\\q\x9d\x98H0u\
+\xcf=\xfc\xdb\x7f\xfbo\x03\x89[\xadV\xe7\xd6\xad\xdb\\\xbf\x9egr\xd2&\x9dN31\
+\x91l\'kvB \xb5k\xbd;hq\x1c\x91 \xe2\x98J%9v\xeccLM\x1dj\xcfr\xd3\xedn\xa9\
+\xa4\xc7\xe2\xe2\x93\x9c\xfb\x1b\x7f}S\xe2E\x15\\w3L\xd2\xa3\xfb\x1c?\xeb\
+\xcc+\xb4*\x96\x19D\x90\xfaY}[\xb1b\xfd\xfa\xdd\xfd\xba\xdf\xf1~"\xe9=\xb7^\
+\xaf\xb7\xddk)e\xdb\xbd\x8e\xc5\x04\xf7\xde{\x1fo\xbe\xf9\x06o\xbe\xb9\x1c\
+\xb8\x8f*a\x13\x8dF\x99\x9a\x9a"\x1e\x8fS,\xde\xa2V\xbe\xbd#I\x1a-\x8e;\x8f\
+\x16\xc7\x11\x08\x12o\x9c\x9b\x9b\xe1\xf4\xe9O \x84\xe0\xca\x95+\xdc\xbc\xf9\
+\xa1o\x1d\xdd\xa1C\xf7\x90H\x8c\xf3\xb7\xff\xf6\xdf\xe6\x81c\xc7Z\x01~\x13\
+\xdb\xb6;\xe2\x8b\xbd\xe8g\xa5\x05\xb1\xe0\xbcm\xf4ri\x07\xc5\x1e{\xb5\xdb\
+\xcfJ\xed\'\xa0\xc3f\xbc\xfb\xdd\xa7\x12I\x85\xd7\x8a\xf4\xfe\x11\x95\xf5\
+\x18\x0e\xbbV\xfa\xdc\xdc<\x7f\xf2\'/\x0ce\xf9\xa9\x84\x8dc\x84H\xa7\xd34\
+\x9b\x0e\xb7\xcb\xe5\x1d\x89?j\xebq\xe7\xd1\xe28\x02\x83\xacFa\xc2\xc9\x8f\
+\x7f\x82\xe9\xe9).]\xca\xf1\xce;\xef\xf6\xfc\x82\x8c\x8f\'x\xfc\xf1\xc7\xf8\
+\xd5_=\xcb\xf8x\xa2]\xbb\x08\x04\xb2\xc2\xfa\xed\x1f6&\xd8\xef\xf8a\xad\xb7\
+\xa0\xe7\x0f\x12\xdca\xda\xeb\x97AWVd\xbd^\xef\x10\xc8\xeea\x85\xca\xbdN\xa7\
+\xd3\xbc\xfb\xee\xbb\xfc\xf4\xa7o\x0cu\x9f\xf5&\xdc\xbe]$\x1a\x8d2=\x9d\xa6\
+\xd1h\xec\xd8\xf0D-\x8e;\x8b\x9e\xecv\x07\x98\xbb?\xc3\xd4\xd4\x14\x17/\xe6\
+\xc8\xe5r\x03\x8f\xffk\x7f\xed,\xe9t\x9a\x99\xd6\x12\xac\xde\x91#\x8aA\xab\
+\x02\xf6\xabI\x0c:\x8a\xe3N\x8e\xf6\xe8\x9e\xa0\xa2\xfbu\x90\xbe\x05\x99\x00\
+\xc3\xb6m\x92I\xb7\xa8\xbe{\xea5)\xddIr\xd5\xfa\xe0_\xfe\xf2\x97G\xae\xf5\\^\
+^\xe6\xbd\xf7r\xa4\xd3il;\xb9#\x93\xea\xea\tqw\x16-\x8e\xdb\x8c0]\xab#\x91H\
+\x90\xcf_\xeb\xfb\xa5\x16&<\xfa\xe8c\x9c9s\xa6=$p\xd0\x97q\x94\xa5S\xfd\xce\
+\xf1;\x7fP\xdb\xbd\xce\x0f\xf2z\x18\xfcD-\xe8=\x0cjW\x95M\xf9\t\xa4\x1aZ\xa8\
+\x86&f\xb3Y>\xfb\xd9\xcf\x0elW\x98\x9bg\x14/\x95$\x85\xc2*\x00\x99\xcc\x91=\
+\xbb$\x83\xa67Z\x1c\x87d\xd0\xafu|"\xc9\xd4\xd4\x14\xf9|\x9eB\xa1\xff\xe4\
+\x04\xf1\x89$_\xfc\xe2\x17I\xa5\xecM\xd6\xe2\xa0/~\xf7td\xfd\x96\x12\xf0\x9e\
+\xd3\xeb\xfc^\xc7\xf5\x1a\xab\x1d\xf4\xf5n\x08\xe7\xb0m{\x05R\r\xc5\xf4Z\x90\
+\x85B\xa1\x9d\xbd\xff\xdd\xdf\xf9\xed\x81V_(\xea\xaeG\x93J\xb9\x0f\xd5\xaf\
+\x95\x1b\xd7\xc9\xe5rLL\xd8\xa4\xd3\xb3{j\xadl\xcd`\xb48n3\xb6=\t\x10hR\x82\
+\xa7\x9e\xfa\x05\x96\x96\x96|\xf7\x05\xb1\x10\xfd\x84\xc2;\xd1\xacb\x90\x08\
+\x06\xbd\xc6(\x0c\x12\xd1\xedr\xe5\x87m[\t\xa4\x10\xa2\xc3\x82T\xf3Z^\xbf\
+\x9e\x07\xe0SK\x9f\xe6\x97\x7f\xe5\x0b\x03\xda\xb1\x80\x8dY\x8cl\xdb\x15\xc9\
+PT\x90\xcf\xe7\xb9q#O:\x9dn/\xec\xb5\x9dh\xd7z\xe7\xd0\xe2\xb8\x8d\xa4RI2\
+\x99\x0c7o\xde\xec\x1bkt\xb3\xa13\xfc\xee\xef\xfcv\xdb\x9d\xde\x8a\x80\xf9\
+\x1d?h[\xaf\xfdA\xae\x13\xc4\xed\x0eJ\x10\xebo\xd4\xeb\r\xba\xaf^.\xb6\x94\
+\xee\x94i\xcaz\xfc\xd2\x97\xbe\xe4k=z\'\x0c\xb6\xedI\x84\x88\xb5\x9f\xbd\x96\
+h.w\x89hT\x90\xc9d\x10\xc2\xda\xb3\x8bzi:\xd1\xe28\x04\xfd~\xa5\xddX\xe3l+\
+\xd6\xd8\xdfjlV%\xe7\xce\xfd:O,>\xb9)\xa6\xd6\x8b^\xfb\xfb]g\xabb\xd5\xab\
+\x9d^\x82\x1d\xa4\x8f\xc3Z\xc2\xc3\\/H\xdb~mt\xbb\xd8\xea\x07KY\x8f\x8b\x8b\
+\x8b\xcc\xdd\x9f\xf1mW\x08\xab-\x86\xb6m{\x1e\x93n"FXHY\xe1\x9dw\x96I\xa5\\\
+\xf7:\x14\xd5\xee\xf5~@\x8b\xe36\x11\x9fHr\xec\xd81\x8a\xc5"\xf9|\xbe\xef\
+\xb1\xa9\xe9\x19\xce\x9d;G*eo\xda7l2\xa4\x9f\xa8\x8e\x1a\x93\x0bz\x8d~\xe2\
+\x14$V9,\xa3\xfe\x80\x0c:&\x1e\x17\xa4R\xae0\xba\xd9e\xbb\x9d\xd5.\x95$ssi\
+\xce\x9e=\xdb\xb7]euv>6,\xc8Ba\x95\xabW]\xf7Z\xb9\xe1\xdb\x85v\xadw\x06-\x8e\
+\xdb\x800iO\x86:\xc8j\x8c\xc7\x05\xe7\xce\xfd:\xd9l\xb6\xe7~\xe8o%\r\xb2\xee\
+\x82$cz\x1d\x17\xf4\x1a\x83\xce\x19$T\xc3\xfe\x08\xec\xc6\xf9J \x958\xaaDY\
+\xa9$\xf9\x95\xcf\x9f\xf1\xbd\'o2\xc7\xfb\xec\x15H\x80\x95\x955\x8f{}D\'g\
+\xf6\x01Z\x1c\x03\xd2\xef\xd795=\xc3\xfc\xfc<\xeb\xeb\x05\xf2\xf9k}\xdb\xb1\
+\xed$\xe7\xce\x9d\x1bx\xbda\xbf<\xa3XgAb\x8d\xbd,\xc0Qj\'\x83\xb4\x15$\x1b\
+\xdd\xbd\xaf\xd7\xf6~\x96m\xafl\xbd\xaa\x1a\xe8n\xe7\xf8\x89,\x99L\xa6\xe3X\
+\xaf\x05\xa8\x84Q\x15\xf0o,\x10Vn\x1fW(\xacq\xe3F\x9e\xf9\xf9y\xd7\x82\xdc\
+\xc6\xd8\xa3\xb6\x1e\xb7\x1f-\x8e[D\xc5\x1a\xa7\xa6\xa6x\xf3\xcd\xe5\xbek\
+\x8b\xc4\xe3\x82\xb3g\xcf\x92\xcdf\xb7\xe4\xf2\x0es\\P\x86\x8d#\x06M\x14\x05\
+\x11\xedQ\xdd\xe1Q\xea\x1c\xfd\xde\x07ign.\xcd\xd2\xd2\xa7\xda\xe7m$c:\x93/\
+\xc5b\xb1\xfd\xda\xbb\x94\x830\xdd\xeb\xa8\x1f\xcft:\xadk\x1f\xf78Z\x1c\xb7H\
+|"\xc9\xf4t\x9a\\\xae\xffh\x98x\xdc\x8dg\x9d;\xf7\xeb\x9b\xac\x96\xa0\xd6N\
+\xd0Xc\x90\xf3\xb7\xda\xae\xf7\xf8\xad\xc43\x83\xf4\xb5\xd7\xb6Q\xc2\x0b~\
+\x04\xbd\xe7EO\x02\xcdM\xc4l\x14\x8f\xabg5\xc1\x88\xfb\xbc\xda\xda^A\xb6F\
+\x0f\x16\nk\xdc\xbcy\x93\xa9\xa9)7\xb3\xad3\xd7{\x16-\x8e\x01\xe8\xe7\xb2\
+\xd8\xf6$\xa9\x94M.\x97\xeb?\x1aFX\x9c={\x96\x85\x85\x05`4\xd7w\x181\xf0\xab\
+w\x0cZ\x04\x1e\xa4\xdda\xfa\xd8\xeb\xf8a\xe3\xaa\xc3d\xd2\x83\xf6e\x18\x16\
+\x16\x16\xb0\xed\rk\xaf[\x14\x950\xba\x8f\xd5\xd6\xfbNO\xa2T\x92\xe4r\x97H$\
+\x12\xa4\xd3\xe9m\xcd\\k\xd7z{\xd1\xe2\xb8\x05\xe2q\xb7vme\xa5\xc0\xd5\xf7r}\
+\x8f\xb3\xedI\xce\x9d;7\xb0\xfcd+\x99\xe4QDJ\xd5\xf2\x95Jr\xdb\xda\xed\xeec\
+\x90\x918A\xda\xf1\xdb\xd6\xaf\x8d\xa0\x02\x1f\xf4\xb8L&C&s\x04p\xadA\xf7\
+\xb9\x8c\x94e\xf2\xf9k\xe4\xf3\xd7(\x14V\xdb\xc2\xa8\x8e\xe9n\xa7PX\xa3X,\
+\x92\xcdfI\xa7\xd3=\xfb\xaf\xb9\xb3hq\xdc\x02\xeeH\x08\x9b\xf7\xde\xcb\xb5\
+\xdd\xa6n\xd4\x08\x8a\xa5\xa5%\xdf\x0cu\x908X\xd08`/\xfc\xda*\x95$++\xae\xfb\
+\xa7\x04r+\x96V\x10\x0bn\xbb\xea.\x83&\x86\x82\xd6M\x06\xfd!\x88\xc7\x05\x0b\
+\x0b\x0f\xb5\xdfKY\xa1PXk[\x88\xeaQZ_ceem\xd3\x0f\x8e\xb7\xcfo\xbc\xf1\x06BX\
+\xdb\x9e\x98\xd1l\x1fZ\x1c\x07\xd0\xcbUqc\x88\xb3\x00\x033\xd4B\x08\x9e>\xfb\
+\xabC%\x15\x82Xk\xa3\xc4\xd4\xbcE\xe7j4\x88\x1aK\x1c\xe4\x1a[\x89U\x06IB\r;\
+\x1af\xbb\x85\xb7\xd75\xd5\xeb\xc5\xc5\'\xdb\xef\xdb\x8f\xf55\x9a\xd5\x8d\
+\xf7\xbd~(\xbd\xb8\xc3\n\xaf\x03h\xd7z\x8f\xa2\xc5qDl;\xc9\xd1\xa3\x19\xae^\
+\xcd\xf7\xcdP\x03d\xb3\'yh\xe1\xe1\xf6\xfbQ\x13 AF\xaa\x0cS\xe7\xe7\xcd\xa6\
+\xf6\xbaNP+k\xd8\xebou4L\xbf\xf6\xfc\xce\x1f$\x9eAc\xa9\x0b\x0b\x0b\x9b\x8a\
+\xb8e\x9d@\x82\xe8\xa5Y\x95\\\xbd\x9agjjj\xb8\x135\xbb\x86\x16\xc7>\xf4\xfb\
+\x15N\xa7g\x89F\x05\xb9\xdc\xa5\x9e\xe7\x0bs#\x1137\xb7\x11[\x1a\xc6\x82\x1c\
+v\xa4J\xd0\xcc7l$\x14\xba\'<\x0e\x9a\x0c\x19\xd4\xc7\xad\xb8\xe9A\xaf\xd7\
+\xef\xfc u\x8dA\xf7+\xdc\t$f\x07\x1e7\x08Yw\xad\xc7h\xd4\xecH\xf2h\xf6\x0eZ\
+\x1cG\xc0M\xb0\xd8\xe4\xf3yVZ\xae\x91\xefq\x13I\xb2\xd9\x93=g\xde\xe9n\x13\
+\x86/W\x19\x86\xad\xb8\xa0A\xda\xed\xc5\xb0\xaer\xafc\xfc\xac\xd7~\x16\xe2\
+\xb0\xf1\xdc \x9fu*e\xb3\xb8\xb88\xb0\xdfA\x90\xb2L4\xea\x8e\xa2\xd9\xce\xcc\
+\xbav\xad\xb7\x07-\x8e#\xa0\xa6\x9f\xca\xe7\xf3=\xdd\xa9T*\x89\x10\x82\xa5\
+\xa5\xa5M#+\xfa\xb1]\xb1;\xbf\xf7\xde\xf3\x95\xd5X\xa9l\x16\x9c~\xe7\xf6\xdb\
+7\xeah\x98\xa0\xc9\xa7^\x16\xedVb\x9f\x83\x04\xd1o\xbf*\xc7\xda*\x85\xc2\x1a\
+\xd5\xaalMx\xb1\xbd\xe3\xad5[G\x8bc\x0fz\xfd\xfa\xaa\x99\xbe\x8b\xc5b\xdf\
+\xa2ow\x12\x83Y\xce\x9c9\x13H\x04F\x11#\x18\x9c]\x1d\xd4\x96e\x89Mn\xb5\xf7\
+\xdcA\x96[\xd0\xbe\xf4\xdb\xbeUW|\xbb\xeb\x19\xfb}n\xa5\x92\xe4\xd4\xc9\xcdU\
+\x07\xa3\xd0\xacJ\xaa\xd5:\xd3\xd3\xee\xf2\x18:k\xbd\xb7\xd0\xe2\x18\x10\xf5\
+\x8f\xabf\xfa.\x16\x8b}EKJI6\x9b\xed(\xdf\xe9W\x84\xdd\xcfr\x1b\xa5\xb6\xb0_\
+[AF\x9f\xf4\xeas\x90s\x86=f\x98\xf3\x82\xb67\xcaH\x99~mx\xb3\xfc\x873\x99m\
+\x11d\xe5uD\xa3f{\x82\n\xcd\xdeA\x8b\xa3\x0f~V\xa3\xfaGV\xe3\xa8\xfbY\x8d\
+\xca\xa5>s\xe6\x8c\xef\xb4d\x8a~\x16\xca(\x99\xe0a\xac5\x85\xb2\x1aw\xcab\
+\x0bb5\xfbm\x1b5k\xedw\\\x90X\xeb0\x16r2\xb9}np\xb5\xea\xfecIY\x1e:\xe3\xdd\
+\x0f\x1dw\xdc:Z\x1c\x03\xd0\xb6\x1a\xe3\xee\xf8h)\xe5\xc09\x1b3\x99#\x81\x12\
+1\xdd\x04\xb5 \xb7\x9a\xcd\xf5\x0e}\xf3Z\x93\xa3XY\xc3\x8e\x86\xf1\x13\xaba\
+\x85}\x14\xcb\xb0\xdbj\x1e5\xcb\xae&\xad\xd5\x1cl\xb48v1\xe8\x177\xc8L\xdfRV\
+XZZj\x97\xef\x8c\x1aO\x84\xd12\xc1A\xad5\x95\x8cQ#d\x82\x9c;\xc8\xc2\x1a&#\
+\x1e\xd4M\x0fZ\x838\xec5\x83X\xa1\xbd\xac\xdc\xfb{\xcc\x0c>*\xbdjN5w\x0e-\
+\x8e\x01P\xee\x8em\'\xdb\xe2\xd8\x0f!,~\xe9\xd3K\xed\xf7A-\x96~\x04\xb1\xc8\
+\xfa\xed\xf3\n\x88\xdf\x171h\x968\xa8\xb8\xf4+\xb7\trN\x90\xed~\xc7\x8dbQ\
+\x06Ixu\xff\xcdN\x9d\xda\x9e\xa4L4\xea\xba%j\x1c\xb6f\xef\xa0\xc5\xd1\xc3 \
+\xab\xd1\xb6\')\x16\x8b\\|g\xb9\xe71ss3d\xb3\'9~\xa2\xf3\xcb\xb3\xd5\x91%\
+\x83\xac\xa3aEAY\x8d\xfd\xfa4\x0c\xc3\nL\xaf\xf3\x86\xb1\xb2\x83Z\x94\x83\
+\xda\x19\xa6\xa4HmO&{\xc7\x925\x07\x03-\x8e\x01Q\xf1\xc6\x9b7o\x0e\x0c\x9c/,\
+<\xd4^\xa4\xa9\x1f\xfdb^\xc3Z\x8a\xc3Zt\x96\xd5\xdb\xa5\r\xf2:h\xbf\xfc\x8e\
+\x19T\xa8\xdd\xcf\xca\x1e\xc6\xea\x1e\xd6Z\x0fZ\x8aT*Ifg\xd3}\xaf\x1d\x94j\
+\xb5\xce\xcd\x9b7\xb7\xa5\xadntRfkhql1\xd8j\x0c\xe6R\x03,-}:P\x8da\x10\x11\
+\xdb\xce\x92\x16\xef\xfb~\x96\xe3\xa0\xd7\xa3\xd6k\xfa\xb59h\x7f\x90\xda\xcd\
+Q\xda\xd9*~\xb5\xa1\xa3P\xad\xeaX\xe3^E\x8bc\x00\xd4R\x08\xd1\xa8\xd9W\x1cS\
+\xa9$\xe9\xf4l\xc7\x88\x98 \x16KP\x8b,\xc8\xa8\x93\xa0\xd7\xf4\xa2\xa6-\x0bJ\
+P\xf1\xda\xc9:H\xbfs\x87\xbd\xde\xa8\xfd\x8b\xc7\x05\x93vr\xcbE\xdb\xf1\xb8 \
+\x1a\x15}gE\xd2\xdc9\xb48\x12\xdc\xfd(\x16%\xcd>\xbf\xf4RV\xb0m\xbbC\x1c\xb7\
+jA\x069\xae\xdb\xa2\x1b\xc6JR\xab\xe4m\xb7e\xe5\xd7\xaf~\xc7\x04aP\x1cp\xd8\
+\xcfz\x98Xc7I{2h\xb7{"\x84\xd5N\xc8h\xf6\x1ew\xbd8\x06\x11F\xef|{\x83\xe6\
+\xde\xcbfO\xf4-\xfc\x86\xfe%,[\xb1\xb6F\x11b\x95\xb9.\x95d\xcf~\x04u\xa3\x83\
+\xf4kPRf\x14\xa1\xda\xea\xe8\xa2QF\x01\xd9\xb6\xbd-\xf30\x16\x8b\xc5\xf6Z3\
+\x9a\xbd\xc5]/\x8eAP\xa3!\xa2Q\xb3\xaf\xe5h\xdb\xc9\xf6d\xa8^\x86\xa9e\xdc\
+\x8a5\xe3w\xcd\xa0_\xf6x|\xf3r\xa4A\xfa7l\xbd\xa1_\xdfG)\x15\xea\xc7(\xb5\
+\xa1\x83\xda\xea>\'\x16\x13[\x1e%c\xdb\x93$\x12\x89M\xeb\xcch\xf6\x06w\xb58\
+\x06u\xa7\xa5\xac \x84h\xafI\xecG<\xee\xae\x13\xa3\xc6R\x8fR\xcb\xd8\xdd\xde\
+\xa0\xf3G-\x9fY[+\xf8\xb65j\xdc\xb1\xdf\xbe \xe5;\xfd\xd8\xea\xf9~\xe7\xf4\
+\xea\xdf0\xa2\xde\x9d\xed\x1f\x85\xedJ\xea\xf4Cg\xacG\xe7\xae\x16\xc7 \xa8\
+\xa0\xbbr?{\xb9Rj=\x10\xb5`\xd2(\xb5\x8c\x83\xd8\x8e\xfa\xbc^t[\x8e\xc3\xf4u\
+\x94\xebm\xcc\xc8\x00\x00 \x00IDAT"\xeaa\xcf\xf7\x1e\xb7\xd5Q<\xbd\xda\x0f\
+\xf2Y\xa9}*V\xbb\x15l\xdb\xa6X,\xf6\xf5F4w\x8e\xbbV\x1c\x03[\x8d\xf5\r\xb7z\
+\xd0\x8c\xcd~+\xc9\xf5\xabe\xecu\xdcN\xd48\xf6\xb3\xf4T\xb6z\x94\xba\xcb\xee\
+c\x83\xf6};2\xef\xc3\x84\x01\x06\xf5\xaf\xbb\xdd 5\x92[\x9dIG\xad\xe1\xb3\
+\x9d\x13Nh\xb6\x8f\xbbR\x1cGq5\x82\x8c}\xf5\x13\xcf\xa0\xf1\xafa,\x98\xed.\
+\xfbP\xd9\xeaa\xeb.\x07\x8dP\xe9GP\x11\xdf\xee,\xfa0\x96\xf4N\xf5\x01\\\x8f$\
+\x95\xb2)\x14\nz\x1e\xc7=\xca])\x8e\xc3\xa2\\\xa8A\x96\x82\xdd\xa7\xbccXk\
+\xb0\xdf\xbe\xed\xfe\xb2v\xd79\x06\xb5\x12\xfb\xf5c\xabq\xc5a\x18%\\1l=\xa6\
+\x1f[q\xabCQ\xc1\xc4\x84\xad\'\x9c\xd8\xc3\xdcu\xe2\xb8\xbe~x\xe4\x00\xb5+\
+\x90\xfe\x19Jw\xe6\xeft\xcf/\xcc0\xf1\xac\xadn\x0f\xba_\xd1]\xe7\xb8\x1d\xe2\
+\x1b\xd4\xd2\xec\xbe\xde(\xa5>\xc3f\xfb\xfb]?\xc8ua\xeb1G\xdbN\xb6\x96\xc5]\
+\xd5n\xf5\x1e\xe5\xae\x13G\xf8\xd9PG\xab/N\xa1P\x18X\x8f\xe6\xfd\xb2l\xd5R\
+\x0c\x12\x93\x1b$\x04\x83b\x85^\x82\xd6\x1a\x06=\xaf\xbb\x8f\xbd\xfa\xdb\xeb\
+\xf8 \xb1\xda\xa0\x9f\xe5\xa0\xcf!H|\xd1\xefZ[\x11\xc7tz\xd6]\x83H\xcf\xc6\
+\xb3g\xb9\xab\xc4q\xd4\xb2\x06!bm\xb7\xba\xd7\x17B\x88Xk\xa1$w\xff0q\xc3abw\
+\xc3\xd4\t\xfa\xf5\xa3\x97\x1b\x17\xb4\xae\xb1\xfbu\xaf\xf3\x86\x15\xc0Qj9\
+\xbd\x04\xb5\x0e\x83\n\xf8N3=\x9d\x1e8/\xa8\xe6\xcerW\x89\xe3\xb0\xb8\xb5\
+\x8b\xee\x92\x07\xb6m#e\xb9g\\Q\x08A\xcc\xc7\xe5\x0eb\rnW\xec\xae\x1f\xea\
+\x1a^q\xf7.\xae\xb5\x1d\t\x8a\xed\x1c\x99\xe2\xd7\xe6V3\xe6\xea\xb8Q?\xd3\
+\xed\xfc[\xb8\xe3\xf4\xaf\xe9d\xcc\x1eF\x8bc\x0f\xe2q7\xbe\xd8\x9d\x84\xf1+\
+\xd7Q\xc4b\xfd\x136\xc3\x8cl\xe9w\xceV\n\xa3\x83X\x8e\xa32J\xb1\xfa0mnW\xc6|\
+\x98\x114\xfd\xc2\x18\xa3\xba\xd5j\xec\xbd\x94\x15\x1do\xdc\xc3hq\xf4A\x98nm\
+\xa3mO\xb6\xadF\xe5V\xf7Z\x83\xda\xb6m\xa2\x01GM\x0cS\xcb\xd7\xef\x98~\xf1\
+\xc5Q2\xb8\xc3\x9c?L,\xb2\x97K;\xaa\xc8\x0f\xb28\x83\xde\xfb\xa8\xb1\xc6\xad\
+\xfe\x90\xa4\xd3i\xae\\\xb9\xa2\x8b\xbf\xf78Z\x1c}\xf0\x8e\x82\x11\xc2-\xb9H\
+$\x12m\xa1\xec&\x95J\x92\xcdf7\xed\x0b\x9a\x94\tb\x1d\x06\xf9\x92\x0e\x137\
+\x1c\xd4\xafA\xe7\x0f\x12\xbc~\xfd\xf5;\xa6\xdfy\xc3Z\x9e\xa3&m\x86%:\xc2\
+\xc4\x13\xf1\xb8h\xcd\x0bzM[\x8d{\x9c\xbbF\x1c\x87I\xc6\x94JrS\x161\x1a5\x91\
+R\xba\xcbr\xf6\x88\x13u\xbb\xac\xc3XL\xdd\xecVb`\x18z\t\xdeVb\x8d\xbd\xb6\
+\x05ms\xab\xd9\xf4 \xed\xf5:o\x94\x89jm;I\xb5Z\xa7PX\xdb\x93\x7fc\xcd\x06w\
+\x8d8\x0eK\xa9\xe4.\xbf\x9a\xcb]\xe2\xc6\x8d<++\x05\n\x85\x82;\x92d\xa2\xf70\
+\xc2a-<\xef\xf5z\xf5c\xd01\xa3\xd2=\x1b\xf8\xa8\xd7\xdaJ\xacq\x98\x92\xa7~\
+\xf1\xc5 \xed\x0c\x93%\x1f$\xce\xa3\x14o\xc7\xe3\x82L\xe6\x08\xef\xbd\x97\
+\xeb\xdbg\xcd\xde@\x8bc\x1fJ%Ii}\x8d\\\xee\x12\x85B\x81\xabW\xf3\xac\xae\x16\
+F\x1a\t3\xe8\xd8 \xa5;\xbd2\xb2Ac\x85\xdd\xd7\xe8\x9eY&Hm\xe0(\xa2\x194\xcb\
+\x1c\xa4\xbdQ\xeaG\xfb\x1d\x1b\xe4s\xf7\xbb\xa6\x94\xfe\xab8\xf6CU>\xe4\xf3\
+\xd7\xb40\xee\x03\xb48\x0e@\xd6\xdd\xacb>\x7f\x8d\xf7\xde\xcb\x91\xcb\xe5|3\
+\xd6BXLN\xf6\x8e9\x06\xcd\xaa\x06\xfd\xd2\x04)\x8c\xee\xe7\xaa*\xfae\\\x83ZQ\
+\xdd\xc7\x04\xb1\xc6F\x19\t\xd3\xef\xfaA\xdb\x1d\xe6\xbc~\xd7\xacTd\xa0\xf5\
+\x84\xbcmd2GZ\xa2\xaa\x0b\xbf\xf7\x03Z\x1c\x03R(\xacQ(\xac\xb2\xb2R`n\xaeS\
+\x1c\x95\xc0\x94\xcbr\xa4\xd1\x1cAF\xc3\x8cbi\x0c\xb2\x1c\xd5\xac0\x83\xda\
+\x0f\xd2\xa7a\xad\xb1a\x8a\xd9\x87\xf9\x11\x19$\xe8\xdb%\xba\xab\xab\x05\xa4\
+,\xf7=\xc7\x8b[\x16&\x86\x12T\xcd\x9dE\x8bc\x00J%wb\x86Ba\xad\x1d/\x1a5\x98\
+\xee\xf7\xe5\x1cFL\x82\xc4&{\x9d\xd3\xcbr\x8c\xc7\x83\xaf!\xb3\x13\xa3IF\x11\
+\xfeab\x8d\xbd\xb6\x8f"\xba\nw\\t\xb0\x19\xbc\xe3qA:=K\xa1\xe0\n\xaaw|\xbe\
+\xfa\xec\xe3q\xe1\x96\x90\xe9\xa2\xf0=\x83\xfeS\x0cI.\x97\xc3\xb6m\x16\x16\
+\x16\xb8p\xe1B\xfb\xcb$e%P\x0cj\x90\xdb;L\x01\xb3\xf7x\x15\x8f\xebg\x91\xc5\
+\xe3\xa2\xa3\x8f\xfd\xb2\xeb\xdb!|A\xdb\x19\xe5s\xe8u\xeeV\t\xda^\x10\x0b\
+\xf0\xe8\xd1L\xc7\x90\xd2B\xa1\x80\x101\xa4\x94\x08\x13\xe2\x13I\xdf\xd9\x9e\
+\xa4,\xb7\x85w\xab\xb1\xc9\x89\x89\x84\xb1\xa5\x06\xeeb\xb4\xe58\x04\xca\x82\
+\xbcp\xe1\x02\x00\x8b\x8b\x8b\xed/S\xb7\xd0\x8c\xe2\x12\x0f\x1b\x83\x0c\x92\
+\x05\x1f\x84\x9f\xe5\x18\xb4.\xb2\xfb\x98ac\x8d\xc3\xb8\xc6\x83\xce\xdd\xeeX\
+\xe3\xa0\xf6._\xce\xf5\xb4\xd6\x8f\x1e\xcd\xf0\xc8#\x0bd2\x99v\xe8BM\\\x92\
+\xcf\xe7)\xad\xafm\xaaqT.\xba;\xbb\x93\xbb\xbco:\x9dfnn\xa6\xc3\xba\xd4\xec\
+\x1e\xdar\xf4!\x1e\x174\xab\xbdgh.\x95$\xcb\xcbo\xb1\xb0\xf00g\xcf\x9eeyy\
+\xb95\xc3\xcap1\xb8^t[\x84~\xdb\x83\x9e?\xe8<\xd5\xe7A1@o\x1b\xbd\xfa7\xac+;\
+\xc8R\xed\xb6\x86\xfb]kP\xdf\x82\xf4\xdfo{\xafm\x97.]\xf2\xedo:\x9d&\x93\xc9\
+P(\x14X^~\xab\xc3\xf5\xee\xfe\x9fZYY#\x1e\xaf\x00\xea\x985l;\x89mO\xba\xd6ek\
+\xd0A:=\xdb\xce\x8eKYv\xe7\xdf\xf4\x11X\xcd\xf6r\xd7\x88\xe3\xc4D\xc2\xf0+\
+\x04\x8f\xc7\x05\x1f\x9b\xa9\xf0h&\xc4\x03\xf3\x10\xb2\x1a\x80\xe4\xc6Ga\xfe\
+\xcb%\xf8\xe9{\t\xa4\xacl\xb6T\xd6\xd7\xb8p\xe1u\x16\x16\x1e&\x9b\xcd\x92\
+\xcf\xe7\x07\xbaZ~"\xe0\xb7m\x90\xc8\x0c\x12\xc9~\xc2\xd1\x8d\xb2\x1c\x87is\
+\xa7\\\xd9a>\x0bE\xf79\xa3\xc6\x1a{m\xefu\xec\xf2\xf2\xdb\x9b\x8eS\xf3y\xe6r\
+9\n\x85\xd5@\x02\xd6\xfd7iV7b\x99J(7\x86\xafn\xf4\xc5\xad\xc1\xf5\xb7^5\xdb\
+\xc3]#\x8e\xdd\xa4\xc6\xe0\x0b\x0f\x1b|\xf6\xc9&\xf7MEH\xce\x86\xb1D\x9d{\
+\xe3\x11\x00*Q\x87j\xa1\xc9\xbb\x97\xca<\xffR\x83\x7f\xfd\xfd\xce\x1a;Y\x07\
+\xb9\xe2\n\xe4\xe3\x8f?\xc9\xa7>\xb5D\xa1P\xd8\x94d\tb\x8d\x0c\x1b\xe3\xeb>\
+\'\xa8\xa5\xd8\x1ds\x04\xd7rT.\xdb\xb0\xfd\xe8w\xdda\xacWo\xff\x82^k\xd09A\
+\xae7jl5\x97\xcbu\xfc\x10*a\x04\xdc\x1a\xc6-Xu\xb2\x0e\xd47\x12h^\xa1L\xa7g\
+\x99\x9eN37\x97&\x9b=\xc1\xc5\x8b\x19~\xf2\x93\xd7\xb9z\xf5:\xc2D[\x92\xdbLx\
+7\x96\x87\xdc+XV\xf4\xf7+\x95\xeaW?\xb5\x10\xe6\x7f9\x17\xe1\x89\x93!\x8e\
+\xcc4\xb9\xef>\x83\xf4\x84\xc1d"D\xc8\x84\x90\t\x11\xc3@\xc4B\xd8ix\xe28\xcc\
+\xa6\x1a\xbc\x95sX/u\xb6Y.WXY\xf9\x90H$\xc2\x83\x0f>H:\x9d&\x95\xda\xa8w\x8c\
+D6\xff\xfetoS\xefK%\xe9\xfb\xda\x0f\xef\xbe^\xeduS*I\xeau\xf7\x1b\xd4h\xd41M\
+\x93D"\xd1>~P?\xba\xfb\xd4\xbd=\xc8\xbeA\xf75\xe8~\x83\x9e?L\xff\xbd\xf8\xb5\
+\xdf\xbd\xed?\xfe\xc7\x97y\xfe\xf9\xe7\xa9\xd5\xea\xc4\xe3\xee\xb4v\xa6\x19!\
+\x9f\xcf\xb3\xbe~\x9bzs\xe8\xdb\xebI\xadV\xa7V\xabs\xeb\xd6m\xd6\xd6\n\xc4b\
+\x02\xd34\x99\x9e\x9e\xe1\xbe\xfb\xe61\xcd\x08\xb5Z\x95\xdbeI\xad\xd6\xa9\
+\x8e:\x19\xb35\xee*q\x04\xf8;\xffU\xfa\xab\xff\xedb\x89\xd9)\xb8\xf7\x90Cj*\
+\x84=\x19&\xd4\xe3\xfb\x161\x0cD$\xc4\xc7\xe6\xe1\xd4\x03a~\xf2v\x93\x8fnu\
+\x1e\xe3\xd4*\\\xbb~\x9d\x95\x955\x0e\x1d\x9a"\x99\xb4\x19\x1f\xef\xbd\xc6u/\
+z}q\x07\tB\xaf\xfd~bP.Kn\xdf.\x02`\x9a&B\x08j\xb5z\xcfk\x0f\x12\x93~\xdb\xfd\
+\xf6\xf5\xbb\xaf ?\x0e\xfd\x84\x7f\xd0\xf1A\xce\xf5\xbb\xbe\xf7\xbc\x95\x95\
+\x02\xcf?\xff/y\xf5\xd5\xef\x030>>\xc6\xd4\xd4!n\xde\xfc\x90\xf5\xf5\xdb\xbe\
+\xedo\x17\xb5Z\x9dJ\xa5L<>\x86\x94\x92\x89\x89\t\xe2\xf1\x18\xf5z\x83b\xf1\
+\x16\xb5r\xa70[V\xf4\xf7w\xb4C\x07\x9c\xbb.[\xfd\xe4\xa9<\xf7\x8c7\xb0m\x87q\
+\xdb j\x8d\x0f<\'l\x81%B<\xb6`\xf0\xcf\xbel\xf2\xd0\x91\xcd?\xc8RVx\xed\xb5\
+\xbf\xe4\xf9\xe7\x9f\xe7\xfc\xf9\xf3\\\xbd\xba\xe1vm5.4\xaa;\x1a\xa4\xceQ\
+\x1d7L\x1f\xfb\x1d;L;\xdd\xfd\x1b&\xae\x19$3>\xec\xb9~\xfb\xba?;)%\x17.\xfc\
+\x18pk\x12U\xf2de%X\xcd\xe3V\x91\xb2B\xa1P\xa0X,\xf2\xee\xbb\xefr\xe3\xc6u\
+\xc0]v\xa1\xdf\x98\x7f\xcd\xf0\xdcU1\xc7\x7f\xf1l\xd5I\x8c9$\x93\x93L\xc4\
+\xd7\xa8\x0b\x83\xf1P\x89F\xc5\x15\xc0~\xc4b\x06\xd1\x8a\xc1C\x19\x87\x7f\
+\xf4\x9b&\xff\xf8\x8f\xeb\xfc\xf8\x92\x9b\xdfQq"!,\xdex\xe3\r\xfe\xcd\xbfy\
+\x01)%KKK\xcc\xcd\xa5\x03\xc5\xe5\x82\xc6\xeb\xfa\xc5\xc9\x86\xads\xf4;\xa6W\
+\x1b\xbd2\xbc\xbd\xda\x19\x86\xa0\xb1\xc6 }\x186C\xad\xf6Q\xbdA\xf3\xca7)}\
+\xf8\x13\x8a\xad\xed\xeay\xa5\x11%\x1a\xae\xb2\xd2\x88R\xafJ\x96\x0e\xff\x88\
+\xdb\xd7\x0c\xde_\x9bh\x8f\x95\xdeM\x84\x10\xad\x82\xf2\r\xc1\xd6\xab\x18n?w\
+\x95[\xfd\xdb\x9fk|5a5\x99HU\x89\t\x08\xd5\xc1\x8a\xb8\xc6s/\xb7\xdaK\xc8\
+\x04\x11\x0bq(\xe1p\xe4\xbe\x10\xef]\x8b\xf2\xc1\xcd\x8d8O\xb9\\\xc10\x1c.]\
+\xca\x91\xcf\xbb\xbf\xe8SSS\x1dc\xaeGq_\xfb\xc5\xf2\xfc\x8e\xeb\xe7f\xd7\xeb\
+\xf5\xf6l<\xca\xad\x0e\xd2\xfe \xb7\xbd\x9f\x8b\xdc\xafO\x83\x08\xe2\x16o\
+\xf5\xdc\xc6\xf5\x97\xb9\xf1\xbd\x7fH\xf9\xea\xffM\xbd\xf8&\xb1\xf02\xa1\xfa\
+[\x18\xb5\xf7\x08\xd7\x7f\x8cY\xbf\xd4~\xb6\xf89\xa7\xef\xaf\xf0\xe4\x890S\
+\xf74Y\xcf\x87\xf9\xd9\xe5\x0f\x87\xbe\xafQ\x88\xc77f\xa7O$\xdc\xb0\x8d\xaa\
+\xa1\xbcy\xf3C\x84\x10\xdc\xba\xb5\xe1\xdak\xb7zk\xdc5\xe2\xf8\xfc\xdf\xb7\
+\x9d\xf1\xf0-,1ITT\x88F`<\x1e\xa6\xd2\x88c\x86j\x81\xc4Q\xa1\x04\xf2\xbeY\
+\xa7\x87@\x1a\\\xb9r\x85+W\xae\x10\x89\x98\xa4\xd3i,K\x04\xfer\x07\x11\x92a\
+\xe2|\xde\xed\xab\xab\x05L\xd3l\'d\xfcb\x8e\x83\xda\xf7;\xc6\xef\xfc^q\xbb~\
+\xf7\x17\xe4\xde\x87I\\\r<\xbf\xf0\x1ek?\xf8\x074J\xdfg<\x19\xc2\x9e\x0c\x11\
+N\x809i`\x8e\xd70\xc7=\xcff\x95h\xa8\xceX"\xc4L\xca`l"\xc4\xcb?Z\xe3r~\xe4\
+\xd5~\x87b||\x8ctz\x16!\xdc\xa4\x8cr\xaf\xa5,\xb3\xbe\xf2\x11F\xd8\xc40\x0c\
+\xc2N\x9dxB\'c\xb6\xca]!\x8e\xff\xea\x7f\xaa:c\x91u\xc6,\x83X\xa4\x81\x15k\
+\x126\x81P\x82x\xbc\x84\xd3\x00\xa7\x11\xcczT\x88X\x88\xf9)\x83\x13SM\xde\
+\xbfap\xf9\xc3\x8d/\x88\x12\x9bb\xf1\x16W\xae|@\xadV\xe7\xe8\xd1\x0c\x93\x93\
+\xf6\x96\x85\xaf\x9b\xa0\xd6\x9bz}\xebVq\x93\xe5\x18\xd4\x15\x1eV\x88\x06%p\
+\xfc\xfa7l\x96y\x18\x91\xf4\xbbF\xf3\xf2\xbf\xa4r\xe3ybc\xe3\xc4\xe3u\x9a6\
+\x84\xc7C\x84b\x82P\xa8A\xc84\xda\x0f\xc7\xf8\xff\xdb{\xf3 I\xae\xfb\xbe\xf3\
+\xf3^\x9eU\xd5=\xdd=\x18`zp\x10#\x12\xe2\t\x8a\xe0a\x1e\x12\xb5\x80\xd7\x1b\
+\x12$\xcb&\xe4\x90(j\x15\xd2r-)\x04\xca6\x82\x92\xb9^\xac\xcc\x10gw\x1dk\xd8\
+k;\x10\xa468\xb6)\tZ\x980\xa4]\x9b0\xc5\x10\x87\x16\xb5\x82l\x89\x1crehV\x02\
+\x06C\x12"\x06\xc41=\x07\xa6\xab\xaf\xac\xbc\xdf\xfe\xf1\xf2eeUguWu\xf7t\xcf\
+\xf4\xe47"\xa3\xaa\xb3\xb22\xb3:_~\xf3\xfb;\x1f(_/V\nk\xdd\x94G\xbfr\x07\x17\
+/^\x1a\xfb\x7f\xb2\x1d\x08!\xca\x94\xa1K\x97.\x91\xa6iYj(,\x9b\x9b\x0f\xae\
+\xf1\x0f\x7f\xca\xe2\x87\xbf\xcf\xe6\xf7\xff\x8b\xd5\xa8\xc6m\xe2\xba\x08\
+\xc8X\x8e&.\xe1\xce"\xdc\xa4\\/\xc4\x1aA\xd0\xc6\xf26\xf79\xd6\xa1\xd5\x12\
+\xbc\xe6M\xf0w?$\xd7\x05i\x82 ,[\x9d\xfd\xf6o?\xce\xa7?}\x9c\xd3\xa7\xcf\xac\
+\x0b~\x8c\x1b\xdc\xd8(\x98R\xf7\xbe\xee\xb3 \x08\xd7\xb5(\x9b\xa4\xc4o3\xdf\
+\xe0\xa4\x9fMr\xee\x9baTPe\xb3\xf3_}\xe1w\x89#\x88\xa3\xa1\x14\x84$\x02\xc7\
+\x1bX\xaci\x1f\xcb\x17\xe4\xae\x83h\x1d\xe5[K\tY\xf7\xcc\xa6\xe7\xb6S\xf0}\
+\xaf(C\xec\x16\x952\xbd\xd2\xd7\x98\xc7!\xf7\xbcI\xf2\xd67Z\xfc\xe8\xfb;\xfc\
+\xf9\xff\x9d\xee\x8e\x9c\xdd\xc7\xd8\xf7\xe4\xf8\xd8\x03\xb1\xf2d\x8e\xe7\
+\x08|\xd9\xf7\xc7T\xa3\xd4Y\xa4\x97I\x91{\x8a\xd7\xccY\xdc9\xaf\xf8\xd8\x07\
+\x1c\x0e\x1e\x1c\x8c\x16\x9a$\xdenw\x91\x13\'Np\xfc\xf8\xa7y\xea\xa9S\x03\
+\xdbl\x14e\x1dUj\xb7]T\x9b\xdcn\x16)\xae\r^\xd4\xbc\x1f\'H\xb3\x93\xd5\x1c\
+\x1b\xedkRb\x8dz\x9aG\xb2\x08d\x17\xb2\xc5\\/+\xa1&\xc9\xeaR`-?\xcb\xc2Y\x87\
+ \xde\xc6\x8f\x18\x13\xbe\xad\xe7)\x9a\x9f?\x02P\x92\xa2)#\x0c\x82\x90\x1bg\
+\xe1{\xef\xb4\xb9\xb5\x93@k\x8d\x99\xc3\x0e/\xfeA\xaa\x1a\x92\xdc:\xf6=9\xb6\
+\xbd\x0c\xcf\x11x\x85\xc5\xe5\xb5\x04\xae\xa7\x95\x82R\x1d<KguoE9\xcaH\xab\
+\xc5C\xf3\x16oy\x87\xc5\xaf|p\x95\x83\x9d\xc1m\x82 \xe4\xf2\x85\xf3,,\x9c\
+\xe3\xc4\x89/\xf1\xf0\xc3\x0f\xf3\xf5\xaf\x9d\xe4\xf2\xe5\xee\xe0y\x8e\x99N3\
+N\xdaI\xddg\xd5\xefV\xa7G\x08\xc3p"\xd57\x8ax6:\x97\xba\xed7\xc2\xa8\xf3\x19\
+E\xc6\xdb!\xdd(\xb2P\xb1C\x1c\xc1J\x90i\x82\x8c\x84\xbe\xb6=E\x16\xae_\xd2(#\
+\xe8\xe6\\\x08,2\xf7\xf0\x96\x8f=.L\xe5\x8b\x0e\xbe,\xd2\xed.\x15]\xa0\xf4\
+\xd4\xae\xed\xb6\xcf\xdd\xef\x82\xdb_g3uX\xe2\xcf\t\x1c\x99bM\xfb\x1c:"\x1a\
+\x15\xb9E\xeckr|\xec\x81\xb8\x1c\x14\xc3&5h\xb3\xba\x8a\xad\xaa\xc7VKp\xebl\
+\xce_{\xbb\xe4\xc3?`\xad\xeb\xc9\x17\xa6\xba\xc9@\xb7\xbb\xc8\xc9\x93\'\xf9\
+\xe4\xa7~\x8d\x13\'N\xd4\x12$\x8cgN\xd7m\xbf\x99b\x1a\xde\xd7Fs\xc8ltN\x93\
+\x9e\xcbF\xe7Q\xf7~\xd41\xc7\xcd\xe7\x1c\xf7=\x80\xe7e\xe5{\xd7\x9b&\xce\xfb\
+<b\x08\x92\xde \xb7\xe4a\xceb\xd7\xe2\xd2\xf9\x18+>_{N;\x8d`y\xa9hn\xa2\xeb\
+\xfc\xcdb\xa6\x11\xfe\x81\xb7\xba\x1c:\x98\xe0\xcf\xe9\x07v\x92\xdb\xa5\xd2\
+\x9d9\xec\xec\xca9\xee7\xec[r\xfc\x9d\xbf\x7fT\x19\xd5\xe8\xb7\x15-\x7f\x90\
+\x88\\o\x1aW\xea\x81dT\xe3\xa4\xea1\xf7\x142\x12\xe4\x9eB\xf9\xe0\xce\xc1\
+\xdfx\xaf\xc5{\xee\xb4j\xb77\x04\xf9\xc7\x7f\xfc\x9f9~\xfc8\xbf\xf5[\x8f\xf0\
+\xfc\xf3g\xd7m7\xae:\xab\xdbf\xa3mG\x91K\xb53\xcf$\xc7\xd8l\xbbqL\xf0q\xfd\
+\x8eUL\xea\xc3\xdc\xec\xbdyh\xae\xf3;\xd2\xb7\x0e\xe8)\xc2\x1e\x84=\x08\xba9\
+\xcb\x8b9\xcb\xe1\xee(G\xd0\x0fXC\x88\x06\xed\xb6O\xdb\x83\x0f\xdf\xbd\xca\
+\x9do\xb584?8\xee\x92\xbc\xff\x94\xfe\xeag\xa2F=N\x88}\x19\xad\xfe\xe2\xaf\
+\x84\nu\xb14\xa7\x855\x87c\x87\xa5I\r`\xd9\x1e^+\x998J]\x85\xc8D\xf9j\xf9\
+\xe0\xda\x82XX\xbc\xf6\x06\xf8\x8b\xe7\xb2ue\x86\xa0K\r3%\xe8v\x17y\xee\xb9\
+\xbf\xa4\xdb\xed\xe2\xd867\x1d\x9e\xdf\xd1(\xf6\xa8\xa8\xafm\xdb\xd8\xb6\xfe\
+\xdb\xbc\xaf\xa6\xf3\x8cs\x8cq\xa3\xd6\xdb\xc9Q\xdc\xe8x\xdb\xad\xd3\xae\xee\
+w\xf9\x1b\xbfM\xba\xbc\x80\xed\xeb\x0c\x06\xcb\x9a\xc2q\x86,\x8cL\xa0lH\xd1\
+\xd7{\xa5\'Y]\xc8\xf9\xea\xd3\x19\xcf\x9d\xb7\xe8\xf5\xf6fN\x18\xc7\xb1y\xff\
+\x9bS\xfe\xf6\x07\\^\xfb&\x90\xbe$\t\x15v\xaaH\x04\xd8y\x86J\xc1v\x14i*\xf8\
+\xf4\xef\xc8&\x82=\x01\xf6\x159~\xe9W{\xea\x87\xdf\xa6\x8e\x85\xb1\xc0\xb1\
+\x15\xb6%p\xfcYZ~\x17\xafU\xa8D[\x97\x02\x82\x8b\xcc\x93-\xf9\x1a\xeb`\x08\
+\x12r\xa6\xa4\xe2P\xc7\xe6?\x9fq\xd65\x03Hs\x9d\xea#\x84 \x0c{\x9c:u\x8as\
+\x0b\xe7\xb9\xe1\xe0\x1c7\xdcp#J\x8d\x97\xcc=.)\x0c\x93\x8a\xe3\xd8\xa8BCTI\
+\xb2.\xf02*-h;\xc9\xdd\xe3\xe6(\x8e:\xde\xa8\xdf\xb6\xd5\xfd\xae\xbe\xfc\'\
+\xa4\xab\xa7\xb0\x1d\x81e\x83\xed\xa48\xceP\xe6\x81R\xa4)\xf4RA\xb2\x9a\x93\
+\x9c\xcfx\xb5\x0b\xcf\xbc$9w1 \x8e\xd9\xd1f\x13\xe3\xc0\xb7\xa1\xd5\xe9\xf0\
+\x8b\x7f\x0b\xee|MNkN\xa2R\x85\x8f"D\xe0\xa59a*\xb0\x1dP)\x08\xe0=G\x0e\x1e\
+\xfb\xf7_\r\x1b\x82\x1c\x13Wm\xf9\xe0c\x0f\xc4*wnB&\x17j?_\x05:|7\x82o\x91%\
+\x19\x96c\xf1j\xd7"wn\xe2\x06o\x01\xbf=\x07,\x96\x11j\xb7B\x82\xae\x14D\x996\
+\xa3\xc7)\x1d\x9c\x04\x07g\x05A\xa8x\xfb[\x05?sw\xcc\xf1/\xd6oW5\x8f\xbe\xfc\
+\xe5/\xb3\xba\xba\xca\xfd\xf7G\xdcs\xcf=\x1b\xb68\x1b\xb5~\xa3\xb2\xc2alV\
+\x1eXw\x8cq\xca\xf5&=\xf6F\xbfc\xa7\xf7[\xf7\x19\x80k\xc5T\x1b-\xb9R\xac\x1b\
+\x13m!\x08\x94\xa2\x85"\x00"\xa5\xc9\xf3\xd6NB\xdb\x9d\xe84w\x14\x1f\xb9{\
+\x99\xf7\xdca3wD\x96\xa4\x08@\xa8\xc0\x87v\x04\x01\xe0\xa3 \x84P\x9c\x07vp\
+\xb0\xefs\\5\xe4\xf8\xe8Gz\xcar\xac2\'\xd1\x939p\x0e1=\xe8G\x89\xc2\xd7\xa3\
+\xf8\x063@\x96|\x0b\xcbQ\xe4\xce\x11,\xce\xe3\xfb\x02\xdf:\x87\xebjbl\xf9\
+\x02\xe9\xa58\xb2\xaf\x04\\o\x9a(c[Q\xeaQ0\xfe\xa9[\xe7%V/\xe7\'\xee\xb1\xf9\
+\xb3\xe7%_;3:\xfa\xea\xdb ]\x9fS\xa7\xfe\x8c\x87\x1ez\x88\x17^8\xcbO\xfc\xc4\
+\x87\x06f8\x1c\x87\x98&%\xcc\xad\x12\xe98\xb5\xd7\x93\x92\xf6f\xa9C[y\x00\
+\x98}\x8d\xfa\x8eYw9\xd3\xec\x16\xf5\x14\xae\'\x88s\x1d`+\x8f\xaf*\xae\xba^\
+\x87 Z\xc1\x13\n\x10\xcc\xceY@F\xdb\xdb\xfd^\x8a?t\x97\xe4\xfdwY\xb8\xc5\x14\
+\xea\x86\x18\xc3\xb0 \xf3P\xd1\x16\x9a \xf3b\x8c\xb7\xe3\xa6hf\x12\xec\xb9Y\
+\xfd\xe8Gz\xea\xc7\xbfW\x1d\xc3\x9f\xa7\xe3,\xd3qa\xe6\x80\xa2=#\x99q\x1d\
+\xa6\xa62,1\xc3\x8c\x97\xd2q%\x9e\x7f\x1e\xc7R\xf8\xaeB:\x12\xdb\x16x\xf6\
+\x1aS^N\xdb\x9f\xc5\xb2BZ~\x84c\xeb\x81\xe0\xba}?\xa3\xebM\xe3Y\x01^k\xb2r\
+\xc1I\xa1lH[\x12\xc2\x9c\xa3\xb3\xf0\xa5?_o^\x1bT\xcd\xecK\x97.q\xf6\xecY^z\
+\xe9Eff\xe6\xb8\xe1\x86C\x13\x9b\xb0\xe3\xf8\xe6\xb6S\xbe7\x8e\x89\xbb\x93\
+\xfe\xc1\xed\xeek\xf8;A\x10\x16\xfd\x11WY\\\xec\x92\xbc|\x02;{\x96,\x05\xcf\
+\x17\xb4]9\xe0\x87v\x84@\xc6\x82\x95D\xa1\xa2\x08\x11A\x96B\x94JD&\xf9\xc6\
+\xcbpaI\xa1\xd4\xee\x99\xd6o\xfb.\xc1\xdf\xf9\x11\x87[\x0f\xe7\x1c9d\xd1\xb3\
+\x05N\xaa\xa0\x18b2\x16d\x16$\xc5\xf9\x8bL\xe0\x08\xc1\xd9\x17\xee\xe0\xdf\
+\x7fm\xa91\xab\xc7\xc4\x9e\x92\xa3Q\x8b\x9di\x98\xf1\x96\xe9t`zZ\xe0\xd8\x02\
+[\x80\xd5V\x08[\xe0\xfa\x11\xd2\xcb\x81\x0c\xc7\x16\xf8\x9e@\xb8\x12W\xcc\
+\xe09\x013\x9e\x83\x92\x19-?\xc2\xebH\x84-\x10\xb6`jZ\xfb\x91@\x13\xa3\x10kX\
+B\\Qb\x04M\x8e\xd6\x94\x85\x14\n\x85\xc0J\x13\xfe\xf4\xb9\x8d\x83\x85eS\xd3\
+\xc5K\xfc\x7f\x7f\xf1\x0c\x0b\x0b\x0b\xb4\xdb\xed\x81\xde\x90[\r>lT\xe7\\\
+\xb7\xed8\xd8N)\xe1v\x03)\x93\xfa\x1a\x8dz\xbc|Y\xd7"/-u\xcbJ\x93\xd6\xeaI\
+\xe2\xeei\xbc\x96\x1e+q\xa2hOI\xb2\x08BK!cA\xe4*T1\xc3F\x96ir\\]\xceI2I\xb0\
+\x92\xf1\xfc\xab\x10\x84\xbbC\x8e\xb7\x1d\x82\xfb\xff\x1b\x8b\xb7\xbfQ1;\'I}\
+\x10\xb6\xc0$\xeb\x88\x10R\x0f\xbcX\xe0\xd9}\xa5\x98E\xf0\x9d\x97\x0e6\xe48\
+\x01\xf6\x8c\x1c\xff\xd5\x03\xb1\xea\xf8\x82\x96\x93s\xc0\x05\xdb\x9d\xa3\
+\xe5\xeb\xa8\x9f\xf4\x04\xae+\xb0\x04\x03\x8b\xb24\xe9\xa9\x0c\\_`\x8b\x10\
+\xaf#\x91^N\xa7-\xb4S]@\xcb\x07\xb7\x18-\xae7\xad#\xd3V\x80%\xc4\x8e\x9a\xd1\
+\xa3\xa0l\xb0\x1c=h\xed0\xe7\xf0\x94\\W\x7f=\nFI\xbe\xf8\xe2wXXX`vv\x96\x1bn\
+84\xd0<w3B\xa8[\xb7\x9d\xae:\x1b\xedo\xd4v\x1b\x11\xe0\xa4\xdf\x1dg_\xa3~#P*\
+\xc5\x85\x85\x85J\xf9\x9d\xeeP\xe4,\x9fD\xf4\xce\x90\xa50=s\x00\xcb\xf6\x90\
+\xb9\x8eV\xdbE6B\x9e@\x96*\xe2"(\x9d\xa5\x90\xc4\x824\x13L\xb5\xe0bW\x10$\
+\x8a8\x06[\xeae\'\x89\xd2\xb7\xf5>\x8f\x1c\x84_\xbe\xcf\xe5\xae\xd7*\xe6f\
+\x05\xed)A^\x08\x81\x14M\x90"\xd5\x8b%\x04Q\xa2Hl\xad\x1eU\x06\xa7\xbf=\xcd\
+\x17\xfet\xa5!\xc71\xb1g\xe4\xf8\x93\xef\xc9\x8e\xb5\x9c\x9c\x99\x999\xda\
+\x9d\x10\xc7\xd6~9\xaf\xa5\t\x0et\x10\xc5\xb2\xfb\x0b\xb9&\xc9\xf6\x94\x80\
+\xbc\xffj\x89\xc1m\r!\xdaN\n\xb8\x9a\x18\xbd\xad\xa7\xecL\n\x91\t"O+X\xe5\
+\x08\xecTq\xeb!\xc9\x9f~3[7\xcd\x82\x81o\x0f\xdePI\x92r\xfe\xfc\x02\xcf=\xf7\
+\x1cB0\xd0\xd9g3Ss\xab\x91\xec\x8d>\x1bEP\x9b\x99\xd3[9\xfeNw\xf41\xc4X\xd7\
+\xf7p.y\x8al\xf54\x00\xb6\x13c;\xa9&\x16W\x91Y\x9a\x18A\x93c\x96i\xdfd/T\xac\
+\x05\x10\x86\x8a\xd4\xb5\x98s2^^\x14\xac\xf4 \xb3|Zv\xba#f\xb6\x19\x13\xb6\
+\x84\xef9*\xf8\xe8\xbd\x827\xdf\x0e33\xe0\xd8\x82\xc8\xd7VV\'\x05\xa7 E\xd0\
+\x8d1\xf2D\xd7\xfe\xcbX\x13\xe3J\x90\xf1\xca+K|\xfeO\x9b\x86\x14\xe3bO\xc8\
+\xf1\xd1\x8f\xf4\x94\xb4$S-\xb0\x9d^\xe9\x1f4\xe96S\x07\xa6\x81\xb8$9Ct\xae7\
+\x05\xe8bVc.\x97\xc4I\x9f\x14\x85X\xc3\xb3\xf4 \xb7\xa5\x1e\xddW\x92\x18\xb3\
+h\xfd\xfe%\xb9V\x8f@\x94)\xecX`[\xf0\xd53\xf5\xea\xb1\xeeFJ\x92\x94\xc5\x8b\
+\x0b\xbc\xf0\xe2K\x84a\xc8\xa1Cz\n\x86\xcdHj\x14\xb6c\xcen\xd5w8\xae\x9a\x1c\
+u\xbcI\xce\xa3\xee\xb3\xcb\x97\xbb,-u\xcb.6\xc3\x10\x97\xfe\x08+~\xae4\xab-k\
+\x8a\x9c\x18/\x17\xd8\x99`Y)\\DI\x8e\xb6#\x08C\x05\xb9 \xca,\xfd\x90vrn\xbeI\
+\xf2\xe2\xabpi1e%\xda\x19b\x04x\xdd<\xfc\xe0[\x05\x1f\xfa>\xb8\xf9f\x9b\x1bf\
+U\x11h\x14L;\xba\'idk\xff\xa2\x8b\xc0\x95\xfa\xbc\xadB-\x82\x0e:\xe6j\x8a\
+\x0b\xe7c\xfe\xdd\xd7\x1ar\x1c\x17{B\x8e\x7f\xeb\xaf\xa4\xc7\x1c_0s`\x16_\
+\xe6\x08+/\x89Q+@\x8f\xb6\x97\x91\x13#D\x82\x10\x9a\xe0\x84H\xb0\xac),\xdb#\
+\xcb\x06+\xfe=_\xe2Y)\xb6Lp\xfd\xc1\x81q\xa5\x15\xa3\xd9\x7f\xa0\x14\x8e\xd0\
+\xbfC\xd9\x10\xdb\x16*U\x08[\xa2\x84\xc4\xb7F\'\x87\x8fB\x9a\xc3\xda\xda*g\
+\xce<\xcb\xc2\xc2yl\xdb\xe6\xf0\xe1yZ\xad\x8d\xcb\xf36S\x94\x93\x98\xaeU\x8c\
+\xf3\x9dQ\xc7\xdc\xca\xf16R\xac\x9b\xa9\xd9 \x08Y]]\xe5\xd2\xa5K\xd8\xb6]K\
+\x8e\x87\x82\x13d\xe1\x8bd\xa9n\t\x061\xb6-\xc8\x14dJ\x13N\x14j\xa63\xca\xd1\
+\xb1\x05q\xa2\x88\x0b\x12\xc2\xb2\x98\xf32^{\x93$\xcd\x04/\xbf\xaa\xb6E\x8e\
+\xbe\r\xb7\xdf\x04?\xf2\x0e\x8b\x1f{\x0f\xbc\xe1\xbb\x1dn\x9c\x93\x1c\xf0\
+\x14\xb6\xa3U\xa3\xb0\x05\xae\x03\xa9/\xe8 \x98\x92\x92\xd4\xd3\x8a\xd1\x12\
+\xfd\xca/i\xeb\x87\xb7-\x13.]Ly\xfc+NC\x8ecb\xd7\xc9\xf1S\xff\xfd\xdbT\xa7u\
+\x0eiA\xa7\xe5\xe3xAY\xb9\xd2\xea\xf4\xfd\x83q\xaep\xa5\x1e|\x96\xd0\x83\xd5\
+\x95Z\t\xda2\xd1\x1d\xbc\xe5T\xd1XB\x0e\x0c\x08\xa0\x9cEp\xb7\x90E\x0c8\xc0E\
+&\x88Q\xf8-\xad\x1emr\xdaI\xc6\x94\'\xf9\x93\xd3\x93\xdd<I\x92\x92\xf4\xd6x\
+\xe1\xc5\x17y\xfa\xe9g\x98\x9a\x9a\xe2\xf6\xdb\x8f\xae#HC\x16\xe3\x98\xb7\
+\xc3\xe4\xb9\x13\x91\xe0\xcd\x8e9\xcew\'\xd9n\xb3\xe3$I\xca\xc2\xc2\x02\xab\
+\xab\xab\xb5\xc4\x08 \xbaO\x95\xca\xd1\xf5L\xe0.!\ns\xec\xe2zf\xe9`0\x06 \
+\x8f\x04Y\xa6\xc8\xa5\x804\'\xb7l\xa6\xdd\x8c7\xdf\n\xaf\xbfY \xa4\xc5J\xa0h\
+\xb9\x0c,\xc2\xf1\xb1TZ\xfa%\x8d?\xf1@\x0b^s#\xdcs\xa7\xe4C\xef\x85\xbf\xf1^\
+\x97\xdbo\x93\x1c\xea@\xc7\x95\xb4;\x82N;/U\xa3#\xb5\xc5$SJ2\xc7\x86\xb6#\
+\x08-\x85g\x8b\xd2\xa2QENo\x9e(>\xf3\x1f\xed\x86\x1c\xc7\x84\x98\x9d\x9d\xdd\
+|\xab\x1d\xc6c\x0f\xc4\xaa3\r\x07Z\x07\xe8\xcc,\xe1H\xad\x18u\xe5\x8a\x86[\
+\xc9M\xac\xc2\xf2\xb4B\xf3\x8a(\xa2\x17\x0f\x92\xe2N\'uO\x02s\xec@)\xda\x05Y\
+\x873\x92<\xcc\xe9\x85\xb0\xd6\xcd\xf8\xce\xb3\xf0\x8f\x7f;\xe7?\x9d\xce6\
+\xd9\xdbz\x98\xdc\xbc\xf9\xf9y\xee\xbd\xf7\x07\xf9\xa5_\xfa%\x0e\x1f\x9e\x1f\
++\xf7o\x92\x1c\xc1\xed\xe4,\x8e\xb3\x9f\xadn7\xceq\x06\xd6w\xbf\xc3\xf9\xc5\
+\x9cs\xe7\x16F~\xf7\xe0\x85_C^~\x02\x15;\xf83\x9a\xf9\xa6g$\xae\x14\xac\x04\
+\x19\x9e/K\xe5\x08\xb0\xd6\x83<\xd2~\xc78\x86^\x0f\xa2\\\x92%\x82,\xc9\x88\
+\x95E\x1e\',\x87\x92\x8bk\xb0\xb6\x9a\xb3\xd0\x95tC\xc5j\xd1\xe7\xc4rs\xb2X\
+\x8f\xf5\x1bn\xb0\xb8\xb5\x930\x7f\xd0\xe2\xd0tN\xab\xd3o\x12\xe1\n]\xdc\xd0\
+\xf62Z-8\xe0\xbb\xe59\x9a\xf44\xcf\xd7\xe7j\xee\x85ja\xc3\xf0\xbd\xf0\x9d\
+\xc5\x8c\xf7\xfd\x9c\xd7$;\x8e\x89]\xd4V\x83pU\x8e/\xd7\xc8#\x05\x85I\xadTg]\
+\xa7\x9ca\xa2\xcb"h{\x02<h#\xd6%\xfc\xef\x151\x9ac\x97\xe7W \x0fs\xa4/i\x91\
+\xc3\xac\xc5\xfc|\xc6\x8f\xdd#y\xfa\x85\x8c\xcb\x13\xce\xe4i\xaa:\x16\x16\
+\x16x\xfc\xf1\xc7y\xe9\xa5\x97\xf9\xd8\xc7>\xc6]w\xdd\xb5i\xb2\xf6N$e_\xe9\
+\xaa\x95\xad\x1cc\xa3}\x87\xf9\x01z\xbd\xd1\xc4\x08\x90\xc6\x11\xa6\xc8\xc5\
+\x10N\x14\xe6\xe0\xcb\x81\x87\xf5(x\x8e \x8aLCe\x8b\x16\x90\t\x89t-f\x0f\x00\
+X\x841\xa8\xa4Z\xaf-\x10\x8e\xad\xd7\xb5\x05\xe0\x16\xb7@\xbf\xe0\xa1\xe5\
+\x82\xe5H<\x99!\x0f\xd8\xf8~\x8e\x10\tn1\xb6\xcc\xb9\xd5\x89\x88\xe1F*\x86$o\
+i[\xfc\xe1?\xf2\xd5_\xfdx\xd8\x10\xe4\x18\xd8u\xb3\xfa\xb3\x0f\xdc\xael\xe7U\
+Z\xbeB\xc9\x03x\x9d\x08c\x1d\xea\xe8\xb2\x86\xf1\x1b\x1a\x9f\x891\x91\x87\
+\xff\xae\x0b\x86\x8c\x83\xad~o3H{\xd0\xf7\xe8d [\x8a\xdc\xd6M\x01r\xa1\x98R\
+\x82\xe5\x9e\xe4/\xcen\xcd1\xe58\xbaa\xc4\x85\x0b\x17x\xfa\xe9g82\x7f\x98[n\
+\xb9m"sz;\xd8J\xfa\xce\xa4\xc7\x9f4\xb5\xa8n\xdf\xbd^X\xcc\xb12\xba\xdd\x9a\
+\xb7\xfcU\xe4\xea\x0b\x00\xc4I\xa6\xe7`\xb1\xb5)=lV\x03\x90\xeb\x942[\x80R\
+\x90+p%\xa0\x14\x8e\xad\xcdl\xcb\xd1\xae \x99gXB\xe1\xd9\n\xe9\xd88\xaeU.\
+\xb6\x05\x8ek\xd1\x91\x19\xbePX\xc5\x92N\xe9@K\xcb\xc9q<\xc9\xcc\x94b\xc6\
+\xb2\xb1\xed\x8c\xe9\xd9\xf5\xc4\x18\xb9\n;\xd39\x8d\xd5\xf1<|\xcf\x806\xaf{\
+^\x8f_\xff|cZ\x8f\x83]oY\x16\xc6\xdf"A\xb7y\x92\xde\x12y\xd4\xcf\x1fs\xa5(\
+\x97*\x86\xd5\xa0Qhu\x9f\x8d\x8b+\xa50\xb3\x88\xd2\xa4\x86\xa2\xfc\xac\xe8\
+\x07\xd8\xf2\xa13k1;\xab\xb8\xf7]\x82\xdb\x0em\xed\x18A\xa0;@w\xbbK\x9c<y\
+\x92O\x1c\xfb\x9fy\xe2\x89\'j[y\x8dj\xef\xb5Q\x8f\xc3\xcd\xb0\x99\xb2\x9ct\
+\x7f\x1b\x1d\xc3\xeck\xd2\xe3\x8c{\x0eA\x9c\x10\xe6\x9d\xb2mY\xd5\\5\x18V\
+\x90N\xe5O\xd7\x05i+\xbc\xa2Y\x85\'s<\x99\xd3\xf62\xdc\xb6,\x97\xa9\x8e\xc2\
+\x15Y\xe9{\x9c\xeah\x7f\xa4\xf9|zJ\xbf?$rf;\xb96\xa3[\x19\xd2\x93X\xd3i\x19\
+\xb0\x1cV\x8c\xd5\xb1\x06\xf5\xf7E\xb5O\xe9!o\x9a?\xfa\xdf\x9b\xf6e\xe3`\xd7\
+\x95\xe3\x87\xbe7;&\xf25|\x1b:\xb6\x83?\xa5\xca\x01),Q\x06V\x8c\x13y\x14F\
+\xa9\xbeq\x15\xe1\x95T\x8e\xa6\xba\xc2\x11\xa2,\xdf\x92\xe4\xc8\x19\x17\x99\
+\xe5ejO\x9c\xa8M+gF\xc1$\x8b\'I\xca\xd2R\x97\xe7\x9e{\x0e\x80\xd7\xbd\xee\
+\x8e\x81@\xcd$\xc9\xd3\xdbQ\x84\xa3\xf6=\xae\x02\x1cW\rn\xf4\xd9p\x94|q\xb1?\
+\xb7s]@&\x8eB\x9c\x95\x93\xd8\xd1+\xa4\xa9\x8fc\x87\xa5r\xb4mQ\x1b\x94\xb1\
+\xec~`\xc6\xb1\x05i\n\x96\xa5\x15\xa4\xe3\xe8H\xb1m\tr\xdb\xa2m)P\n[(2%h{}u\
+\tZ\x1dv\\\xf0l\xb0-A\xcbWt:z\x7fN[\xe7\xc9\xb6|J\x9f\xfct\xdb*\x03\x94\xd5H\
+t\xf5>\xa9\x1b\xd3f;\xd0Qk\xdbV\xfc\xd0\xfb\xe5\xb1\x7f\xfb\xfb\xa2Q\x90\x1b\
+`\xd7\x95c\xaf\xc8\xc0\x89\x85$v\xd2r\xfe\x0e\xd0>\xc7j\'\xe6\xad`\\Ex%}\x93\
+VQ\xbe\x05Z9\xe6\x9e\xfeMi\x94!}Y\xaa\xc7\x1fy\xa7\xbdnb\xae\xad \x08B\xce\
+\x9e}\x9e\xe3\xc7\x8fs\xe2\xc4\x89\x89\x14d\x15\x93(\xc2q\x95\xe7\xb8\xdd\
+\xca\xb7\xa3:\xeb\xf6]\xc5(\xb3\xda-\xe6\xd2\t\x03\xdd\x08Y\xc5\xfd`H\x14\
+\xe6\xeb\x821\x9e/\x89\xa3\xc1\x0eO\xbe\xd4\x1eK\xd7\xd5\x8b\x99\x8e\xc3U9\
+\x9e\xad}\x92\x9e#8\xe0\xa9\x81\xf7\xb3\x1d=\xaf\x91\xb4U\xb9\xb8\x95\x0e?\
+\x9ePxB\xd1i\r\x06+\x87\'\x83\x9bd\xbcG\x99\x9eL\xce\xf5\xa6\xb9\xb5\x93\xf0\
+\x87\xff\xc8o\x14\xe4\x06\xd8ur\xfc\xd9\xe3\xaeX-\xde\xe7\xd1\x0c\xd2\x13\
+\xa5Ym\xe6u\x81A\xd3\xf9Z\x84\x19\xb4m!\xca9I\xdc0\xc3\x1593\x87\x1d\xe6\xbe\
+\xcbb\xeaF\xc1O\xbc_n)\x081\x8c\xcb\x97\x97XX8\xc7#\x8f<\xc2\xd7\xbfvr\x1d\
+\xc9\xec\xc41\xb6\x13\xa8\xd9N;5\x83Q\x84<\xaaK\x90\xb1\x8aFYGq\x14\x12\xc5\
+\x12i+\xe2x\x11`\xe0a\r\xebM\xea\xd2\xecn\xe9\x94\x1a\xe1&\xb4|\x81/]|\xe9"\
+\\\x85\xdf\xd6\x0b\x80\xdfVxv\xffU\xda\xfd\xcf\x0c!\x9a\x05@z\x92\xce\x8c\
+\xc4k\x89u\xa6\xf4V\x1f\xe8A\xd0\xd6\xee\x9ev@\x16\xe9\xe9A\xe4\x8c@\xccN\
+\x18\x11\xbc\xce\xb0\'\xd3$t\xf8\xee\xe2\xdd\xa2\x8eVW`r\x1c\xafu\x18b\xaf\
+\x12|\x18\x02=\x85\x8c\x13Z(n;\x98\xf3\xbe;-\xdeu4\xa9\xdd\xc7\xa4\x08\x96\
+\x978s\xe6Y\x8e\xff\xcb\xe3\x9c={V\xaf\x1b"\xc9\xcd\x14\xdfv|\x91\xe3~w\x9c\
+\xed\xea\xb6\x19\x87\x90\xab\xdb\x86a\xb8a\xb2\xbcQ\x8e\xaf\xa6G\xc8SA\x98k\
+\xb3\xc6<\xac\x8dj4*r\x18\x8e\xd4}\x00@O\xb5 \xdc\xa4$I\x80\x96\xef\x14\x9f\
+\xa9\xf2\xd5\x90\xe00!\xb6|A\xcb\x17E;\xb4Au\n\xa3S\xdb\xc6A\xbb=X\xb3\xeaJ\
+\xc1\x9c\x94\xdc\xe8\xa7\x8d\xffq\x03\xec\t9\xae\xf1-T\x9c\x01\xba\x19]R\t\
+\xdaFY\x1bW\n\xcc|\xd2\xd7*\xea\xe6\xa5i\x0b\x01-A\xac$r\xd6B\xce\x08fg\x15?\
+\xf7\xd7\xad-F|\xa2\xff\x00\x00 \x00IDAT\x07g\xaa\x08S\xb8|\xe1<O=u\x8a/}IO\
+\xe05N\xda\xcc(\x156\xce\xfc5\xe3|w\x18\xe3\x1cc\xab\xe9=\xd5m7\xf3\xa7\xc7Q\
+H\x12Ft\xc4\x05b!Q\x85+\xa4N=\x1a\xa2,\x03"\xc5u\xad\x12$\xf4I\xb2\xe5\x8b\
+\x92,\rZ\xbe\xdeNz\xb2\\\xaa\x84(=\xad\x16M\xc0g\xd8\x9c\xde\x0e\xa2\x82\xa0\
+\xa3\xac]\xaes\xbdi\xdc9\xf8\xfc\xff\x9a4\x04Y\x83=S\x8eQ.\xcb.\xdd\x8ed\xc0\
+\xb4\xae\xe6g\xed;\xf4\x14yq\xa3\xb5g%\xaae\xf3\x96\xdb2~\xfc\xfb\xd7\xcfZ\
+\xb8\x15\x84\xa9\x9e\xd7\xf8\xcf\xfe\xecT\xa9\x1ea<\xbf\xe0F\x98tF\xc0\xba\
+\xe3n\xa6D\xb7\x92\xfc\xbd\xd9\xbe=\xcf\x1fI\x92\xa5\xcf1T\xc5\xc3\xba\x8fa\
+\xf5X\x17\xbd6\x04\xd9i1`\x06\x0f\x93\xa5Q\x85@I\x86f\x81\xbe\x89n\x02/\xc3\
+\x11s\xd3\x9d|;0>\xf0v;(\t\xd2\xb3\x02\x0ey\xd3\xdcx$\xe7?\xfc\xc3\xb8!\xc8!\
+\xec\t9\n\xbe\x05@\x98k\xffb\xf5I\xed\xf9\x92^O\x95\x9dt\xf6\x0bLGi\x19\t|\
+\x14\xae\xd07\xdd\xc1y\xddH\xe0\xbf~\x9f\xe0{\x8e\xeeLn\xee\xe5\x0b\xe79y\
+\xf2$\'O\x9e\xdc4X1p\x8ec\x90\xcd83\x02\x8e\xab\x00\xb7\x13|\xd9l\xdf0\xa8\
+\x1c\xeb\x082.\xa6\xa6M8L\x94K\x12\x14*vJ\x92\x03\xd6\x05e\xaa\xeba\xbd\xf9k\
+\x94\x9f!KC|uK\x95P\r1\xae\xdb\xff\xd0\x0c\x99[\x85\xf1\xe1\x1b\xdf\xa3\xd9\
+\x9f\x10k\x1c\xf2\xa69<\x97\xf3\xcf>\xf2\xba\x86 +\xd8\x13r4S!\x18\'x\x15Q\
+\x98\x97A\x19s1\xf7\x03L>Z\xa0T9\x1f\xb2\xdf\xd2\xb9\x8fjVp\xcb\x8c\xe0\xef\
+\xfd\x88\xc3\xc1\x833\xdb>V\x98\xea*\x9a\xc5\xc5\xee\xba\xcf\xc6U\x90;Q\r3\
+\xc9w\x0c6\x8b\x88OJ\xf2\xbe\xef\x8f\xf4;\x96\xcaQ\xf4\xe7\x9e\x0e\xf3x\xe0a\
+]\xf57V\xfd~\xae\x14\x83\xe5\xae\xdez\xa2\xac\xc2\x98\xca\x8e\xec/\xfd\x0e\
+\xf5\x1b\x7fw\xa7`"\xdd&@\x03\xc5\xef\xb0\x02\xa6g\x05\x7f\xe5\xb5\xa7\xf97\
+\x7f\x7f\xb6!\xc8\x02{B\x8eYb\xa60\x98\x1bH\x9f\x88#\xfd\xc4\xac\x96\x10\xee\
+\x07\xf5X%\xf8j\xd2n\xacd\x99\xdas\xa0\r\xb7}\x97\xe0\x83\xef\x99\xa0e\xcf&x\
+\xe1\x85\xb3\xeb\xd6\x8d\xe3G\xacb+\xe9;\xe3\xeck\xd4\xfa\x9d(]\xdcLE\x1a\
+\xc4Q\xc8b\x0c\xd3\x05\x1d\xe4\xa9\x18\xf0\x11Va\x88\xd1\xbc\x9a\xc6(\x9e/\
+\x99n\xf7\xcb\xfe\x0c\xd1U\x97NK\x7ff^\xcdv\xd5W\x03o\xa8l\xd1\xf8\nw\x12F9\
+\x9a{+\xce\x15\xd3m\x8bCs\xf0\x96\xd7\x9eo|\x90\x05\xf6\x84\x1c\r6S\x8e\x06\
+\xd7\xbaz\x1c\xf6\xa1\x1a\xf5hR{:\xb3\x129#\x98\xf1s>\xf0^\x8b7\xdc\xbc3\xc7\
+]^\xeenX:7i\n\xce$y\x89u\xebwj\x06\xc3q\t\xbb\xdd\xf6\xf1\xe52\x9eWO\x8c\x8f\
+\xfd\xdb\xc7\xc9/\xbc\xc8J\xf1\xbc\x92\xb6"\xae\x94\xb0\x9a\x87\xb51\xabM\
+\x16\x85\xa9\xe22\x04\t\xebIm\x18\x9b\xa9\xc4\xe1\xef\x9bc\x0cW\xc0\xec\x14\
+\xb2H\x8fC\xcb\xd3\xf9\xc5\x91\xab\trzFr\xe3\x91\xbc\x89b\xb3G\xe4\xf8\xdf~\
+\xd2-\xafx\x9d\xdfq\x18\xfbA=\xc2`\xee#\xe8\x19\xe3b\xa5/A{V\xe2\xce\xc1l\'\
+\xe7\xe7\xff\xa65j\x17\x13!\x8e\xd3\x01\xc5t\xa5K\t\x87\x15\xe0$\xc49\xc9y\
+\x8c\xab.7\xda\xc7\xe9g\xcf\xf0\xe4\x93O\xf2\xf2\xf2_"VE1\xdb%\xb8I?*\xe6z}\
+\xb3\xbaJ\x84\xe5\xe75\xe95\x9b\x91d\xdd\xf6\xd3m\xab\xd6\xaf\tW\xae\xcb\x94\
+\xe5\x15\xb3\x14\x06m\xda\xed\xa0\xecr\xd5j\tn)T\xe4\xef\xfe\xd3}\x90S\xb7\r\
+\xec\xa9r\xcc\xd3\xfa\xa7\xe2pg\x9ek]9V1`bG\xe0\x86Y\xd9\xb9\xa73k1s@\xf0\
+\xce\xef\xb2\xf8\xe1wm\xffX\xaek\x0f(\xc7q"\xce;Q\r3\xea\xef\x9d<\x8fq\xd0n\
+\xfb\x84\xf9\x81\xf2o\xdf\xf7\x89\xa3\x908\ny\xfc\xf1\xc7\xe9v\x17\xb1R\xfd \
+\x8ar9\x90\xeb8\x8cj`\xa4.M\xab\xda\x13\xc0\x98\xdb\xe3,\x06U\xbf\xa6+\xd7\
+\xcfut\xa5\xee\x01\x93\x18\x0e\xfd\x88\xb6Q\x91o<\xe2\xf3\xf5OE\xea\xf3\xff\
+\xcb\xe1\xeb\x92$\xf7\x8c\x1c\x8d\xdfQ\xc5]T\xec\xe8I\xb5\x8a\x01\xa1Tg \x1f\
+k\xbf(GX\xff[\xc2\x902z\xdd\xf2\xa15/9\xd0\xca\xf8\x99{\xddm\x9b\xd7o}\xeb]\
+\x1c<\xb8\xbe_\xe7N\x98\xd3\x93`\xd2\xc8\xf78\xe7\xb1\xd1~\xab\x9f\xfbr\x99\
+\xa8\x88J\x87a\x88\xeb\xf9\xfc\xc6o>\xc2\x993\xcfr\xdb\xcc2\xbd\xa8\x9f\xc2#\
+m5\xe0s\x8c+\x84\x14\xe7j \xe2[\xed\x97X%\xcca\xdf\xe4f\xa8n_%\xe0\xe1\x06\
+\x12W\xba\xdc\xd5,YD\xd9\x17\xb2\xdd\x0e\x98\xbf\xc1\xe2u7\x7f\xe7\xbaT\x91{\
+\xaa\x1c\xab\xa8v\xe7\xd1s\xc0\xe8\xac\xfe\xfd\xa4\x1a\xeb\xd0\x16\x82\x10A\
+\xd8\x03\xe9K\xda\xb3\x12\x7f^\xf2\xd6y\x8b\x9f\xff\x9b\x16\x07;\x9b\xefc\
+\x18\xbe\rG\x8f\x1e\xe5G\x7f\xf4\xbe\r\xb7\xdb\x8dj\x18\xd8\x9a\x7fr\x9cco\
+\xa6.\xdbm\x1f\xdc\x9b\x00M\x8c\xc9\xd2Y\x1ey\xe4\x11N\x9c\xf8"DK\xccO\x0bZ\
+\x9e\x85+2<\x99\xe3\xba\x0c(\xc7a\xdf\xe0(\x13\xd7\x8c\xd1\xe1\xe0I\xb5\xcb\
+\xd4\xa8%r\xd5:\x024\xbe\xc0\xdd,\xa1\xad\x92\xf109\xcf\xceY\xbc\xed\xd6\x9c\
+g>\x13\xa9\xeb)\x9a\xbdg\xe4\x98;7\x11%\n\xe1\xce\x96~G\x83(\xcc\xcb"\xf9k\
+\xb9\xc6\xbaz\xde\xa3~C\xa0\x14\xed\x08\xfc\x16\xb8"\xc7o\xe9\xb6f\xd6t\xca\
+\xf7\xdd\x01\xf7\xbe\xdb\xa9\xff\xe2\x06\xb8\xf95G9v\xec\x18G\x8f\x1e\xd5\
+\xc7\x18C\xb9m\xb7\x1af\xd2\x1c\xc9Q\xfb\xdaJ\xae\xe5\x86\xbf#\xbe\x80\xe7\
+\xf9,/u\xf9\xec\xe7\x9e\xe4\x89\'>G\xb0\xbc\x04\xde\x0c\xbdT\xa0b\xdd\xbd;\
+\xca%q\xdc\xafb\x19\x85\xba.\xdbU_rU\x85\r\x9b\xe0\xc3\xef\xab\rJ\xaa\x9fU\
+\x830\xbbe5\xd5\xb5\x05\x84A\x92tg%\xef\xb9+\xe0\xeb\x9f\x8a\xd4\xbf\xbc\xff\
+\xe6}O\x92{F\x8e\x0e:\xb7L\xc5\xdd\xb2R\xc6\xc0\xf5\xa6\xf1\xac`\x9diq\xad\
+\xa1\xae{\xca0I\xb6\x85 P\x8a\xb0G\x19\x9ci\xf9\xe0\xcd\t\\\x17\xee}\x97\x98\
+\xc8\xbc~\xf3\x9b\xdf\xc8\xb1c\xc7\xb8\xf7\xde{K\xa2\x98\xb4\xe3\xcdV\xaaa&\
+\xed\xb03N\xe4z\'\xfaCv\x03\x97o~\xe3\x0c\xbf\xf1\x9bZ1\x06\xcbK\x84E@\xbae+\
+\xc21oq\xa3\xf2\xa0\xaf\xec\xc6}ho\xd4E\xe7j\x1f\xdb\xd5q\xdb\x16\x82v;`\xee\
+\x88\xe4\xfd\xefz\x9e\xaf\x7f*R\x9f\xfc\xc5\x1f\xdb\xb7$\xb9\xa7f\xb5i\x10\
+\x1a\xe6q\x99\xefX\x96mU|\x8e\xd7*\xean\x9e\xba\x9b\xa1-\x84V\x8fK9\xb1\x92\
+\xb83\x0e\xedY\x89\x98u\xb9\xf5@\xc6\xcf\xbc_lZZx\xf3\xcd\x87\xf9\xe5_\xfe(\
+\xc7\x8f\x1f\xe7\xbe\xfb\xee\xab%\x9f\xed*\xb4\xcd\xb6\x1f\xf7x\x93b;\x1d\
+\x85\xbe\xf9\x8d3\xfco\xff\xf8!\x9ex\xe2\t\xba\xdd>1\x12-\x01P\x15\x8a\xae\
+\x0b\xbd\x82-\x93\x9a\xe0\xb1\xf1\xc5\r\xab\xbd\xeb\x01\xd5\xdf\xea\xc5\x02w\
+V27;\xcd\xf7\xbf\xe5\xb3{wRW\x18{6\x87\x8c\xe0\r\xc0\x99\xe2\xaf9\x84\xdbE\
+\xcf\xd3\xa7a|\x8e\xb0\xb7\x93fm\x07\xe3\x9e\xb3)-\x04 \xcc\x91"\xa73\'\xb8\
+\x05\x85\xe8I\xde\xf6z\x8b\xbb\xdf\x9c\xf2\xa5?\xcf\xf1m\x90\xaei\xc5\xe5q\
+\xd7]o\xe7\x87~\xe8^\xee\xbe\xfb\x1e\xde\xf1\x8e\xbb\x06\xf7\x1b\x8c\x9e/f\
+\xa7\xaaa\xb6r\xbc\xba\xed7\xfa\xeef\xdb\x8f\xfa\xee\xa9S\xa7\xf8\xd5O\x1c\
+\xe3\xa9\xaf\x9f\xec\x93\xa2\x817\x83\xe5.a\xe6x\x99*<;\xd2\x93\x80\x1a\xe8\
+\xf6=\x8c\xba\xc9\xab\xae\'X\x1ex\x91 B\xfbe\xbf\xfe\xa9H\xbd\xfb\xef\xed\
+\xbf\x89\xbb\xf6n\x82-\xf9,\x86\x0c\x8dY\x1d\xf5\x14\xd3\xb3\x828Z\xc1\xabT\
+\x1d\xec\xd7Ahn\xb0\x81i\x15(\xcc\xeb\x1e\x80\xc2\x9f\xb79\x12\xc5\xfc\xd4\
+\x0f\xda\xf4\xd2\x0c{\xfe\xfby\xef{\xdf\xcb\xfc\xfc<o~\xd3\x1by\xfd\x1b\xde\
+\xc8\xcd7\xcf\xd7\xee\x7fX\xb9\xed\x14\xf9\x8c\xfal\x9c\xe3\x8d\xda~\xd2\xfd\
+\xd7\xf9<\xab\xdf9q\xe2\x04\x0f=\xf4\x10O=u\xaa\xf6\xb7\xde\xe8/q\xa8\x90\
+\x8d\xaap\xeb\xc61\xb8\xe4\xc8\x99\xfa)\x12"W\xe1Eb\xc0\x7fx\xbd\xc3\xf5\xa6\
+Y\xeb\xed\\U\xd7\xd5\x84=#\xc7(\x97xl\xec\xae\xd8h\x9a\xc9\xfd\x80\xea\xef*\
+\xa7s\r\x159:\xefQ\xfa\x92\x83s9\xa2+\xb9\xad\x07?\xff\x03\x16\x7f\xe9\x1e\
+\xe5\x17?\xfa\xd1\xda\x14\x1d\x18MJ;\x99\xbe3\x8e\xea\xdcN5\xccv\xea\xb4/_\
+\xee\xf2\xc4\x13O\xf0\xd0C\x0f\xf1\xedo\x9f\xad\xdd\xd6\xb8(R\xc7\x06rD\xd1N\
+\xd3\xad\xa9\x1c\xac&\x81o6\xf5\xe9\xf5\x80\xe1\xdf\x1cG+\x1b\xaa\xeck\x19{\
+\xf6\xb3LE\x02\xf4\xd3\'\xbc\x96(\xda\xd0O\x03\xa3\x07\xe1\xb5\x1a\xbd\xaeC5\
+\xd2Y\x9a\xd7a\xbf\xad\x19\xe8\xe0\xcc\xec\xac\xe2\xd0\x9c\xc2=\xf7(\'N\x9c\
+\x18\xd8\xc7f]\xb1Gm\xbb\x1d?\xe0\xb8\xb8\x12U9\xa3\x9a\xf4\x9e>}\x86\x87\
+\x1f~\x98c\xc7>1\x92\x18\r|O\xd0"\xa7\xe3\xe6\x03\xca\xb1\xe5\x8b\x81\x06\
+\xcc\xd5\xe4\xecQQ\xea\xfd\x8e\xea\xfdV\xf7\x9b\xeb\xfc\xb3\xfb\x01W\x05\xe7\
+W\x13o]o\xb0\xa7\xa3A\xdd\x05\x1aE\x92\xd7\x1ay\x9a\xf3\x1d\xa8\xa3\xad\x10\
+\xa4\xf0ui\xe1Ms9\xaf\xbd\xdd\xe2\x8f\x9f\xf8g<\xff\xfc\xd9r\xd3I\x02\'[\xad\
+\x86\x19\xb7\xb3\xf7\xa8\xe3\xeddU\xce(\xff\xe2\xc7?\xfeq\x1e~\xf8a^y\xe5\
+\xfc\xba\xcf\x87\xe1\x15^\x9b\xb5\xb8b6\x17\x93sU\xfb1\x0e\xd7U_O\xa8f\x8bT;\
+\xdbg\x91\x0e\x98\xc6\x916\xa7\x87\xbb\xf9\xef\x17\xec\t9>\xf6@\xacL\xa4\x1a\
+\xfa\xca\xd1\xd4W\xbb\xdetm\x15\xc20\xe9\x8dzr_+*\xb3.U\xc9\x10d\xaf\x12\x9c\
+j\xf9 =\x9b\x96/\xb8m*\xe7h\xe7Y\xfe\xddo=4RA\x95\xfb\xda\xa0\xbe\xb9\x8aq\
+\xcc\xe9\x8dr\x19\xc7\x89J\xef\xa4Y?|\x1e_\xfc\xbd/\xf2\xd1\x8f~\x94\xff\xf8\
+{_\x18\xef\xf7z\xe0\xbb\x12\xc7Wt\xdc\xbeY\xed%)\x91\x1a\xad\x1c\xab\xaa\xf1\
+j\x1eW;\x85\xeao\xad\xde\x8bUb\x8c\xf7\xf1\xffa\xcf\x94cT\xe9\x8ad\xda\xd3\
+\x97\x13\nY\xc1@*\xcf0\x89L20\xaff\xa2\x1c\xfe=U\x05\xd9\x1a\xf2\xc7\xb6Z\n5\
++\x98;\x08o\xbfCr\xe1\x99G\xf9\xfa\xd7N\x96\x9f\x8f\xeaw\xb8\x135\xca\xc3\
+\xfb\xaa;\xceF\xc7\xabb\'L\xf9\xea1\x1ey\xe4\x11~\xe1\xfe\xfby\xea\xa9S\xeb#\
+\xd2\x1b\xa0e+\x0eX\xf9\x80r\x84b\xd6\xbfV\xbf\x94uTC\x88\xfdnR\x0f\x8fI\xa3\
+\x16\x83@\xdf\x97q\xd4\'\xc6^X\xef\xff\xbe\xd6\xb1G\xfd\x1c\x07[\xd2\x9b\x89\
+\x88\x0c\xa2\xac]&\x81WU\xe3v\x93\xc2\xaf\xd6\x01]W>\x06\xd0\xab\xf0H\xcb\
+\xd7\x953\xa1\xefp\xd3\xdc\x0co\xbf\xdd\xe2w>\xfd\xb1\xd2\xbc\xdeL\x99m\xa7\
+\x1af#\\\xe9j\x98Q\xeb\x9f\x7f\xfe,\xf7\xdf\x7f?\x0f>\xf8\xe0Xft\x15\xa6\xaf\
+\xe2r\xd6\x1f\xfe\xa6\xd6\xbf\x17*\x92\xbc\x7f\xe3\x9b^\x8d\xc3\xa5\x81W\xdb\
+\x83v\xa71\xec_]\t\xf4=\x1bG+\xac.\xf7\xa3\xd3\xe1\x92\xcd_\xfdx\xb8\xef\xd2\
+x`\xcf:\x81\x17\x03.QD5O\xfbjW\x9e\xe1\x9a\xcf\xfd\x86\xba\x12C/\x16\xa5z\
+\xec\rq\x83\xe7\xa7\xb4\xfc.\x87\xe6\x147\xaag\xf8\xec\xbf~h[\xc7\x9f\xb4\
+\x1af\xd4vW\xaa\x1afx}\x10\x84<\xf6\xd8\xe3|\xe0\x03\xf7\xf1\xd8c\x8foI\x89\
+\xb6]\xb0\xdc\x9c\x03VN\xa8@%\x83\xb3?V\xbbt\x1b_\xa3I\xfc6\xd8\x8fc\x11\xd6\
+\x93~\x10\xb4K+nuy\x858\xd2\xee\xaf\xa8\xa7\xe8.\xce\xf0\xbe_\xb1\xf6%1\xc2\
+\x1e\x90\xe3c\x0f\xf4\'\xf2\xa9\xfa\x1d\xab\x18n\x0fU7\xcd\xe9~yr\xd7\x95\
+\x96\x99\xd4\x9ea\xb4|h\xfb\x82\xd0wh\xcdJ\xdep\x87\xc37\xff\xdf\xcf\xf2\xd8\
+c\x8f\x03\xdb\x0b\xacl\xe6\xd7\x1b\xb5]\xdd\xfa+Q\r\xd3n\xfb<\xf5\xd4)>\xf8\
+\xc1\x0fq\xff\xfd\xf7s\xfa\xf4\x99\xda\xed\xc6A\x10\x83W\x0c}\x15i\xb39K2\
+\xc2\xcc\xa2\xe5\x8b\xda\xe8\xeb\xf5\xa2\x1c\xabV\x9a!\xc58Z\xe9W\xae\xf5\
+\xf4<;*v\xb8\xb8X\x9f_\xbb_\xb0\'\xca\xb1\xed\xf5\xcdj\xcf\xd63\xb4\x19?\x8f\
+I\xe3\xa9\xc3F5\xaa\xd7:\xeaj\xae\x81\xd2\xf7XU\x903B\xcb\xed\x1b\xa7\x14\
+\xef\xba-\xe7\xc4o\xfe<_\xf9\xca\xc9\xb1\x03+\xe3`\xb3\xefL\xaa\x14\'\xf5yV\
+\xb79}\xfa\x0c\xff\xe0\x1f<\xc8}\xf7}\x80\x13\'Nl\xdbo\xd9vA:\x90:\x16\xc2+\
+\xa6>-\xac\x99\xea\xb4\x1d\xa0}\x8e\xae\x14\x039\x8e\xb0\x7f\xc7_5\xe8\x02\
+\x83j1\\\xb2Q\xb1C/Lx~!\xe3\x83\xff\xfc\xec\xbeU\x8d\xb0\x07\xe48\xeco4\x13\
+\x9e\x9b9z\xcd\xac\x83\xfby \x1al\x94\x9ed\n\xfd\x83P\x9b\xd6-\xbfO\x90I\x0e\
+\xd3\x86 \x0fZ\x1c\xf03\xfe\xd5?\xfd\xe8Djj+\x01\x9aI#\xd4\x1bu\xf1\xd9\xec<\
+\xdam\x9f\xd3\xa7\xcf\xf0\xab\xbfz\x8c\xfb\xee\xbb\x8f\x7f\xf1/\xc6K\xd1\x19\
+\x07\xbe\'\xe8X\n;\xc9J\xe5\x08\xe0\xaa|`\x9a\x04\xd3\xa5\xdb\x98\xd6\xfb1Z]\
+\x97\xaec\x82.\xc6\xb7h\xd4"@/L8\xd7}\xc3@7\xff\xfd\nk\xb3\x89\xcfw\x12\x8f~\
+\xa4\xa7\xa6\xa7\xf4{\xcf\x11x6\xb4;z\x9aJ\xd7\x01\xdb\x16XB\xa02PY\xff\x82I\
+\xbb\xff\xba\x9fP\xf7{\xcc:\x95Ah)\xdcT\x10\xa7\n\x07p\x80$\x85X@\xba\xaaX\
+\x0b\x05y.p\x94\xe2k\xcf\\\xe0+\xa7^\xe4\xdd\xef~7ss\x9bG\x0f\x1d\xc7^\xf7>\
+\x08\xc2\x81\xf5\x1b}g;\xeb7:\x8f \x08\xb9x\xf1\x12\x8f>\xfaox\xf0\xc1\x07\
+\xf9\xbd\xcf?\xc1\xc5W\xd7\xcf\xa2\xb8U\xf86\x1c\x9a\x11\xcc\x1f\x00\x7f\xda\
+\xa2\xd3\x16x\xb6`\xba-\xb1<\x81+r\\_@\x0e\xa0\x88\x13E\xdb\xedk\x08s}\xf6\
+\xcbX4\xf7\x9a*4\x8bI\xd3\xe9\x05z\x16\xc64p \xb3\x08\xf3\x0e\xafv\xd7xe\xd1\
+\xe2\xbf\xfb?V\xf7=1\xc2\x1e\x94\x0f\x06\x91U\x9a\xd5Z5\n:\xad~T\xb0\xae\x8f\
+\\\xf5u\xbf`X\x85\x0c\xbf7\xc5\xfdqaV\x07\xa1B\xf8\x92PI\xfc(%\xf6$\xb3\x9d\
+\x9c\xa5\xc4B\xb8\x16w\x1eI\xf8\xdd\xaf|\x81_\xf8\x85U\x8e\x1d;\xc6]w\xe9&\
+\x14\x934v\xa8\xf3;N\xd2\x94b\x9cz\xea\x8d\xf6y\xf9r\x97\'\x9f|\x92\x87\x1f~\
+\x98S\xa7N]\x91\n\x9e\xb6\xa7\x13\xc0S\xc7\x86 A9\x02\xef\x00\x80\x85\xab\
+\xf2\xb2\x9f\xa3\t\xc8Tk\xab\xeb\xae\xd7\xb5\x84j\xbe\xe20\x0c)\x9a\xfcE\x93\
+s\x1c\xe6\x1dT\xdc\xe5\\\xf70?\xf5\xc9\xfd\x19\x95\x1e\x85]S\x8e\xbf~\x7f\
+\xac\\W\xd2\xf62\x0e\xb4\x04\xb6\xd4\xaa\xd1k\t,\x1b\xdaS\xb2|\x82I{P-\xeew\
+\xd58\xfc\xde\xfc^\x95A\xa6 \x01\xecP\x91\x03q\x94cg\x10%\x90\xc6\x8axE\xb1\
+\x9c\t<r\x82H\xf2\xd47/\xf3\xe4\x93\x7fD\x96\xa5\xdcy\xe7\x9d\xe5\x9c\xcdu\
+\xeap\x94R4\xeb7\xfa\xac\x0e\xa3\xf6\xbb\x91J\r\x82\x90\x97^z\x89\xcf}\xee\t\
+\x1e|\xf0A\x8e\x1f?\xce\xb7\xbf}\x96$\x99 iq\x02\xb4\xa6g\xb8y&\xe1\xa0\x97q\
+\xa0\x03\xad)\x8b\x99)\x9b\x96\x0b\x96\'\xb0D\x8e-\xc0+H2K\x15\xc8)l\x99\x0c\
+\x8c\xcdk\x11flU\x11emzaH/\x88\xc92M\x8aY\xaas\x17\x93 dy\xb5w]\xa9\xc5*v\
+\xed2\xb7\\\x1d\x88\xf1\x1cA\x94\xc2\xec\x94\x83\xbe\xed5\xb2HG\x04\xdbB\x8c\
+T\x8d\xd7\xea\x13{\\TUc\x15v\xa8H}\x81]\xe9\xcc\xaaZ6n\x14\xe3\xb6%\xb3\xab)\
++\xc0\xad7\x08\xce^Z\xe2\xec\xd9\x88O|\xe2\x18\x9f\xfb\xdc\x13|\xf8\xc3\x1f\
+\xe6\xbe\xfb\xee+\x1bUl\xa5i\xc4\xa4\x9dw\xc6\xa9\xef\xeev\xbb\x9c8q\x92\'\
+\x9f\xfcCN\x9c\xf8\x12\x0b\x0b\x0b\xe4q8Q"\xf7V\xd0\x91\xbaM\x19@:\x98\xc1\
+\x83\xabr\xa4\'\x91\x1eE\x8d\xbfQ\x8ekDY\x073\x19\xd5\xb54\x06\xeb\xd4\xe2`\
+\x85K\xbd_1J\xbb\\ZT\xfc\xf4\xa7[\xd7\x1d)\x1a\xec\xe93\xb0Z\x89`\xba\x9e\
+\x04\xae\xa2\xed\x89u\xd13\xd8\x9f$\xb9Y#\x03\xe5\x03\xa1&\xc8e\xc0\x8ft@\
+\xc6\x8f\x12.(\xddU\xc6s\xa0\xe5Kn\xe8d\xbc\xe35\x82 \x0eY\xeb\xc1W\xber\x92\
+S\xa7Nq\xfc\xf8q~\xf2\'?\xc4\xddw\xdf\xc3\xd1\xa3G\xf1}\x7f\xa2vf\xe3T\xc3\
+\x8c"Tc\x1a\x9f?\xbf\xc0\xb9s\x0b\x9c9s\x86/|\xe1\x0b<\xfd\xf4\xd3\xbbF\x88\
+\xc3h\xd9\xfa!c;\xba\xd9\xadr\xc0r\xf4\xba<\xca\xc1\x97\x03\x152\xda\xe5\x13\
+\x8c\xd8\xdb\xdea\xa3\xfb`\xd8U3\x8a\x10\rL\x14:J\xe1\xf2\xea\x1b\xf8\xa9O\
+\xbep\xdd\x92\xa2\x81\x98\x9d\xbd\xf2\xa5?\xff\xfao\xaf\xa9\x1bo\x90e^\xa3g\
+\xeb\xaa\x18\x7f\xa6\x7fW\x984\x1e\xd3\xe4v\xb85\x94Ygp-\x10\xe4V\xceqT\x07\
+\xa2\x95 #\x8e \xf4@tUQ\x03\x9csaQrqU\xd0[L\xb8\xb4\x0c\xdf\xbe(\xf9\x8b\x17\
+s\x9e;\xa7\xb8\\\xe4\xd2\x1b\xe2:z\xf4(w\xdcq\x07\xef|\xe7\xbbx\xd3\x9b\xde\
+\xc8\xfc\xfc<G\x8e\xccs\xf8p?_\xad\xae7bu\xdd\xf0g\xd5\xef\x84\xa1^\xa2(dq\
+\xb1\xcb\x993gx\xfe\xf9\xb3|\xe3\x1bg8s\xe6\x0cg\xcf>O\x18F{B\x88\xa0\x831\
+\xb7\xdf\x04\x87g-\x8e\x1e\xcc\x99\x9fU\xcc\x1f\xb4\xb8\xe5`\xce\x819\x1b\
+\xdf\xd7\xdd\x8f\xaa%\x84\xc6\xe7\xa8T\xa7\xcc\xa4\xd8+\xd4\xdd\x0fu\x9d\xab\
+\xaa\xeb\x86s\x15\x87\t\xd1\xf8\x14\x97{\x8a\x95UX\\\xbb\x8d\x07\xfe\xcfK\
+\xd7=1\xc2.)G\xdf\xab4\x0f\xad\x1c1\xea\r\xd6\xb1\xea\xca\x98\xf5\xd7eT\xd3\
+\x89\x8d\xfa\xea]\r\xe4Yw\xfc\xcd\xce\xb5.U\xa4\xda\x11\xc6\x8f B\xd7\x00\
+\xf7\xd0\xad\xdfZ\xc2\xd2\xbdq\x81\x197c\xae-\xc1;\x00kz*\x00Cb\xa7O\x9f\xe1\
+\xf4\xe93|\xf9\xcb_f~~\x9e\xd9\xd9Yfgg9z\xf4(\xf3\xf3\xf3\xe5rpn\x16\xd7\xf3\
+\xa9>8\r\xf1-u\x17\xe9\x85Q\xff\xef\xa5ny\x8c\x17^8\xcb\xd9\xb3z\xe9v\x17\tC\
+\xfd#\xf6\x8a\x0c\x87\xd1\xf6\x8aVe\xb6\xc2q$\x8e\xa3[\x96I\xd7\x81\x11\xbdE\
+\xeb\x94\xe3^\x8d\xad\xcd\x8e9J-VI\xb1J\x88Q\x9a\xb0\xb8\xbaL/\x96\xfc\xecq\
+\x93\x9as\xe9\n\xfe\x82k\x0b\xbbnVG\xa9\x9e\x1fX\xe41\xad\x82\x08\x8d\x7f\'\
+\nsT\xa1\x1e\x83\xa0\xbdn\x92\xad\x8d\x08\x12\xd6\x93\xcc\xd5@\x90\xb0\xb9\
+\xe9<j]\xa0TY\xb6\xa6\x15L\xce2`\xe5\xa2\xc8yTD\xb9\xc4\x15\x19\xd2\x96\xf8R\
+g\x01\x1cl+n\xf4\x97\x08ljI)\x08\xc2\xb2\xdfa\xbb\xeds\xf2\xa4n`\xe1\xfb^\
+\xf1\xea3;;W\xbe7D\x18\x86\xbd\xe25\xc2\xf7\xbd\x81\xd7\xea\xbe\xaffxV\x7fJ\
+\x84a\xb8*\xd7\x1dy*\x13\xcb\x98F\xb7\xa6\x9f#\xec\xfe\x98\x1a\xe57\xf4\xa2`\
+\xdd\xe7\x83\xa48\xe8O\x0c\xf3\x0ea\xd0\x05\xba,\xaeJ\x16W\xe1\xef\xfc\xc6\
+\xfe\xcfW\xdc*\xf6\xc4\xe7\x98\xa7\x02\\}\xc1"\x92\xb2\x1b\x0f\xf4\xd5cu\x0e\
+\x19X\xaf\x12\x87K\tG\x11\xe4\xf0\xba\xbd\xc0V\x8f\xdd\x16\x02\x932o\xba\xc3\
+X=\xd3?opL{V\x8ep-l\'\xc3\xb1a\xa6-h{jS\xc5V\x9f\x84\xbd\xb4i\xc2u\xb5\xd6\
+\xf9ZA\xa7\xa5[\x95\xe5\x89\xc2\x99U\xb4\x8bb\x18Wd\x80$\x16\x12\xbf\xf8\x8f\
+\'9\xb8\x0cv\x02w#\xb1g\x8aq\x98\x18\x87\xdf{QP\xf1+\xf6\xd5b\x95\x14\xa3d\
+\x91\xef\x9c\xbf\x8d\xb5\x95\x17\xf8\x9f>\xb7\xc9\x1c\xb4\rv\x87\x1c\xdd\xb6\
+$\x88\x04\x14\x03\xcfs\x84nSV\xf8\xf0\xb5\xe47\xd7*\xa7*\x10=_\xa2T\xf1\xa8\
+\x0f\x18P\x95\xe6\x156\xf6\xc3\\M*r\\\x98\xe8\xbdG_9\xae,i\x82\x94\x9e\xc0\
+\x8b\x14K\xf1\xe8\xef\xcf\xb5\x05\x9dV\xdf\xef\xd8\xa0\x0f\xdfV\xb4s=\xe6\
+\xa4\xad]>Y"P2\x83V\xfdw\xaa\xcaq7a\xc6\xf5\xf0l\x9cB\xe8\x08:\x14\xfeD\xd6\
+\x07Z41\xc6\\XLY]\x93|\xf3l\xc2?9qI\xc0\x08\xe9\xdc`\x00\xbbB\x8e\xa6\x1d\
+\x94\t\xc8\xe8^\x8e\xa24\xad\x8d\x82\xd4\xe8\xfb \xc1(\xa6~\x8b\xa4\x18m\x82\
+\xaf\x04\x19\x9e\xdf\x1f %\n\x02\xad\x8bv\x0f\x97\xeb\xd5\xa9\xd1\xab\x85@M\
+\x128\xf4U\xa3\xebAR(\xc7H\t\x8c\x9f,\x8crz\x11\xa8X?|\x1cG\xd2v\x15\xed\x9a\
+9Q\xaew\x98H\xb5A\x9e\xe6\x80,\xa3\xd5\xa0\xdb\x96\xb5\x00Z\xfd\xff\xbf\xdb\
+\xb6vu|\xd4)\xc58Z\xc1\xf3e\xa5\xc7\xe4\xca@\xb3YC\x8a\xbdP\x11\xc7\xd0\xeb\
+\xc5\xac\xac\xc2\xd3\xcf\xa7\xfc\x93\x13\x1d\xa1\xb5p\x83q\xb1K\xe4\x98a9\
+\x16\x8b\xab\xb2\xccu\x04=gG\x1c+\\7\x86P\xcf\xdf\xa1\xdb!1`j\x03\x03\x84Y>!\
+\x87\x88\x13\n\x85\x15\xe4\x03\r,\x8cof#B\xac3\xd7\xaf\x06\xa2\x8csU\xde\x10\
+q\xd4oI\x9fG9y*\x88\x83BM\xda\x92R\x99\xcb\x1c\x10\x1c=$\xb9\xb8\x947\xeaq\
+\x0cd\x89\x00O\x8fI\x7fz}\xaec\x94\xb5\xcb<G\xd8\xd9\xb11\xea\x01\x1eem\x84X\
++\xc7;\xc0\xcaR^L%\xa2\xffNr=&L*N\x82\xa2\xd7\xd3\x95h\xe7.e<\xfb\xd2-|\xe6?\
+]nL\xe8-`W\xc81V\x16nA\x90\x00\xcb\x91\xd07p!\x16\xf3\xd4\\;}\xe3\xfb\xd2-\
+\x95\xa4\xf4D\xe9c3\xd1\xeda\xacW\x9a\x0c\x0c(\xbci\xe2h\x057\xd3\x84i\xfc3U\
+\x87\xb6y\xad\x0e\xd2:S}70|,C\x8c\xe5\xdf\x85j4\xdd\xd4\xa3\xc4( \r\xdfV\xf8\
+6\x04\xb1.\xcdl\xc8qc\x84QN\xc7\xb1\xf4\x8c\x98\xa9\xd2\x0f\x1e!H<\xa1S\x03\
+\xd0\x0fa\xcf\xb2\x06\x02\x1f\xdb\x19\x0f\xc3$\xbb\xee\x9aW\xf2\x12ap:\x82\
+\x95\xeep:NL\x1c\xc7\xf4zzV\xcf\x8b\x17R^\xbc\x98\x17j\xf1\xf2\xd6O\xf2:\xc7\
+\xae\x90\xe3\xcf\x1ew\xc5\xa3\x1f\xe9\xa9,\xc9XI\xc0r\x04Q1\x9f\xa3\'\xf3\
+\xfeM\xbe\xa4M\xef\xd8\x8eqB\xa1k\xafC\x85/]\xc2X\xb76\x0b\x97\xf4)\x0b\xb7_\
+\xde\x10\xf5\xfa\xc7\xaa#O\xa3.\xcb$X\x180\xc9\x8d\xdf\xb2J\x98ujr#U9IB\xee\
+\xa8\x1bb\xd8G\n\x83m\xfa\xa3\x9e6\xa7\xc3\x15\xad\x1a\xa3\\\x10+\x01\xe4\
+\xa4\t\x84\xb9\xc0q`\xb5\x07\x8e\xad[s5\xa6u\x1f\xc3\xff\x8b4V\xa4\x85\xcbGw\
+\x8b\xb2\xc0S\xa8X\xa0\xa4CN\x02\xc5\x8c\x98\xd33\xb2\x1c\x1f\xa3\xea\xff\
+\xeb\xb0Q=su\x1f\xd0\xef\x86\x03\x95\xb1Zc6C\x9f\x14U\x9c\x10\xa5\x82(Q\\|5\
+\xe7\xb9W\x0c)6\xd8.v-Z\xfd\xd3\x9fn\x89_\xbf?V\xae\xc8\xc8\x92\x8c\xac\xe0\
+\xb6\x98~/=\x80 \xd2\xd5\n\x9e\xcc\xa1\x07\xc2\xb5X\x8ac<G m\x85S(J\x91\xf7U\
+&h\xb2\x1c\xf4]V\xb1~\xac\xc4Q\x8e\xeb\xf5\xc9Rc\x05\ns\\\xf4\xd6t\xe2oq3\
+\xd4\x11\xe5p\xd0\xa7\xba\xbe\xfa\xbez\xf3\x8czo\xfe\x1eu\x13%9e\xe2w\x9e\n\
+\x96#mR\xe7qN\x94\xe94\x1f_*\x02\x04\xbe\xad\x88r\x0b\xc2\xfa\xdc\xbd\x06\
+\x83\x88\x12\xf0=M\x90Q\xa2k\x90\xab\xa9fP\xf8\x1d\x8b\xeb\x15\x04\xda\xc4\
+\xae\xaaH\x18\xfd\xa03\x9f\x8dr\xe1\x18\xf3\x19\xeaI\xd1\x08\x02\x83^\x98\
+\xa0\xcd.]\x8a\xbb\xb8*Y[M\xf8\xda\xb3\x8a\xcf|u\xaa!\xc6\x1d\xc2\xae\xa6\
+\xf2\xfc\xecqW\xfc\xdaO\xaf\r\xdc\xb1\x9e\x03Tz\xea\xf9\x9e$K\xaa\x84\x95\
+\xe9h\xf7\xaa\xa0\xede\xf4\n\xd3\xdb+L\xf1\x90D\x93f(\x10n\x8cZ\x16e\x8fH_\
+\xba\xc5\xd3U\xe7lT\xd5\xa6\x99#\x1b\x06\xcd\xf2\xd5\xe5\x95\xca\xdf:\nX5\
+\xc77\x0b\xe0lD~0^\x80\xc8|f\xaab@\xfb\x95\xf2H;\xda\xa3D\x91%ZyWM\xea0\x17$\
+\x89"L\x05AO\xfb\x1d\x1b\x0c\xa2\x97\n\xc2\x14\x96b\x89\xeddLE\x8a\xe9)\xa1M\
+\xeb)\x07\xd0\x1d\xc1\xdd\xc2\x7fk\\9\xfa:\xac \x8a\x8a\x99\xbakg\xd6\x0f\
+\xab\xff\xe1\xed\x86?\xf3\xac\x80\x95\xa0\xef?\xafv\xdd\x1e8\xf7P\x8f_3\xb5H\
+\x94\xe8\xaa\x96\xbf<\x97q\xec\x89F-\xee4v=\xcf\xf1\xef>\xda\xbf\x88\xc7\xee\
+\xd3W\xbf\xe3\xe6eJ\xc5r\xa8s\xf6\xa0 \xce\x02a\x94\x97\x84\x00\x10\x14fy\
+\xdb\xcb A\x93f\xaf\xf8NA\x9c\xb1\x1d\x93\xa7\x82\x90DW\xe6\x84\xfd\xe6\xba\
+\xbdP\x95\xed\xa9\x8cYnL\xf2*i\x9a\x9b\x02XG\x94\xb0q\xc4{\x14\x89\xd6\xa9\
+\xcd\xf2w\x05ZE\xe8\xf4\xa5\xc1$\xde8\xd6\xbf\'\x88$Y\x92\xb1\xb4\xaa\xa3\
+\xd4i\x02a\xa4H\x8b\'\x8aok\x1fm\xb0A\xaa\xcf\xf5\x8e$\xc9\xe9\x14\xa3\xbf\
+\x17\xe9q\x93%\x19\x01\x16m2\xc2\xc2\xafk\xa6Mp\xa4\x1e\x0b^\x91~f\x12\xc3a=\
+\t\x8e"\xc8a\xf7\xccb\x9e\x0f4\x13\x81Ab\x1cl\x04\xd1\xdf\xc6\x90b\x18\xe5\
+\x9c9\xab\xf8\xe7\xffO\xa3\x16\xaf\x04\xf6\xb4\xf1\xc4\xb1\'\x06\x1d\x84\xc7\
+\xee\xeb)O\xe4\xc4\xe8\xa6\x00\xbdHGa5aB\xd1\x81\x14\xdf\xd3f\x84\xefIV*V\
+\xf4\xf4\x14eD\x1c(\x02>\xfd\xa0\x05h\xc5\x19%\n\xcf\x11\x84\x81\x99\xa6\xa1\
+O\x98\xbetK\x85i\xa2\xe6+]U!N\xad,uJ\xd1tm\xda\xd0\xa8\x9cK\xb3\xcelkP\xfd\
+\xbc\xdd\x0e\xe8.\xf6UD\xbf\xaf\x9e&F\xad\x1a3\xc2Bm\x0fw\x96I\x13X\x8a\xad\
+\xf2\x7f\xd5@\xc3\xaf\x19\xe9K\xc5Cq\xaah\xc0\x1cF9>\x109\x12!\x04>\x19*\xd6\
+\xbe\xc7\x08=\x16\x062$\x8a\x1c\xdcQ\xb9\xb6\xc3\xef\xa1oBGa\x8e\xcd`\xfe*\
+\x0c\xe6(\x1aR\xacNc\xbc\xb2\xaa_\x17^\xcd\xf9\x1f~\xa7Q\x8bW\x12WUg\xbaZ\
+\xb2Lr"%\x89\x85\x1e\x92\xb6\x03\xadr\x06\xa4a\x02\xd0\xe9,\x860\xab\xbeL\
+\x83(7&ia6%}\x13=\x16\x92Pi3\xdd-\x9c\xf7\x860#\x92\x81\xc89\x14\xc9\xb7\x1e\
+\xb5iC\xa30\xac2\xaaA\xa0(k#z\xc6\xf7\xd4\xdf\xc6\xe4\xad\x99\x9b$\x8cr\xa2D\
+?<\xf4\xdf\x8a\xd5\x10\xd6R\x08SA\x92\xe4\xc4\xc5\x1c4\x8dz\xd4\xa8V\n\x05\
+\xf1 Y\xa6\ttWa\xb6 \xc98\xc8\xf1$Z=\xb6\x07}\x8f&\xbd\x07t3\x8a8\xd2\xa6vY\
+\xa8\xc0\xe0\x18\xc8"\xad2\x95\xea\xacK\xcb\xd1s?\xe7\x03\x84h\xd0\x0b\x13\
+\x96\x8b\xf5Ad\x95\xd3\x8b\x84Q\xce\xcb\x97ecF\xef\x02v\xa5+\xcfN\xe1\xc1\
+\x0f\xf4\x94)z\xf2D\x8e]\x8c\xa5\x96\xa7\xcd\xa2(\x194\xc5A\xabL\xa3\xb2\xaa\
+\r0\x86a\x88\xd4\x04\x83\xa2\\\xea\xa6\x0eE\xc5\x84\x83\xf6e\xb6\xaau\xb7\
+\xad\xf5\xe9E\xe6\xc61\x84Y\x8d\x84\x0f\xe7\xc9\r;\xe4\xfbiH\xfd\xfc5C\x8cF5\
+\x1as\xaa\xbb\xda7\xa7WC\x88\x85\xa0\x17h\x7f\xe3\xe2\x9a&\xc9W\x03\xc1\xf3\
+\x172^lz\t\x00\xf0\x86\x9buY\xe5\\[p\xb0\xad82\xa3\x98i\xc1\x94\x0fSS\xa2\
+\x1cG\xbe\'\xb1\x1c\xdd\xb1\xbe\xd5\x02\xd7\xa5\xbc\xee\xe6ZW\xfd\xd40\xd81\
+\xdc\x94\x1c\x1aB4\xeb\xaa\x18\xf6+\xf6\xa3\xcf\xa24\xa1\x17Wei%\x18\xcb\xe7\
+\x1b\xaf\xc0\xa7\xfe\xa0!\xc6\xdd\xc0U\xa5\x1c7\xc3C\xff\xa1\xcfB\xff\xe3\
+\xbdkJ\xe4\x92\x19\x99\xb3\x92\xf4U\xa51\xc5=KGq\xa3\xca<\x9b\xe6}\x95@K\xf2\
+\x8c\xf2\x81`\x90\xe5\x08\x02,\xa2\\\x93\xa5\xf1i\xaaX\x9b\xe1FMV#\xe4U\x13|\
+\xd8\xfc\x8e\xa3\x15\x84\x18,\x85\xec\x13\xe2zG\xbc!EXO\x8cQ\xd2\'F\x83^\xa0\
+\xdf\xafF\x9a\x18\x8db\\\xab\xa495\x18D\x98\nf*\xddx\x8c\xef\xd1 \xca%\xf4r\
+\x1c\x04=\xfa\xd7\xdc\x04h\xea\xf2k\rI\xae\xab\xec\xaaI\xc91J1\xccc &\x0cDi\
+\x1d\xe8k]\xb8w\x12\xb8\xb4"\xf9\xe6E\xc5c\x7f\xd2n\x88q\x97pM)\xc7Q\xf8\xb9\
+\xff\xea\xa0\x9a\xb1\xbf\x03\x80\xed\n|\xa9\x10\xae\x85\'\xd6\xfb\xddlg\xdd*\
+Z\xc3*\xc0\xa1hce\x9a\x12heiJ\xcc<\xa9\x9b<\xf8VV\x9a\xdf\xd5\x94\xa2a\x98\
+\xb6l\xe6\x86\xaa{\x85\xc1\xf2/\xa0\xbcY\x82H\xab\xda\xb5\xd5\xa44\xa7WW\xb5\
+b\x04mN\x1b_c\xd0\xcbKr<{)\xe7\x1b\xaf\x8c\xf3\x1f\\\x8f\x03\x07\xaen\'\xff\
+\xf2\xf2\xaa\x82\xb7\x00\xcf\xd0\x7f\xdd\x18\xb7\x1d\x82#\xb3\x02\xdf\x95\
+\xdc\xd0V\x1c\x9c\x16\xcc\xb8\x19\xb7\xcc\xe9Vf\xb6C\xadz\xac^\xeba\xcb\xa1\
+\x0e\x83\xd5\\\xfa\xd5X\x02\xd0W\x89\xc0\x80U\x10\xe5\x92,\x11\x03j\xf1\xd2\
+\x8ad\xe1r\xc6+\xdd7\xf2\xf9?\x7f\xe9\xaa\xbe&\xfb\r\xfb\x82\x1c\xeb\xf0s\
+\xef[U\xad\xb6(;\xaf\x00\xf8\xb2H\xf1\xf1\xea\xc7X\x958\x8d\xfa\x14\x8e\x83J\
+\x92\xf2\x86107\x0e\xe8\\LW\xe5E\x1e\xa6(\x95\xa5\xc9\xbd\x1cN!2\xd1\xcf\xf5\
+\xa9\x1a\x83\xa4\x08}\x07\xbc\xb9Y\xb4\xa2(Tb\xd8\'\xc60\x15\xacFzv\xc2\xcb\
+\x81`1P\x9c\xeb\xaau&\xf5\xd5Nz;\x89\xe5\xe5\xdbU\x954\x0fv\xe0\xce\xdb\xf5\
+\x83\xe6\x86\xb6b\xdaW\xcc\xcf*:\xc5\x8c\x84\xe6\xfa\x1b\xdf\xe30A\xba*/\x03\
+xu\x0fC\xe3f1\xe8\xfb\xa85\xcc\xf5\x1d&D\xa0,\x035.\xa0\xe5P\xb2\x12\xd0\xa8\
+\xc5=\xc4\xbe%\xc7*~\xfc\x9d=\xe5\xf8\x8a\x03E\x8a\x90\xe3\x08\\\xd5\x1f\xb4\
+Fm\x86\xb9\xa0\xe5\xcb\x01\xc5i;\x94iF&\xc5\xa8\xd5q\x06\x14\xa5~\xed\xefO\
+\xd76S*\x0e`\x9d\xc240\n\xc2\xf8\x9a\xea"\x93a\x94si\xd1\xbc\xef+F\x13m\rSA\
+\x94\xcbR5\xbe\x1a\x08\xcew\xb3\x01\xd5x=\x91\xe2Fx\xe3Mk\xcaw%-[\xad\xf3;\
+\xd6\xa9G\xd0]\xa5\xa0o1\x98\x07\xa1;f\xf5\xd1\xb0{\xc4\x10"P*\xc5XY\xe4q\
+\xdf2x5\x92|\xe7RC\x8c{\x89k\xca\xe7\xb8U\xfc_\xffe\xd0\xfe\xb9\xef{\xd6\x94\
+\xe3X%\x89\xf9\xb6*T\x83"Hr\xda\x0e\x08O\xe2%\x19D \\\x1d\x002\x81\xdf^\x94\
+\x94\xca\xd2s\xd6\x07{2\x13%\x8f ,\xf21\xfdL\x9f\xc22YI\x98\xba\xa6\xdc\xa8\
+\xc4\xc1\xc8\xa4Q\x10\xdd\xd5\xfey\x8f"\xc6\xd5\xa2\xfe\xd7\x98\xd3a\x9csqi[\
+\xff\xb2}\x0b\xdf\x1d\x0c\xca\x85\xa9\xc0N\x15S\xe8\xff\xef\x94#J\xdfcX\xf8\
+\xa1\xe3 \xc7r,\x02,\xac\\\xa1\xa4\x9e\x12\xb2\xd7\xa3\xac\xdc\xcaS\xfd:\x0c\
+C\x88\x1a\x9a\x18\x8dJ\x84\xaaR\x04\xd0j\xb1\x17\xe6\xbc\xba\x94\xf1XS\xed\
+\xb2\xa7\xb8.\x94\xe3f\xf8k\xaf\x0f\x94o+\x1c\x1b\xa6\xbc>Y\xd6)\xccV\xe1p\
+\xafF\xcb\xab\xcaR8\x85\xaf\x92\x04\xe9\xf6\x15\xa6A]z\x91A\x95\x14\x8d\t\r\
+\x83\xa4\x08\x83\xc4\x08\x0c\x98\xd3\xbdT\xab\xc6\x17.\xf4\xd3W\x1a\xd58\x88\
+\xbbn\xed\xa9\x96\xad[\xbaM\xfb\x8aC\x9d\xbez\x84~\xe4\x1aX\xe7N\x81\x8d\xad\
+\x05\x83\xaa:\x84\xbeB\xacbiU\x7f\xc7$\xf2w{\x10$\xb0\xd0\x95\xeb\x1e\xe8\rv\
+\x1f\xd7\x85r\xdc\x0c\x7f\xf0\xcdA\xd3\xe5\xaf\xbfyM9\xb6\xee\x8b\x08z\xe0\
+\xfb\xb6\x82\x9e\xc2\x0e2:6\xf4\\\x81\x1f\x15\x81\x9f"\n\xae\x93\xd7\xb5\xaa\
+\x0c\x91\x10f\x85\xba\x84\x18\x07\x97\xa4,\x95\x94\xaeC\x1eW\x9ag\x14o\xab\
+\x15/\xbe\'F\xaaE\xa0P\x8c\x9a\x18\xcd\xba0\xcey\xe1\x02\xb8\xed)\xd1\xf4\
+\x9c\x18\x8d^\xaa+`|\xbb\xf8\xdf\xf5T\xe9^IbPz\xa9\x00\x00\x03\x9bIDAT\x13\
+\xe8\xa1\xcdk}]\xf2\x92 M\xa28P\xf6\x070\xaa\xb2\x0eUB\xac>\xf8\xca\xf3\x88`\
+-\x96\x85ZT\\Xk\x02/W\x0b\x1a\xe58\x06\xdes\xfb\x8c\x9a\xf2\xceQ\xa7.M\t\xda\
+\xa8(\xf9\xb0\xba4\xa8\xb6\x18\xabV\xb9T\xd3s\xc6Q\x8b\xa0\x15#@7\xb8\x99g/t\
+\x9b\x1bk\x13\xbc\xe9\xa6Y\xe5\xb9\xe70\xea\xd1\xb7\xb5\xef\xd1\\\xcfa\xffc\
+\x15\xc3i`\xa0I\xaf\xceJ(\xcd\xf2\xc2\x9f\x08\x9a\x18u\xa3\x10\x88{\xba\xc0\
+\xa1\x17\xe6\xbc\xfc*\x9c[\x12\xeb\x1e\xd4\r\xf6\x0e\r9N\x88\xf7\x1d\r\x94\
+\xb9\xa1\x1c\x1b\x0eu4\x99\xb5\xda}\x13\xbc\x1a\xe01\x11r\xd0\x01\x1a\xd0&\
+\xb9!A\xa3\x0e\r\x86\tq\xa6U\xe7_\x1c$\xc6^A\x98\xa7^jL\xb1qq\xd7\xad:\xac\
+\xbc\x19A\x02%IF\x99,\x83r\x06\xa6\xf8\xc0\xbc7\x88\x862\xba\xa2L\x96\x0f\
+\xc44\xa1$\xc5\xa5@\xb1\xda\x13\x9c\x0f\x04\xbf\xffLC\x8cW\x13\x1ar\xdc\x06\
+\x0cQ\x1e\x9c\xd6cz\xc6\xcdJ\xa5h\xfc\x95\xa6\x8c\xaf\xed\xe8\xfe\x81\x06S\
+\xfe \x11\xd6a\xa9\x92\xc0=\xac\x18\xcd\xdf\xaf\x06\x82(>\xd2(\xc6-\xa0\x8e \
+\xe7:\xfau\xa6\xd5\x7f\xc8\x19\x92t[\x9a\xe0F\x11\xe5F0\xe6\xb3\x8a3\xc2\\\
+\x10$\x94\x15M\x8db\xbc:\xd1\x90\xe3\x0e\xa0\xaa&\xdb-\xd9\xf7Q\x0e\xa1\x9aG\
+\xd9\xb1u\x8e\xa2y\xbf4\xa2\x92eX-V\xab_\x16\x03\x85\xe0\x96\x86\x18\xb7\x81\
+jjO\xd5"\x98\xf2`\xaa\xa5p\x1c\x9d+[%\xc9\xe1|X\x18t\x93H[\x93h\xd5]RU\x8a&/\
+5\xca%\x97WTC\x8cW)\x1ar\xdca\x18\xa2\x84\xfe\x8d\x06:\xb8S\x8dh\xd6\x91\'\
+\xf4\x15a\x15U\xff\xe209\x9e\xb9\xd0\xd4\xd9n\x17FA\x02\x9b\x92\xa4A\x95,\
+\xab0.\x12\xe3B\xe9\x859A\x02I\xa2\xcd\xe7(\x97$IN\x92\xc2\xa5\xb5\x9b\xf9\
+\xda\x0bK\xcd\xf5\xbbJ\xd1\x90\xe3\x15B5]\x04\x06\xc9p\xae\xa3\to\xca\x1b|\
+\x1dFR\xe9$cH\xb1\x97\n\xc28o\x14\xe3\x15@\xd5\xcc\x06\xd6\x91$\xf4\xaf\xe3p\
+0.H(\xdd(I\xa2\xd5\xa1\xed\xc0r&I\xc2"`\x16*V\xd7 WG\x1aR\xbc\x06\xd0\x90\
+\xe3.\xc0\x10%\xf4o8\xa0T\x95U\x12\x84A\xf5Xm9\xd6\x04^\xae<\x8c\x99\r\x83$\
+\t:\'\x12\x06S\xbc\x0c|[\x95\xa6\xb2AR\xa4x\xad\x84\x82\xd5\xe8\x08Q\xb6\xd0\
+\\\xbbk\x08\r9\xee2\xaaD\xb9\x19z\x15\x92ln\xaa\xddG\xd5\x1f\xd9K\xc5\xc0\
+\x9c\xd7\x96\x9b\xe3Q\xdf\x02\xafy\xa0\xed\x0f4\xe4\xb8\xc7\xb8\xeb\xd6\x9e\
+\n\xe3\x1c\xdf\x95\x84qQ\x8aX\xbco\xfc\x89W\x0f\xaa~\xc9q\xd0\x90\xe1\xb5\
+\x8f\x86\x1c\x1b4h\xd0\xa0\x06\xa3[c7h\xd0\xa0\xc1u\x8c\x86\x1c\x1b4h\xd0\
+\xa0\x06\r96h\xd0\xa0A\r\x1arl\xd0\xa0A\x83\x1a4\xe4\xd8\xa0A\x83\x065h\xc8\
+\xb1A\x83\x06\rj\xd0\x90c\x83\x06\r\x1a\xd4\xa0!\xc7\x06\r\x1a4\xa8AC\x8e\r\
+\x1a4hP\x83\x86\x1c\x1b4h\xd0\xa0\x06\r96h\xd0\xa0A\r\x1arl\xd0\xa0A\x83\x1a\
+4\xe4\xd8\xa0A\x83\x065h\xc8\xb1A\x83\x06\rj\xd0\x90c\x83\x06\r\x1a\xd4\xa0!\
+\xc7\x06\r\x1a4\xa8AC\x8e\r\x1a4hP\x83\x86\x1c\x1b4h\xd0\xa0\x06\r96h\xd0\
+\xa0A\r\x1arl\xd0\xa0A\x83\x1a4\xe4\xd8\xa0A\x83\x065h\xc8\xb1A\x83\x06\rj\
+\xd0\x90c\x83\x06\r\x1a\xd4\xa0!\xc7\x06\r\x1a4\xa8AC\x8e\r\x1a4hP\x83\xff\
+\x1f#)\x1ae\xc4\xe8lg\x00\x00\x00\x00IEND\xaeB`\x82' 
+
+def getTuxBitmap():
+    return wxBitmapFromImage(getTuxImage())
+
+def getTuxImage():
+    stream = cStringIO.StringIO(getTuxData())
+    return wxImageFromStream(stream)
+
diff --git a/wxPython/demo/infoframe.py b/wxPython/demo/infoframe.py
index 7f19771460..24ea6570e1 100644
--- a/wxPython/demo/infoframe.py
+++ b/wxPython/demo/infoframe.py
@@ -9,10 +9,10 @@ class MyFrame(wxFrame):
         wxFrame.__init__(self,None,-1,"Close me...",size=(300,100))
         menubar = wxMenuBar()
         menu = wxMenu()
-        mID = NewId()
+        mID = wxNewId()
         menu.Append(mID,"&Enable output","Display output frame")
         EVT_MENU(self,mID,output.EnableOutput)
-        mID = NewId()
+        mID = wxNewId()
         menu.Append(mID,"&Disable output","Close output frame")
         EVT_MENU(self,mID,output.DisableOutput)
         menubar.Append(menu,"&Output")
@@ -63,10 +63,10 @@ if __name__ == "__main__":
 ##             EVT_CLOSE(self,self.OnClose)
 ##             menubar = wxMenuBar()
 ##             menu = wxMenu()
-##             mID = NewId()
+##             mID = wxNewId()
 ##             menu.Append(mID,"&Enable output","Display output frame")
 ##             EVT_MENU(self,mID,output.EnableOutput)
-##             mID = NewId()
+##             mID = wxNewId()
 ##             menu.Append(mID,"&Disable output","Close output frame")
 ##             EVT_MENU(self,mID,output.DisableOutput)
 ##             menubar.Append(menu,"&Output")
diff --git a/wxPython/demo/run.py b/wxPython/demo/run.py
index fcf5bd9029..7b83f581fa 100755
--- a/wxPython/demo/run.py
+++ b/wxPython/demo/run.py
@@ -17,9 +17,9 @@ directory within its own frame window.  Just specify the module name
 on the command line.
 """
 
+import wx                  # This module uses the new wx namespace
 
 import sys, os
-from wxPython.wx import *
 
 #----------------------------------------------------------------------------
 
@@ -27,32 +27,34 @@ class Log:
     def WriteText(self, text):
         if text[-1:] == '\n':
             text = text[:-1]
-        wxLogMessage(text)
+        wx.LogMessage(text)
     write = WriteText
 
 
-class RunDemoApp(wxApp):
+class RunDemoApp(wx.App):
     def __init__(self, name, module):
         self.name = name
         self.demoModule = module
-        wxApp.__init__(self, 0) ##wxPlatform == "__WXMAC__")
+        wx.App.__init__(self, 0)
 
 
     def OnInit(self):
-        wxInitAllImageHandlers()
-        wxLog_SetActiveTarget(wxLogStderr())
+        wx.InitAllImageHandlers()
+        wx.Log_SetActiveTarget(wx.LogStderr())
 
-        frame = wxFrame(None, -1, "RunDemo: " + self.name, pos=(50,50), size=(0,0),
-                        style=wxNO_FULL_REPAINT_ON_RESIZE|wxDEFAULT_FRAME_STYLE)
+        #self.SetAssertMode(wx.PYAPP_ASSERT_DIALOG)
+
+        frame = wx.Frame(None, -1, "RunDemo: " + self.name, pos=(50,50), size=(0,0),
+                        style=wx.NO_FULL_REPAINT_ON_RESIZE|wx.DEFAULT_FRAME_STYLE)
         frame.CreateStatusBar()
-        menuBar = wxMenuBar()
-        menu = wxMenu()
+        menuBar = wx.MenuBar()
+        menu = wx.Menu()
         menu.Append(101, "E&xit\tAlt-X", "Exit demo")
-        EVT_MENU(self, 101, self.OnButton)
+        wx.EVT_MENU(self, 101, self.OnButton)
         menuBar.Append(menu, "&File")
         frame.SetMenuBar(menuBar)
         frame.Show(True)
-        EVT_CLOSE(frame, self.OnCloseFrame)
+        wx.EVT_CLOSE(frame, self.OnCloseFrame)
 
         win = self.demoModule.runTest(frame, frame, Log())
 
@@ -68,9 +70,9 @@ class RunDemoApp(wxApp):
             # otherwise the demo made its own frame, so just put a
             # button in this one
             if hasattr(frame, 'otherWin'):
-                b = wxButton(frame, -1, " Exit ")
+                b = wx.Button(frame, -1, " Exit ")
                 frame.SetSize((200, 100))
-                EVT_BUTTON(frame, b.GetId(), self.OnButton)
+                wx.EVT_BUTTON(frame, b.GetId(), self.OnButton)
             else:
                 # It was probably a dialog or something that is already
                 # gone, so we're done.
@@ -79,8 +81,8 @@ class RunDemoApp(wxApp):
 
         self.SetTopWindow(frame)
         self.frame = frame
-        #wxLog_SetActiveTarget(wxLogStderr())
-        #wxLog_SetTraceMask(wxTraceMessages)
+        #wx.Log_SetActiveTarget(wx.LogStderr())
+        #wx.Log_SetTraceMask(wx.TraceMessages)
         return True
 
 
diff --git a/wxPython/demo/simple.py b/wxPython/demo/simple.py
index 6b28148228..07a750c639 100644
--- a/wxPython/demo/simple.py
+++ b/wxPython/demo/simple.py
@@ -5,38 +5,38 @@
 # structure of any wxPython application.
 #----------------------------------------------------------------------
 
-from wxPython.wx import *
+import wx                  # This module uses the new wx namespace
 
-class MyFrame(wxFrame):
+class MyFrame(wx.Frame):
     """
     This is MyFrame.  It just shows a few controls on a wxPanel,
     and has a simple menu.
     """
     def __init__(self, parent, title):
-        wxFrame.__init__(self, parent, -1, title, size=(350, 200))
+        wx.Frame.__init__(self, parent, -1, title, size=(350, 200))
 
-        menuBar = wxMenuBar()
-        menu = wxMenu()
+        menuBar = wx.MenuBar()
+        menu = wx.Menu()
         menu.Append(101, "E&xit\tAlt-X", "Exit demo")
-        EVT_MENU(self, 101, self.OnButton)
+        wx.EVT_MENU(self, 101, self.OnButton)
         menuBar.Append(menu, "&File")
         self.SetMenuBar(menuBar)
 
-        panel = wxPanel(self, -1)
-        text = wxStaticText(panel, -1, "Hello World!")
-        text.SetFont(wxFont(12, wxSWISS, wxNORMAL, wxBOLD))
+        panel = wx.Panel(self, -1)
+        text = wx.StaticText(panel, -1, "Hello World!")
+        text.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.BOLD))
         text.SetSize(text.GetBestSize())
-        btn = wxButton(panel, -1, "Close")
+        btn = wx.Button(panel, -1, "Close")
         btn.SetDefault()
 
-        sizer = wxBoxSizer(wxVERTICAL)
-        sizer.Add(text, 0, wxALL, 10)
-        sizer.Add(btn, 0, wxALL, 10)
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(text, 0, wx.ALL, 10)
+        sizer.Add(btn, 0, wx.ALL, 10)
         panel.SetSizer(sizer)
         panel.SetAutoLayout(True)
         panel.Layout()
 
-        EVT_BUTTON(self, btn.GetId(), self.OnButton)
+        wx.EVT_BUTTON(self, btn.GetId(), self.OnButton)
 
 
     def OnButton(self, evt):
@@ -44,7 +44,8 @@ class MyFrame(wxFrame):
         print "OnButton"
         self.Close()
 
-app = wxPySimpleApp()
+
+app = wx.PySimpleApp()
 frame = MyFrame(None, "Simple wxPython App")
 frame.Show(True)
 app.MainLoop()
diff --git a/wxPython/demo/template.py b/wxPython/demo/template.py
index 9be55905b9..8be058bfee 100644
--- a/wxPython/demo/template.py
+++ b/wxPython/demo/template.py
@@ -1,12 +1,12 @@
 
-from wxPython.wx import *
+import wx                  # This module uses the new wx namespace
 
 #----------------------------------------------------------------------
 
-class TestPanel(wxPanel):
+class TestPanel(wx.Panel):
     def __init__(self, parent, log):
         self.log = log
-        wxPanel.__init__(self, parent, -1)
+        wx.Panel.__init__(self, parent, -1)
 
 #----------------------------------------------------------------------
 
diff --git a/wxPython/demo/wxCalendar.py b/wxPython/demo/wxCalendar.py
index 5c14011608..3b8499d7ce 100644
--- a/wxPython/demo/wxCalendar.py
+++ b/wxPython/demo/wxCalendar.py
@@ -61,7 +61,7 @@ class TestPanel(wxPanel):
 
         monthlist = GetMonthList()
 
-        mID = NewId()
+        mID = wxNewId()
         self.date = wxComboBox(self, mID, "",
                                wxPoint(100, 20), wxSize(90, -1),
                                monthlist, wxCB_DROPDOWN)
@@ -89,7 +89,7 @@ class TestPanel(wxPanel):
 
 # scroll bar for month selection
 
-        mID = NewId()
+        mID = wxNewId()
         self.scroll = wxScrollBar(self, mID, wxPoint(100, 240), wxSize(200, 20), wxSB_HORIZONTAL)
         self.scroll.SetScrollbar(start_month-1, 1, 12, 1, True)
         EVT_COMMAND_SCROLL(self, mID, self.Scroll)
@@ -99,7 +99,7 @@ class TestPanel(wxPanel):
         self.dtext = wxTextCtrl(self, -1, str(start_year), wxPoint(200, 20), wxSize(60, -1))
         h = self.dtext.GetSize().height
 
-        mID = NewId()
+        mID = wxNewId()
         self.spin = wxSpinButton(self, mID, wxPoint(270, 20), wxSize(h*2, h))
         self.spin.SetRange(1980, 2010)
         self.spin.SetValue(start_year)
@@ -109,7 +109,7 @@ class TestPanel(wxPanel):
 
         wxStaticText(self, -1, "Test Calendar Dialog", wxPoint(350, 50), wxSize(150, -1))
 
-        mID = NewId()
+        mID = wxNewId()
         bmp = images.getCalendarBitmap()
         self.but = wxBitmapButton(self, mID, bmp, wxPoint(380, 80))#, wxSize(30, 30))
         EVT_BUTTON(self, mID, self.TestDlg)
@@ -118,13 +118,13 @@ class TestPanel(wxPanel):
 
         wxStaticText(self, -1, "Test Calendar Window", wxPoint(350, 150), wxSize(150, -1))
 
-        mID = NewId()
+        mID = wxNewId()
         self.but = wxBitmapButton(self, mID, bmp, wxPoint(380, 180))#, wxSize(30, 30))
         EVT_BUTTON(self, mID, self.TestFrame)
 
         wxStaticText(self, -1, "Test Calendar Print", wxPoint(350, 250), wxSize(150, -1))
 
-        mID = NewId()
+        mID = wxNewId()
         self.but = wxBitmapButton(self, mID, bmp, wxPoint(380, 280))#, wxSize(30, 30))
         EVT_BUTTON(self, mID, self.OnPreview)
 
@@ -299,17 +299,17 @@ class CalendFrame(wxFrame):
     def MakeFileMenu(self):
         menu = wxMenu()
 
-        mID = NewId()
+        mID = wxNewId()
         menu.Append(mID, 'Decrement', 'Next')
         EVT_MENU(self, mID, self.OnDecMonth)
 
-        mID = NewId()
+        mID = wxNewId()
         menu.Append(mID, 'Increment', 'Dec')
         EVT_MENU(self, mID, self.OnIncMonth)
 
         menu.AppendSeparator()
 
-        mID = NewId()
+        mID = wxNewId()
         menu.Append(mID, 'E&xit', 'Exit')
         EVT_MENU(self, mID, self.OnCloseWindow)
 
@@ -318,23 +318,23 @@ class CalendFrame(wxFrame):
     def MakeToolMenu(self):
         tb = self.CreateToolBar(wxTB_HORIZONTAL|wxNO_BORDER)
 
-        mID = NewId()
+        mID = wxNewId()
         SetToolPath(self, tb, mID, images.getDbDecBitmap(), 'Dec Year')
         EVT_TOOL(self, mID, self.OnDecYear)
 
-        mID = NewId()
+        mID = wxNewId()
         SetToolPath(self, tb, mID, images.getDecBitmap(), 'Dec Month')
         EVT_TOOL(self, mID, self.OnDecMonth)
 
-        mID = NewId()
+        mID = wxNewId()
         SetToolPath(self, tb, mID, images.getPtBitmap(), 'Current Month')
         EVT_TOOL(self, mID, self.OnCurrent)
 
-        mID = NewId()
+        mID = wxNewId()
         SetToolPath(self, tb, mID, images.getIncBitmap(), 'Inc Month')
         EVT_TOOL(self, mID, self.OnIncMonth)
 
-        mID = NewId()
+        mID = wxNewId()
         SetToolPath(self, tb, mID, images.getDbIncBitmap(), 'Inc Year')
         EVT_TOOL(self, mID, self.OnIncYear)
 
diff --git a/wxPython/demo/wxCalendarCtrl.py b/wxPython/demo/wxCalendarCtrl.py
index 7afc4c37d7..787ab71ae0 100644
--- a/wxPython/demo/wxCalendarCtrl.py
+++ b/wxPython/demo/wxCalendarCtrl.py
@@ -11,7 +11,10 @@ class TestPanel(wxPanel):
         self.log = log
 
         cal = wxCalendarCtrl(self, -1, wxDateTime_Now(), pos = (25,50),
-                             style = wxCAL_SHOW_HOLIDAYS | wxCAL_SUNDAY_FIRST)
+                             style = wxCAL_SHOW_HOLIDAYS
+                             | wxCAL_SUNDAY_FIRST
+                             #| wxCAL_SEQUENTIAL_MONTH_SELECTION
+                             )
 
         EVT_CALENDAR(self, cal.GetId(), self.OnCalSelected)
 
@@ -55,3 +58,12 @@ version described in the docs.  This one will probably be a bit more efficient
 than the one in wxPython.lib.calendar, but I like a few things about it better,
 so I think both will stay in wxPython.
 """
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxCheckBox.py b/wxPython/demo/wxCheckBox.py
index e2e81e3f28..529de660bb 100644
--- a/wxPython/demo/wxCheckBox.py
+++ b/wxPython/demo/wxCheckBox.py
@@ -11,7 +11,7 @@ class TestCheckBox(wxPanel):
         wxStaticText(self, -1, "This example uses the wxCheckBox control.",
                                wxPoint(10, 10))
 
-        cID = NewId()
+        cID = wxNewId()
         cb1 = wxCheckBox(self, cID,   "  Apples", wxPoint(65, 40), wxSize(150, 20), wxNO_BORDER)
         cb2 = wxCheckBox(self, cID+1, "  Oranges", wxPoint(65, 60), wxSize(150, 20), wxNO_BORDER)
         cb2.SetValue(True)
@@ -51,3 +51,11 @@ overview = """\
 A checkbox is a labelled box which is either on (checkmark is visible) or off (no checkmark).
 
 """
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxCheckListBox.py b/wxPython/demo/wxCheckListBox.py
index 434ecf2e06..8eec482923 100644
--- a/wxPython/demo/wxCheckListBox.py
+++ b/wxPython/demo/wxCheckListBox.py
@@ -70,13 +70,15 @@ def runTest(frame, nb, log):
 
 
 
+overview = """\
+"""
 
 
 
 
 
-
-overview = """\
-"""
-
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
 
diff --git a/wxPython/demo/wxChoice.py b/wxPython/demo/wxChoice.py
index 9cd83ce3b2..d92f4f8e45 100644
--- a/wxPython/demo/wxChoice.py
+++ b/wxPython/demo/wxChoice.py
@@ -46,3 +46,13 @@ def runTest(frame, nb, log):
 overview = """\
 A choice item is used to select one of a list of strings. Unlike a listbox, only the selection is visible until the user pulls down the menu of choices.
 """
+
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxColourDialog.py b/wxPython/demo/wxColourDialog.py
index c4d42aebbf..151db30873 100644
--- a/wxPython/demo/wxColourDialog.py
+++ b/wxPython/demo/wxColourDialog.py
@@ -29,3 +29,13 @@ This class represents the colour chooser dialog.
 
 
 """
+
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxComboBox.py b/wxPython/demo/wxComboBox.py
index 37e52cbb37..13e8fced0d 100644
--- a/wxPython/demo/wxComboBox.py
+++ b/wxPython/demo/wxComboBox.py
@@ -15,6 +15,7 @@ class TestComboBox(wxPanel):
         wxPanel.__init__(self, parent, -1)
 
         sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
+                      ##'this is a long item that needs a scrollbar...',
                       'six', 'seven', 'eight']
 
         wxStaticText(self, -1, "This example uses the wxComboBox control.",
@@ -23,6 +24,11 @@ class TestComboBox(wxPanel):
         wxStaticText(self, -1, "Select one:", wxPoint(15, 50), wxSize(75, 18))
         cb = wxComboBox(self, 500, "default value", wxPoint(90, 50), wxSize(95, -1),
                         sampleList, wxCB_DROPDOWN)#|wxTE_PROCESS_ENTER)
+        ##import win32api, win32con
+        ##win32api.SendMessage(cb.GetHandle(),
+        ##                     win32con.CB_SETHORIZONTALEXTENT,
+	##                     200, 0)
+
         EVT_COMBOBOX(self, 500, self.EvtComboBox)
         EVT_TEXT(self, 500, self.EvtText)
         EVT_TEXT_ENTER(self, 500, self.EvtTextEnter)
diff --git a/wxPython/demo/wxEditableListBox.py b/wxPython/demo/wxEditableListBox.py
index b8816cad1d..97b951a6e0 100644
--- a/wxPython/demo/wxEditableListBox.py
+++ b/wxPython/demo/wxEditableListBox.py
@@ -40,3 +40,12 @@ overview = """\
 This class provides a composite control that lets the
 user easily enter and edit a list of strings.
 """
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxFileDialog.py b/wxPython/demo/wxFileDialog.py
index a73dc06970..a87dc17194 100644
--- a/wxPython/demo/wxFileDialog.py
+++ b/wxPython/demo/wxFileDialog.py
@@ -1,5 +1,6 @@
 
 from wxPython.wx import *
+import os
 
 #---------------------------------------------------------------------------
 
@@ -8,12 +9,18 @@ wildcard = "Python source (*.py)|*.py|" \
            "All files (*.*)|*.*"
 
 def runTest(frame, nb, log):
-    dlg = wxFileDialog(frame, "Choose a file", "", "", wildcard, wxOPEN|wxMULTIPLE)
+    log.WriteText("CWD: %s\n" % os.getcwd())
+    dlg = wxFileDialog(frame, "Choose a file", os.getcwd(), "", wildcard,
+                       wxOPEN
+                       | wxMULTIPLE
+                       #| wxCHANGE_DIR
+                       )
     if dlg.ShowModal() == wxID_OK:
         paths = dlg.GetPaths()
         log.WriteText('You selected %d files:' % len(paths))
         for path in paths:
             log.WriteText('           %s\n' % path)
+    log.WriteText("CWD: %s\n" % os.getcwd())
     dlg.Destroy()
 
 #---------------------------------------------------------------------------
@@ -24,14 +31,14 @@ def runTest(frame, nb, log):
 
 
 
+overview = """\
+This class provides the file chooser dialog.
 
+"""
 
 
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
 
-
-
-
-overview = """\
-This class represents the file chooser dialog.
-
-"""
diff --git a/wxPython/demo/wxFileDialog_Save.py b/wxPython/demo/wxFileDialog_Save.py
new file mode 100644
index 0000000000..3e404a0ea6
--- /dev/null
+++ b/wxPython/demo/wxFileDialog_Save.py
@@ -0,0 +1,44 @@
+
+from wxPython.wx import *
+import os
+
+#---------------------------------------------------------------------------
+
+wildcard = "Python source (*.py)|*.py|"     \
+           "Compiled Python (*.pyc)|*.pyc|" \
+           "SPAM files (*.spam)|*.spam|"    \
+           "Egg file (*.egg)|*.egg|"        \
+           "All files (*.*)|*.*"
+
+def runTest(frame, nb, log):
+    log.WriteText("CWD: %s\n" % os.getcwd())
+    dlg = wxFileDialog(frame, "Save file as...", os.getcwd(), "", wildcard,
+                       wxSAVE
+                       #| wxCHANGE_DIR
+                       )
+    dlg.SetFilterIndex(2)
+    if dlg.ShowModal() == wxID_OK:
+        path = dlg.GetPath()
+        log.WriteText('You selected "%s"' % path)
+    log.WriteText("CWD: %s\n" % os.getcwd())
+    dlg.Destroy()
+
+#---------------------------------------------------------------------------
+
+
+
+
+
+
+
+overview = """\
+This class provides the file chooser dialog.
+
+"""
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxFindReplaceDialog.py b/wxPython/demo/wxFindReplaceDialog.py
index c0217aedec..306c825205 100644
--- a/wxPython/demo/wxFindReplaceDialog.py
+++ b/wxPython/demo/wxFindReplaceDialog.py
@@ -76,3 +76,12 @@ def runTest(frame, nb, log):
 overview = """\
 A generic find and replace dialog.
 """
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxFloatBar.py b/wxPython/demo/wxFloatBar.py
index ff323abe7e..1daf702276 100644
--- a/wxPython/demo/wxFloatBar.py
+++ b/wxPython/demo/wxFloatBar.py
@@ -75,9 +75,11 @@ def runTest(frame, nb, log):
 #---------------------------------------------------------------------------
 
 overview = """\
-wxFloatBar is a subclass of wxToolBar, implemented in Python, which can be detached from its frame.
+wxFloatBar is a subclass of wxToolBar, implemented in Python, which
+can be detached from its frame.
 
-Drag the toolbar with the mouse to make it float, and drag it back, or close it to make the toolbar return to its original position.
+Drag the toolbar with the mouse to make it float, and drag it back, or
+close it to make the toolbar return to its original position.
 
 """
 
@@ -87,6 +89,13 @@ Drag the toolbar with the mouse to make it float, and drag it back, or close it
 
 
 
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
+
+
 
 
 
diff --git a/wxPython/demo/wxFrame.py b/wxPython/demo/wxFrame.py
index 428859beec..6fbc2d013f 100644
--- a/wxPython/demo/wxFrame.py
+++ b/wxPython/demo/wxFrame.py
@@ -43,3 +43,12 @@ def runTest(frame, nb, log):
 
 overview = """\
 """
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxGauge.py b/wxPython/demo/wxGauge.py
index 21e185a439..754e1b4b21 100644
--- a/wxPython/demo/wxGauge.py
+++ b/wxPython/demo/wxGauge.py
@@ -52,3 +52,12 @@ def runTest(frame, nb, log):
 
 overview = """\
 """
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxGenericDirCtrl.py b/wxPython/demo/wxGenericDirCtrl.py
index 7f338e67df..3af690277a 100644
--- a/wxPython/demo/wxGenericDirCtrl.py
+++ b/wxPython/demo/wxGenericDirCtrl.py
@@ -57,3 +57,10 @@ overview = """\
 This control can be used to place a directory listing (with optional files)
 on an arbitrary window.
 """
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxGrid.py b/wxPython/demo/wxGrid.py
index 365e0125e6..676be13eb5 100644
--- a/wxPython/demo/wxGrid.py
+++ b/wxPython/demo/wxGrid.py
@@ -11,6 +11,7 @@ buttonDefs = {
     819 : ('GridEnterHandler',' Remapping keys to behave differently '),
     820 : ('GridCustEditor',  ' Shows how to create a custom Cell Editor '),
     821 : ('GridDragable',    ' A wxGrid with dragable rows and columns '),
+    822 : ('GridDragAndDrop', 'Shows how to make a grid a drop target for files'),
     }
 
 
@@ -26,7 +27,7 @@ class ButtonPanel(wxPanel):
         for k in keys:
             text = buttonDefs[k][1]
             btn = wxButton(self, k, text)
-            box.Add(btn, 0, wxALIGN_CENTER|wxALL, 15)
+            box.Add(btn, 0, wxALIGN_CENTER|wxALL, 10)
             EVT_BUTTON(self, k, self.OnButton)
 
         self.SetAutoLayout(True)
@@ -94,9 +95,6 @@ changes how the ENTER key works, moving the current cell left to right
 and wrapping around to the next row when needed.
 </ol>
 <p>
-You can also look at the <a href="data/grid.i">SWIG interface
-file</a> used to generate the grid module for a lot more clues as to
-how things work.
 
 """
 
diff --git a/wxPython/demo/wxGrid_MegaExample.py b/wxPython/demo/wxGrid_MegaExample.py
new file mode 100644
index 0000000000..17007e58ec
--- /dev/null
+++ b/wxPython/demo/wxGrid_MegaExample.py
@@ -0,0 +1,451 @@
+from wxPython.wx import *
+from wxPython.grid import *
+import images
+
+class MegaTable(wxPyGridTableBase):
+    """
+    A custom wxGrid Table using user supplied data
+    """
+    def __init__(self, data, colnames, plugins):
+        """data is a list of the form
+        [(rowname, dictionary),
+        dictionary.get(colname, None) returns the data for column
+        colname
+        """
+        # The base class must be initialized *first*
+        wxPyGridTableBase.__init__(self)
+        self.data = data
+        self.colnames = colnames
+        self.plugins = plugins or {}
+        # XXX
+        # we need to store the row length and collength to
+        # see if the table has changed size
+        self._rows = self.GetNumberRows()
+        self._cols = self.GetNumberCols()
+
+    def GetNumberCols(self):
+        return len(self.colnames)
+
+    def GetNumberRows(self):
+        return len(self.data)
+
+    def GetColLabelValue(self, col):
+        return self.colnames[col]
+
+    def GetRowLabelValues(self, row):
+        return self.data[row][0]
+
+    def GetValue(self, row, col):
+        return str(self.data[row][1].get(self.GetColLabelValue(col), ""))
+
+    def GetRawValue(self, row, col):
+        return self.data[row][1].get(self.GetColLabelValue(col), "")
+
+    def SetValue(self, row, col, value):
+        self.data[row][1][self.GetColLabelValue(col)] = value
+
+    def ResetView(self, grid):
+        """
+        (wxGrid) -> Reset the grid view.   Call this to
+        update the grid if rows and columns have been added or deleted
+        """
+        grid.BeginBatch()
+        for current, new, delmsg, addmsg in [
+            (self._rows, self.GetNumberRows(), wxGRIDTABLE_NOTIFY_ROWS_DELETED, wxGRIDTABLE_NOTIFY_ROWS_APPENDED),
+            (self._cols, self.GetNumberCols(), wxGRIDTABLE_NOTIFY_COLS_DELETED, wxGRIDTABLE_NOTIFY_COLS_APPENDED),
+        ]:
+            if new < current:
+                msg = wxGridTableMessage(self,delmsg,new,current-new)
+                grid.ProcessTableMessage(msg)
+            elif new > current:
+                msg = wxGridTableMessage(self,addmsg,new-current)
+                grid.ProcessTableMessage(msg)
+                self.UpdateValues(grid)
+        grid.EndBatch()
+
+        self._rows = self.GetNumberRows()
+        self._cols = self.GetNumberCols()
+        # update the column rendering plugins
+        self._updateColAttrs(grid)
+
+        # update the scrollbars and the displayed part of the grid
+        grid.AdjustScrollbars()
+        grid.ForceRefresh()
+
+
+    def UpdateValues(self, grid):
+        """Update all displayed values"""
+        # This sends an event to the grid table to update all of the values
+        msg = wxGridTableMessage(self, wxGRIDTABLE_REQUEST_VIEW_GET_VALUES)
+        grid.ProcessTableMessage(msg)
+
+    def _updateColAttrs(self, grid):
+        """
+        wxGrid -> update the column attributes to add the
+        appropriate renderer given the column name.  (renderers
+        are stored in the self.plugins dictionary)
+
+        Otherwise default to the default renderer.
+        """
+        col = 0
+        for colname in self.colnames:
+            attr = wxGridCellAttr()
+            if colname in self.plugins:
+                renderer = self.plugins[colname](self)
+                if renderer.colSize:
+                    grid.SetColSize(col, renderer.colSize)
+                if renderer.rowSize:
+                    grid.SetDefaultRowSize(renderer.rowSize)
+                attr.SetReadOnly(true)
+                attr.SetRenderer(renderer)
+            grid.SetColAttr(col, attr)
+            col += 1
+
+    # ------------------------------------------------------
+    # begin the added code to manipulate the table (non wx related)
+    def AppendRow(self, row):
+        entry = {}
+        for name in self.colnames:
+            entry[name] = "Appended_%i"%row
+        # XXX Hack
+        # entry["A"] can only be between 1..4
+        entry["A"] = random.choice(range(4))
+        self.data.insert(row, ["Append_%i"%row, entry])
+
+    def DeleteCols(self, cols):
+        """
+        cols -> delete the columns from the dataset
+        cols hold the column indices
+        """
+        # we'll cheat here and just remove the name from the
+        # list of column names.  The data will remain but
+        # it won't be shown
+        deleteCount = 0
+        cols = cols[:]
+        cols.sort()
+        for i in cols:
+            self.colnames.pop(i-deleteCount)
+            # we need to advance the delete count
+            # to make sure we delete the right columns
+            deleteCount += 1
+        if not len(self.colnames):
+            self.data = []
+
+    def DeleteRows(self, rows):
+        """
+        rows -> delete the rows from the dataset
+        rows hold the row indices
+        """
+        deleteCount = 0
+        rows = rows[:]
+        rows.sort()
+        for i in rows:
+            self.data.pop(i-deleteCount)
+            # we need to advance the delete count
+            # to make sure we delete the right rows
+            deleteCount += 1
+
+    def SortColumn(self, col):
+        """
+        col -> sort the data based on the column indexed by col
+        """
+        name = self.colnames[col]
+        _data = []
+        for row in self.data:
+            rowname, entry = row
+            _data.append((entry.get(name, None), row))
+
+        _data.sort()
+        self.data = []
+        for sortvalue, row in _data:
+            self.data.append(row)
+
+    # end table manipulation code
+    # ----------------------------------------------------------
+
+
+# --------------------------------------------------------------------
+# Sample wxGrid renderers
+
+class MegaImageRenderer(wxPyGridCellRenderer):
+    def __init__(self, table):
+        """
+        Image Renderer Test.  This just places an image in a cell
+        based on the row index.  There are N choices and the
+        choice is made by  choice[row%N]
+        """
+        wxPyGridCellRenderer.__init__(self)
+        self.table = table
+        self._choices = [images.getSmilesBitmap,
+                         images.getMondrianBitmap,
+                         images.get_10s_Bitmap,
+                         images.get_01c_Bitmap]
+
+
+        self.colSize = None
+        self.rowSize = None
+
+    def Draw(self, grid, attr, dc, rect, row, col, isSelected):
+        choice = self.table.GetRawValue(row, col)
+        bmp = self._choices[ choice % len(self._choices)]()
+        image = wxMemoryDC()
+        image.SelectObject(bmp)
+
+        # clear the background
+        dc.SetBackgroundMode(wxSOLID)
+        if isSelected:
+            dc.SetBrush(wxBrush(wxBLUE, wxSOLID))
+            dc.SetPen(wxPen(wxBLUE, 1, wxSOLID))
+        else:
+            dc.SetBrush(wxBrush(wxWHITE, wxSOLID))
+            dc.SetPen(wxPen(wxWHITE, 1, wxSOLID))
+        dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height)
+
+        # copy the image but only to the size of the grid cell
+        width, height = bmp.GetWidth(), bmp.GetHeight()
+        if width > rect.width-2:
+            width = rect.width-2
+
+        if height > rect.height-2:
+            height = rect.height-2
+
+        dc.Blit(rect.x+1, rect.y+1, width, height,
+                image,
+                0, 0, wxCOPY, True)
+
+
+class MegaFontRenderer(wxPyGridCellRenderer):
+    def __init__(self, table, color="blue", font="ARIAL", fontsize=8):
+        """Render data in the specified color and font and fontsize"""
+        wxPyGridCellRenderer.__init__(self)
+        self.table = table
+        self.color = color
+        self.font = wxFont(fontsize, wxDEFAULT, wxNORMAL, wxNORMAL,
+                           0, font)
+        self.selectedBrush = wxBrush("blue",
+                                     wxSOLID)
+        self.normalBrush = wxBrush(wxWHITE, wxSOLID)
+        self.colSize = None
+        self.rowSize = 50
+
+    def Draw(self, grid, attr, dc, rect, row, col, isSelected):
+        # Here we draw text in a grid cell using various fonts
+        # and colors.  We have to set the clipping region on
+        # the grid's DC, otherwise the text will spill over
+        # to the next cell
+        dc.SetClippingRect(rect)
+
+        # clear the background
+        dc.SetBackgroundMode(wxSOLID)
+        if isSelected:
+            dc.SetBrush(wxBrush(wxBLUE, wxSOLID))
+            dc.SetPen(wxPen(wxBLUE, 1, wxSOLID))
+        else:
+            dc.SetBrush(wxBrush(wxWHITE, wxSOLID))
+            dc.SetPen(wxPen(wxWHITE, 1, wxSOLID))
+        dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height)
+
+        text = self.table.GetValue(row, col)
+        dc.SetBackgroundMode(wxSOLID)
+
+        # change the text background based on whether the grid is selected
+        # or not
+        if isSelected:
+            dc.SetBrush(self.selectedBrush)
+            dc.SetTextBackground("blue")
+        else:
+            dc.SetBrush(self.normalBrush)
+            dc.SetTextBackground("white")
+
+        dc.SetTextForeground(self.color)
+        dc.SetFont(self.font)
+        dc.DrawText(text, rect.x+1, rect.y+1)
+
+        # Okay, now for the advanced class :)
+        # Let's add three dots "..."
+        # to indicate that that there is more text to be read
+        # when the text is larger than the grid cell
+
+        width, height = dc.GetTextExtent(text)
+        if width > rect.width-2:
+            width, height = dc.GetTextExtent("...")
+            x = rect.x+1 + rect.width-2 - width
+            dc.DrawRectangle(x, rect.y+1, width+1, height)
+            dc.DrawText("...", x, rect.y+1)
+
+        dc.DestroyClippingRegion()
+
+
+# --------------------------------------------------------------------
+# Sample Grid using a specialized table and renderers that can
+# be plugged in based on column names
+
+class MegaGrid(wxGrid):
+    def __init__(self, parent, data, colnames, plugins=None):
+        """parent, data, colnames, plugins=None
+        Initialize a grid using the data defined in data and colnames
+        (see MegaTable for a description of the data format)
+        plugins is a dictionary of columnName -> column renderers.
+        """
+
+        # The base class must be initialized *first*
+        wxGrid.__init__(self, parent, -1)
+        self._table = MegaTable(data, colnames, plugins)
+        self.SetTable(self._table)
+        self._plugins = plugins
+
+        EVT_GRID_LABEL_RIGHT_CLICK(self, self.OnLabelRightClicked)
+
+    def Reset(self):
+        """reset the view based on the data in the table.  Call
+        this when rows are added or destroyed"""
+        self._table.ResetView(self)
+
+    def OnLabelRightClicked(self, evt):
+        # Did we click on a row or a column?
+        row, col = evt.GetRow(), evt.GetCol()
+        if row == -1: self.colPopup(col, evt)
+        elif col == -1: self.rowPopup(row, evt)
+
+    def rowPopup(self, row, evt):
+        """(row, evt) -> display a popup menu when a row label is right clicked"""
+        appendID = wxNewId()
+        deleteID = wxNewId()
+        x = self.GetRowSize(row)/2
+        if not self.GetSelectedRows():
+            self.SelectRow(row)
+        menu = wxMenu()
+        xo, yo = evt.GetPosition()
+        menu.Append(appendID, "Append Row")
+        menu.Append(deleteID, "Delete Row(s)")
+
+        def append(event, self=self, row=row):
+            self._table.AppendRow(row)
+            self.Reset()
+
+        def delete(event, self=self, row=row):
+            rows = self.GetSelectedRows()
+            self._table.DeleteRows(rows)
+            self.Reset()
+
+        EVT_MENU(self, appendID, append)
+        EVT_MENU(self, deleteID, delete)
+        self.PopupMenu(menu, wxPoint(x, yo))
+        menu.Destroy()
+
+    def colPopup(self, col, evt):
+        """(col, evt) -> display a popup menu when a column label is
+        right clicked"""
+        x = self.GetColSize(col)/2
+        menu = wxMenu()
+        id1 = wxNewId()
+        sortID = wxNewId()
+
+        xo, yo = evt.GetPosition()
+        self.SelectCol(col)
+        cols = self.GetSelectedCols()
+        self.Refresh()
+        menu.Append(id1, "Delete Col(s)")
+        menu.Append(sortID, "Sort Column")
+
+        def delete(event, self=self, col=col):
+            cols = self.GetSelectedCols()
+            self._table.DeleteCols(cols)
+            self.Reset()
+
+        def sort(event, self=self, col=col):
+            self._table.SortColumn(col)
+            self.Reset()
+
+        EVT_MENU(self, id1, delete)
+        if len(cols) == 1:
+            EVT_MENU(self, sortID, sort)
+        self.PopupMenu(menu, wxPoint(xo, 0))
+        menu.Destroy()
+
+# -----------------------------------------------------------------
+# Test data
+# data is in the form
+# [rowname, dictionary]
+# where dictionary.get(colname, None) -> returns the value for the cell
+#
+# the colname must also be supplied
+import random
+colnames = ["Row", "This", "Is", "A", "Test"]
+
+data = []
+for row in range(1000):
+    d = {}
+    for name in ["This", "Test", "Is"]:
+        d[name] = random.random()
+    d["Row"] = len(data)
+    # XXX
+    # the "A" column can only be between one and 4
+    d["A"] = random.choice(range(4))
+    data.append((str(row), d))
+
+class MegaFontRendererFactory:
+    def __init__(self, color, font, fontsize):
+        """
+        (color, font, fontsize) -> set of a factory to generate
+        renderers when called.
+        func = MegaFontRenderFactory(color, font, fontsize)
+        renderer = func(table)
+        """
+        self.color = color
+        self.font = font
+        self.fontsize = fontsize
+
+    def __call__(self, table):
+        return MegaFontRenderer(table, self.color, self.font, self.fontsize)
+
+
+#---------------------------------------------------------------------------
+
+class TestFrame(wxFrame):
+    def __init__(self, parent, plugins={"This":MegaFontRendererFactory("red", "ARIAL", 8),
+                                        "A":MegaImageRenderer,
+                                        "Test":MegaFontRendererFactory("orange", "TIMES", 24),}):
+        wxFrame.__init__(self, parent, -1,
+                         "Test Frame", size=(640,480))
+
+        grid = MegaGrid(self, data, colnames, plugins)
+        grid.Reset()
+
+
+#---------------------------------------------------------------------------
+
+def runTest(frame, nb, log):
+    win = TestFrame(frame)
+    frame.otherWin = win
+    win.Show(True)
+
+
+
+overview = """Mega Grid Example
+
+This example attempts to show many examples and tricks of
+using a virtual grid object.  Hopefully the source isn't too jumbled.
+
+Features:
+   1) Uses a virtual grid
+   2) Columns and rows have popup menus (right click on labels)
+   3) Columns and rows can be deleted (i.e. table can be
+      resized)
+   4) Dynamic renderers.  Renderers are plugins based on
+      column header name.  Shows a simple Font Renderer and
+      an Image Renderer.
+
+Look for XXX in the code to indicate some workarounds for non-obvious
+behavior and various hacks.
+
+"""
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxImageFromStream.py b/wxPython/demo/wxImageFromStream.py
index 6953a2ca4c..1bf4fc7645 100644
--- a/wxPython/demo/wxImageFromStream.py
+++ b/wxPython/demo/wxImageFromStream.py
@@ -35,3 +35,12 @@ overview = """\
 At long last there is finally a way to load any supported image type
 directly from any Python file-like object, such as a memory buffer
 using StringIO.  """
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxJoystick.py b/wxPython/demo/wxJoystick.py
index 1c4882f40e..69555ee225 100644
--- a/wxPython/demo/wxJoystick.py
+++ b/wxPython/demo/wxJoystick.py
@@ -195,3 +195,12 @@ def runTest(frame, nb, log):
 
 overview = """\
 """
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxLEDNumberCtrl.py b/wxPython/demo/wxLEDNumberCtrl.py
index d8907a35c1..4aead17541 100644
--- a/wxPython/demo/wxLEDNumberCtrl.py
+++ b/wxPython/demo/wxLEDNumberCtrl.py
@@ -46,3 +46,11 @@ def runTest(frame, nb, log):
 
 overview = """\
 """
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxLayoutConstraints.py b/wxPython/demo/wxLayoutConstraints.py
index 4ffa033924..1c65b303df 100644
--- a/wxPython/demo/wxLayoutConstraints.py
+++ b/wxPython/demo/wxLayoutConstraints.py
@@ -114,10 +114,13 @@ def runTest(frame, nb, log):
 
 
 
-overview = """\
-Objects of this class can be associated with a window to define its layout constraints, with respect to siblings or its parent.
+overview = """\<html><body>
+Objects of this class can be associated with a window to define its
+layout constraints, with respect to siblings or its parent.
 
-The class consists of the following eight constraints of class wxIndividualLayoutConstraint, some or all of which should be accessed directly to set the appropriate constraints.
+The class consists of the following eight constraints of class
+wxIndividualLayoutConstraint, some or all of which should be accessed
+directly to set the appropriate constraints.
 
 left: represents the left hand edge of the window
 
@@ -135,10 +138,21 @@ centreX: represents the horizontal centre point of the window
 
 centreY: represents the vertical centre point of the window
 
-Most constraints are initially set to have the relationship wxUnconstrained, which means that their values should be calculated by looking at known constraints. The exceptions are width and height, which are set to wxAsIs to ensure that if the user does not specify a constraint, the existing width and height will be used, to be compatible with panel items which often have take a default size. If the constraint is wxAsIs, the dimension will not be changed.
+Most constraints are initially set to have the relationship
+wxUnconstrained, which means that their values should be calculated by
+looking at known constraints. The exceptions are width and height,
+which are set to wxAsIs to ensure that if the user does not specify a
+constraint, the existing width and height will be used, to be
+compatible with panel items which often have take a default size. If
+the constraint is wxAsIs, the dimension will not be changed.
 
-wxLayoutConstraints()
--------------------------------------------
-
-Constructor.
 """
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxListCtrl.py b/wxPython/demo/wxListCtrl.py
index d640ecddb6..501b148a3c 100644
--- a/wxPython/demo/wxListCtrl.py
+++ b/wxPython/demo/wxListCtrl.py
@@ -98,6 +98,7 @@ class TestListCtrlPanel(wxPanel, wxColumnSorterMixin):
 
         self.list = TestListCtrl(self, tID,
                                  style=wxLC_REPORT | wxSUNKEN_BORDER
+                                 | wxLC_EDIT_LABELS
                                  #| wxLC_NO_HEADER
                                  #| wxLC_VRULES | wxLC_HRULES
                                  )
@@ -121,6 +122,7 @@ class TestListCtrlPanel(wxPanel, wxColumnSorterMixin):
         EVT_LIST_COL_BEGIN_DRAG(self, tID, self.OnColBeginDrag)
         EVT_LIST_COL_DRAGGING(self, tID, self.OnColDragging)
         EVT_LIST_COL_END_DRAG(self, tID, self.OnColEndDrag)
+        EVT_LIST_BEGIN_LABEL_EDIT(self, tID, self.OnBeginEdit)
 
         EVT_LEFT_DCLICK(self.list, self.OnDoubleClick)
         EVT_RIGHT_DOWN(self.list, self.OnRightDown)
@@ -218,6 +220,8 @@ class TestListCtrlPanel(wxPanel, wxColumnSorterMixin):
             #event.Veto()  # doesn't work
             # this does
             self.list.SetItemState(10, 0, wxLIST_STATE_SELECTED)
+        event.Skip()
+
 
     def OnItemDeselected(self, evt):
         item = evt.GetItem()
@@ -233,6 +237,10 @@ class TestListCtrlPanel(wxPanel, wxColumnSorterMixin):
         self.log.WriteText("OnItemActivated: %s\nTopItem: %s" %
                            (self.list.GetItemText(self.currentItem), self.list.GetTopItem()))
 
+    def OnBeginEdit(self, event):
+        self.log.WriteText("OnBeginEdit")
+        event.Allow()
+
     def OnItemDelete(self, event):
         self.log.WriteText("OnItemDelete\n")
 
@@ -265,30 +273,30 @@ class TestListCtrlPanel(wxPanel, wxColumnSorterMixin):
     def OnRightClick(self, event):
         self.log.WriteText("OnRightClick %s\n" % self.list.GetItemText(self.currentItem))
 
-        # only do this part the first time
+        # only do this part the first time so the events are only bound once
         if not hasattr(self, "popupID1"):
             self.popupID1 = wxNewId()
             self.popupID2 = wxNewId()
             self.popupID3 = wxNewId()
             self.popupID4 = wxNewId()
             self.popupID5 = wxNewId()
+            self.popupID6 = wxNewId()
             EVT_MENU(self, self.popupID1, self.OnPopupOne)
             EVT_MENU(self, self.popupID2, self.OnPopupTwo)
             EVT_MENU(self, self.popupID3, self.OnPopupThree)
             EVT_MENU(self, self.popupID4, self.OnPopupFour)
             EVT_MENU(self, self.popupID5, self.OnPopupFive)
+            EVT_MENU(self, self.popupID6, self.OnPopupSix)
 
         # make a menu
         menu = wxMenu()
-        # Show how to put an icon in the menu
-        item = wxMenuItem(menu, self.popupID1,"One")
-        item.SetBitmap(images.getSmilesBitmap())
-        menu.AppendItem(item)
-        # add some other items
-        menu.Append(self.popupID2, "Two")
+        # add some items
+        menu.Append(self.popupID1, "FindItem tests")
+#        menu.Append(self.popupID2, "Two")
         menu.Append(self.popupID3, "ClearAll and repopulate")
         menu.Append(self.popupID4, "DeleteAllItems")
         menu.Append(self.popupID5, "GetItem")
+        menu.Append(self.popupID6, "Edit")
 
         # Popup the menu.  If an item is selected then its handler
         # will be called before PopupMenu returns.
@@ -308,8 +316,6 @@ class TestListCtrlPanel(wxPanel, wxColumnSorterMixin):
         self.log.WriteText("Popup three\n")
         self.list.ClearAll()
         wxCallAfter(self.PopulateList)
-        #wxYield()
-        #self.PopulateList()
 
     def OnPopupFour(self, event):
         self.list.DeleteAllItems()
@@ -318,6 +324,10 @@ class TestListCtrlPanel(wxPanel, wxColumnSorterMixin):
         item = self.list.GetItem(self.currentItem)
         print item.m_text, item.m_itemId, self.list.GetItemData(self.currentItem)
 
+    def OnPopupSix(self, event):
+        self.list.EditLabel(self.currentItem)
+
+
     def OnSize(self, event):
         w,h = self.GetClientSizeTuple()
         self.list.SetDimensions(0, 0, w, h)
diff --git a/wxPython/demo/wxListCtrl_virtual.py b/wxPython/demo/wxListCtrl_virtual.py
index 7dffd52fdd..c6af18cf2c 100644
--- a/wxPython/demo/wxListCtrl_virtual.py
+++ b/wxPython/demo/wxListCtrl_virtual.py
@@ -53,7 +53,7 @@ class TestVirtualList(wxListCtrl):
         return item.GetText()
 
     def OnItemDeselected(self, evt):
-        print evt.m_itemIndex
+        self.log.WriteText("OnItemDeselected: %s" % evt.m_itemIndex)
 
 
     #---------------------------------------------------
diff --git a/wxPython/demo/wxMDIWindows.py b/wxPython/demo/wxMDIWindows.py
index 7eef8a39c9..9df21dc221 100644
--- a/wxPython/demo/wxMDIWindows.py
+++ b/wxPython/demo/wxMDIWindows.py
@@ -52,3 +52,12 @@ it.  Here are a couple samples of how to use it.
 
 </body></html>
 """
+
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxMVCTree.py b/wxPython/demo/wxMVCTree.py
index 808f8870b3..17d71cd211 100644
--- a/wxPython/demo/wxMVCTree.py
+++ b/wxPython/demo/wxMVCTree.py
@@ -51,13 +51,22 @@ def runTest(frame, nb, log):
 
 
 overview = """\
-wxMVCTree is a control which handles hierarchical data. It is constructed in model-view-controller architecture, so the display of that data, and the content of the data can be changed greatly without affecting the other parts.
+
+wxMVCTree is a control which handles hierarchical data. It is
+constructed in model-view-controller architecture, so the display of
+that data, and the content of the data can be changed greatly without
+affecting the other parts.
 
 Multiple selections are possible by holding down the Ctrl key.
 
-This demo shows the wxPython directory structure. The interesting part is that the tree model is late-bound to the filesystem, so the filenames are not retrieved until the directory is expanded. In mvctree.py are models for generic data, and both the early and late-bound filesystem models.
+This demo shows the wxPython directory structure. The interesting part
+is that the tree model is late-bound to the filesystem, so the
+filenames are not retrieved until the directory is expanded. In
+mvctree.py are models for generic data, and both the early and
+late-bound filesystem models.
 
-There is also support for editing, though it's not enabled in this demo, to avoid accidentally renaming files!
+There is also support for editing, though it's not enabled in this
+demo, to avoid accidentally renaming files!
 
 """
 
@@ -65,6 +74,7 @@ There is also support for editing, though it's not enabled in this demo, to avoi
 
 
 
-
-
-
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxMenu.py b/wxPython/demo/wxMenu.py
index bdbf93489b..c209977197 100644
--- a/wxPython/demo/wxMenu.py
+++ b/wxPython/demo/wxMenu.py
@@ -7,6 +7,8 @@
 
 from wxPython.wx import *
 
+import time
+
 #-------------------------------------------------------------------
 
 class MyFrame(wxFrame):
@@ -68,14 +70,24 @@ check the source for this sample to see how to implement them.
 
         menu5 = wxMenu()
         menu5.Append(501, "Interesting thing\tCtrl+A", "Note the shortcut!")
-
         menu5.AppendSeparator()
         menu5.Append(502, "Hello\tShift+H")
+        menu5.AppendSeparator()
+        menu5.Append(503, "remove the submenu")
+        menu6 = wxMenu()
+        menu6.Append(601, "Submenu Item")
+        menu5.AppendMenu(504, "submenu", menu6)
+        menu5.Append(505, "remove this menu")
+        menu5.Append(506, "this is updated")
+        menu5.Append(507, "insert after this...")
+        menu5.Append(508, "...and before this")
         menuBar.Append(menu5, "&Fun")
 
         self.SetMenuBar(menuBar)
 
         # Menu events
+        EVT_MENU_HIGHLIGHT_ALL(self, self.OnMenuHighlight)
+
         EVT_MENU(self, 101, self.Menu101)
         EVT_MENU(self, 102, self.Menu102)
         EVT_MENU(self, 103, self.Menu103)
@@ -97,9 +109,25 @@ check the source for this sample to see how to implement them.
 
         EVT_MENU(self, 501, self.Menu501)
         EVT_MENU(self, 502, self.Menu502)
+        EVT_MENU(self, 503, self.TestRemove)
+        EVT_MENU(self, 505, self.TestRemove2)
+        EVT_MENU(self, 507, self.TestInsert)
+        EVT_MENU(self, 508, self.TestInsert)
+
+        EVT_UPDATE_UI(wxGetApp(), 506, self.TestUpdateUI)
 
     # Methods
 
+    def OnMenuHighlight(self, event):
+        # Show how to get menu item imfo from this event handler
+        id = event.GetMenuId()
+        item = self.GetMenuBar().FindItemById(id)
+        text = item.GetText()
+        help = item.GetHelp()
+        #print text, help
+        event.Skip() # but in this case just call Skip so the default is done
+
+
     def Menu101(self, event):
         self.log.write('Welcome to Mercury\n')
 
@@ -146,8 +174,49 @@ check the source for this sample to see how to implement them.
     def Menu502(self, event):
         self.log.write('Hello from Jean-Michel\n')
 
+
+    def TestRemove(self, evt):
+        mb = self.GetMenuBar()
+        submenuItem = mb.FindItemById(601)
+        if not submenuItem:
+            return
+        submenu = submenuItem.GetMenu()
+        menu = submenu.GetParent()
+
+        #menu.Remove(504)               # works
+        menu.RemoveItem(mb.FindItemById(504))  # this also works
+        #menu.RemoveItem(submenuItem)   # doesn't work, as expected since submenuItem is not on menu
+
+
+    def TestRemove2(self, evt):
+        mb = self.GetMenuBar()
+        mb.Remove(4)
+
+
+    def TestUpdateUI(self, evt):
+        text = time.ctime()
+        evt.SetText(text)
+
+
+    def TestInsert(self, evt):
+        # get the menu
+        mb = self.GetMenuBar()
+        menuItem = mb.FindItemById(507)
+        menu = menuItem.GetMenu()
+
+        ID = wxNewId()
+        ##menu.Insert(9, ID, "NewItem " + str(ID))
+        item = wxMenuItem(menu)
+        item.SetId(ID)
+        item.SetText("NewItem " + str(ID))
+        menu.InsertItem(9, item)
+
+
+
 #-------------------------------------------------------------------
 
+wxRegisterId(10000)
+
 def runTest(frame, nb, log):
     win = MyFrame(frame, -1, log)
     frame.otherWin = win
diff --git a/wxPython/demo/wxMessageDialog.py b/wxPython/demo/wxMessageDialog.py
index 17dcf7d741..b75d907739 100644
--- a/wxPython/demo/wxMessageDialog.py
+++ b/wxPython/demo/wxMessageDialog.py
@@ -25,39 +25,14 @@ def runTest(frame, nb, log):
 
 
 overview = """\
-wxMessageDialog()
-----------------------------------
-
-wxMessageDialog(wxWindow* parent, const wxString& message, const wxString& caption = "Message box", long style = wxOK | wxCANCEL | wxCENTRE, const wxPoint& pos = wxDefaultPosition)
-
-Constructor. Use wxMessageDialog::ShowModal to show the dialog.
-
-Parameters
--------------------
-
-parent = Parent window.
-
-message = Message to show on the dialog.
-
-caption = The dialog caption.
-
-style = A dialog style (bitlist) containing flags chosen from the following:
-
-wxOK  Show an OK button.
-
-wxCANCEL  Show a Cancel button.
-
-wxYES_NO  Show Yes and No buttons.
-
-wxCENTRE  Centre the message. Not Windows.
+Show a message to the user in a dialog
+"""
 
-wxICON_EXCLAMATION  Shows an exclamation mark icon. Windows only.
 
-wxICON_HAND  Shows a hand icon. Windows only.
 
-wxICON_QUESTION  Shows a question mark icon. Windows only.
 
-wxICON_INFORMATION  Shows an information (i) icon. Windows only.
 
-pos = Dialog position.
-"""
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxMimeTypesManager.py b/wxPython/demo/wxMimeTypesManager.py
index 39ba2074dc..d6356389d4 100644
--- a/wxPython/demo/wxMimeTypesManager.py
+++ b/wxPython/demo/wxMimeTypesManager.py
@@ -173,3 +173,11 @@ def MyBitmapsFunc( index ):
 mimetypes_wdr.MyBitmapsFunc = MyBitmapsFunc
 
 
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxMiniFrame.py b/wxPython/demo/wxMiniFrame.py
index fd7c6c7f45..b92e300eda 100644
--- a/wxPython/demo/wxMiniFrame.py
+++ b/wxPython/demo/wxMiniFrame.py
@@ -45,3 +45,12 @@ def runTest(frame, nb, log):
 
 overview = """\
 """
+
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxMultipleChoiceDialog.py b/wxPython/demo/wxMultipleChoiceDialog.py
index 6e3fb5de55..c7f93764e1 100644
--- a/wxPython/demo/wxMultipleChoiceDialog.py
+++ b/wxPython/demo/wxMultipleChoiceDialog.py
@@ -25,3 +25,12 @@ def runTest(frame, nb, log):
 
 overview = """\
 """
+
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxNotebook.py b/wxPython/demo/wxNotebook.py
index ced491b69d..1f46c2c6e8 100644
--- a/wxPython/demo/wxNotebook.py
+++ b/wxPython/demo/wxNotebook.py
@@ -14,7 +14,7 @@ import sys
 class TestNB(wxNotebook):
     def __init__(self, parent, id, log):
         wxNotebook.__init__(self, parent, id, style=
-                            #0
+                            #wxNB_TOP
                             wxNB_BOTTOM
                             #wxNB_LEFT
                             #wxNB_RIGHT
@@ -59,11 +59,11 @@ class TestNB(wxNotebook):
         win = self.makeColorPanel(wxCYAN)
         self.AddPage(win, "Cyan")
 
-        win = self.makeColorPanel(wxWHITE)
-        self.AddPage(win, "White")
+##         win = self.makeColorPanel(wxWHITE)
+##         self.AddPage(win, "White")
 
-        win = self.makeColorPanel(wxBLACK)
-        self.AddPage(win, "Black")
+##         win = self.makeColorPanel(wxBLACK)
+##         self.AddPage(win, "Black")
 
         win = self.makeColorPanel(wxNamedColour('MIDNIGHT BLUE'))
         self.AddPage(win, "MIDNIGHT BLUE")
@@ -88,16 +88,17 @@ class TestNB(wxNotebook):
     def OnPageChanged(self, event):
         old = event.GetOldSelection()
         new = event.GetSelection()
-        self.log.write('OnPageChanged, old:%d, new:%d\n' % (old, new))
+        sel = self.GetSelection()
+        self.log.write('OnPageChanged,  old:%d, new:%d, sel:%d\n' % (old, new, sel))
         event.Skip()
 
     def OnPageChanging(self, event):
         old = event.GetOldSelection()
         new = event.GetSelection()
-        self.log.write('OnPageChanging, old:%d, new:%d\n' % (old, new))
+        sel = self.GetSelection()
+        self.log.write('OnPageChanging, old:%d, new:%d, sel:%d\n' % (old, new, sel))
         event.Skip()
 
-
 #----------------------------------------------------------------------------
 
 def runTest(frame, nb, log):
diff --git a/wxPython/demo/wxOGL.py b/wxPython/demo/wxOGL.py
index 17f0015899..2094959821 100644
--- a/wxPython/demo/wxOGL.py
+++ b/wxPython/demo/wxOGL.py
@@ -106,7 +106,7 @@ class MyEvtHandler(wxShapeEvtHandler):
 
     def OnLeftClick(self, x, y, keys = 0, attachment = 0):
         shape = self.GetShape()
-        print shape.__class__
+        print shape.__class__, shape.GetClassName()
         canvas = shape.GetCanvas()
         dc = wxClientDC(canvas)
         canvas.PrepareDC(dc)
diff --git a/wxPython/demo/wxPageSetupDialog.py b/wxPython/demo/wxPageSetupDialog.py
index 61ae29290d..df344ec6ab 100644
--- a/wxPython/demo/wxPageSetupDialog.py
+++ b/wxPython/demo/wxPageSetupDialog.py
@@ -21,13 +21,15 @@ def runTest(frame, nb, log):
 
 
 
+overview = """\
+"""
 
 
 
 
 
 
-
-
-overview = """\
-"""
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxPlotCanvas.py b/wxPython/demo/wxPlotCanvas.py
index 1a9f7b2271..5f1a42ed91 100644
--- a/wxPython/demo/wxPlotCanvas.py
+++ b/wxPython/demo/wxPlotCanvas.py
@@ -37,3 +37,11 @@ def runTest(frame, nb, log):
 overview = wxPlotCanvas.__doc__
 
 #---------------------------------------------------------------------------
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxPrintDialog.py b/wxPython/demo/wxPrintDialog.py
index 183cbe801c..b70e484dd5 100644
--- a/wxPython/demo/wxPrintDialog.py
+++ b/wxPython/demo/wxPrintDialog.py
@@ -5,12 +5,18 @@ from wxPython.wx import *
 
 def runTest(frame, nb, log):
     data = wxPrintDialogData()
+
+    data.EnableSelection(True)
     data.EnablePrintToFile(True)
     data.EnablePageNumbers(True)
-    data.EnableSelection(True)
+    data.SetMinPage(1)
+    data.SetMaxPage(5)
+    data.SetAllPages(True)
+
     dlg = wxPrintDialog(frame, data)
     if dlg.ShowModal() == wxID_OK:
-        log.WriteText('\n')
+        data = dlg.GetPrintDialogData()
+        log.WriteText('GetAllPages: %d\n' % data.GetAllPages())
     dlg.Destroy()
 
 #---------------------------------------------------------------------------
@@ -18,14 +24,12 @@ def runTest(frame, nb, log):
 
 
 
+overview = """\
+"""
 
 
 
-
-
-
-
-
-
-overview = """\
-"""
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxProcess.py b/wxPython/demo/wxProcess.py
index d8104e5e75..b9bd6ceb66 100644
--- a/wxPython/demo/wxProcess.py
+++ b/wxPython/demo/wxProcess.py
@@ -152,3 +152,12 @@ child process to exit its main loop.
 
 </body><html>
 """
+
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxProgressDialog.py b/wxPython/demo/wxProgressDialog.py
index 09f6c08b56..ec7bff1bd3 100644
--- a/wxPython/demo/wxProgressDialog.py
+++ b/wxPython/demo/wxProgressDialog.py
@@ -30,9 +30,12 @@ def runTest(frame, nb, log):
 
 
 
+overview = """\
+"""
 
 
 
-
-overview = """\
-"""
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxRightTextCtrl.py b/wxPython/demo/wxRightTextCtrl.py
index 7fe10cef6f..b2fa3e970b 100644
--- a/wxPython/demo/wxRightTextCtrl.py
+++ b/wxPython/demo/wxRightTextCtrl.py
@@ -47,3 +47,10 @@ def runTest(frame, nb, log):
 
 overview = wxPython.lib.rightalign.__doc__
 
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxSashWindow.py b/wxPython/demo/wxSashWindow.py
index a8b472c2c1..17105b0a9d 100644
--- a/wxPython/demo/wxSashWindow.py
+++ b/wxPython/demo/wxSashWindow.py
@@ -114,17 +114,13 @@ def runTest(frame, nb, log):
 
 
 
+overview = """\
+"""
 
 
 
 
-
-
-
-
-
-
-
-
-overview = """\
-"""
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxScrolledMessageDialog.py b/wxPython/demo/wxScrolledMessageDialog.py
index e50d1e7c9e..a9715c6af2 100644
--- a/wxPython/demo/wxScrolledMessageDialog.py
+++ b/wxPython/demo/wxScrolledMessageDialog.py
@@ -17,8 +17,14 @@ def runTest(frame, nb, log):
 
 
 
+overview = """\
+"""
 
 
 
-overview = """\
-"""
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxScrolledPanel.py b/wxPython/demo/wxScrolledPanel.py
index 079f878dc6..89da9f3871 100644
--- a/wxPython/demo/wxScrolledPanel.py
+++ b/wxPython/demo/wxScrolledPanel.py
@@ -15,12 +15,14 @@ class TestPanel(wxScrolledPanel):
         desc = wxStaticText(self, -1,
                             "wxScrolledPanel extends wxScrolledWindow, adding all "
                             "the necessary bits to set up scroll handling for you.\n\n"
-                            "Here are three fixed size examples of its use, and the "
-                            "mail demo panel is also using it."
+                            "Here are three fixed size examples of its use. The "
+                            "demo panel for this sample is also using it -- the \nwxStaticLine"
+                            "below is intentionally made too long so a scrollbar will be "
+                            "activated."
                             )
         desc.SetForegroundColour("Blue")
         vbox.Add(desc, 0, wxALIGN_LEFT|wxALL, 5)
-        vbox.Add(wxStaticLine(self, -1), 0, wxEXPAND|wxALL, 5)
+        vbox.Add(wxStaticLine(self, -1, size=(1024,-1)), 0, wxALL, 5)
         vbox.AddSpacer(20,20)
 
         words = text.split()
diff --git a/wxPython/demo/wxScrolledWindow.py b/wxPython/demo/wxScrolledWindow.py
index 53d8b4a130..67ac26e2fa 100644
--- a/wxPython/demo/wxScrolledWindow.py
+++ b/wxPython/demo/wxScrolledWindow.py
@@ -64,7 +64,7 @@ class MyCanvas(wxScrolledWindow):
             self.DoDrawing(dc)
 
 
-    def DoDrawing(self, dc):
+    def DoDrawing(self, dc, printing=False):
         dc.BeginDrawing()
         dc.SetPen(wxPen('RED'))
         dc.DrawRectangle(5, 5, 50, 50)
@@ -92,6 +92,11 @@ class MyCanvas(wxScrolledWindow):
         dc.SetTextForeground(wxColour(0, 0xFF, 0x80))
         dc.DrawText("a bitmap", 200, 85)
 
+##         dc.SetFont(wxFont(14, wxSWISS, wxNORMAL, wxNORMAL))
+##         dc.SetTextForeground("BLACK")
+##         dc.DrawText("TEST this STRING", 10, 200)
+##         print dc.GetFullTextExtent("TEST this STRING")
+
         font = wxFont(20, wxSWISS, wxNORMAL, wxNORMAL)
         dc.SetFont(font)
         dc.SetTextForeground(wxBLACK)
@@ -106,16 +111,20 @@ class MyCanvas(wxScrolledWindow):
         dc.SetPen(wxPen('RED'))
         dc.DrawEllipticArc(200, 500, 50, 75, 0, 90)
 
-        y = 20
-        for style in [wxDOT, wxLONG_DASH, wxSHORT_DASH, wxDOT_DASH, wxUSER_DASH]:
-            pen = wxPen("DARK ORCHID", 1, style)
-            if style == wxUSER_DASH:
-                pen.SetCap(wxCAP_BUTT)
-                pen.SetDashes([1,2])
-                pen.SetColour("RED")
-            dc.SetPen(pen)
-            dc.DrawLine(300, y, 400, y)
-            y = y + 10
+        if not printing:
+            # This has troubles when used on a print preview in wxGTK,
+            # probably something to do with the pen styles and the scaling
+            # it does...
+            y = 20
+            for style in [wxDOT, wxLONG_DASH, wxSHORT_DASH, wxDOT_DASH, wxUSER_DASH]:
+                pen = wxPen("DARK ORCHID", 1, style)
+                if style == wxUSER_DASH:
+                    pen.SetCap(wxCAP_BUTT)
+                    pen.SetDashes([1,2])
+                    pen.SetColour("RED")
+                dc.SetPen(pen)
+                dc.DrawLine(300, y, 400, y)
+                y = y + 10
 
         dc.SetBrush(wxTRANSPARENT_BRUSH)
         dc.SetPen(wxPen(wxColour(0xFF, 0x20, 0xFF), 1, wxSOLID))
diff --git a/wxPython/demo/wxSingleChoiceDialog.py b/wxPython/demo/wxSingleChoiceDialog.py
index df2d2b1b0e..aa649eb750 100644
--- a/wxPython/demo/wxSingleChoiceDialog.py
+++ b/wxPython/demo/wxSingleChoiceDialog.py
@@ -16,17 +16,17 @@ def runTest(frame, nb, log):
 
 
 
+overview = """\
+This class represents a dialog that shows a list of strings, and allows the user
+to select one. Double-clicking on a list item is equivalent to single-clicking
+and then pressing OK.
 
+"""
 
 
 
-
-
-
-
-
-overview = """\
-This class represents a dialog that shows a list of strings, and allows the user to select one. Double-clicking on a list item is equivalent to single-clicking and then pressing OK.
-
-"""
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
 
diff --git a/wxPython/demo/wxSpinButton.py b/wxPython/demo/wxSpinButton.py
index 0095fbad77..ed64a713e5 100644
--- a/wxPython/demo/wxSpinButton.py
+++ b/wxPython/demo/wxSpinButton.py
@@ -46,3 +46,10 @@ def runTest(frame, nb, log):
 
 overview = """\
 """
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxSpinCtrl.py b/wxPython/demo/wxSpinCtrl.py
index 164397d1a0..2e57bca067 100644
--- a/wxPython/demo/wxSpinCtrl.py
+++ b/wxPython/demo/wxSpinCtrl.py
@@ -34,3 +34,12 @@ def runTest(frame, nb, log):
 
 overview = """\
 """
+
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxSplitterWindow.py b/wxPython/demo/wxSplitterWindow.py
index 206244f6c0..33359b3ba1 100644
--- a/wxPython/demo/wxSplitterWindow.py
+++ b/wxPython/demo/wxSplitterWindow.py
@@ -37,11 +37,6 @@ def runTest(frame, nb, log):
     splitter.SetMinimumPaneSize(20)
     splitter.SplitVertically(p1, p2, 100)
 
-##     splitter.SetSize((300,300))
-##     print splitter.GetSashPosition()
-##     splitter.SetSashPosition(100)
-##     print splitter.GetSashPosition()
-
     return splitter
 
 
@@ -50,41 +45,16 @@ def runTest(frame, nb, log):
 
 
 
-
-
-
-
-
-
-
-
-
-
-
 overview = """\
-This class manages up to two subwindows. The current view can be split into two programmatically (perhaps from a menu command), and unsplit either programmatically or via the wxSplitterWindow user interface.
-
-wxSplitterWindow()
------------------------------------
-
-Default constructor.
-
-wxSplitterWindow(wxWindow* parent, wxWindowID id, int x, const wxPoint& point = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style=wxSP_3D, const wxString& name = "splitterWindow")
-
-Constructor for creating the window.
-
-Parameters
--------------------
-
-parent = The parent of the splitter window.
-
-id = The window identifier.
+This class manages up to two subwindows. The current view can be split
+into two programmatically (perhaps from a menu command), and unsplit
+either programmatically or via the wxSplitterWindow user interface.
+"""
 
-pos = The window position.
 
-size = The window size.
 
-style = The window style. See wxSplitterWindow.
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
 
-name = The window name.
-"""
diff --git a/wxPython/demo/wxStaticBitmap.py b/wxPython/demo/wxStaticBitmap.py
index d281d60237..7dfc51722b 100644
--- a/wxPython/demo/wxStaticBitmap.py
+++ b/wxPython/demo/wxStaticBitmap.py
@@ -38,10 +38,12 @@ def runTest(frame, nb, log):
 
 
 
+overview = """\
+"""
 
 
 
-
-
-overview = """\
-"""
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxStaticText.py b/wxPython/demo/wxStaticText.py
index f143ddb5cb..c40d886405 100644
--- a/wxPython/demo/wxStaticText.py
+++ b/wxPython/demo/wxStaticText.py
@@ -24,10 +24,9 @@ class TestPanel(wxPanel):
 
         str = "This is a different font."
         text = wxStaticText(self, -1, str, (20, 100))
-        font = wxFont(18, wxSWISS, wxNORMAL, wxNORMAL, False, "Arial")
-        w, h, d, e = self.GetFullTextExtent(str, font)
+        font = wxFont(18, wxSWISS, wxNORMAL, wxNORMAL)
         text.SetFont(font)
-        text.SetSize(wxSize(w, h))
+        #text.SetSize(text.GetBestSize())
 
         wxStaticText(self, -1, "Multi-line wxStaticText\nline 2\nline 3\n\nafter empty line", (20,150))
         wxStaticText(self, -1, "Align right multi-line\nline 2\nline 3\n\nafter empty line", (220,150), style=wxALIGN_RIGHT)
diff --git a/wxPython/demo/wxStatusBar.py b/wxPython/demo/wxStatusBar.py
index d7241a1b5b..ac7dedd0f1 100644
--- a/wxPython/demo/wxStatusBar.py
+++ b/wxPython/demo/wxStatusBar.py
@@ -104,5 +104,16 @@ def runTest(frame, nb, log):
 
 
 overview = """\
-A status bar is a narrow window that can be placed along the bottom of a frame to give small amounts of status information. It can contain one or more fields, one or more of which can be variable length according to the size of the window.
-"""
+A status bar is a narrow window that can be placed along the bottom of
+a frame to give small amounts of status information. It can contain
+one or more fields, one or more of which can be variable length
+according to the size of the window.  """
+
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxStyledTextCtrl_1.py b/wxPython/demo/wxStyledTextCtrl_1.py
index d23c1a6636..fa0d742ebf 100644
--- a/wxPython/demo/wxStyledTextCtrl_1.py
+++ b/wxPython/demo/wxStyledTextCtrl_1.py
@@ -2,6 +2,8 @@
 from wxPython.wx import *
 from wxPython.stc import *
 
+import images
+
 #----------------------------------------------------------------------
 
 debug = 1
@@ -212,7 +214,8 @@ def runTest(frame, nb, log):
     # setup some markers
     ed.SetMarginType(1, wxSTC_MARGIN_SYMBOL)
     ed.MarkerDefine(0, wxSTC_MARK_ROUNDRECT, "#CCFF00", "RED")
-    ed.MarkerDefine(1, wxSTC_MARK_CIRCLE, "FOREST GREEN", "SIENNA")
+    #ed.MarkerDefine(1, wxSTC_MARK_CIRCLE, "FOREST GREEN", "SIENNA")
+    ed.MarkerDefineBitmap(1, images.getFolder1Bitmap())
     ed.MarkerDefine(2, wxSTC_MARK_SHORTARROW, "blue", "blue")
     ed.MarkerDefine(3, wxSTC_MARK_ARROW, "#00FF00", "#00FF00")
 
diff --git a/wxPython/demo/wxStyledTextCtrl_2.py b/wxPython/demo/wxStyledTextCtrl_2.py
index 516383f50f..4a5433e14a 100644
--- a/wxPython/demo/wxStyledTextCtrl_2.py
+++ b/wxPython/demo/wxStyledTextCtrl_2.py
@@ -1,7 +1,7 @@
 
 from wxPython.wx import *
 from wxPython.stc import *
-
+import images
 import keyword
 
 #----------------------------------------------------------------------
@@ -53,6 +53,7 @@ class PythonSTC(wxStyledTextCtrl):
 
         self.SetViewWhiteSpace(False)
         #self.SetBufferedDraw(False)
+        #self.SetViewEOL(True)
 
         self.SetEdgeMode(wxSTC_EDGE_BACKGROUND)
         self.SetEdgeColumn(78)
@@ -85,6 +86,7 @@ class PythonSTC(wxStyledTextCtrl):
 
         EVT_STC_UPDATEUI(self,    ID, self.OnUpdateUI)
         EVT_STC_MARGINCLICK(self, ID, self.OnMarginClick)
+        EVT_KEY_DOWN(self, self.OnKeyPressed)
 
 
         # Make some styles,  The lexer defines what each style is used for, we
@@ -108,9 +110,9 @@ class PythonSTC(wxStyledTextCtrl):
         # Number
         self.StyleSetSpec(wxSTC_P_NUMBER, "fore:#007F7F,size:%(size)d" % faces)
         # String
-        self.StyleSetSpec(wxSTC_P_STRING, "fore:#7F007F,italic,face:%(times)s,size:%(size)d" % faces)
+        self.StyleSetSpec(wxSTC_P_STRING, "fore:#7F007F,face:%(helv)s,size:%(size)d" % faces)
         # Single quoted string
-        self.StyleSetSpec(wxSTC_P_CHARACTER, "fore:#7F007F,italic,face:%(times)s,size:%(size)d" % faces)
+        self.StyleSetSpec(wxSTC_P_CHARACTER, "fore:#7F007F,face:%(helv)s,size:%(size)d" % faces)
         # Keyword
         self.StyleSetSpec(wxSTC_P_WORD, "fore:#00007F,bold,size:%(size)d" % faces)
         # Triple quotes
@@ -130,10 +132,15 @@ class PythonSTC(wxStyledTextCtrl):
         # End of line where string is not closed
         self.StyleSetSpec(wxSTC_P_STRINGEOL, "fore:#000000,face:%(mono)s,back:#E0C0E0,eol,size:%(size)d" % faces)
 
-
         self.SetCaretForeground("BLUE")
 
-        EVT_KEY_DOWN(self, self.OnKeyPressed)
+
+        # register some images for use in the AutoComplete box.
+        self.RegisterImage(1, images.getSmilesBitmap())
+        self.RegisterImage(2, images.getFile1Bitmap())
+        self.RegisterImage(3, images.getCopyBitmap())
+
+
 
 
     def OnKeyPressed(self, event):
@@ -145,7 +152,9 @@ class PythonSTC(wxStyledTextCtrl):
             # Tips
             if event.ShiftDown():
                 self.CallTipSetBackground("yellow")
-                self.CallTipShow(pos, 'param1, param2')
+                self.CallTipShow(pos, 'lots of of text: blah, blah, blah\n\n'
+                                 'show some suff, maybe parameters..\n\n'
+                                 'fubar(param1, param2)')
             # Code completion
             else:
                 #lst = []
@@ -156,17 +165,22 @@ class PythonSTC(wxStyledTextCtrl):
                 #self.AutoCompShow(0, st)
 
                 kw = keyword.kwlist[:]
-                kw.append("zzzzzz")
-                kw.append("aaaaa")
-                kw.append("__init__")
-                kw.append("zzaaaaa")
-                kw.append("zzbaaaa")
+                kw.append("zzzzzz?2")
+                kw.append("aaaaa?2")
+                kw.append("__init__?3")
+                kw.append("zzaaaaa?2")
+                kw.append("zzbaaaa?2")
                 kw.append("this_is_a_longer_value")
-                kw.append("this_is_a_much_much_much_much_much_much_much_longer_value")
+                #kw.append("this_is_a_much_much_much_much_much_much_much_longer_value")
 
                 kw.sort()  # Python sorts are case sensitive
                 self.AutoCompSetIgnoreCase(False)  # so this needs to match
 
+                # Images are specified with a appended "?type"
+                for i in range(len(kw)):
+                    if kw[i] in keyword.kwlist:
+                        kw[i] = kw[i] + "?1"
+
                 self.AutoCompShow(0, " ".join(kw))
         else:
             event.Skip()
diff --git a/wxPython/demo/wxTextEntryDialog.py b/wxPython/demo/wxTextEntryDialog.py
index af93b747f3..3fd27aee90 100644
--- a/wxPython/demo/wxTextEntryDialog.py
+++ b/wxPython/demo/wxTextEntryDialog.py
@@ -17,14 +17,15 @@ def runTest(frame, nb, log):
 
 
 
+overview = """\
 
+"""
 
 
 
 
 
-
-
-overview = """\
-
-"""
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxTimeCtrl.py b/wxPython/demo/wxTimeCtrl.py
index 09465642dd..e6a5aeed2f 100644
--- a/wxPython/demo/wxTimeCtrl.py
+++ b/wxPython/demo/wxTimeCtrl.py
@@ -1,68 +1,114 @@
 from wxPython.wx import *
 from wxPython.lib.timectrl import *
+from wxPython.lib.timectrl import __doc__ as overviewdoc
+from wxPython.lib.scrolledpanel import wxScrolledPanel
 
 #----------------------------------------------------------------------
 
-class TestPanel( wxPanel ):
+class TestPanel( wxScrolledPanel ):
     def __init__( self, parent, log ):
 
-        wxPanel.__init__( self, parent, -1 )
+        wxScrolledPanel.__init__( self, parent, -1 )
         self.log = log
-        panel = wxPanel( self, -1 )
 
-        grid = wxFlexGridSizer( 0, 2, 20, 0 )
 
-        text1 = wxStaticText( panel, 10, "A 12-hour format wxTimeCtrl:")
-        self.time12 = wxTimeCtrl( panel, 20, name="12 hour control" )
-        spin1 = wxSpinButton( panel, 30, wxDefaultPosition, wxSize(-1,20), 0 )
+        text1 = wxStaticText( self, -1, "12-hour format:")
+        self.time12 = wxTimeCtrl( self, -1, name="12 hour control" )
+        spin1 = wxSpinButton( self, -1, wxDefaultPosition, wxSize(-1,20), 0 )
         self.time12.BindSpinButton( spin1 )
 
-        grid.AddWindow( text1, 0, wxALIGN_RIGHT, 5 )
-        hbox1 = wxBoxSizer( wxHORIZONTAL )
-        hbox1.AddWindow( self.time12, 0, wxALIGN_CENTRE, 5 )
-        hbox1.AddWindow( spin1, 0, wxALIGN_CENTRE, 5 )
-        grid.AddSizer( hbox1, 0, wxLEFT, 5 )
+        text2 = wxStaticText( self, -1, "24-hour format:")
+        spin2 = wxSpinButton( self, -1, wxDefaultPosition, wxSize(-1,20), 0 )
+        self.time24 = wxTimeCtrl( self, -1, name="24 hour control", fmt24hr=True, spinButton = spin2 )
 
+        text3 = wxStaticText( self, -1, "No seconds\nor spin button:")
+        self.spinless_ctrl = wxTimeCtrl( self, -1, name="spinless control", display_seconds = False )
 
-        text2 = wxStaticText( panel, 40, "A 24-hour format wxTimeCtrl:")
-        self.time24 = wxTimeCtrl( panel, 50, fmt24hr=True, name="24 hour control" )
-        spin2 = wxSpinButton( panel, 60, wxDefaultPosition, wxSize(-1,20), 0 )
-        self.time24.BindSpinButton( spin2 )
+        grid = wxFlexGridSizer( 0, 2, 10, 5 )
+        grid.Add( text1, 0, wxALIGN_RIGHT )
+        hbox1 = wxBoxSizer( wxHORIZONTAL )
+        hbox1.Add( self.time12, 0, wxALIGN_CENTRE )
+        hbox1.Add( spin1, 0, wxALIGN_CENTRE )
+        grid.Add( hbox1, 0, wxLEFT )
 
-        grid.AddWindow( text2, 0, wxALIGN_RIGHT|wxTOP|wxBOTTOM, 5 )
+        grid.Add( text2, 0, wxALIGN_RIGHT|wxTOP|wxBOTTOM )
         hbox2 = wxBoxSizer( wxHORIZONTAL )
-        hbox2.AddWindow( self.time24, 0, wxALIGN_CENTRE, 5 )
-        hbox2.AddWindow( spin2, 0, wxALIGN_CENTRE, 5 )
-        grid.AddSizer( hbox2, 0, wxLEFT, 5 )
-
+        hbox2.Add( self.time24, 0, wxALIGN_CENTRE )
+        hbox2.Add( spin2, 0, wxALIGN_CENTRE )
+        grid.Add( hbox2, 0, wxLEFT )
 
-        text3 = wxStaticText( panel, 70, "A wxTimeCtrl without a spin button:")
-        self.spinless_ctrl = wxTimeCtrl( panel, 80, name="spinless control" )
+        grid.Add( text3, 0, wxALIGN_RIGHT|wxTOP|wxBOTTOM )
+        grid.Add( self.spinless_ctrl, 0, wxLEFT )
 
-        grid.AddWindow( text3, 0, wxALIGN_RIGHT|wxTOP|wxBOTTOM, 5 )
-        grid.AddWindow( self.spinless_ctrl, 0, wxLEFT, 5 )
 
-
-        buttonChange = wxButton( panel, 100, "Change Controls")
-        self.radio12to24 = wxRadioButton( panel, 110, "Copy 12-hour time to 24-hour control", wxDefaultPosition, wxDefaultSize, wxRB_GROUP )
-        self.radio24to12 = wxRadioButton( panel, 120, "Copy 24-hour time to 12-hour control")
-        self.radioWx = wxRadioButton( panel, 130, "Set controls to 'now' using wxDateTime")
-        self.radioMx = wxRadioButton( panel, 140, "Set controls to 'now' using mxDateTime")
+        buttonChange = wxButton( self, -1, "Change Controls")
+        self.radio12to24 = wxRadioButton( self, -1, "Copy 12-hour time to 24-hour control", wxDefaultPosition, wxDefaultSize, wxRB_GROUP )
+        self.radio24to12 = wxRadioButton( self, -1, "Copy 24-hour time to 12-hour control")
+        self.radioWx = wxRadioButton( self, -1, "Set controls to 'now' using wxDateTime")
+        self.radioMx = wxRadioButton( self, -1, "Set controls to 'now' using mxDateTime")
 
         radio_vbox = wxBoxSizer( wxVERTICAL )
-        radio_vbox.AddWindow( self.radio12to24, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 )
-        radio_vbox.AddWindow( self.radio24to12, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 )
-        radio_vbox.AddWindow( self.radioWx, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 )
-        radio_vbox.AddWindow( self.radioMx, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 )
+        radio_vbox.Add( self.radio12to24, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 )
+        radio_vbox.Add( self.radio24to12, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 )
+        radio_vbox.Add( self.radioWx, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 )
+        radio_vbox.Add( self.radioMx, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 )
 
-        box_label = wxStaticBox( panel, 90, "Change Controls through API" )
+        box_label = wxStaticBox( self, -1, "Change Controls through API" )
         buttonbox = wxStaticBoxSizer( box_label, wxHORIZONTAL )
-        buttonbox.AddWindow( buttonChange, 0, wxALIGN_CENTRE|wxALL, 5 )
-        buttonbox.AddSizer( radio_vbox, 0, wxALIGN_CENTRE|wxALL, 5 )
+        buttonbox.Add( buttonChange, 0, wxALIGN_CENTRE|wxALL, 5 )
+        buttonbox.Add( radio_vbox, 0, wxALIGN_CENTRE|wxALL, 5 )
+
+        hbox = wxBoxSizer( wxHORIZONTAL )
+        hbox.Add( grid, 0, wxALIGN_LEFT|wxALL, 15 )
+        hbox.Add( buttonbox, 0, wxALIGN_RIGHT|wxBOTTOM, 20 )
+
+
+        box_label = wxStaticBox( self, -1, "Bounds Control" )
+        boundsbox = wxStaticBoxSizer( box_label, wxHORIZONTAL )
+        self.set_bounds = wxCheckBox( self, -1, "Set time bounds:" )
+
+        minlabel = wxStaticText( self, -1, "minimum time:" )
+        self.min = wxTimeCtrl( self, -1, name="min", display_seconds = False )
+        self.min.Enable( False )
+
+        maxlabel = wxStaticText( self, -1, "maximum time:" )
+        self.max = wxTimeCtrl( self, -1, name="max", display_seconds = False )
+        self.max.Enable( False )
+
+        self.limit_check = wxCheckBox( self, -1, "Limit control" )
+
+        label = wxStaticText( self, -1, "Resulting time control:" )
+        self.target_ctrl = wxTimeCtrl( self, -1, name="new" )
+
+        grid2 = wxFlexGridSizer( 0, 2, 0, 0 )
+        grid2.Add( 20, 0, 0, wxALIGN_LEFT|wxALL, 5 )
+        grid2.Add( 20, 0, 0, wxALIGN_LEFT|wxALL, 5 )
+
+        grid2.Add( self.set_bounds, 0, wxALIGN_LEFT|wxALL, 5 )
+        grid3 = wxFlexGridSizer( 0, 2, 5, 5 )
+        grid3.Add(minlabel, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL )
+        grid3.Add( self.min, 0, wxALIGN_LEFT )
+        grid3.Add(maxlabel, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL )
+        grid3.Add( self.max, 0, wxALIGN_LEFT )
+        grid2.Add(grid3, 0, wxALIGN_LEFT )
+
+        grid2.Add( self.limit_check, 0, wxALIGN_LEFT|wxALL, 5 )
+        grid2.Add( 20, 0, 0, wxALIGN_LEFT|wxALL, 5 )
+
+        grid2.Add( 20, 0, 0, wxALIGN_LEFT|wxALL, 5 )
+        grid2.Add( 20, 0, 0, wxALIGN_LEFT|wxALL, 5 )
+        grid2.Add( label, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5 )
+        grid2.Add( self.target_ctrl, 0, wxALIGN_LEFT|wxALL, 5 )
+        boundsbox.Add(grid2, 0, wxALIGN_CENTER|wxEXPAND|wxALL, 5)
+
+        vbox = wxBoxSizer( wxVERTICAL )
+        vbox.AddSpacer(20, 20)
+        vbox.Add( hbox, 0, wxALIGN_LEFT|wxALL, 5)
+        vbox.Add( boundsbox, 0, wxALIGN_LEFT|wxALL, 5 )
+
 
         outer_box = wxBoxSizer( wxVERTICAL )
-        outer_box.AddSizer( grid, 0, wxALIGN_CENTRE|wxBOTTOM, 20 )
-        outer_box.AddSizer( buttonbox, 0, wxALIGN_CENTRE|wxALL, 5 )
+        outer_box.Add( vbox, 0, wxALIGN_LEFT|wxALL, 5)
 
 
         # Turn on mxDateTime option only if we can import the module:
@@ -72,23 +118,31 @@ class TestPanel( wxPanel ):
             self.radioMx.Enable( False )
 
 
-        panel.SetAutoLayout( True )
-        panel.SetSizer( outer_box )
-        outer_box.Fit( panel )
-        panel.Move( (50,50) )
-        self.panel = panel
-
+        self.SetAutoLayout( True )
+        self.SetSizer( outer_box )
+        outer_box.Fit( self )
+        self.SetupScrolling()
 
+        EVT_BUTTON( self, buttonChange.GetId(), self.OnButtonClick )
         EVT_TIMEUPDATE( self, self.time12.GetId(), self.OnTimeChange )
         EVT_TIMEUPDATE( self, self.time24.GetId(), self.OnTimeChange )
         EVT_TIMEUPDATE( self, self.spinless_ctrl.GetId(), self.OnTimeChange )
 
-        EVT_BUTTON( self, buttonChange.GetId(), self.OnButtonClick )
+
+        EVT_CHECKBOX( self, self.set_bounds.GetId(), self.OnBoundsCheck )
+        EVT_CHECKBOX( self, self.limit_check.GetId(), self.SetTargetMinMax )
+        EVT_TIMEUPDATE( self, self.min.GetId(), self.SetTargetMinMax )
+        EVT_TIMEUPDATE( self, self.max.GetId(), self.SetTargetMinMax )
+        EVT_TIMEUPDATE( self, self.target_ctrl.GetId(), self.OnTimeChange )
+
 
 
     def OnTimeChange( self, event ):
-        timectrl = self.panel.FindWindowById( event.GetId() )
-        self.log.write('%s time = %s\n' % ( timectrl.GetName(), timectrl.GetValue() ) )
+        timectrl = self.FindWindowById( event.GetId() )
+        ib_str = [ "  (out of bounds)", "" ]
+
+        self.log.write('%s time = %s%s\n' % ( timectrl.GetName(), timectrl.GetValue(), ib_str[ timectrl.IsInBounds() ] ) )
+
 
     def OnButtonClick( self, event ):
         if self.radio12to24.GetValue():
@@ -99,16 +153,53 @@ class TestPanel( wxPanel ):
 
         elif self.radioWx.GetValue():
             now = wxDateTime_Now()
-            self.time12.SetWxDateTime( now )
-            self.time24.SetWxDateTime( now )
-            self.spinless_ctrl.SetWxDateTime( now )
+            self.time12.SetValue( now )
+            # (demonstrates that G/SetValue returns/takes a wxDateTime)
+            self.time24.SetValue( self.time12.GetValue(as_wxDateTime=True) )
+
+            # (demonstrates that G/SetValue returns/takes a wxTimeSpan)
+            self.spinless_ctrl.SetValue( self.time12.GetValue(as_wxTimeSpan=True) )
 
         elif self.radioMx.GetValue():
             from mx import DateTime
             now = DateTime.now()
-            self.time12.SetMxDateTime( now )
-            self.time24.SetMxDateTime( now )
-            self.spinless_ctrl.SetMxDateTime( now )
+            self.time12.SetValue( now )
+
+            # (demonstrates that G/SetValue returns/takes a DateTime)
+            self.time24.SetValue( self.time12.GetValue(as_mxDateTime=True) )
+
+            # (demonstrates that G/SetValue returns/takes a DateTimeDelta)
+            self.spinless_ctrl.SetValue( self.time12.GetValue(as_mxDateTimeDelta=True) )
+
+
+    def OnBoundsCheck( self, event ):
+        self.min.Enable( self.set_bounds.GetValue() )
+        self.max.Enable( self.set_bounds.GetValue() )
+        self.SetTargetMinMax()
+
+
+    def SetTargetMinMax( self, event=None ):
+        min = max = None
+
+        if self.set_bounds.GetValue():
+            min = self.min.GetWxDateTime()
+            max = self.max.GetWxDateTime()
+        else:
+            min, max = None, None
+
+        cur_min, cur_max = self.target_ctrl.GetBounds()
+
+        if min != cur_min: self.target_ctrl.SetMin( min )
+        if max != cur_max: self.target_ctrl.SetMax( max )
+
+        self.target_ctrl.SetLimited( self.limit_check.GetValue() )
+
+        if min != cur_min or max != cur_max:
+            new_min, new_max = self.target_ctrl.GetBounds()
+            if new_min and new_max:
+                self.log.write( "current min, max:  (%s, %s)\n" % ( new_min.FormatTime(), new_max.FormatTime() ) )
+            else:
+                self.log.write( "current min, max:  (None, None)\n" )
 
 #----------------------------------------------------------------------
 
@@ -118,93 +209,7 @@ def runTest( frame, nb, log ):
 
 #----------------------------------------------------------------------
 
-overview = """<html><body>
-<P>
-<B>wxTimeCtrl</B> provides a multi-cell control that allows manipulation of a time
-value.  It supports 12 or 24 hour format, and you can use wxDateTime or mxDateTime
-to get/set values from the control.
-<P>
-Left/right/tab keys to switch cells within a wxTimeCtrl, and the up/down arrows act
-like a spin control.  wxTimeCtrl also allows for an actual spin button to be attached
-to the control, so that it acts like the up/down arrow keys.
-<P>
-The <B>!</B> or <B>c</B> key sets the value of the control to <B><I>now.</I></B>
-<P>
-Here's the API for wxTimeCtrl:
-<DL><PRE>
-    <B>wxTimeCtrl</B>(
-         parent, id = -1,
-         <B>value</B> = '12:00:00 AM',
-         pos = wxDefaultPosition,
-         size = wxDefaultSize,
-         <B>fmt24hr</B> = False,
-         <B>spinButton</B> = None,
-         <B>style</B> = wxTE_PROCESS_TAB,
-         name = "time")
-</PRE>
-<UL>
-    <DT><B>value</B>
-    <DD>If no initial value is set, the default will be midnight; if an illegal string
-    is specified, a ValueError will result.  (You can always later set the initial time
-    with SetValue() after instantiation of the control.)
-    <DL><B>size</B>
-    <DD>The size of the control will be automatically adjusted for 12/24 hour format
-    if wxDefaultSize is specified.
-    <BR>
-    <DT><B>fmt24hr</B>
-    <DD>If True, control will display time in 24 hour time format; if False, it will
-    use 12 hour AM/PM format.  SetValue() will adjust values accordingly for the
-    control, based on the format specified.
-    <BR>
-    <DT><B>spinButton</B>
-    <DD>If specified, this button's events will be bound to the behavior of the
-    wxTimeCtrl, working like up/down cursor key events.  (See BindSpinButton.)
-    <BR>
-    <DT><B>style</B>
-    <DD>By default, wxTimeCtrl will process TAB events, by allowing tab to the
-    different cells within the control.
-    </DL>
-</UL>
-<BR>
-<BR>
-<DT><B>SetValue(time_string)</B>
-<DD>Sets the value of the control to a particular time, given a valid time string;
-raises ValueError on invalid value
-<BR>
-<DT><B>GetValue()</B>
-<DD>Retrieves the string value of the time from the control
-<BR>
-<DT><B>SetWxDateTime(wxDateTime)</B>
-<DD>Uses the time portion of a wxDateTime to construct a value for the control.
-<BR>
-<DT><B>GetWxDateTime()</B>
-<DD>Retrieves the value of the control, and applies it to the wxDateTimeFromHMS()
-constructor, and returns the resulting value.  (This returns the date portion as
-"today".)
-<BR>
-<DT><B>SetMxDateTime(mxDateTime)</B>
-<DD>Uses the time portion of an mxDateTime to construct a value for the control.
-<EM>NOTE:</EM> This imports mx.DateTime at runtime only if this or the Get function
-is called.
-<BR>
-<DT><B>GetMxDateTime()</B>
-<DD>Retrieves the value of the control and applies it to the DateTime.Time()
-constructor,  and returns the resulting value.  (mxDateTime is smart enough to
-know this is just a time value.)
-<BR>
-<DT><B>BindSpinButton(wxSpinBtton)</B>
-<DD>Binds an externally created spin button to the control, so that up/down spin
-events change the active cell or selection in the control (in addition to the
-up/down cursor keys.)  (This is primarily to allow you to create a "standard"
-interface to time controls, as seen in Windows.)
-<BR>
-<DT><B>EVT_TIMEUPDATE(win, id, func)</B>
-<DD>func is fired whenever the value of the control changes.
-</DL>
-</body></html>
-"""
-
-
+overview = overviewdoc
 
 if __name__ == '__main__':
     import sys,os
diff --git a/wxPython/demo/wxTimer.py b/wxPython/demo/wxTimer.py
index b58a628a1d..0aa39e8ee1 100644
--- a/wxPython/demo/wxTimer.py
+++ b/wxPython/demo/wxTimer.py
@@ -71,14 +71,6 @@ def runTest(frame, nb, log):
 
 
 
-
-
-
-
-
-
-
-
 overview = """\
 The wxTimer class allows you to execute code at specified intervals.
 
@@ -87,8 +79,7 @@ The wxTimer class allows you to execute code at specified intervals.
 
 
 
-
-
-
-
-
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxToggleButton.py b/wxPython/demo/wxToggleButton.py
index 74d34d3f77..9e90ae9887 100644
--- a/wxPython/demo/wxToggleButton.py
+++ b/wxPython/demo/wxToggleButton.py
@@ -48,3 +48,12 @@ def runTest(frame, nb, log):
 
 overview = """\
 """
+
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxToolBar.py b/wxPython/demo/wxToolBar.py
index 9867b98f05..83b99599cc 100644
--- a/wxPython/demo/wxToolBar.py
+++ b/wxPython/demo/wxToolBar.py
@@ -57,12 +57,12 @@ class TestToolBar(wxFrame):
         EVT_TOOL_RCLICKED(self, -1, self.OnToolRClick)  # Match all
         EVT_TIMER(self, -1, self.OnClearSB)
 
-        if wxPlatform != "__WXMAC__":
-            tb.AddSeparator()
-            cbID = wxNewId()
-            tb.AddControl(wxComboBox(tb, cbID, "", choices=["", "This", "is a", "wxComboBox"],
-                                     size=(150,-1), style=wxCB_DROPDOWN))
-            EVT_COMBOBOX(self, cbID, self.OnCombo)
+        tb.AddSeparator()
+        cbID = wxNewId()
+        tb.AddControl(wxComboBox(tb, cbID, "", choices=["", "This", "is a", "wxComboBox"],
+                                 size=(150,-1), style=wxCB_DROPDOWN))
+        EVT_COMBOBOX(self, cbID, self.OnCombo)
+        tb.AddControl(wxTextCtrl(tb, -1, "Toolbar controls!!", size=(150, -1)))
 
         tb.Realize()
 
diff --git a/wxPython/demo/wxTreeCtrl.py b/wxPython/demo/wxTreeCtrl.py
index 9a6a24f468..5aeed4fa2f 100644
--- a/wxPython/demo/wxTreeCtrl.py
+++ b/wxPython/demo/wxTreeCtrl.py
@@ -167,7 +167,7 @@ class TestTreeCtrlPanel(wxPanel):
         event.Skip()
 
 
-    def OnActivate(self, evt):
+    def OnActivate(self, event):
         self.log.WriteText("OnActivate: %s\n" % self.tree.GetItemText(self.item))
 
 
diff --git a/wxPython/demo/wxTreeListCtrl.py b/wxPython/demo/wxTreeListCtrl.py
new file mode 100644
index 0000000000..e5b05a9106
--- /dev/null
+++ b/wxPython/demo/wxTreeListCtrl.py
@@ -0,0 +1,103 @@
+
+from wxPython.wx import *
+from wxPython.gizmos import wxTreeListCtrl
+
+import images
+
+#----------------------------------------------------------------------
+
+class TestPanel(wxPanel):
+    def __init__(self, parent, log):
+        self.log = log
+        wxPanel.__init__(self, parent, -1)
+        EVT_SIZE(self, self.OnSize)
+
+        self.tree = wxTreeListCtrl(self, -1, style = wxTR_DEFAULT_STYLE
+                                   #| wxTR_ROW_LINES
+                                   #| wxTR_NO_LINES | wxTR_TWIST_BUTTONS
+                                   )
+        isz = (16,16)
+        il = wxImageList(isz[0], isz[1])
+        fldridx     = il.Add(wxArtProvider_GetBitmap(wxART_FOLDER,      wxART_OTHER, isz))
+        fldropenidx = il.Add(wxArtProvider_GetBitmap(wxART_FILE_OPEN,   wxART_OTHER, isz))
+        fileidx     = il.Add(wxArtProvider_GetBitmap(wxART_REPORT_VIEW, wxART_OTHER, isz))
+        smileidx    = il.Add(images.getSmilesBitmap())
+
+        self.tree.SetImageList(il)
+        self.il = il
+
+        # create some columns
+        self.tree.AddColumn("Main column")
+        self.tree.AddColumn("Column 1")
+        self.tree.AddColumn("Column 2")
+        self.tree.SetMainColumn(0) # the one with the tree in it...
+        self.tree.SetColumnWidth(0, 175)
+
+
+        self.root = self.tree.AddRoot("The Root Item")
+        self.tree.SetItemText(self.root, "col 1 root", 1)
+        self.tree.SetItemText(self.root, "col 2 root", 2)
+        self.tree.SetItemImage(self.root, fldridx, which = wxTreeItemIcon_Normal)
+        self.tree.SetItemImage(self.root, fldropenidx, which = wxTreeItemIcon_Expanded)
+
+
+        for x in range(15):
+            txt = "Item %d" % x
+            child = self.tree.AppendItem(self.root, txt)
+            self.tree.SetItemText(child, txt + "(c1)", 1)
+            self.tree.SetItemText(child, txt + "(c2)", 2)
+            self.tree.SetItemImage(child, fldridx, which = wxTreeItemIcon_Normal)
+            self.tree.SetItemImage(child, fldropenidx, which = wxTreeItemIcon_Expanded)
+
+            for y in range(5):
+                txt = "item %d-%s" % (x, chr(ord("a")+y))
+                last = self.tree.AppendItem(child, txt)
+                self.tree.SetItemText(last, txt + "(c1)", 1)
+                self.tree.SetItemText(last, txt + "(c2)", 2)
+                self.tree.SetItemImage(last, fldridx, which = wxTreeItemIcon_Normal)
+                self.tree.SetItemImage(last, fldropenidx, which = wxTreeItemIcon_Expanded)
+
+                for z in range(5):
+                    txt = "item %d-%s-%d" % (x, chr(ord("a")+y), z)
+                    item = self.tree.AppendItem(last,  txt)
+                    self.tree.SetItemText(item, txt + "(c1)", 1)
+                    self.tree.SetItemText(item, txt + "(c2)", 2)
+                    self.tree.SetItemImage(item, fileidx, which = wxTreeItemIcon_Normal)
+                    self.tree.SetItemImage(item, smileidx, which = wxTreeItemIcon_Selected)
+
+
+        self.tree.Expand(self.root)
+
+
+    def OnSize(self, evt):
+        self.tree.SetSize(self.GetSize())
+
+
+#----------------------------------------------------------------------
+
+def runTest(frame, nb, log):
+    win = TestPanel(nb, log)
+    return win
+
+#----------------------------------------------------------------------
+
+
+
+overview = """<html><body>
+<h2><center>wxTreeListCtrl</center></h2>
+
+The wxTreeListCtrl is essentially a wxTreeCtrl with extra columns,
+such that the look is similar to a wxListCtrl.
+
+</body></html>
+"""
+
+
+
+
+if __name__ == '__main__':
+    #raw_input("Press enter...")
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
+
diff --git a/wxPython/demo/wxWave.py b/wxPython/demo/wxWave.py
index 7d60ac09c4..1ea3c4998b 100644
--- a/wxPython/demo/wxWave.py
+++ b/wxPython/demo/wxWave.py
@@ -42,3 +42,12 @@ def runTest(frame, nb, log):
 
 overview = """\
 """
+
+
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])])
diff --git a/wxPython/demo/wxXmlResourceHandler.py b/wxPython/demo/wxXmlResourceHandler.py
index 531457c651..87d8598447 100644
--- a/wxPython/demo/wxXmlResourceHandler.py
+++ b/wxPython/demo/wxXmlResourceHandler.py
@@ -11,7 +11,7 @@ resourceText = r'''<?xml version="1.0"?>
 
 <object class="MyBluePanel" name="MyPanel">
     <size>200,100</size>
-    <object class="wxStaticText" name="lable1" subclass="wxPython.wx.wxPreStaticText">
+    <object class="wxStaticText" name="label1" subclass="wxPython.wx.wxPreStaticText">
         <label>This blue panel is a class derived from wxPanel,\nand is loaded by a custom wxXmlResourceHandler.</label>
         <pos>10,10</pos>
     </object>
diff --git a/wxPython/distrib/README.1st.txt b/wxPython/distrib/README.1st.txt
index 4b55d30398..29509c6a73 100644
--- a/wxPython/distrib/README.1st.txt
+++ b/wxPython/distrib/README.1st.txt
@@ -36,7 +36,7 @@ Clear as mud?  Good.  Let's get started.
 
 2. Make a build directory and configure wxGTK.
 
-        cd wxPythonGTK-2.3.3   # or whatever the top-level dir is
+        cd wxPythonSrc-2.4.0   # or whatever the top-level dir is
         mkdir build
         cd build
         ../configure --with-gtk \
@@ -72,7 +72,6 @@ Clear as mud?  Good.  Let's get started.
    step, depending on where your WXPREF is.)
 
         make
-        cd ../build
         make install
 
 
@@ -104,11 +103,23 @@ Clear as mud?  Good.  Let's get started.
    site-packages directory (such as to your home directory) then you
    can add "--root=<path>" after the "install" command.  To use
    wxPython like this you'll need to ensure that the directory
-   containing wxPyrthon is contained in in the PYTHONPATH environment
+   containing wxPython is contained in the PYTHONPATH environment
    variable.
 
 
-5. That's all, except for the having fun part!
+5. If you havn't already, get a new copy of the demo and documentation
+   to go with the wxPython you just built and installed.  See
+   http://wxpython.org/download.php#documentation
+
+
+6. Change to the demo directory and run it like this:
+
+        python demo.py
+
+
+7. That's all, except for the having fun part!
+
+
 
 --
 Robin Dunn
diff --git a/wxPython/distrib/README.viewdocs.txt b/wxPython/distrib/README.viewdocs.txt
index de7b3f7ee9..07910c9d12 100644
--- a/wxPython/distrib/README.viewdocs.txt
+++ b/wxPython/distrib/README.viewdocs.txt
@@ -13,5 +13,5 @@ automatically and add them to the list.  The zip file just needs to
 contain a .hhp file that defines the contents of the book.  See the
 docs on wxHtmlHelpController for details.
 
-If you'd still ike to view these docs in your regular browser you can
+If you'd still like to view these docs in your regular browser you can
 simply unzip each of the books into their own directory.
\ No newline at end of file
diff --git a/wxPython/distrib/mac/wxPythonOSX/build b/wxPython/distrib/mac/wxPythonOSX/build
index 6fca6f4226..955467a1d9 100755
--- a/wxPython/distrib/mac/wxPythonOSX/build
+++ b/wxPython/distrib/mac/wxPythonOSX/build
@@ -214,6 +214,9 @@ if [ -z "$skipinstall" ]; then
     mv -f $INSTALLROOT$PREFIX/lib/wx  $INSTALLDEVEL$PREFIX/lib
     mv -f $INSTALLROOT$PREFIX/bin/wx* $INSTALLDEVEL$PREFIX/bin
 
+    # TODO for $INSTALLROOT and $INSTALLDEVEL ?
+    # chown -R root:admin
+    # chmod -R g+w
 fi
 
 popd
diff --git a/wxPython/distrib/mac/wxPythonOSX/resources/Welcome.txt b/wxPython/distrib/mac/wxPythonOSX/resources/Welcome.txt
index db55898478..d46dd152e1 100644
--- a/wxPython/distrib/mac/wxPythonOSX/resources/Welcome.txt
+++ b/wxPython/distrib/mac/wxPythonOSX/resources/Welcome.txt
@@ -1,5 +1,5 @@
 Welcome!
 
-This program will install wxPython 2.4.0.7 for MacPython-OSX 2.3.
+This program will install wxPython 2.4.1.1 for MacPython-OSX 2.3.
 
-Build date:   Fri Mar 21 14:00:06 PST 2003
+Build date:   Fri Jun 13 10:07:30 PDT 2003
diff --git a/wxPython/distrib/mac/wxPythonOSX/resources/postflight b/wxPython/distrib/mac/wxPythonOSX/resources/postflight
index 915d404aef..bfa196a360 100755
--- a/wxPython/distrib/mac/wxPythonOSX/resources/postflight
+++ b/wxPython/distrib/mac/wxPythonOSX/resources/postflight
@@ -4,15 +4,15 @@
 /usr/local/bin/python -O $2/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/../compileall.py $2/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/wxPython
 
 # and in the demo
-/usr/local/bin/python $2/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/../compileall.py /Applications/wxPythonOSX-2.4.0.7/demo
+/usr/local/bin/python $2/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/../compileall.py /Applications/wxPythonOSX-2.4.1.1/demo
 
 # Make the demo/data dir writable
-chmod a+w /Applications/wxPythonOSX-2.4.0.7/demo/data
+chmod a+w /Applications/wxPythonOSX-2.4.1.1/demo/data
 
 # and the wxPython pacakge should be group writable
 chgrp -R admin $2/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/wxPython
-chgrp -R admin /Applications/wxPythonOSX-2.4.0.7
+chgrp -R admin /Applications/wxPythonOSX-2.4.1.1
 chmod -R g+w $2/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/wxPython
-chmod -R g+w /Applications/wxPythonOSX-2.4.0.7
+chmod -R g+w /Applications/wxPythonOSX-2.4.1.1
 
 exit 0
diff --git a/wxPython/distrib/make_installer.py b/wxPython/distrib/make_installer.py
index 6aa2b83421..962c32103e 100644
--- a/wxPython/distrib/make_installer.py
+++ b/wxPython/distrib/make_installer.py
@@ -25,9 +25,7 @@ AppCopyright = Copyright 
 DefaultDirName = {code:GetInstallDir|c:\DoNotInstallHere}
 DefaultGroupName = wxPython %(SHORTVER)s for Python %(PYTHONVER)s
 AlwaysCreateUninstallIcon = yes
-
-;; SourceDir = .
-;; OutputDir is relative to SourceDir
+AdminPrivilegesRequired = yes
 OutputDir = dist
 WizardStyle = modern
 UninstallStyle = modern
@@ -61,7 +59,6 @@ Name: core;    Description: "wxPython modules and library";  Types: full compact
 Name: docs;    Description: "Documentation";                 Types: full
 Name: demo;    Description: "Demo application";              Types: full
 Name: samples; Description: "Sample applications";           Types: full
-Name: tools;   Description: "Tools";                         Types: full
 
 
 ;;------------------------------------------------------------
@@ -94,10 +91,24 @@ Source: "wxPython\lib\editor\*.py";         DestDir: "{app}\wxPython\lib\editor"
 Source: "wxPython\lib\editor\*.txt";        DestDir: "{app}\wxPython\lib\editor"; Components: core
 Source: "wxPython\lib\mixins\*.py";         DestDir: "{app}\wxPython\lib\mixins"; Components: core
 Source: "wxPython\lib\PyCrust\*.py";        DestDir: "{app}\wxPython\lib\PyCrust"; Components: core
-Source: "wxPython\lib\PyCrust\*.txt";       DestDir: "{app}\wxPython\lib\PyCrust"; Components: core
-Source: "wxPython\lib\PyCrust\*.ico";       DestDir: "{app}\wxPython\lib\PyCrust"; Components: core
-Source: "wxPython\lib\PyCrust\wxd\*.py";    DestDir: "{app}\wxPython\lib\PyCrust\wxd"; Components: core
 Source: "wxPython\lib\colourchooser\*.py";  DestDir: "{app}\wxPython\lib\colourchooser"; Components: core
+Source: "wxPython\lib\colourchooser\*.py";  DestDir: "{app}\wxPython\lib\colourchooser"; Components: core
+Source: "wxPython\py\*.py";                 DestDir: "{app}\wxPython\py"; Components: core
+Source: "wxPython\py\*.txt";                DestDir: "{app}\wxPython\py"; Components: core
+Source: "wxPython\py\*.ico";                DestDir: "{app}\wxPython\py"; Components: core
+Source: "wxPython\py\*.png";                DestDir: "{app}\wxPython\py"; Components: core
+Source: "wxPython\py\tests\*.py";           DestDir: "{app}\wxPython\py\tests"; Components: core
+Source: "wxPython\py\wxd\*.py";             DestDir: "{app}\wxPython\py\wxd"; Components: core
+
+Source: "wx\*.py";                          DestDir: "{app}\wx"; Components: core
+Source: "wx\lib\*.py";                      DestDir: "{app}\wx\lib"; Components: core
+Source: "wx\lib\colourchooser\*.py";        DestDir: "{app}\wx\lib\colourchooser"; Components: core
+Source: "wx\lib\editor\*.py";               DestDir: "{app}\wx\lib\editor"; Components: core
+Source: "wx\lib\mixins\*.py";               DestDir: "{app}\wx\lib\mixins"; Components: core
+Source: "wx\py\*.py";                       DestDir: "{app}\wx\py"; Components: core
+Source: "wx\tools\*.py";                    DestDir: "{app}\wx\tools"; Components: core
+Source: "wx\tools\XRCed\*.py";              DestDir: "{app}\wx\tools\XRCed"; Components: core
+
 
 %(LOCALE)s
 
@@ -142,25 +153,34 @@ Source: "CHANGES.txt";                      DestDir: "{app}\wxPython\docs"; Comp
 Source: "licence\*.txt";                    DestDir: "{app}\wxPython\docs\licence"; Components: core
 Source: "%(WXDIR)s\docs\htmlhelp\wx.chm";   DestDir: "{app}\wxPython\docs"; Components: docs
 Source: "%(WXDIR)s\docs\htmlhelp\ogl.chm";  DestDir: "{app}\wxPython\docs"; Components: docs
-
-Source: "wxPython\tools\*.py";              DestDir: "{app}\wxPython\tools"; Components: tools
-Source: "wxPython\tools\XRCed\*.txt";       DestDir: "{app}\wxPython\tools\XRCed"; Components: tools
-Source: "wxPython\tools\XRCed\sawfishrc";   DestDir: "{app}\wxPython\tools\XRCed"; Components: tools
-Source: "wxPython\tools\XRCed\*.py";        DestDir: "{app}\wxPython\tools\XRCed"; Components: tools
-Source: "wxPython\tools\XRCed\*.xrc";       DestDir: "{app}\wxPython\tools\XRCed"; Components: tools
-Source: "wxPython\tools\XRCed\*.ico";       DestDir: "{app}\wxPython\tools\XRCed"; Components: tools
-Source: "wxPython\tools\XRCed\*.sh";        DestDir: "{app}\wxPython\tools\XRCed"; Components: tools
-
-Source: "scripts\*.bat";                    DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
-Source: "scripts\*.py";                     DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
-Source: "scripts\helpviewer";               DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
-Source: "scripts\img2png";                  DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
-Source: "scripts\img2py";                   DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
-Source: "scripts\img2xpm";                  DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
-Source: "scripts\xrced";                    DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
-Source: "scripts\pyshell";                  DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
-Source: "scripts\pycrust";                  DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
-Source: "scripts\pycwrap";                  DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
+Source: "docs\*.txt";                       DestDir: "{app}\wxPython\docs"; Components: docs
+Source: "docs\*.css";                       DestDir: "{app}\wxPython\docs"; Components: docs
+Source: "docs\*.html";                      DestDir: "{app}\wxPython\docs"; Components: docs
+Source: "docs\*.conf";                      DestDir: "{app}\wxPython\docs"; Components: docs
+Source: "docs\screenshots\*.png";           DestDir: "{app}\wxPython\docs\screenshots"; Components: docs
+
+Source: "wxPython\tools\*.py";              DestDir: "{app}\wxPython\tools"; Components: core
+Source: "wxPython\tools\XRCed\*.txt";       DestDir: "{app}\wxPython\tools\XRCed"; Components: core
+Source: "wxPython\tools\XRCed\sawfishrc";   DestDir: "{app}\wxPython\tools\XRCed"; Components: core
+Source: "wxPython\tools\XRCed\*.py";        DestDir: "{app}\wxPython\tools\XRCed"; Components: core
+Source: "wxPython\tools\XRCed\*.xrc";       DestDir: "{app}\wxPython\tools\XRCed"; Components: core
+Source: "wxPython\tools\XRCed\*.ico";       DestDir: "{app}\wxPython\tools\XRCed"; Components: core
+Source: "wxPython\tools\XRCed\*.png";       DestDir: "{app}\wxPython\tools\XRCed"; Components: core
+Source: "wxPython\tools\XRCed\*.sh";        DestDir: "{app}\wxPython\tools\XRCed"; Components: core
+Source: "wxPython\tools\XRCed\src-images\*.png";  DestDir: "{app}\wxPython\tools\XRCed\src-images"; Components: core
+
+Source: "scripts\*.bat";                    DestDir: "{code:GetPythonDir}\Scripts"; Components: core
+Source: "scripts\*.py";                     DestDir: "{code:GetPythonDir}\Scripts"; Components: core
+Source: "scripts\helpviewer";               DestDir: "{code:GetPythonDir}\Scripts"; Components: core
+Source: "scripts\img2png";                  DestDir: "{code:GetPythonDir}\Scripts"; Components: core
+Source: "scripts\img2py";                   DestDir: "{code:GetPythonDir}\Scripts"; Components: core
+Source: "scripts\img2xpm";                  DestDir: "{code:GetPythonDir}\Scripts"; Components: core
+Source: "scripts\pyalacarte";               DestDir: "{code:GetPythonDir}\Scripts"; Components: core
+Source: "scripts\pyalamode";                DestDir: "{code:GetPythonDir}\Scripts"; Components: core
+Source: "scripts\pyshell";                  DestDir: "{code:GetPythonDir}\Scripts"; Components: core
+Source: "scripts\pycrust";                  DestDir: "{code:GetPythonDir}\Scripts"; Components: core
+Source: "scripts\pywrap";                   DestDir: "{code:GetPythonDir}\Scripts"; Components: core
+Source: "scripts\xrced";                    DestDir: "{code:GetPythonDir}\Scripts"; Components: core
 
 Source: "samples\doodle\*.py";              DestDir: "{app}\wxPython\samples\doodle"; Components: samples
 Source: "samples\doodle\*.txt";             DestDir: "{app}\wxPython\samples\doodle"; Components: samples
@@ -170,15 +190,17 @@ Source: "samples\doodle\superdoodle.iss";   DestDir: "{app}\wxPython\samples\doo
 Source: "samples\wxProject\*.txt";          DestDir: "{app}\wxPython\samples\wxProject"; Components: samples
 Source: "samples\wxProject\*.py";           DestDir: "{app}\wxPython\samples\wxProject"; Components: samples
 
-Source: "samples\StyleEditor\*.txt";           DestDir: "{app}\wxPython\samples\StyleEditor"; Components: samples
-Source: "samples\StyleEditor\*.py";            DestDir: "{app}\wxPython\samples\StyleEditor"; Components: samples
-Source: "samples\StyleEditor\*.cfg";           DestDir: "{app}\wxPython\samples\StyleEditor"; Components: samples
+Source: "samples\StyleEditor\*.txt";        DestDir: "{app}\wxPython\samples\StyleEditor"; Components: samples
+Source: "samples\StyleEditor\*.py";         DestDir: "{app}\wxPython\samples\StyleEditor"; Components: samples
+Source: "samples\StyleEditor\*.cfg";        DestDir: "{app}\wxPython\samples\StyleEditor"; Components: samples
 
 Source: "samples\pySketch\*.py";           DestDir: "{app}\wxPython\samples\pySketch"; Components: samples
 Source: "samples\pySketch\images\*.bmp";   DestDir: "{app}\wxPython\samples\pySketch\images"; Components: samples
 
 Source: "samples\frogedit\*.py";           DestDir: "{app}\wxPython\samples\frogedit"; Components: samples
 
+Source: "samples\hangman\*.py";            DestDir: "{app}\wxPython\samples\hangman"; Components: samples
+
 Source: "samples\embedded\*.py";           DestDir: "{app}\wxPython\samples\embedded"; Components: samples
 Source: "samples\embedded\*.cpp";          DestDir: "{app}\wxPython\samples\embedded"; Components: samples
 Source: "samples\embedded\*.txt";          DestDir: "{app}\wxPython\samples\embedded"; Components: samples
@@ -187,6 +209,10 @@ Source: "samples\embedded\*.unx";          DestDir: "{app}\wxPython\samples\embe
 Source: "samples\embedded\*.ico";          DestDir: "{app}\wxPython\samples\embedded"; Components: samples
 Source: "samples\embedded\*.xpm";          DestDir: "{app}\wxPython\samples\embedded"; Components: samples
 
+Source: "samples\wx_examples\basic\*.py";  DestDir: "{app}\wxPython\samples\wx_examples\basic"; Components: samples
+Source: "samples\wx_examples\hello\*.py";  DestDir: "{app}\wxPython\samples\wx_examples\hello"; Components: samples
+Source: "samples\wx_examples\hello\*.jpg"; DestDir: "{app}\wxPython\samples\wx_examples\hello"; Components: samples
+
 Source: "src\winxp.manifest";              DestDir: "{code:GetPythonDir}"; DestName: "python.exe.manifest"; Components: core
 Source: "src\winxp.manifest";              DestDir: "{code:GetPythonDir}"; DestName: "pythonw.exe.manifest"; Components: core
 
@@ -194,24 +220,29 @@ Source: "src\winxp.manifest";              DestDir: "{code:GetPythonDir}"; DestN
 ;;------------------------------------------------------------
 
 [Run]
+;; Compile the .py files
+Filename: "{code:GetPythonDir}\python.exe";  Parameters: "{code:GetPythonDir}\Lib\compileall.py {app}\wxPython {app}\wx"; Description: "Compile Python .py files to .pyc"; Flags: postinstall; Components: core
+
 ;; Recreate the tool scripts to use the paths on the users machine
-Filename: "{code:GetPythonDir}\python.exe";  Parameters: "{code:GetPythonDir}\Lib\compileall.py {app}\wxPython"; Description: "Compile Python .py files to .pyc"; Flags: postinstall; Components: core
-Filename: "{code:GetPythonDir}\python.exe";  Parameters: "CreateBatchFiles.py";  WorkingDir: "{code:GetPythonDir}\Scripts";  Description: "Create batch files for tool scripts"; Flags: postinstall; Components: tools
+Filename: "{code:GetPythonDir}\python.exe";  Parameters: "CreateBatchFiles.py";  WorkingDir: "{code:GetPythonDir}\Scripts";  Description: "Create batch files for tool scripts"; Flags: postinstall; Components: core
 
 
 ;;------------------------------------------------------------
 
 [Icons]
-Name: "{group}\Run the DEMO";          Filename: "{code:GetPythonDir}\pythonw.exe";   WorkingDir: "{app}\wxPython\demo";   Parameters: "demo.py"; IconFilename: "{app}\wxPython\demo\wxpdemo.ico"; Components: core
-Name: "{group}\PyCrust";               Filename: "{code:GetPythonDir}\pythonw.exe";   WorkingDir: "c:\";                   Parameters: "{code:GetPythonDir}\Scripts\pycrust";  IconFilename: "{app}\wxPython\lib\PyCrust\PyCrust.ico"; Components: core
-Name: "{group}\PyShell";               Filename: "{code:GetPythonDir}\pythonw.exe";   WorkingDir: "c:\";                   Parameters: "{code:GetPythonDir}\Scripts\pyshell";  IconFilename: "{app}\wxPython\lib\PyCrust\PyCrust.ico"; Components: core
+Name: "{group}\Run the wxPython DEMO"; Filename: "{code:GetPythonDir}\pythonw.exe";   WorkingDir: "{app}\wxPython\demo";   Parameters: "demo.py"; IconFilename: "{app}\wxPython\demo\wxpdemo.ico"; Components: core
+Name: "{group}\PyCrust";               Filename: "{code:GetPythonDir}\pythonw.exe";   WorkingDir: "c:\";                   Parameters: "{code:GetPythonDir}\Scripts\pycrust";     IconFilename: "{app}\wxPython\py\PyCrust.ico"; Components: core
+Name: "{group}\PyShell";               Filename: "{code:GetPythonDir}\pythonw.exe";   WorkingDir: "c:\";                   Parameters: "{code:GetPythonDir}\Scripts\pyshell";     IconFilename: "{app}\wxPython\py\PyCrust.ico"; Components: core
+Name: "{group}\PyAlaMode";             Filename: "{code:GetPythonDir}\pythonw.exe";   WorkingDir: "c:\";                   Parameters: "{code:GetPythonDir}\Scripts\pyalamode";   IconFilename: "{app}\wxPython\py\PyCrust.ico"; Components: core
+Name: "{group}\PyAlaCarte";            Filename: "{code:GetPythonDir}\pythonw.exe";   WorkingDir: "c:\";                   Parameters: "{code:GetPythonDir}\Scripts\pyalacarte";  IconFilename: "{app}\wxPython\py\PyCrust.ico"; Components: core
 Name: "{group}\wxWindows Reference";   Filename: "{app}\wxPython\docs\wx.chm";                Components: docs
 Name: "{group}\wxOGL Reference";       Filename: "{app}\wxPython\docs\ogl.chm";               Components: docs
 Name: "{group}\licence.txt";           Filename: "{app}\wxPython\docs\licence\licence.txt";   Components: core
 Name: "{group}\README.txt";            Filename: "{app}\wxPython\docs\README.txt";            Components: core
 Name: "{group}\CHANGES.txt";           Filename: "{app}\wxPython\docs\CHANGES.txt";           Components: core
 Name: "{group}\Sample Apps";           Filename: "{app}\wxPython\samples"; Components: samples
-Name: "{group}\Resource Editor";       Filename: "{code:GetPythonDir}\pythonw.exe";   WorkingDir: "c:\";   Parameters: "{code:GetPythonDir}\Scripts\xrced"; IconFilename: "{app}\wxPython\Tools\XRCed\xrced.ico"; Components: tools
+Name: "{group}\Resource Editor";       Filename: "{code:GetPythonDir}\pythonw.exe";   WorkingDir: "c:\";   Parameters: "{code:GetPythonDir}\Scripts\xrced"; IconFilename: "{app}\wxPython\Tools\XRCed\xrced.ico"; Components: core
+Name: "{group}\wxPython Docs";         Filename: "{app}\wxPython\docs\wxPythonDocs.html";     Components: docs
 
 
 ;;------------------------------------------------------------
@@ -228,12 +259,14 @@ Type: files; Name: "{app}\wxPython\lib\mixins\*.pyc";
 Type: files; Name: "{app}\wxPython\lib\mixins\*.pyo";
 Type: files; Name: "{app}\wxPython\lib\PyCrust\*.pyc";
 Type: files; Name: "{app}\wxPython\lib\PyCrust\*.pyo";
-Type: files; Name: "{app}\wxPython\lib\PyCrust\decor\*.pyc";
-Type: files; Name: "{app}\wxPython\lib\PyCrust\decor\*.pyo";
-Type: files; Name: "{app}\wxPython\lib\PyCrust\wxd\*.pyc";
-Type: files; Name: "{app}\wxPython\lib\PyCrust\wxd\*.pyo";
 Type: files; Name: "{app}\wxPython\lib\colourchooser\*.pyc";
 Type: files; Name: "{app}\wxPython\lib\colourchooser\*.pyo";
+Type: files; Name: "{app}\wxPython\py\*.pyc";
+Type: files; Name: "{app}\wxPython\py\*.pyo";
+Type: files; Name: "{app}\wxPython\py\tests\*.pyc";
+Type: files; Name: "{app}\wxPython\py\tests\*.pyo";
+Type: files; Name: "{app}\wxPython\py\wxd\*.pyc";
+Type: files; Name: "{app}\wxPython\py\wxd\*.pyo";
 Type: files; Name: "{app}\wxPython\tools\*.pyc";
 Type: files; Name: "{app}\wxPython\tools\*.pyo";
 Type: files; Name: "{app}\wxPython\tools\XRCed\*.pyc";
@@ -253,6 +286,13 @@ Type: files; Name: "{app}\wxPython\samples\StyleEditor\*.pyc";
 Type: files; Name: "{app}\wxPython\samples\StyleEditor\*.pyo";
 Type: files; Name: "{app}\wxPython\samples\frogedit\*.pyc";
 Type: files; Name: "{app}\wxPython\samples\frogedit\*.pyo";
+Type: files; Name: "{app}\wxPython\samples\hangman\*.pyc";
+Type: files; Name: "{app}\wxPython\samples\hangman\*.pyo";
+Type: files; Name: "{app}\wxPython\samples\hangman\*.txt";
+Type: files; Name: "{app}\wxPython\samples\wx_examples\basic\*.pyc";
+Type: files; Name: "{app}\wxPython\samples\wx_examples\basic\*.pyo";
+Type: files; Name: "{app}\wxPython\samples\wx_examples\hello\*.pyc";
+Type: files; Name: "{app}\wxPython\samples\wx_examples\hello\*.pyo";
 Type: files; Name: "{app}\wxPython\demo\data\*.pyc";
 Type: files; Name: "{app}\wxPython\demo\data\*.pyo";
 Type: files; Name: "{app}\wxPython\demo\dllwidget\*.pyc";
@@ -261,6 +301,24 @@ Type: files; Name: "{app}\wxPython\samples\embedded\*.pyc";
 Type: files; Name: "{app}\wxPython\samples\embedded\*.pyo";
 Type: files; Name: "{app}\wxPython\samples\pySketch\*.pyc";
 Type: files; Name: "{app}\wxPython\samples\pySketch\*.pyo";
+Type: files; Name: "{app}\wx\*.pyc";
+Type: files; Name: "{app}\wx\*.pyo";
+Type: files; Name: "{app}\wx\lib\*.pyc";
+Type: files; Name: "{app}\wx\lib\*.pyo";
+Type: files; Name: "{app}\wx\lib\colourchooser\*.pyc";
+Type: files; Name: "{app}\wx\lib\colourchooser\*.pyo";
+Type: files; Name: "{app}\wx\lib\editor\*.pyc";
+Type: files; Name: "{app}\wx\lib\editor\*.pyo";
+Type: files; Name: "{app}\wx\lib\mixins\*.pyc";
+Type: files; Name: "{app}\wx\lib\mixins\*.pyo";
+Type: files; Name: "{app}\wx\py\*.pyc";
+Type: files; Name: "{app}\wx\py\*.pyo";
+Type: files; Name: "{app}\wx\tools\*.pyc";
+Type: files; Name: "{app}\wx\tools\*.pyo";
+Type: files; Name: "{app}\wx\tools\XRCed\*.pyc";
+Type: files; Name: "{app}\wx\tools\XRCed\*.pyo";
+
+
 
 
 '''
@@ -380,7 +438,7 @@ def main():
     verglob = {}
     execfile("wxPython/__version__.py", verglob)
 
-    VERSION    = verglob["ver"]
+    VERSION    = verglob["wxVERSION_STRING"]
     SHORTVER   = VERSION[:3]
 
     WXDLL, PYTHONVER = find_DLLs()
diff --git a/wxPython/distrib/make_static_setup.py b/wxPython/distrib/make_static_setup.py
new file mode 100644
index 0000000000..7ba0d9f7a9
--- /dev/null
+++ b/wxPython/distrib/make_static_setup.py
@@ -0,0 +1,111 @@
+#!/bin/env python
+#---------------------------------------------------------------------------
+# This script generates a template that can be used in the Python
+# build process (on posix systems) in order to staticly link the
+# wxPython modules into the Python executable.  The output of this
+# script should be put into a file named Setup.local (or perhaps just
+# concatenated to Setup) in the Modules dir of the Python source
+# distribution, then just build Python like normal.
+#
+# You can use any of the command-line args that setup.py understands
+# with this script too in order to control what modules are built and
+# which compile options and such are used.
+#
+# This script must be run from the wxPython directory.
+#---------------------------------------------------------------------------
+
+
+import sys, os, re
+
+# if you need to change some setup.py flags do it here before it is
+# imported.  Just append to sys.argv.
+sys.argv.append("BUILD_GLCANVAS=0")
+sys.argv.append("BUILD_OGL=0")
+sys.argv.append("BUILD_DLLWIDGET=0")
+#sys.argv.append("CORE_ONLY=1")
+
+import setup
+
+
+def printitem(st):
+    if st:
+        print '\\\n\t', st,
+
+
+def buildflags(items, flag, path=None):
+    st = ''
+    for item in items:
+        if path is not None and item[0] != '/':
+            item = os.path.join(path, item)
+        st += "%s%s " % (flag, item)
+    return st
+
+
+def buildmacros(items):
+    st = ''
+    for item in items:
+        if len(item) == 1:
+            st += "-U%s " % item[0]
+        elif item[1] is None:
+            st += "-D%s " % item[0]
+        else:
+            st += "-D%s=%s " % item
+    return st
+
+
+# Python's makesetup can't handle -D flags with = in them, so we need to workaround
+def fixmacros(st):
+    defs = []
+    pat = re.compile(r'-D([A-Za-z0-9_]*)=([A-Za-z0-9_]*)')
+    match = pat.search(st)
+    while match is not None:
+        name = match.group(1)
+        value = match.group(2)
+        defs.append("m_%s = -D%s=%s" % (name, name, value))
+        st = st[:match.start()] + ("$(m_%s)" % name) +  st[match.end():]
+        match = pat.search(st)
+
+    return st, defs
+
+
+
+def main():
+    cwd = os.getcwd()
+
+    print """\
+# This file is autogenerated by %s and should be
+# placed in the <PythonDist>/Modules/Setup.local file before
+# Python is built.
+
+*static*
+
+""" % sys.argv[0]
+
+    for ext in setup.wxpExtensions:
+        eca = " ".join(ext.extra_compile_args)
+        macros =  buildmacros(ext.define_macros)
+
+        eca, defs = fixmacros(eca)
+        print "\n".join(defs)
+        macros, defs = fixmacros(macros)
+        print "\n".join(defs)
+
+        print ext.name,
+        for s in ext.sources:
+            printitem(os.path.join(cwd, s))
+        printitem(buildflags(ext.include_dirs, '-I', cwd))
+        printitem(buildflags(ext.library_dirs, '-L'))
+        printitem(buildflags(ext.libraries, '-l'))
+        printitem(macros)
+        printitem(eca)
+        # filter out some options that makesetup can't handle, but it shouldn't hurt to remove these...
+        ela = filter(lambda x: x not in ['-pthread', '-rdynamic'], ext.extra_link_args)
+        printitem(" ".join(ela))
+
+        print; print; print
+
+
+
+if __name__ == "__main__":
+    main()
+
diff --git a/wxPython/distrib/makerpm b/wxPython/distrib/makerpm
index f9e7604374..6d6088d515 100755
--- a/wxPython/distrib/makerpm
+++ b/wxPython/distrib/makerpm
@@ -136,14 +136,16 @@ if [ -z "${skipcopy}" ]; then
     cp -pf --link ${wxdir}/* ${tarver} > /dev/null 2>&1
 
     # copy all top dirs except CVS, build, demos, utils, samples, and wxPython
-    for d in art contrib debian distrib docs include lib locale misc src; do
-	cp -Rpf --link ${wxdir}/$d ${tarver} #> /dev/null 2>&1
+    for d in art contrib debian distrib docs include lib locale misc patches src; do
+	if [ -e ${wxdir}/$d ]; then
+	    cp -Rpf --link ${wxdir}/$d ${tarver} #> /dev/null 2>&1
+	fi
     done
 
     # now do the same thing for wxPython, skipping it's build dirs and such
     mkdir ${tarver}/wxPython
     cp -pf --link ${wxdir}/wxPython/* ${tarver}/wxPython > /dev/null 2>&1
-    for d in contrib demo distrib distutils samples scripts src wxPython; do
+    for d in contrib demo distrib distutils docs licence samples scripts src wx wxPython; do
 	cp -Rpf --link ${wxdir}/wxPython/$d ${tarver}/wxPython #> /dev/null 2>&1
     done
 
diff --git a/wxPython/distrib/wxPythonFull.spec.in b/wxPython/distrib/wxPythonFull.spec.in
index fa0745bb6f..15bb0ea82b 100644
--- a/wxPython/distrib/wxPythonFull.spec.in
+++ b/wxPython/distrib/wxPythonFull.spec.in
@@ -28,8 +28,12 @@
 # build the name of the real wx-config from the port, flags, etc.
 %define dbgflg %(if [ "%{debug_flag}" = "1" ]; then echo d; fi)
 %define uniflg %(if [ "%{unicode}" = "1" ]; then echo u; fi)
+%define DBGFLG %(if [ "%{debug_flag}" = "1" ]; then echo D; fi)
+%define UNIFLG %(if [ "%{unicode}" = "1" ]; then echo U; fi)
 %define wxconfigname %{wxpref}/bin/wx%{lcport}%{uniflg}%{dbgflg}-%{ver2}-config
 
+# turn off the generation of debuginfo rpm  (RH9)
+%define debug_package %{nil}
 
 #----------------------------------------------------------------
 Summary:   Cross platform GUI toolkit for Python using wx%{port}
@@ -43,13 +47,18 @@ Packager:  Robin Dunn <robin@alldunn.com>
 Group:     Development/Python
 BuildRoot: %{_tmppath}/%{name}-buildroot
 Prefix:    %{pref}
-#BuildRequires: %{python}
 
 Provides: wxPython  = %{version}
 Provides: wxPython%{port}  = %{version}
 
+Provides: libwx_%{lcport}%{uniflg}%{dbgflg}-%{ver2}.so
+Provides: libwx_%{lcport}%{uniflg}%{dbgflg}-%{ver2}.so(WX%{port}%{UNIFLG}%{DBGFLG}_%{ver2})
+Provides: libwx_%{lcport}%{uniflg}%{dbgflg}_gl-%{ver2}.so
+Provides: libwx_%{lcport}%{uniflg}%{dbgflg}_gl-%{ver2}.so(WX%{port}%{UNIFLG}%{DBGFLG}_%{ver2})
+
+
 # old wxPython packages
-Obsoletes: wxPython
+Obsoletes: wxPython wxPython%{port}
 
 
 %description
@@ -127,8 +136,6 @@ cd $WXDIR/wxPython
 	WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build" \
 	build
 
-##	WX_CONFIG="$WXDIR/build/wx-config --inplace --prefix=$RPM_BUILD_ROOT%{wxpref}" \
-
 
 
 # Build wxrc (XRC resource tool) but don't use the makefiles since they expect
@@ -138,7 +145,7 @@ WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build"
 wCC=`$WX_CONFIG --cc`
 wCXX=`$WX_CONFIG --cxx`
 
-for f in wxrc.cpp ../../src/xrc/*.cpp; do
+for f in wxrc.cpp ../../src/xrc/xml.cpp ../../src/xrc/xmlres.cpp; do
     echo $f
     $wCXX `$WX_CONFIG --cxxflags` -I ../../include -I ../../src/xrc/expat/xmlparse -I ../../src/xrc/expat/xmltok -c $f
 done
@@ -147,9 +154,6 @@ for f in ../../src/xrc/expat/xmlparse/xmlparse.c ../../src/xrc/expat/xmltok/xmlr
     $wCC `$WX_CONFIG --cxxflags` -I ../../include -I ../../src/xrc/expat/xmlparse -I ../../src/xrc/expat/xmltok -c $f
 done
 
-# the handlers are not needed
-rm xh_*.o xmlrsall.o
-
 $wCXX `$WX_CONFIG --libs` *.o -o wxrc
 strip wxrc
 
@@ -189,8 +193,10 @@ for s in \
 	img2png \
 	img2py \
 	img2xpm \
+	pyalacarte \
+	pyalamode \
 	pycrust \
-	pycwrap \
+	pywrap \
 	pyshell \
 	xrced; do
     cp scripts/$s $RPM_BUILD_ROOT/%{pref}/bin
@@ -201,6 +207,37 @@ done
 cp $WXDIR/contrib/utils/wxrc/wxrc $RPM_BUILD_ROOT/%{pref}/bin
 
 
+# Copy icons and make menu entries
+#-- This only works for Mandrake.  Is there a cross-distro way to do it?
+##mkdir -p $RPM_BUILD_ROOT/%{_iconsdir}
+##mkdir -p $RPM_BUILD_ROOT/%{_miconsdir}
+##mkdir -p $RPM_BUILD_ROOT/%{_menudir}
+##install -p -m 644 $WXDIR/wxPython/wxPython/py/PyCrust_32.png $RPM_BUILD_ROOT/%{_iconsdir}/PyCrust.png
+##install -p -m 644 $WXDIR/wxPython/wxPython/py/PyCrust_16.png $RPM_BUILD_ROOT/%{_miconsdir}/PyCrust.png
+##install -p -m 644 $WXDIR/wxPython/wxPython/tools/XRCed/XRCed_32.png $RPM_BUILD_ROOT/%{_iconsdir}/XRCed.png
+##install -p -m 644 $WXDIR/wxPython/wxPython/tools/XRCed/XRCed_16.png $RPM_BUILD_ROOT/%{_miconsdir}/XRCed.png
+##
+##cat > $RPM_BUILD_ROOT/%{_menudir}/%{name} <<EOF
+##?package(%{name}): command="%_bindir/pyshell" needs="X11" \
+##icon="PyCrust.png" section="Applications/Development" \
+##title="PyShell" longtitle="Python Shell"
+##
+##?package(%{name}): command="%_bindir/pycrust" needs="X11" \
+##icon="PyCrust.png" section="Applications/Development" \
+##title="PyCrust" longtitle="Python Shell with Filling"
+##
+##?package(%{name}): command="%_bindir/pyalamode" needs="X11" \
+##icon="PyCrust.png" section="Applications/Development" \
+##title="PyAlaMode" longtitle="Python Shell with Filling and editor windows"
+##
+##?package(%{name}): command="%_bindir/xrced" needs="X11" \
+##icon="XRCed.png" section="Applications/Development" \
+##title="XRCed" longtitle="wxPython XRC resource editor"
+##
+##EOF
+
+
+
 # Generate the filelists.  For some reason the %defattr below is still
 # resulting in many (but not all) files not owned by root when just
 # specifying directories and wildcards to be included in each package.
@@ -218,6 +255,8 @@ $GFL    $RPM_BUILD_ROOT %{wxpref}                  >> FILELIST
 $GFL    $RPM_BUILD_ROOT %{wxpref}/lib              >> FILELIST
 $GFL    $RPM_BUILD_ROOT "%{wxpref}/lib/libwx*"     >> FILELIST
 $GFL -r $RPM_BUILD_ROOT %{wxpref}/share            >> FILELIST
+###GFL -r $RPM_BUILD_ROOT %{_iconsdir}               >> FILELIST
+##$GFL -r $RPM_BUILD_ROOT %{_menudir}                >> FILELIST
 
 $GFL    $RPM_BUILD_ROOT %{wxpref}/include           > DEVELLIST
 $GFL -r $RPM_BUILD_ROOT %{wxpref}/include/wx       >> DEVELLIST
@@ -226,6 +265,13 @@ $GFL    $RPM_BUILD_ROOT %{wxconfigname}            >> DEVELLIST
 $GFL    $RPM_BUILD_ROOT %{wxpref}/bin/wx-config    >> DEVELLIST
 
 
+#----------------------------------------------------------------
+##%post
+##%{update_menus}
+##
+##%postun
+##%{clean_menus}
+
 #----------------------------------------------------------------
 %clean
 [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
@@ -237,7 +283,7 @@ $GFL    $RPM_BUILD_ROOT %{wxpref}/bin/wx-config    >> DEVELLIST
 %defattr(-,root,root)
 %doc docs/preamble.txt docs/licence.txt docs/readme.txt docs/changes.txt
 %doc wxPython/README.txt wxPython/CHANGES.txt
-
+%doc wxPython/docs/*
 
 %files -n wxPython%{port}-devel -f DEVELLIST
 %defattr(-,root,root)
diff --git a/wxPython/distrib/wx_conv.py b/wxPython/distrib/wx_conv.py
new file mode 100644
index 0000000000..1ac2d1b819
--- /dev/null
+++ b/wxPython/distrib/wx_conv.py
@@ -0,0 +1,220 @@
+"""
+Convert modules from the old 'from wxPython.wx import *' style to
+the new 'import wx' style.
+
+Author: dfh@forestfield.co.uk (David Hughes)
+
+
+This should probably go in the tools package and have a startup script
+like the others, but I don't think it's ready for prime-time yet.  So
+just put it in distrib for now so it doesn't get lost...
+
+--Robin
+"""
+
+
+import os, sys, time
+import string
+t0 = time.time()
+
+
+import wx
+print 'length = ', len(wx._newnames)
+
+for key in ['true', 'True', 'false', 'False']:      # use native Python not wx.<bool>
+    if key in wx._newnames:
+        del wx._newnames[key]
+
+import wx.calendar, wx.gizmos, wx.glcanvas, wx.grid, wx.help, wx.html,   \
+       wx.htmlhelp, wx.iewin, wx.ogl, wx.stc, wx.wizard, wx.xrc
+import wx.lib
+##import wx.lib.activexwrapper, wx.lib.analogclock, wx.lib.anchors,  \
+import wx.lib.activexwrapper,  wx.lib.anchors,  \
+       wx.lib.buttons, wx.lib.calendar, wx.lib.ClickableHtmlWindow,  \
+       wx.lib.colourdb, wx.lib.colourselect, wx.lib.dialogs,   \
+       wx.lib.ErrorDialogs, wx.lib.evtmgr, wx.lib.fancytext,   \
+       wx.lib.filebrowsebutton, wx.lib.gridmovers, wx.lib.grids,  \
+       wx.lib.imagebrowser, wx.lib.imageutils, wx.lib.infoframe,   \
+       wx.lib.intctrl, wx.lib.layoutf, wx.lib.multisash,   \
+       wx.lib.popupctl, wx.lib.printout, wx.lib.rcsizer,   \
+       wx.lib.rightalign, wx.lib.sheet, wx.lib.stattext,   \
+       wx.lib.throbber, wx.lib.timectrl, wx.lib.wxPlotCanvas,   \
+       wx.lib.wxpTag
+import wx.lib.mixins, wx.lib.editor, wx.lib.colourchooser
+import wx.lib.mixins.grid, wx.lib.mixins.imagelist,    \
+       wx.lib.mixins.listctrl
+##       wx.lib.mixins.listctrl, wx.lib.mixins.rubberband
+import wx.lib.editor.editor, wx.lib.editor.images, wx.lib.editor.selection
+import wx.lib.colourchooser.canvas, wx.lib.colourchooser.intl, wx.lib.colourchooser.pycolourbox,   \
+       wx.lib.colourchooser.pycolourchooser, wx.lib.colourchooser.pycolourslider, wx.lib.colourchooser.pypalette
+
+wxlist = []
+for kd in wx._newnames.items():
+    wxlist.append(kd)
+wxlist.sort()
+
+n = 0
+for item in wxlist:
+    n += 1
+##    print n, item
+print 'length = ', len(wx._newnames)
+print 'imports completed in ', time.time()-t0, 'secs'
+
+base_path = 'G:/wxConvert/Test1'
+exclude_dir = ( 'wx', 'wx_cc', 'reportlab', 'sqlite')       # MUST exclude wx if it is below base_dir, others optional
+
+other_subs = { 'true': 'True',
+               'false': 'False'
+               }
+
+punct = string.punctuation.replace('_','')                  # exclude single underscore
+punct = punct.replace('.','')                               # and period
+punct = punct.replace('*','')                               # and asterisk, all allowed in names
+punctable = string.maketrans(punct, ' '*len(punct))         # map punctuation characters to spaces
+numfiles = 0
+
+#----------------------------------------------------------------------------
+
+class AFile:
+    " file object - collection of properties relating to current instance"
+    def __init__(self, subsdict):
+        self.subsdict = subsdict.copy()     # dictionary of universal and local substitutions to make
+        self.importing = []                 # list of wx modules being imported
+
+#----------------------------------------------------------------------------
+
+def visit(noargs, thispath, contentlist):
+    """ Function is called by os walk for every directory in base_path,
+        including base_path itself. Contentlist is a list of files/dirs in thispath.
+        Wx conversion function is called for every qualifying file in list
+    """
+    path = thispath
+    base = 'something'
+    while base:                             # check if thispath or a parent is excluded
+        path, base = os.path.split(path)
+        if base in exclude_dir:
+            print 'Excluded:', thispath
+            return
+
+    for item in contentlist:
+        pathname = os.path.join(thispath, item)
+        if os.path.isfile(pathname) and pathname[-3:].lower() == '.py':
+            wxconvert(pathname)
+
+def wxconvert(pathname):
+    """ Scan each line of text in pathname. Replace each occurrence of any key in wx._newnames
+        dictionary with the content stored under that key
+    """
+    global numfiles
+    afile = AFile(other_subs)
+    infile = open(pathname, 'r')
+    linelist = infile.readlines()
+    infile.close()
+
+    lnum = 0
+    outlist = []
+    for line in linelist:
+        lnum += 1
+        tokenlist = line.replace('.__', ' ').translate(punctable).split()    # split on white space and punctuation
+        line, status = checkimports(afile, line, tokenlist)                  # return line with 'import' modifications
+        if not status:
+            print 'Unable to convert line %d in %s' % (lnum, pathname)
+            break
+        else:
+            for key in afile.subsdict:                    # do other changes first
+                if line.find(key) >= 0:
+                    line = line.replace(key, afile.subsdict[key])
+            for token in tokenlist:                     # change wx names
+                if token in wx._newnames:
+                    candidate = wx._newnames[token]
+                    module = candidate[:candidate.rfind('.')]
+                    if module in afile.importing:
+                        line = line.replace(token, candidate)
+        outlist.append(line)
+    else:
+        outfile = open(pathname, 'w')
+        outfile.writelines(outlist)
+        numfiles += 1
+        print 'Converted:', pathname
+        outfile.close()
+
+def checkimports(afile, line, tlist):
+    """ Scan tokenlist for wxPython import statement. Add to afile.subsdict any
+        name changes that are necessary for the rest of the current source file.
+        Add to afile.importing any new import modules
+        Return a tuple (status, newstring) -
+           line, possibly modified if an import statmeny
+           status: 0: unable to handle complexity, 1: OK
+    """
+    aline = line
+    if len(tlist) == 0: return (aline, 1)
+    indent = ''
+    for ch in line:
+        if ch in string.whitespace:
+            indent += ' '
+        else:
+            break
+
+    if tlist[0] == 'import':        # import module [as name] [module [as name]...]
+        skip = False
+        for t in tlist[1:]:
+            if skip:
+                skip = False
+            elif t == 'as':
+                skip = True
+            elif t.startswith('wx'):
+                aline = aline.replace(t, rename_module(afile, t))
+    elif (tlist[0] == 'from' and
+            tlist[1] == 'wxPython' and
+              tlist[2] == 'import'):                # from wxPython import module
+        if len(tlist) > 4:                          # ...[as name] [module [as name]...]
+            return ('', 0)                          # too complicated
+        module = rename_module(afile,tlist[-1])
+        aline = indent = 'import ' + module + '\n'
+    elif (tlist[0] == 'from' and
+            tlist[1].startswith('wxPython') and
+              tlist[2] == 'import'):                # from module import ....
+        if tlist[-1] <> '*':                        # ...name [as name] [name [as name]...]
+            aline = aline.replace(tlist[1], rename_module(afile, tlist[1]))
+            skip = False
+            for t in tlist[3:]:
+                if skip:
+                    skip = False
+                elif t == 'as':
+                    skip = True
+                else:
+                    elem = t.split('.')
+                    if elem[-1].startswith('wx'):           # remove wx prefix from last element of name
+                        elem[-1] = elem[-1][2:]
+                        afile.subsdict[t] = '.'.join(elem)  # and apply to each occurrence in source
+        else:                       # from module import *
+            module = rename_module(afile,tlist[1])
+            aline = indent = 'import ' + module + '\n'
+    return (aline, 1)
+
+def rename_module(afile, t, type='A'):
+    """ Substitute  wx for wxPython.wx or wx, and wx.foo.bar for wxPython.foo.bar in token
+        foo.bar => wx.foo.bar is also permitted (from wxPython import foo.bar)
+    """
+    if t in ['wx', 'wxPython.wx']:
+        module = 'wx'
+    elif t.startswith('wxPython'):
+        module = t.replace('wxPython', 'wx')
+    elif t.startswith('wx'):
+        module = t
+    else:
+        module = 'wx.' + t
+    if module not in afile.importing:
+        afile.importing.append(module)
+    return module
+
+def main():
+    " Convert every file in base_dir and all subdirectories except in exclude_dir list"
+
+    os.path.walk(base_path, visit, None)
+    print '%d files converted in %.2f seconds' % (numfiles, time.time() - t0)
+
+#----------------------------------------------------------------------------
+
+if __name__ == '__main__':
+    main()
diff --git a/wxPython/distrib/wx_create.py b/wxPython/distrib/wx_create.py
new file mode 100644
index 0000000000..baf85ae6b7
--- /dev/null
+++ b/wxPython/distrib/wx_create.py
@@ -0,0 +1,116 @@
+"""
+wx_create.py
+
+Originally written by David Hughes  <dfh@forestfield.co.uk>
+Massivly hacked by Robin Dunn
+
+This automatically creates all the stub modules that are required in
+the wx package in addition to __init__.py
+
+The module names to make stubs for are found by scanning the wxPython
+package directory.  The default directory searched is ../wxPython, but
+you can specify a different one on the command-line if needed.
+
+The content of each module (.py file) is taken from wxmodule_template
+with appropriate substitution of the %name% tokens
+
+"""
+
+import os, sys, glob
+
+wxmodule_template = """
+\"\"\"Renamer stub: provides a way to drop the wx prefix from wxPython objects.\"\"\"
+
+__cvsid__ = \"\x24Id: \x24\"
+__revision__ = \"\x24Revision: \x24\"[11:-2]
+
+from wx import _rename
+from wxPython%(prefix)s import %(suffix)s
+_rename(globals(), %(suffix)s.__dict__, modulename='%(name)s')
+del %(suffix)s
+del _rename
+"""
+
+wxPython_dir = "../wxPython"
+
+subpackage_list = ['.',
+                   'lib', 'lib/mixins', 'lib/editor', 'lib/colourchooser',
+                   'py',
+                   'tools', 'tools/XRCed',
+                   ]
+
+skip_modules = [ '__init__', '__version__',
+                 'wx', 'windows', 'windows2', 'windows3', 'events', 'fonts', 'misc',
+                 'misc2', 'gdi', 'mdi', 'controls', 'controls2', 'cmndlgs',
+                 'stattool', 'frames', 'image', 'printfw', 'sizers', 'clip_dnd',
+                 'filesys', 'streams', 'htmlhelp', 'oglbasic',  'oglshapes',
+                 'oglshapes2', 'oglcanvas', 'stc_', 'utils', 'dllwidget_',
+
+                 'PyAlaModeTest',
+                 ]
+
+
+
+
+
+# Check for command-line arg
+if len(sys.argv) > 1:
+    wxPython_dir = sys.argv[1]
+
+# check wxPython_dir
+if not os.path.exists(wxPython_dir) or not os.path.isdir(wxPython_dir):
+    print wxPython_dir, "does not exist or is not a directory!"
+    sys.exit()
+
+# check current location
+if os.path.basename(os.getcwd()) <> 'wx':
+    print 'This must be run from inside the target "wx" directory'
+    sys.exit()
+
+
+# build the modules and subpackages as needed
+for subdir in subpackage_list:
+    # create subdir if needed
+    if not os.path.exists(subdir):
+        os.mkdir(subdir)
+
+    # create __init__.py if needed
+    if os.path.isdir(subdir):
+        fname = os.path.join(subdir, '__init__.py')
+        if not os.path.exists(fname):
+            f = open(fname, 'w')
+            f.write("# Python package\n")
+            f.close()
+    else:
+        print subdir + 'exists but is not a directory'
+        sys.exit()
+
+    # find the .py files there and make renamer stubs for them here
+    src = os.path.join(wxPython_dir, subdir, "*.py")
+    for srcname in glob.glob(src):
+        suffix = os.path.splitext(os.path.basename(srcname))[0]
+        if suffix in skip_modules:
+            continue
+        prefix = subdir.replace('/', '.')
+        if prefix == '.':
+            prefix = ''
+            name = suffix
+        else:
+            name = prefix + '.' + suffix
+            prefix = '.' + prefix
+
+        fname = os.path.join(subdir, suffix+".py")
+
+        content = wxmodule_template % globals()
+        f = open(fname, 'w')
+        f.write(content)
+        f.close()
+        print fname + ' created'
+
+
+
+sys.exit()
+
+
+
+
diff --git a/wxPython/docs/PyManual.txt b/wxPython/docs/PyManual.txt
new file mode 100644
index 0000000000..55c5170c4b
--- /dev/null
+++ b/wxPython/docs/PyManual.txt
@@ -0,0 +1,225 @@
+===============
+ The Py Manual
+===============
+
+-------------------------
+ Py - Served Fresh Daily 
+-------------------------
+
+:Author: Patrick K. O'Brien
+:Contact: pobrien@orbtech.com
+:Organization: Orbtech_
+:Date: $Date$
+:Revision: $Revision$
+
+.. _Orbtech: http://www.orbtech.com/
+
+.. contents::
+
+
+Introduction
+============
+
+This document will show you how to use the Py programs and the Py
+library of Python source code modules.  Py is the new name for the
+project that began as PyCrust.  Py is officially part of wxPython_,
+and includes PyCrust, so PyCrust is no longer distributed separately.
+
+.. _wxPython: http://www.wxpython.org/
+
+
+Developer Reference
+===================
+
+Source code documentation for developers is available at:
+
+http://www.orbtech.com/www/wx/epydoc/public/wx.py-module.html
+
+
+What is Py?
+===========
+
+Besides being `a delicious dessert`_, Py is the name for a collection
+of whimsically-named Python programs and modules that began as the
+PyCrust project.  So Py is really several things: a set of standalone
+programs, including the original PyCrust program, a library of Python
+source code modules that can be used in your own programs, a set of
+decorator classes that enhance the wxPython class library, and as many
+examples of bad "pie" puns as I can come up with.  (If you're going to
+do something, you might as well do it all the way, right?)  Py uses
+Python and wxPython, so it works equally well on Windows, Linux and
+Mac OS X.
+
+.. _a delicious dessert: http://www.wikipedia.org/wiki/Pie
+
+
+PyCrust is dead! Long live Py!
+==============================
+
+This project began with a program I created called PyCrust - an
+interactive, graphical Python shell, developed using the wxPython GUI
+toolkit.  For about two years, PyCrust was hosted on SourceForge_.
+Shortly after I created PyCrust, the wxPython folks started including
+it in their distribution.  As the PyCrust project grew, it reached a
+point where I thought the original PyCrust name was too confining.  I
+was using the PyCrust code base to develop programs that weren't just
+Python shells any more.
+
+Around that same time, the wxPython folks asked me if I'd be willing
+to move all my wxPython-related projects into the `wxPython CVS
+repository`_, and become part of the wxPython_/wxWindows_ developer team.
+I decided the time was right to restructure the PyCrust project.
+During the move, the PyCrust package was renamed to "py" (lowercase
+"p") and the collection of programs and modules as a whole became
+known as "Py" (with a capital "P").
+
+.. _wxPython CVS repository: http://cvs.wxwindows.org
+.. _SourceForge: http://www.sf.net/projects/pycrust/
+.. _wxWindows: http://www.wxwindows.org/
+
+The original goal of PyCrust was to be the best interactive, graphical
+Python shell (of course, I claimed it was the "flakiest" Python
+shell).  And that was all I wanted it to be.  But little by little I
+found myself developing a wider variety of tools for wxPython
+applications.  Eventually I'll create a debugger (PySlice, perhaps)
+and whatever else is needed to one day become a complete wxPython
+application development environment (PyFactory?).  In the mean time,
+PyCrust is still the flakiest Python shell, and the other Py programs
+are equally tasty.
+
+At this point, Py has standalone programs that include Python code
+editors (PyAlaCarte and PyAlaMode), interactive Python shells (PyCrust
+and PyShell), and a runtime wrapper (PyWrap).  The runtime wrapper
+utility provides you with runtime introspection capabilities for your
+wxPython programs without having to include PyCrust or PyShell in your
+program, and without having to alter one line of your source code.
+
+Py also contains a collection of modules that you can use in your own
+wxPython applications to provide similar services, either for your own
+use during development, or as an interface for users of your programs.
+These modules are the same ones used by all the Py programs.  In
+addition, Py contains a set of decorator classes that enhance the
+wxPython class library, by dynamically attaching docstrings and call
+signatures at runtime.
+
+
+Py standalone programs
+======================
+
+These are the standalone applications in the Py collection:
+
+* PyAlaCarte
+* PyAlaMode
+* PyCrust
+* PyFilling
+* PyShell
+* PyWrap
+
+
+PyAlaCarte
+==========
+
+PyAlaCarte is a Python source code editor.  It is designed to have a
+simple, single-file interface.  As a standalone application, it is
+good for simple, short editing tasks.  But it is really meant to be
+more of an example of how to embed the Py editor into a wxPython
+application.
+
+
+PyAlaMode
+=========
+
+PyAlaMode is a Python source code editor.  
+
+
+PyCrust
+=======
+
+PyCrust is an interactive, Python shell.  But it's more than just a
+shell.  It includes a tabbed notebook containing a namespace tree
+(PyFilling), and several other things.
+
+
+PyFilling
+=========
+
+PyFilling is a namespace viewer.  It isn't really useful as a
+standalone program, but it does illustrate how to make use of the
+underlying ``filling`` module.
+
+
+PyShell
+=======
+
+PyShell is an interactive, Python shell.  It shares the same base code
+as PyCrust, but doesn't have any of the extra features that appear in
+the PyCrust notebook interface.
+
+.. figure:: /screenshots/PyShell.png
+
+   PyShell running on Mandrake Linux 9.1.
+
+
+PyWrap
+======
+
+PyWrap is a runtime utility that lets you run an existing wxPython
+program with a PyCrust frame at the same time.  Inside the PyCrust
+shell namespace, the local variable ``app`` is assigned to your
+application instance.  In this way you can introspect your entire
+application within the PyCrust shell, as well as the PyFilling
+namespace viewer.  And through the use of the Py decorator classes,
+PyCrust can display wxPython function and method signatures as well as
+docstrings for the entire wxPython library.
+
+
+Py modules
+==========
+
+Py was designed to be modular.  That means graphical code is kept
+separate from non-graphical code, and many of the Py modules can be
+used by other programs.  Likewise, other programs can supply some of
+the modules needed by Py.  For example, you could supply a customized
+interpreter module and plug it in to the PyCrust standalone
+application.  As long as it supports the minimum functionality
+required, PyCrust will work just as well with your interpreter as with
+its default interpreter.
+
+
+Decorator classes
+=================
+
+Py contains a set of decorator classes that enhance the wxPython class
+library, by dynamically attaching docstrings and call signatures at
+runtime.
+
+
+Projects using Py
+=================
+
+* `Conflict Solver`_
+* Gnumed_
+* PyGist
+* PythonCard_
+* RPy_
+* SciPy_
+* Sim42_
+* wxGasp_
+
+.. _Conflict Solver: http://conflictsolver.sourceforge.net/
+.. _Gnumed: http://www.gnumed.org/
+.. _PythonCard: http://www.pythoncard.org/
+.. _RPy: http://rpy.sourceforge.net/
+.. _SciPy: http://www.scipy.org/
+.. _Sim42: http://www.sim42.org/
+.. _wxGasp: http://linus.yorktown.arlington.k12.va.us/CS/APCSC/student_sites/David_Mayo/wxGasp
+
+
+History of changes
+==================
+
+This section lists all the changes that have been made to the Py
+programs and modules, since the beginning.
+
+.. include:: ../wxPython/py/CHANGES.txt
+
diff --git a/wxPython/docs/default.css b/wxPython/docs/default.css
new file mode 100644
index 0000000000..7343b12bc9
--- /dev/null
+++ b/wxPython/docs/default.css
@@ -0,0 +1,208 @@
+/*
+:Author: David Goodger
+:Contact: goodger@users.sourceforge.net
+:date: $Date$
+:version: $Revision$
+:copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+*/
+
+.first {
+  margin-top: 0 }
+
+.last {
+  margin-bottom: 0 }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: black }
+
+dd {
+  margin-bottom: 0.5em }
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.attention, div.caution, div.danger, div.error, div.hint,
+div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.hint p.admonition-title, div.important p.admonition-title,
+div.note p.admonition-title, div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em }
+
+div.footer, div.header {
+  font-size: smaller }
+
+div.sidebar {
+  margin-left: 1em ;
+  border: medium outset ;
+  padding: 0em 1em ;
+  background-color: #ffffee ;
+  width: 40% ;
+  float: right }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium outset ;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em }
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr {
+  width: 75% }
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font-family: serif ;
+  font-size: 100% }
+
+pre.line-block {
+  font-family: serif ;
+  font-size: 100% }
+
+pre.literal-block, pre.doctest-block {
+  margin-left: 2em ;
+  margin-right: 2em ;
+  background-color: #eeeeee }
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.option-argument {
+  font-style: italic }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+table {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.citation {
+  border-left: solid thin gray ;
+  padding-left: 0.5ex }
+
+table.docinfo {
+  margin: 2em 4em }
+
+table.footnote {
+  border-left: solid thin black ;
+  padding-left: 0.5ex }
+
+td, th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+th.docinfo-name, th.field-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap }
+
+h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
+  font-size: 100% }
+
+tt {
+  background-color: #eeeeee }
+
+ul.auto-toc {
+  list-style-type: none }
diff --git a/wxPython/docs/docutils.conf b/wxPython/docs/docutils.conf
new file mode 100644
index 0000000000..f369f22820
--- /dev/null
+++ b/wxPython/docs/docutils.conf
@@ -0,0 +1,6 @@
+[options]
+
+output_encoding: iso-8859-1
+source-link: 1
+datestamp: %Y-%m-%d %H:%M UTC
+generator: 1
diff --git a/wxPython/docs/screenshots/hello-linux.png b/wxPython/docs/screenshots/hello-linux.png
new file mode 100644
index 0000000000000000000000000000000000000000..b67fc8d934a22035ad89c0b144ef41f1d05bb6b5
GIT binary patch
literal 62715
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
E0B~b|_5c6?

literal 0
HcmV?d00001

diff --git a/wxPython/docs/screenshots/hello-mac.png b/wxPython/docs/screenshots/hello-mac.png
new file mode 100644
index 0000000000000000000000000000000000000000..6511d7612beb910336f727d467a102947a70ef5b
GIT binary patch
literal 61195
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
RIEMgyR1`H8KFe8#{U1jS0xbXl

literal 0
HcmV?d00001

diff --git a/wxPython/docs/screenshots/hello-win98.png b/wxPython/docs/screenshots/hello-win98.png
new file mode 100644
index 0000000000000000000000000000000000000000..ac88aed2866ae9e1027c8fadb307f5d4d4c628d7
GIT binary patch
literal 49310
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
S$#?iQB0Nq_@x463@BaYg;|`br

literal 0
HcmV?d00001

diff --git a/wxPython/docs/wxPackage.txt b/wxPython/docs/wxPackage.txt
new file mode 100644
index 0000000000..6c68831424
--- /dev/null
+++ b/wxPython/docs/wxPackage.txt
@@ -0,0 +1,180 @@
+=========================
+ The wxPython wx Package
+=========================
+
+--------------------------------------------------
+ Or, how to survive the new wx namespace changes.
+--------------------------------------------------
+
+:Author: Patrick K. O'Brien
+:Contact: pobrien@orbtech.com
+:Organization: Orbtech_
+:Date: $Date$
+:Revision: $Revision$
+
+.. _Orbtech: http://www.orbtech.com/
+
+.. contents::
+
+
+Introduction
+============
+
+Big things sometimes come in small packages.  This is certainly true
+of the new wx package, which is being introduced in wxPython 2.4.1 as
+a way to allow the "wx" prefix to be dropped from the names of all
+wxPython classes, functions, and constants.  This document should
+answer all the questions you might have concerning the new wx package.
+If not, feel free to contact the author.  I hope you like the new wx
+package as much as I do.
+
+
+Why change anything?
+====================
+
+This change is being made for a couple of reasons.  The first reason
+is to discourage the use of ``import *``, which is a dangerous
+technique that can create name conflicts and bloated namespaces.
+
+The second reason is to remove what some perceive to be a "wart."  For
+example, the following code is rather ugly in that the "wx" prefix on
+the wxFrame class name is no longer useful when you're using the wx
+module prefix::
+
+    from wxPython import wx
+
+    class Frame(wx.wxFrame)
+
+The new wx package allows you to write code like this, instead::
+
+    import wx
+
+    class Frame(wx.Frame)
+
+The third reason is that the wxWindows project intends to do the same
+thing (implement a new wx namespace and drop the "wx" prefix) and we
+want wxPython to lead the way.
+
+
+What does the new wx package do?
+================================
+
+As a way of getting to this new syntax as quickly as possible, the
+code in this new wx package was created.  What it does is alter the
+existing wx namespace dynamically.  By making the changes on-the-fly
+at runtime, we can try out the new syntax before any permanent changes
+are made to the underlying class library.  The downside of making
+these changes at runtime is that there is a slight delay when you
+``import wx``; the upside is that you can start using the new syntax
+now.
+
+
+Will any of this effect my existing code?
+=========================================
+
+No.  Your existing code will continue to work and be supported for
+some time.  It will be up to you to decide when to switch to the new
+syntax.  But all new documentation and code examples will use the new
+syntax.  So don't wait too long.  You wouldn't want anyone calling you
+old-fashioned, would you?
+
+
+How does the new wx package work?
+=================================
+
+It's pretty simple, and pretty clever.  The wx directory contains an
+``__init__.py`` file, making it a Python package.  (In contrast, the
+old wxPython.wx module is a module, not a package.)  When you ``import
+wx`` the code in the ``__init__.py`` file is executed, and that's
+where all the magic takes place.  Let's take a look at the code inside
+the ``__init__.py`` file:
+
+.. include:: ../wx/__init__.py
+   :literal:
+
+Namespaces in Python are implemented as dictionaries.  The dictionary
+used to create the wx package's namespace is accessible using the
+``globals()`` function.  The dictionary used to create the old
+wxPython.wx module's namespace is ``wx.__dict__``.  Once we have these
+two dictionaries, it's a simple matter of iterating through one,
+changing the names, adding the renamed object to the other dictionary,
+and cleaning up a few local variables and imported modules.  Voila!
+
+
+What about all the other modules, like grid, html, and stc?
+===========================================================
+
+There's more to wxPython than just the wx namespace.  And we've got
+those extra modules covered as well.  For each of those modules (as
+well as the lib package) we've got matching modules in the new wx
+package.  Let's take a look at a few of them.
+
+Here is ``html.py``:
+
+.. include:: ../wx/html.py
+   :literal:
+
+And here is ``lib/dialogs.py``:
+
+.. include:: ../wx/lib/dialogs.py
+   :literal:
+
+As you can see, they both rely on the ``prefix.rename()`` function
+defined in ``prefix.py``:
+
+.. include:: ../wx/prefix.py
+   :literal:
+
+Again, the technique is very similar to the one used by the wx
+package.
+
+
+How do I use this new wx package?
+=================================
+
+The wx package is automatically created when you install wxPython
+version 2.4.1 or higher.  So all you have to do is::
+
+    import wx
+
+
+What are the issues with converting old code to use the new wx package?
+======================================================================= 
+
+Obviously, you need to change your import statements from::
+
+    from wxPython import wx
+
+or::
+
+    from wxPython.wx import *
+
+to::
+
+    import wx
+
+Then you need to refer to wx attributes without a "wx" prefix, such
+as::
+
+    class MyFrame(wx.Frame):
+
+In most cases, existing code can be modified with a simple search and
+replace.
+
+One extra issue you might run into when converting existing code is
+that the wx.__version__ attribute is no longer available, since the
+new wx namespace doesn't include any private attributes from the old
+wxPython.wx namespace.  The solution is to use the wx.VERSION_STRING
+attribute, which was introduced in wxPython 2.4.1.
+
+
+Where can I find example programs using the new wx syntax?
+==========================================================
+
+Example programs are included in the wxPython/samples/wx_examples
+directory, and are documented in the wxPythonExamples_ documentation
+file.  Also, all the code in the py package uses the new wx syntax.
+You can learn more about these in the PyManual_.
+
+.. _wxPythonExamples: wxPythonExamples.html
+.. _PyManual: PyManual.html
diff --git a/wxPython/docs/wxPythonDocs.txt b/wxPython/docs/wxPythonDocs.txt
new file mode 100644
index 0000000000..cbc378ecc4
--- /dev/null
+++ b/wxPython/docs/wxPythonDocs.txt
@@ -0,0 +1,77 @@
+========================
+ wxPython Documentation
+========================
+
+:Author: Patrick K. O'Brien
+:Contact: pobrien@orbtech.com
+:Organization: Orbtech_
+:Date: $Date$
+:Revision: $Revision$
+
+.. _Orbtech: http://www.orbtech.com/
+
+
+wxPython Manual
+===============
+
+`The wxPython Manual`_ is a reference to the wxPython toolkit.
+
+.. _The wxPython Manual: wxPythonManual.html
+
+
+wxPython Developer Reference
+============================
+
+`The wxPython source code documentation`_ is for developers, and was
+created using the Epydoc tool.
+
+.. _The wxPython source code documentation: http://www.orbtech.com/www/wx/epydoc/
+
+
+wxPython Tutorial
+=================
+
+`The wxPython Tutorial`_ will help get you started with wxPython.
+
+.. _The wxPython Tutorial:  wxPythonTutorial.html
+
+
+wxPython Examples
+=================
+
+`The wxPython Examples`_ illustrates example programs using wxPython.
+
+.. _The wxPython Examples: wxPythonExamples.html
+
+
+wx Package
+==========
+
+`The wxPython wx Package`_ explains the new prefix-less wx package.
+
+.. _The wxPython wx Package: wxPackage.html
+
+
+Py Manual
+=========
+
+`The Py Manual`_ documents the Py collection of programs and source
+code modules, including:
+
+* PyAlaCarte
+* PyAlaMode
+* PyCrust
+* PyFilling
+* PyShell
+* PyWrap
+
+.. _The Py Manual: PyManual.html
+
+
+Py Developer Reference
+======================
+
+`The Py source code documentation`_ is for developers, and was created
+using the Epydoc tool.
+
+.. _The Py source code documentation: http://www.orbtech.com/www/wx/epydoc/public/wx.py-module.html
diff --git a/wxPython/docs/wxPythonExamples.txt b/wxPython/docs/wxPythonExamples.txt
new file mode 100644
index 0000000000..80c178a6ae
--- /dev/null
+++ b/wxPython/docs/wxPythonExamples.txt
@@ -0,0 +1,118 @@
+=================================
+ Example Programs Using wxPython
+=================================
+
+--------------------------------------------------
+ A survival guide for the post-wx-prefixed world.
+--------------------------------------------------
+
+:Author: Patrick K. O'Brien
+:Contact: pobrien@orbtech.com
+:Organization: Orbtech_
+:Date: $Date$
+:Revision: $Revision$
+
+.. _Orbtech: http://www.orbtech.com/
+
+.. contents::
+
+
+Introduction
+============
+
+This document illustrates example programs using wxPython.  All the
+examples make use of the new wx package syntax introduced in wxPython
+2.4.1, which is a bit different than older examples you might come
+across.
+
+
+Background (with tongue firmly in cheek)
+========================================
+
+If something hits you on the head, don't run around screaming that the
+sky is falling.  Instead, take a close look and see if it wasn't a
+"wx" prefix that hit you.  Apparently, they're dropping off wxPython
+class names like flies dropping dead in the scorching heat of a
+summer's day.
+
+Yes, the world is changing, and even our little wxPython world must
+change with it.  Then again, I'm not fond of pesky summertime flies,
+and I'm not too upset that the "wx" prefixes are going to bite the
+dust.  I think it's for the best.  But, being the kind, considerate
+person that I am, I decided to write this guide to make the wx
+namespace transition easier for everyone, even Chicken Little.
+
+.. note:: Say what?
+
+   If you have no idea what I mean by the "wx namespace transition,"
+   consider yourself lucky.  You can simply use these examples to
+   learn wxPython in its current state (beginning with wxPython
+   version 2.4.1).  All you need to know is that previous wxPython
+   code used a slightly different syntax that some folks (including
+   me) considered ugly.  So we changed it.  And that's when the sky
+   starting falling...
+
+   If you want more of the technical details, read the `wx package
+   documentation`_.
+
+   .. _wx package documentation: wxPackage.html
+
+
+Rather than simply **tell** you that everything will be okay, I
+decided to **show** you that everything will be okay.  To do that,
+I've created a bunch of example programs using the new wx package.  I
+hope you like them.
+
+
+Basic Program Example
+=====================
+
+It doesn't get much simpler than this.  Every wxPython program needs
+an application and a frame.  To encourage good coding habits, I've
+split them into separate modules.  They don't do much, but they're a
+good starting point.
+
+I include a simple App class in the frame module because the PyWrap
+"wrapper" utility (``pywrap``) only works with modules that contain an
+application class.  So including a simple one in each of your frame
+modules allows you to use the PyWrap runtime wrapper and debug your
+frames independent of your full application.
+
+Here is the module (``frame.py``) that defines the frame class:
+
+.. include:: ../samples/wx_examples/basic/frame.py
+   :literal:
+
+And here is the module (``app.py``) that defines the application class
+and imports the frame from ``frame.py``:
+
+.. include:: ../samples/wx_examples/basic/app.py
+   :literal:
+
+
+Hello wxPython Example
+======================
+
+This program displays an image file (``wxPython.jpg``) inside a frame
+sized to match the graphic.
+
+.. figure:: screenshots/hello-win98.png
+   :scale: 100
+
+   Running ``hello.py`` on Windows.
+
+.. figure:: screenshots/hello-linux.png
+   :scale: 100
+
+   Running ``hello.py`` on Linux.
+
+.. figure:: screenshots/hello-mac.png
+   :scale: 100
+
+   Running ``hello.py`` on Mac OS X.
+
+Here is the source code for ``hello.py``:
+
+.. include:: ../samples/wx_examples/hello/hello.py
+   :literal:
+
diff --git a/wxPython/docs/wxPythonManual.txt b/wxPython/docs/wxPythonManual.txt
new file mode 100644
index 0000000000..f01b493fc6
--- /dev/null
+++ b/wxPython/docs/wxPythonManual.txt
@@ -0,0 +1,1040 @@
+=====================
+ The wxPython Manual
+=====================
+
+--------------------------------------------
+ A guide to wxPython for Python programmers
+--------------------------------------------
+
+:Author: Patrick K. O'Brien
+:Contact: pobrien@orbtech.com
+:Organization: Orbtech_
+:Date: $Date$
+:Revision: $Revision$
+:License: wxWindows Free Documentation Licence, Version 3
+
+.. _Orbtech: http://www.orbtech.com/
+
+.. contents::
+
+
+Introduction
+============
+
+This is a guide to the wxPython GUI toolkit, written **by** a Python
+programmer **for** his fellow Python programmers.  It began as a
+simple translation of the wxWindows documentation (which is written
+for C++ programmers), and evolved from there.  And while there's
+nothing wrong with C++...
+
+Okay, you got me there.  I hate C++.  That's why I use Python.  If you
+like C++, go read the wxWindows documentation.  If you'd rather read a
+guide that's written with Python programmers in mind, keep reading
+this one.  If you like it, feel free to send me freshly roasted coffee
+beans, dark chocolate, and large denomination currency.  Better yet,
+buy huge quantities of my wxPython book (written with Robin Dunn) and
+send one to each of your friends, relatives, and coworkers.
+
+
+What is wxPython?
+=================
+
+wxPython is a GUI toolkit for the Python programming language.  It
+allows Python programmers to create programs with a robust, highly
+functional graphical user interface, simply and easily.  It is
+implemented as a Python extension module (native code) that wraps the
+popular wxWindows cross platform GUI library, which is written in C++.
+
+Like Python and wxWindows, wxPython is Open Source, which means that
+it is free for anyone to use and the source code is available for
+anyone to look at and modify.  And anyone can contribute fixes or
+enhnacments to the project.
+
+wxPython is a cross-platform toolkit.  This means that the same
+program will run on multiple platforms without modification.
+Currently supported platforms are 32-bit Microsoft Windows, most Unix
+or unix-like systems, and Macintosh OS X.
+
+Since the language is Python, wxPython programs are simple, easy to
+write and easy to understand.
+
+
+wxPython requirements
+=====================
+
+To make use of wxPython, you currently need one of the following
+setups.
+
+MS-Windows
+----------
+
+* A 486 or higher PC running MS Windows. 
+* At least ?? MB of disk space. 
+
+Linux or Unix
+-------------
+
+* Almost any C++ compiler, including GNU C++ (EGCS 1.1.1 or above).
+* Almost any Unix workstation, and one of: GTK+ 1.2, GTK+ 2.0, Motif
+  1.2 or higher, Lesstif.
+* At least ?? MB of disk space. 
+
+Mac OS X
+--------
+
+* A PowerPC Mac running Mac OS X 10.x. 
+* At least ?? MB of disk space.
+
+
+What is wxWindows?
+==================
+
+wxWindows is a C++ framework providing GUI (Graphical User Interface)
+and other facilities on more than one platform.  Version 2 currently
+supports all desktop versions of MS Windows, Unix with GTK+, Unix with
+Motif, and MacOS.  An OS/2 port is in progress.
+
+wxWindows was originally developed at the Artificial Intelligence
+Applications Institute, University of Edinburgh, for internal use, and
+was first made publicly available in 1992.  Version 2 is a vastly
+improved version written and maintained by Julian Smart, Robert
+Roebling, Vadim Zeitlin, Vaclav Slavik and many others.
+
+Please note that in the following, "MS Windows" often refers to all
+platforms related to Microsoft Windows, including 16-bit and 32-bit
+variants, unless otherwise stated.  All trademarks are acknowledged.
+
+
+Why another cross-platform development tool?
+============================================
+
+wxWindows was developed to provide a cheap and flexible way to
+maximize investment in GUI application development.  While a number of
+commercial class libraries already existed for cross-platform
+development, none met all of the following criteria:
+
+* low price
+* source availability
+* simplicity of programming
+* support for a wide range of compilers
+
+Since wxWindows was started, several other free or almost-free GUI
+frameworks have emerged.  However, none has the range of features,
+flexibility, documentation and the well-established development team
+that wxWindows has.
+
+As open source software, wxWindows has benefited from comments, ideas,
+bug fixes, enhancements and the sheer enthusiasm of users.  This gives
+wxWindows a certain advantage over its commercial competitors (and
+over free libraries without an independent development team), plus a
+robustness against the transience of one individual or company.  This
+openness and availability of source code is especially important when
+the future of thousands of lines of application code may depend upon
+the longevity of the underlying class library.
+
+Version 2 goes much further than previous versions in terms of
+generality and features, allowing applications to be produced that are
+often indistinguishable from those produced using single-platform
+toolkits such as Motif, GTK+ and MFC.
+
+The importance of using a platform-independent class library cannot be
+overstated, since GUI application development is very time-consuming,
+and sustained popularity of particular GUIs cannot be guaranteed.
+Code can very quickly become obsolete if it addresses the wrong
+platform or audience.  wxWindows helps to insulate the programmer from
+these winds of change.  Although wxWindows may not be suitable for
+every application (such as an OLE-intensive program), it provides
+access to most of the functionality a GUI program normally requires,
+plus many extras such as network programming, PostScript output, and
+HTML rendering; and it can of course be extended as needs dictate.  As
+a bonus, it provides a far cleaner and easier programming interface
+than the native APIs.  Programmers may find it worthwhile to use
+wxWindows even if they are developing on only one platform.
+
+It is impossible to sum up the functionality of wxWindows in a few
+paragraphs, but here are some of the benefits:
+
+* Low cost (free, in fact!) 
+* You get the source. 
+* Available on a variety of popular platforms. 
+* Works with almost all popular C++ compilers and Python. 
+* Over 50 example programs. 
+* Over 1000 pages of printable and on-line documentation. 
+* Includes Tex2RTF, to allow you to produce your own documentation in
+  Windows Help, HTML and Word RTF formats.
+* Simple-to-use, object-oriented API. 
+* Flexible event system. 
+* Graphics calls include lines, rounded rectangles, splines,
+  polylines, etc.
+* Constraint-based and sizer-based layouts. 
+* Print/preview and document/view architectures. 
+* Toolbar, notebook, tree control, advanced list control classes. 
+* PostScript generation under Unix, normal MS Windows printing on the
+  PC.
+* MDI (Multiple Document Interface) support. 
+* Can be used to create DLLs under Windows, dynamic libraries on Unix. 
+* Common dialogs for file browsing, printing, colour selection, etc. 
+* Under MS Windows, support for creating metafiles and copying them to
+  the clipboard.
+* An API for invoking help from applications. 
+* Ready-to-use HTML window (supporting a subset of HTML). 
+* Dialog Editor for building dialogs. 
+* Network support via a family of socket and protocol classes. 
+* Support for platform independent image processing. 
+* Built-in support for many file formats (BMP, PNG, JPEG, GIF, XPM,
+  PNM, PCX).
+
+
+wxPython Overview
+=================
+
+To set a wxPython application going, you will need to derive an App
+class and override App.OnInit.
+
+An application must have a top-level Frame or Dialog window.  Each
+frame may contain one or more instances of classes such as Panel,
+SplitterWindow or other windows and controls.
+
+A frame can have a MenuBar, a ToolBar, a status line, and an Icon for
+when the frame is iconized.
+
+A Panel is used to place controls (classes derived from Control) which
+are used for user interaction.  Examples of controls are Button,
+CheckBox, Choice, ListBox, RadioBox, Slider.
+
+Instances of Dialog can also be used for controls, and they have the
+advantage of not requiring a separate frame.
+
+Instead of creating a dialog box and populating it with items, it is
+possible to choose one of the convenient common dialog classes, such
+as MessageDialog and FileDialog.
+
+You never draw directly onto a window.  Instead, you use a device
+context (DC).  DC is the base for ClientDC, PaintDC, MemoryDC,
+PostScriptDC, MemoryDC, MetafileDC and PrinterDC.  If your drawing
+functions have DC as a parameter, you can pass any of these DCs to the
+function, and thus use the same code to draw to several different
+devices.  You can draw using the member functions of DC, such as
+DC.DrawLine and DC.DrawText.  Control colour on a window (Colour) with
+brushes (Brush) and pens (Pen).
+
+.. To intercept events, you add a DECLARE_EVENT_TABLE macro to the
+   window class declaration, and put a BEGIN_EVENT_TABLE
+   ... END_EVENT_TABLE block in the implementation file. Between these
+   macros, you add event macros which map the event (such as a mouse
+   click) to a member function. These might override predefined event
+   handlers such as for KeyEvent and MouseEvent.
+
+Most modern applications will have an on-line, hypertext help system;
+for this, you need Help and the HelpController class to control
+Help.
+
+GUI applications aren't all graphical wizardry.  You'll also need
+lists and hash tables.  But since you're working with Python, you
+should use the ones Python provides (list, tuple, dict), rather than
+the wxWindows versions.  Same goes for the database related classes.
+The basic rule of thumb is this: If you can do it directly in Python,
+you probably should.  If there is a reason not to use a Python data
+type, wxPython will provide a wrapper for the wxWindows class.
+
+You will undoubtedly need some platform-independent file functions,
+and you may find it handy to maintain and search a list of paths using
+PathList. There's a miscellany of operating system and other
+functions.
+
+See also Classes by Category for a list of classes.
+
+
+Utilities and libraries supplied with wxPython
+==============================================
+
+In addition to the core wxWindows library, a number of further
+libraries and utilities are supplied with each distribution.
+
+[Need to list these.]
+
+
+Creating and deleting wxPython objects
+======================================
+
+[This section needs to be reviewed.]
+
+.. In general, classes derived from wxWindow must dynamically
+   allocated with new and deleted with delete. If you delete a window,
+   all of its children and descendants will be automatically deleted,
+   so you don't need to delete these descendants explicitly.
+
+.. When deleting a frame or dialog, use Destroy rather than delete so
+   that the wxWindows delayed deletion can take effect. This waits
+   until idle time (when all messages have been processed) to actually
+   delete the window, to avoid problems associated with the GUI
+   sending events to deleted windows.
+
+.. If you decide to allocate a C++ array of objects (such as wxBitmap)
+   that may be cleaned up by wxWindows, make sure you delete the array
+   explicitly before wxWindows has a chance to do so on exit, since
+   calling delete on array members will cause memory problems.
+
+.. wxColour can be created statically: it is not automatically cleaned
+   up and is unlikely to be shared between other objects; it is
+   lightweight enough for copies to be made.
+
+.. Beware of deleting objects such as a wxPen or wxBitmap if they are
+   still in use. Windows is particularly sensitive to this: so make
+   sure you make calls like wxDC::SetPen(wxNullPen) or
+   wxDC::SelectObject(wxNullBitmap) before deleting a drawing object
+   that may be in use. Code that doesn't do this will probably work
+   fine on some platforms, and then fail under Windows.
+
+
+App overview
+============
+
+Classes: wx.App
+
+Application initialization
+--------------------------
+
+The OnInit method defined for a class derived from wx.App will usually
+create a top window as a bare minimum.
+
+OnInit must return a boolean value to indicate whether processing
+should continue (True) or not (False).  You call App.SetTopWindow to
+let wxPython know about the top window.
+
+An application closes by destroying all windows.  Because all frames
+must be destroyed for the application to exit, it is advisable to use
+parent frames wherever possible when creating new frames, so that
+deleting the top level frame will automatically delete child frames.
+The alternative is to explicitly delete child frames in the top-level
+frame's CloseEvent handler.
+
+In emergencies the wx.Exit() function can be called to kill the
+application, however, normally the application shuts down
+automatically, see below.
+
+An example of defining an application follows::
+
+    import wx
+
+    from frame import Frame
+
+    class App(wx.App):
+        """Application class."""
+
+        def OnInit(self):
+            self.frame = Frame()
+            self.frame.Show()
+            self.SetTopWindow(self.frame)
+            return True
+
+    def main():
+        app = App()
+        app.MainLoop()
+
+    if __name__ == '__main__':
+        main()
+
+
+Application shutdown
+-------------------- 
+
+The application normally shuts down when the last of its top level
+windows is closed.  This is normally the expected behaviour and means
+that it is enough to call Close() in response to the "Exit" menu
+command if your program has a single top level window.  If this
+behaviour is not desirable, App.SetExitOnFrameDelete can be called to
+change it.  Note that such logic doesn't apply for the windows shown
+before the program enters the main loop: in other words, you can
+safely show a dialog from App.OnInit and not be afraid that your
+application terminates when this dialog -- which is the last top level
+window for the moment -- is closed.
+
+Another aspect of the application shutdown is the OnExit which is
+called when the application exits but before wxPython cleans up its
+internal structures.  You should delete all wxPython objects that you
+created by the time OnExit finishes.
+
+For example, this code may crash:
+
+[Need examples of objects needing cleanup to keep app from crashing.]
+
+
+Sizer overview
+==============
+
+Classes: wx.Sizer, wx.GridSizer, wx.FlexGridSizer, wx.BoxSizer,
+wx.StaticBoxSizer, wx.NotebookSizer, wx.CreateButtonSizer
+
+==============  ======================================================
+
+Sizer           Abstract base class.
+
+GridSizer       A sizer for laying out windows in a grid with all 
+                fields having the same size.
+
+FlexGridSizer   A sizer for laying out windows in a flexible grid.
+
+BoxSizer        A sizer for laying out windows in a row or column.
+
+StaticBoxSizer  Same as BoxSizer, but with a surrounding static box.
+
+NotebookSizer   Sizer to use with the Notebook control.
+
+==============  ======================================================
+
+Sizers, as represented by the wx.Sizer class and its descendants in
+the wxPython class hierarchy, have become the method of choice to
+define the layout of controls in dialogs in wxPython because of their
+ability to create visually appealing dialogs independent of the
+platform, taking into account the differences in size and style of the
+individual controls.  Editors such as wxDesigner, wxrcedit, XRCed and
+wxWorkshop create dialogs based exclusively on sizers, practically
+forcing the user to create platform independent layouts without
+compromises.
+
+
+The idea behind sizers
+----------------------
+
+The layout algorithm used by sizers in wxPython is closely related to
+layout systems in other GUI toolkits, such as Java's AWT, the GTK
+toolkit or the Qt toolkit.  It is based upon the idea of individual
+subwindows reporting their minimal required size and their ability to
+get stretched if the size of the parent window has changed.  This will
+most often mean that the programmer does not set the start-up size of
+a dialog, the dialog will rather be assigned a sizer and this sizer
+will be queried about the recommended size.  This sizer in turn will
+query its children (which can be normal windows, empty space or other
+sizers) so that a hierarchy of sizers can be constructed.  Note that
+wx.Sizer does not derive from wx.Window and thus does not interfere
+with tab ordering and requires very few resources compared to a real
+window on screen.
+
+What makes sizers so well fitted for use in wxPython is the fact that
+every control reports its own minimal size and the algorithm can
+handle differences in font sizes or different window (dialog item)
+sizes on different platforms without problems.  For example, if the
+standard font as well as the overall design of Linux/GTK widgets
+requires more space than on Windows, the initial dialog size will
+automatically be bigger on Linux/GTK than on Windows.
+
+There are currently five different kinds of sizers available in
+wxPython.  Each represents either a certain way to lay out dialog items
+in a dialog or it fulfils a special task such as wrapping a static box
+around a dialog item (or another sizer).  These sizers will be
+discussed one by one in the text below.
+
+
+Common features
+---------------
+
+All sizers are containers, that is, they are used to lay out one
+dialog item (or several dialog items), which they contain.  Such items
+are sometimes referred to as the children of the sizer.  Independent
+of how the individual sizers lay out their children, all children have
+certain features in common:
+
+
+A minimal size
+~~~~~~~~~~~~~~
+
+This minimal size is usually identical to the initial size of the
+controls and may either be set explicitly in the size field of the
+control constructor or may be calculated by wxPython, typically by
+setting the height and/or the width of the item to -1.  Note that only
+some controls can calculate their size (such as a checkbox) whereas
+others (such as a listbox) don't have any natural width or height and
+thus require an explicit size.  Some controls can calculate their
+height, but not their width (e.g. a single line text control):
+
+[Need graphics]
+
+
+A border
+~~~~~~~~
+
+The border is just empty space and is used to separate dialog items in
+a dialog.  This border can either be all around, or at any combination
+of sides such as only above and below the control.  The thickness of
+this border must be set explicitly, typically 5 points.  The following
+samples show dialogs with only one dialog item (a button) and a border
+of 0, 5, and 10 pixels around the button:
+
+[Need graphics]
+
+
+An alignment
+~~~~~~~~~~~~
+
+Often, a dialog item is given more space than its minimal size plus
+its border.  Depending on what flags are used for the respective dialog
+item, the dialog item can be made to fill out the available space
+entirely, i.e. it will grow to a size larger than the minimal size, or
+it will be moved to either the centre of the available space or to
+either side of the space.  The following sample shows a listbox and
+three buttons in a horizontal box sizer; one button is centred, one is
+aligned at the top, one is aligned at the bottom:
+
+[Need graphics]
+
+
+A stretch factor
+~~~~~~~~~~~~~~~~
+
+If a sizer contains more than one child and it is offered more space
+than its children and their borders need, the question arises how to
+distribute the surplus space among the children.  For this purpose, a
+stretch factor may be assigned to each child, where the default value
+of 0 indicates that the child will not get more space than its
+requested minimum size.  A value of more than zero is interpreted in
+relation to the sum of all stretch factors in the children of the
+respective sizer, i.e. if two children get a stretch factor of 1, they
+will get half the extra space each independent of whether one control
+has a minimal sizer inferior to the other or not.  The following
+sample shows a dialog with three buttons, the first one has a stretch
+factor of 1 and thus gets stretched, whereas the other two buttons
+have a stretch factor of zero and keep their initial width:
+
+[Need graphics]
+
+Within wxDesigner, this stretch factor gets set from the Option menu.
+
+
+BoxSizer
+--------
+
+BoxSizer can lay out its children either vertically or horizontally,
+depending on what flag is being used in its constructor.  When using a
+vertical sizer, each child can be centered, aligned to the right or
+aligned to the left.  Correspondingly, when using a horizontal sizer,
+each child can be centered, aligned at the bottom or aligned at the
+top.  The stretch factor described in the last paragraph is used for
+the main orientation, i.e. when using a horizontal box sizer, the
+stretch factor determines how much the child can be stretched
+horizontally.  The following sample shows the same dialog as in the
+last sample, only the box sizer is a vertical box sizer now:
+
+[Need graphics]
+
+
+StaticBoxSizer
+--------------
+
+StaticBoxSixer is the same as a BoxSizer, but surrounded by a static
+box.  Here is a sample:
+
+[Need graphics]
+
+
+GridSizer
+---------
+
+GridSizer is a two-dimensional sizer.  All children are given the same
+size, which is the minimal size required by the biggest child, in this
+case the text control in the left bottom border.  Either the number of
+columns or the number or rows is fixed and the grid sizer will grow in
+the respectively other orientation if new children are added:
+
+[Need graphics]
+
+
+FlexGridSizer
+-------------
+
+Another two-dimensional sizer derived from GridSizer.  The width of
+each column and the height of each row are calculated individually
+according the minimal requirements from the respectively biggest
+child.  Additionally, columns and rows can be declared to be
+stretchable if the sizer is assigned a size different from that which
+it requested.  The following sample shows the same dialog as the one
+above, but using a flex grid sizer:
+
+[Need graphics]
+
+
+NotebookSizer
+-------------
+
+NotebookSizer can be used with notebooks.  It calculates the size of
+each notebook page and sets the size of the notebook to the size of
+the biggest page plus some extra space required for the notebook tabs
+and decorations.
+
+[Need graphics]
+
+
+Programming with BoxSizer
+-------------------------
+
+The basic idea behind a BoxSizer is that windows will most often be
+laid out in rather simple basic geometry, typically in a row or a
+column or several hierarchies of either.
+
+As an example, we will construct a dialog that will contain a text
+field at the top and two buttons at the bottom.  This can be seen as a
+top-hierarchy column with the text at the top and buttons at the
+bottom and a low-hierarchy row with an OK button to the left and a
+Cancel button to the right.  In many cases (particularly dialogs under
+Unix and normal frames) the main window will be resizable by the user
+and this change of size will have to get propagated to its children.
+In our case, we want the text area to grow with the dialog, whereas
+the button shall have a fixed size.  In addition, there will be a thin
+border around all controls to make the dialog look nice and - to make
+matter worse - the buttons shall be centred as the width of the dialog
+changes.
+
+It is the unique feature of a box sizer, that it can grow in both
+directions (height and width) but can distribute its growth in the
+main direction (horizontal for a row) unevenly among its children.  In
+our example case, the vertical sizer is supposed to propagate all its
+height changes to only the text area, not to the button area.  This is
+determined by the proportion parameter when adding a window (or
+another sizer) to a sizer.  It is interpreted as a weight factor,
+i.e. it can be zero, indicating that the window may not be resized at
+all, or above zero.  If several windows have a value above zero, the
+value is interpreted relative to the sum of all weight factors of the
+sizer, so when adding two windows with a value of 1, they will both
+get resized equally much and each half as much as the sizer owning
+them.
+
+Then what do we do when a column sizer changes its width?  This
+behaviour is controlled by flags (the second parameter of the Add()
+function): zero or no flag indicates that the window will preserve it
+is original size, wx.GROW flag (same as wx.EXPAND) forces the window
+to grow with the sizer, and wx.SHAPED flag tells the window to change
+it is size proportionally, preserving original aspect ratio.  When
+wx.GROW flag is not used, the item can be aligned within available
+space.  wx.ALIGN_LEFT, wx.ALIGN_TOP, wx.ALIGN_RIGHT, wx.ALIGN_BOTTOM,
+wx.ALIGN_CENTER_HORIZONTAL and wx.ALIGN_CENTER_VERTICAL do what they
+say.  wx.ALIGN_CENTRE (same as wx.ALIGN_CENTER) is defined as
+(``wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL``).  Default
+alignment is ``wx.ALIGN_LEFT | wx.ALIGN_TOP``.
+
+As mentioned above, any window belonging to a sizer may have border,
+and it can be specified which of the four sides may have this border,
+using the wx.TOP, wx.LEFT, wx.RIGHT and wx.BOTTOM constants or wx.ALL
+for all directions (and you may also use wx.NORTH, wx.WEST etc
+instead).  These flags can be used in combination with the alignment
+flags above as the second parameter of the Add() method using the
+binary or operator (``|``).  The sizer of the border also must be made
+known, and it is the third parameter in the Add() method.  This means,
+that the entire behaviour of a sizer and its children can be
+controlled by the three parameters of the Add() method.
+
+[Show code and graphic here.]
+
+
+Programming with GridSizer
+--------------------------
+
+GridSizer is a sizer which lays out its children in a two-dimensional
+table with all table fields having the same size, i.e. the width of
+each field is the width of the widest child, the height of each field
+is the height of the tallest child.
+
+[Show code and graphic here.]
+
+
+Programming with FlexGridSizer
+------------------------------
+
+FlexGridSizer is a sizer which lays out its children in a
+two-dimensional table with all table fields in one row having the same
+height and all fields in one column having the same width, but all
+rows or all columns are not necessarily the same height or width as in
+the GridSizer.
+
+[Show code and graphic here.]
+
+
+Programming with NotebookSizer
+------------------------------
+
+NotebookSizer is a specialized sizer to make sizers work in connection
+with using notebooks.  This sizer is different from any other sizer as
+you must not add any children to it - instead, it queries the notebook
+class itself.  The only thing this sizer does is to determine the size
+of the biggest page of the notebook and report an adjusted minimal
+size to a more toplevel sizer.
+
+In order to query the size of notebook page, this page needs to have
+its own sizer, otherwise the NotebookSizer will ignore it.  Notebook
+pages get their sizer by assigning one to them using SetSizer() and
+setting the auto-layout option to True using SetAutoLayout().  Here is
+one example showing how to add a notebook page that the notebook sizer
+is aware of:
+
+[Show code and graphic here.]
+
+
+Programming with StaticBoxSizer
+-------------------------------
+
+StaticBoxSizer is a sizer derived from BoxSizer but adds a static box
+around the sizer.  Note that this static box has to be created
+separately.
+
+[Show code and graphic here.]
+
+
+Dialog.CreateButtonSizer
+------------------------
+
+As a convenience, the Dialog class has a CreateButtonSizer(flags)
+method that can be used to create a standard button sizer in which
+standard buttons are displayed.  The following flags can be passed to
+this method:
+
+=============  =======================================================
+wx.YES_NO      add Yes/No subpanel
+wx.YES         return wx.ID_YES
+wx.NO          return wx.ID_NO
+wx.NO_DEFAULT  make the wx.NO button the default, otherwise wx.YES or 
+               wx.OK button will be default
+wx.OK          return wx.ID_OK
+wx.CANCEL      return wx.ID_CANCEL
+wx.HELP        return wx.ID_HELP
+wx.FORWARD     return wx.ID_FORWARD  
+wx.BACKWARD    return wx.ID_BACKWARD 
+wx.SETUP       return wx.ID_SETUP    
+wx.MORE        return wx.ID_MORE     
+=============  =======================================================
+
+
+Date and time classes overview
+==============================
+
+wxPython provides a set of powerful classes to work with dates and
+times.  Some of the supported features of the DateTime class are:
+
+=============  =======================================================
+
+Wide range     The range of supported dates goes from about 4714 B.C. to
+               some 480 million years in the future.
+
+Precision      Not using floating point calculations anywhere ensures that
+               the date calculations don't suffer from rounding
+               errors.
+
+Many features  Not only all usual calculations with dates are
+               supported, but also more exotic week and year day
+               calculations, work day testing, standard astronomical
+               functions, conversion to and from strings in either
+               strict or free format.
+
+
+Efficiency     Objects of DateTime are small (8 bytes) and working
+               with them is fast
+
+=============  =======================================================
+
+
+All date/time classes at a glance
+---------------------------------
+
+There are 3 main classes: except DateTime itself which represents an
+absolute moment in time, there are also two classes - TimeSpan and
+DateSpan which represent the intervals of time.
+
+There are also helper classes which are used together with DateTime:
+DateTimeHolidayAuthority which is used to determine whether a given
+date is a holiday or not and DateTimeWorkDays which is a derivation of
+this class for which (only) Saturdays and Sundays are the holidays.
+See more about these classes in the discussion of the holidays.
+
+
+DateTime characteristics
+------------------------
+
+DateTime stores the time as a signed number of milliseconds since the
+Epoch which is fixed, by convention, to Jan 1, 1970 - however this is
+not visible to the class users (in particular, dates prior to the
+Epoch are handled just as well (or as bad) as the dates after it).
+But it does mean that the best resolution which can be achieved with
+this class is 1 millisecond.
+
+The size of DateTime object is 8 bytes because it is represented as a
+64 bit integer.  The resulting range of supported dates is thus
+approximatively 580 million years, but due to the current limitations
+in the Gregorian calendar support, only dates from Nov 24, 4714BC are
+supported (this is subject to change if there is sufficient interest
+in doing it).
+
+Finally, the internal representation is time zone independent (always
+in GMT) and the time zones only come into play when a date is broken
+into year/month/day components. See more about timezones below.
+
+Currently, the only supported calendar is Gregorian one (which is used
+even for the dates prior to the historic introduction of this calendar
+which was first done on Oct 15, 1582 but is, generally speaking,
+country, and even region, dependent).  Future versions will probably
+have Julian calendar support as well and support for other calendars
+(Maya, Hebrew, Chinese...) is not ruled out.
+
+
+Difference between DateSpan and TimeSpan
+----------------------------------------
+
+While there is only one logical way to represent an absolute moment in
+the time (and hence only one DateTime class), there are at least two
+methods to describe a time interval.
+
+First, there is the direct and self-explaining way implemented by
+TimeSpan: it is just a difference in milliseconds between two moments
+in time.  Adding or subtracting such an interval to DateTime is always
+well-defined and is a fast operation.
+
+But in daily life other, calendar-dependent time interval
+specifications are used.  For example, 'one month later' is commonly
+used.  However, it is clear that this is not the same as TimeSpan of
+60*60*24*31 seconds because 'one month later' Feb 15 is Mar 15 and not
+Mar 17 or Mar 16 (depending on whether the year is leap or not).
+
+This is why there is another class for representing such intervals
+called DateSpan.  It handles these sort of operations in the most
+natural way possible, but note that manipulating with intervals of
+this kind is not always well-defined.  Consider, for example, Jan 31 +
+'1 month': this will give Feb 28 (or 29), i.e. the last day of
+February and not the non-existent Feb 31.  Of course, this is what is
+usually wanted, but you still might be surprised to notice that now
+subtracting back the same interval from Feb 28 will result in Jan 28
+and not Jan 31 we started with!
+
+So, unless you plan to implement some kind of natural language parsing
+in the program, you should probably use TimeSpan instead of DateSpan
+(which is also more efficient).  However, DateSpan may be very useful
+in situations when you do need to understand what 'in a month' means
+(of course, it is just DateTime.Now() + DateSpan.Month()).
+
+
+Date arithmetics
+----------------
+
+Many different operations may be performed with the dates, however not
+all of them make sense.  For example, multiplying a date by a number
+is an invalid operation, even though multiplying either of the time
+span classes by a number is perfectly valid.
+
+Here is what can be done:
+
+==============  ======================================================
+
+Addition        a TimeSpan or DateSpan can be added to DateTime resulting in
+                a new DateTime object and also 2 objects of the same
+                span class can be added together giving another object
+                of the same class.
+
+
+Subtraction     the same types of operations as above are allowed and,
+                additionally, a difference between two DateTime
+                objects can be taken and this will yield TimeSpan.
+
+Multiplication  a TimeSpan or DateSpan object can be multiplied by an
+                integer number resulting in an object of the same
+                type.
+
+
+Unary minus     a TimeSpan or DateSpan object may finally be negated
+                giving an interval of the same magnitude but of
+                opposite time direction.
+
+==============  ======================================================
+
+
+Time zone considerations
+------------------------
+
+Although the time is always stored internally in GMT, you will usually
+work in the local time zone.  Because of this, all DateTime
+constructors and setters which take the broken down date assume that
+these values are for the local time zone.  Thus, DateTime(1,
+DateTime.Jan, 1970) will not correspond to the DateTime Epoch unless
+you happen to live in the UK.
+
+All methods returning the date components (year, month, day, hour,
+minute, second...) will also return the correct values for the local
+time zone by default.  So, generally, doing the natural things will
+lead to natural and correct results.
+
+If you only want to do this, you may safely skip the rest of this
+section.  However, if you want to work with different time zones, you
+should read it to the end.
+
+In this (rare) case, you are still limited to the local time zone when
+constructing DateTime objects, i.e. there is no way to construct a
+DateTime corresponding to the given date in, say, Pacific Standard
+Time.  To do it, you will need to call ToTimezone or MakeTimezone
+methods to adjust the date for the target time zone.  There are also
+special versions of these functions ToGMT and MakeGMT for the most
+common case - when the date should be constructed in GMT.
+
+You also can just retrieve the value for some time zone without
+converting the object to it first.  For this you may pass TimeZone
+argument to any of the methods which are affected by the time zone
+(all methods getting date components and the date formatting ones, for
+example).  In particular, the Format() family of methods accepts a
+TimeZone parameter and this allows to simply print time in any time
+zone.
+
+To see how to do it, the last issue to address is how to construct a
+TimeZone object which must be passed to all these methods. First of
+all, you may construct it manually by specifying the time zone offset
+in seconds from GMT, but usually you will just use one of the symbolic
+time zone names and let the conversion constructor do the
+job. I.e. you would just write
+
+wxDateTime dt(...whatever...);
+printf("The time is %s in local time zone", dt.FormatTime().c_str());
+printf("The time is %s in GMT", dt.FormatTime(wxDateTime::GMT).c_str());
+
+
+Daylight saving time (DST)
+--------------------------
+
+DST (a.k.a. 'summer time') handling is always a delicate task which is
+better left to the operating system which is supposed to be configured
+by the administrator to behave correctly.  Unfortunately, when doing
+calculations with date outside of the range supported by the standard
+library, we are forced to deal with these issues ourselves.
+
+Several functions are provided to calculate the beginning and end of
+DST in the given year and to determine whether it is in effect at the
+given moment or not, but they should not be considered as absolutely
+correct because, first of all, they only work more or less correctly
+for only a handful of countries (any information about other ones
+appreciated!) and even for them the rules may perfectly well change in
+the future.
+
+The time zone handling methods use these functions too, so they are
+subject to the same limitations.
+
+
+DateTime and Holidays
+---------------------
+
+[TODO]
+
+
+Classes by category
+===================
+
+Not done yet.
+
+
+ID constants
+============
+
+wxPython provides the following predefined ID constants:
+
+ID_ABORT
+ID_ABOUT
+ID_ANY
+ID_APPLY
+ID_BACKWARD
+ID_CANCEL
+ID_CLEAR
+ID_CLOSE
+ID_CLOSE_ALL
+ID_CONTEXT_HELP
+ID_COPY
+ID_CUT
+ID_DEFAULT
+ID_DUPLICATE
+ID_EXIT
+ID_FILE1
+ID_FILE2
+ID_FILE3
+ID_FILE4
+ID_FILE5
+ID_FILE6
+ID_FILE7
+ID_FILE8
+ID_FILE9
+ID_FILTERLISTCTRL
+ID_FIND
+ID_FORWARD
+ID_HELP
+ID_HELP_COMMANDS
+ID_HELP_CONTENTS
+ID_HELP_CONTEXT
+ID_HELP_PROCEDURES
+ID_IGNORE
+ID_MORE
+ID_NEW
+ID_NO
+ID_NOTOALL
+ID_OK
+ID_OPEN
+ID_PASTE
+ID_PREVIEW
+ID_PRINT
+ID_PRINT_SETUP
+ID_REDO
+ID_RESET
+ID_RETRY
+ID_REVERT
+ID_SAVE
+ID_SAVEAS
+ID_SELECTALL
+ID_SEPARATOR
+ID_SETUP
+ID_STATIC
+ID_TREECTRL
+ID_UNDO
+ID_YES
+ID_YESTOALL
+
+
+Source document
+===============
+
+The source document is named wxPythonManual.txt and can be found by
+clicking the link at the bottom of this page (assuming you are viewing
+the html file).  It is written using a fantastic formatting convention
+called reStructuredText.  The wxPythonManual.html file is created
+using the Docutils utilities, which can turn reStructuredText
+documents into html, xml, pdf, and even OpenOffice files.
+
+
+Submitting changes to the source document
+=========================================
+
+Some items in the source text file look like this::
+
+    .. This is text from the wxWindows documentation that needs to be
+       translated into something appropriate for the wxPython version.
+       The two dots followed by uniformly indented text turns this
+       paragraph into a reStructuredText comment, so it doesn't appear
+       in any output file, such as the html file.
+
+They have been commented out and are awaiting editorial review and a
+rewrite so that they make sense in the context of wxPython.  Feel free
+to send me suggestions for rewording these, or any other parts of this
+document that you think need improving.  I will be eternally grateful
+to you and will show my gratitude by adding your name to the list of
+contributors.  (Contributors who also send me gifts of coffee,
+chocolate, or currency will have their names listed in bold.)
+
+
+Contributors
+============
+
+Individuals who contributed to this documentation (in order by last
+name):
+
+* Robin Dunn
+* Patrick K. O'Brien
+* Robert Roebling
+* Julian Smart
+* Vadim Zeitlin
+
+
+License
+=======
+
+This document began as a translation of the wxWindows documentation.
+As such, it adheres to the same license, which is provided here:
+
+.. include:: ../licence/licendoc.txt
+   :literal:
diff --git a/wxPython/docs/wxPythonTutorial.txt b/wxPython/docs/wxPythonTutorial.txt
new file mode 100644
index 0000000000..683aa18790
--- /dev/null
+++ b/wxPython/docs/wxPythonTutorial.txt
@@ -0,0 +1,43 @@
+=======================
+ The wxPython Tutorial
+=======================
+
+-----------------------------------------
+ How to get up and running with wxPython
+-----------------------------------------
+
+:Author: Patrick K. O'Brien
+:Contact: pobrien@orbtech.com
+:Organization: Orbtech_
+:Date: $Date$
+:Revision: $Revision$
+:License: wxWindows Free Documentation Licence, Version 3
+
+.. _Orbtech: http://www.orbtech.com/
+
+.. contents::
+
+
+Introduction
+============
+
+This is a tutorial for the wxPython GUI toolkit.  It uses the new wx
+package syntax that was introduced in wxPython 2.4.1.
+
+
+What is wxPython?
+=================
+
+wxPython is a GUI toolkit for the Python programming language.  It
+allows Python programmers to create programs with a graphical user
+interface for Windows, Linux, and Mac OS X.
+
+
+License
+=======
+
+This document adheres to the same license as the other documentation
+that comes with wxWindows:
+
+.. include:: ../licence/licendoc.txt
+   :literal:
diff --git a/wxPython/samples/doodle/doodle.py b/wxPython/samples/doodle/doodle.py
index 4895026e74..15e4de19a6 100644
--- a/wxPython/samples/doodle/doodle.py
+++ b/wxPython/samples/doodle/doodle.py
@@ -6,11 +6,11 @@ can do simple drawings upon.
 """
 
 
-from wxPython.wx import *
+import wx                  # This module uses the new wx namespace
 
 #----------------------------------------------------------------------
 
-class DoodleWindow(wxWindow):
+class DoodleWindow(wx.Window):
     menuColours = { 100 : 'Black',
                     101 : 'Yellow',
                     102 : 'Red',
@@ -32,7 +32,7 @@ class DoodleWindow(wxWindow):
 
 
     def __init__(self, parent, ID):
-        wxWindow.__init__(self, parent, ID, style=wxNO_FULL_REPAINT_ON_RESIZE)
+        wx.Window.__init__(self, parent, ID, style=wx.NO_FULL_REPAINT_ON_RESIZE)
         self.SetBackgroundColour("WHITE")
         self.listeners = []
         self.thickness = 1
@@ -44,20 +44,20 @@ class DoodleWindow(wxWindow):
         self.InitBuffer()
 
         # hook some mouse events
-        EVT_LEFT_DOWN(self, self.OnLeftDown)
-        EVT_LEFT_UP(self, self.OnLeftUp)
-        EVT_RIGHT_UP(self, self.OnRightUp)
-        EVT_MOTION(self, self.OnMotion)
+        wx.EVT_LEFT_DOWN(self, self.OnLeftDown)
+        wx.EVT_LEFT_UP(self, self.OnLeftUp)
+        wx.EVT_RIGHT_UP(self, self.OnRightUp)
+        wx.EVT_MOTION(self, self.OnMotion)
 
         # the window resize event and idle events for managing the buffer
-        EVT_SIZE(self, self.OnSize)
-        EVT_IDLE(self, self.OnIdle)
+        wx.EVT_SIZE(self, self.OnSize)
+        wx.EVT_IDLE(self, self.OnIdle)
 
         # and the refresh event
-        EVT_PAINT(self, self.OnPaint)
+        wx.EVT_PAINT(self, self.OnPaint)
 
         # When the window is destroyed, clean up resources.
-        EVT_WINDOW_DESTROY(self, self.Cleanup)
+        wx.EVT_WINDOW_DESTROY(self, self.Cleanup)
 
 
     def Cleanup(self, evt):
@@ -69,9 +69,9 @@ class DoodleWindow(wxWindow):
     def InitBuffer(self):
         """Initialize the bitmap used for buffering the display."""
         size = self.GetClientSize()
-        self.buffer = wxEmptyBitmap(size.width, size.height)
-        dc = wxBufferedDC(None, self.buffer)
-        dc.SetBackground(wxBrush(self.GetBackgroundColour()))
+        self.buffer = wx.EmptyBitmap(size.width, size.height)
+        dc = wx.BufferedDC(None, self.buffer)
+        dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
         dc.Clear()
         self.DrawLines(dc)
         self.reInitBuffer = False
@@ -80,14 +80,14 @@ class DoodleWindow(wxWindow):
     def SetColour(self, colour):
         """Set a new colour and make a matching pen"""
         self.colour = colour
-        self.pen = wxPen(wxNamedColour(self.colour), self.thickness, wxSOLID)
+        self.pen = wx.Pen(self.colour, self.thickness, wx.SOLID)
         self.Notify()
 
 
     def SetThickness(self, num):
         """Set a new line thickness and make a matching pen"""
         self.thickness = num
-        self.pen = wxPen(wxNamedColour(self.colour), self.thickness, wxSOLID)
+        self.pen = wx.Pen(self.colour, self.thickness, wx.SOLID)
         self.Notify()
 
 
@@ -103,20 +103,20 @@ class DoodleWindow(wxWindow):
 
     def MakeMenu(self):
         """Make a menu that can be popped up later"""
-        menu = wxMenu()
+        menu = wx.Menu()
         keys = self.menuColours.keys()
         keys.sort()
         for k in keys:
             text = self.menuColours[k]
-            menu.Append(k, text, kind=wxITEM_CHECK)
-        EVT_MENU_RANGE(self, 100, 200, self.OnMenuSetColour)
-        EVT_UPDATE_UI_RANGE(self, 100, 200, self.OnCheckMenuColours)
+            menu.Append(k, text, kind=wx.ITEM_CHECK)
+        wx.EVT_MENU_RANGE(self, 100, 200, self.OnMenuSetColour)
+        wx.EVT_UPDATE_UI_RANGE(self, 100, 200, self.OnCheckMenuColours)
         menu.Break()
 
         for x in range(1, self.maxThickness+1):
-            menu.Append(x, str(x), kind=wxITEM_CHECK)
-        EVT_MENU_RANGE(self, 1, self.maxThickness, self.OnMenuSetThickness)
-        EVT_UPDATE_UI_RANGE(self, 1, self.maxThickness, self.OnCheckMenuThickness)
+            menu.Append(x, str(x), kind=wx.ITEM_CHECK)
+        wx.EVT_MENU_RANGE(self, 1, self.maxThickness, self.OnMenuSetThickness)
+        wx.EVT_UPDATE_UI_RANGE(self, 1, self.maxThickness, self.OnCheckMenuThickness)
         self.menu = menu
 
 
@@ -126,8 +126,11 @@ class DoodleWindow(wxWindow):
         text = self.menuColours[event.GetId()]
         if text == self.colour:
             event.Check(True)
+            event.SetText(text.upper())
         else:
             event.Check(False)
+            event.SetText(text)
+
     def OnCheckMenuThickness(self, event):
         if event.GetId() == self.thickness:
             event.Check(True)
@@ -164,7 +167,7 @@ class DoodleWindow(wxWindow):
         current one.  Save the coordinants for redraws.
         """
         if event.Dragging() and event.LeftIsDown():
-            dc = wxBufferedDC(wxClientDC(self), self.buffer)
+            dc = wx.BufferedDC(wx.ClientDC(self), self.buffer)
             dc.BeginDrawing()
             dc.SetPen(self.pen)
             pos = event.GetPositionTuple()
@@ -200,10 +203,10 @@ class DoodleWindow(wxWindow):
         Called when the window is exposed.
         """
         # Create a buffered paint DC.  It will create the real
-        # wxPaintDC and then blit the bitmap to it when dc is
+        # wx.PaintDC and then blit the bitmap to it when dc is
         # deleted.  Since we don't need to draw anything else
         # here that's all there is to it.
-        dc = wxBufferedPaintDC(self, self.buffer)
+        dc = wx.BufferedPaintDC(self, self.buffer)
 
 
     def DrawLines(self, dc):
@@ -212,7 +215,7 @@ class DoodleWindow(wxWindow):
         """
         dc.BeginDrawing()
         for colour, thickness, line in self.lines:
-            pen = wxPen(wxNamedColour(colour), thickness, wxSOLID)
+            pen = wx.Pen(colour, thickness, wx.SOLID)
             dc.SetPen(pen)
             for coords in line:
                 apply(dc.DrawLine, coords)
@@ -240,16 +243,16 @@ class DoodleWindow(wxWindow):
 
 #----------------------------------------------------------------------
 
-class DoodleFrame(wxFrame):
+class DoodleFrame(wx.Frame):
     def __init__(self, parent):
-        wxFrame.__init__(self, parent, -1, "Doodle Frame", size=(800,600),
-                         style=wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE)
+        wx.Frame.__init__(self, parent, -1, "Doodle Frame", size=(800,600),
+                         style=wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)
         doodle = DoodleWindow(self, -1)
 
 #----------------------------------------------------------------------
 
 if __name__ == '__main__':
-    app = wxPySimpleApp()
+    app = wx.PySimpleApp()
     frame = DoodleFrame(None)
     frame.Show(True)
     app.MainLoop()
diff --git a/wxPython/samples/doodle/sample.ddl b/wxPython/samples/doodle/sample.ddl
index f995fdea4d..b22f265118 100644
--- a/wxPython/samples/doodle/sample.ddl
+++ b/wxPython/samples/doodle/sample.ddl
@@ -4008,4 +4008,261 @@ I472
 I599
 I473
 tatp56
+a(S'Red'
+p57
+I4
+(lp58
+(I503
+I412
+I503
+I411
+ta(I503
+I411
+I504
+I411
+ta(I504
+I411
+I504
+I410
+ta(I504
+I410
+I505
+I410
+ta(I505
+I410
+I505
+I409
+ta(I505
+I409
+I506
+I409
+ta(I506
+I409
+I507
+I409
+ta(I507
+I409
+I507
+I408
+ta(I507
+I408
+I508
+I408
+ta(I508
+I408
+I509
+I408
+ta(I509
+I408
+I510
+I408
+ta(I510
+I408
+I511
+I408
+ta(I511
+I408
+I511
+I409
+ta(I511
+I409
+I511
+I410
+ta(I511
+I410
+I512
+I410
+ta(I512
+I410
+I512
+I411
+ta(I512
+I411
+I512
+I412
+ta(I512
+I412
+I512
+I413
+ta(I512
+I413
+I512
+I414
+ta(I512
+I414
+I512
+I415
+ta(I512
+I415
+I511
+I415
+ta(I511
+I415
+I511
+I416
+ta(I511
+I416
+I510
+I416
+ta(I510
+I416
+I510
+I417
+ta(I510
+I417
+I509
+I417
+ta(I509
+I417
+I508
+I418
+ta(I508
+I418
+I508
+I419
+ta(I508
+I419
+I507
+I420
+ta(I507
+I420
+I506
+I421
+ta(I506
+I421
+I505
+I421
+ta(I505
+I421
+I504
+I422
+ta(I504
+I422
+I503
+I423
+ta(I503
+I423
+I503
+I424
+ta(I503
+I424
+I502
+I425
+ta(I502
+I425
+I502
+I426
+tatp59
+a(g57
+I4
+(lp60
+(I503
+I414
+I502
+I414
+ta(I502
+I414
+I502
+I413
+ta(I502
+I413
+I501
+I413
+ta(I501
+I413
+I499
+I412
+ta(I499
+I412
+I498
+I412
+ta(I498
+I412
+I497
+I412
+ta(I497
+I412
+I496
+I412
+ta(I496
+I412
+I495
+I412
+ta(I495
+I412
+I494
+I412
+ta(I494
+I412
+I493
+I413
+ta(I493
+I413
+I493
+I414
+ta(I493
+I414
+I493
+I415
+ta(I493
+I415
+I493
+I416
+ta(I493
+I416
+I493
+I417
+ta(I493
+I417
+I493
+I418
+ta(I493
+I418
+I493
+I419
+ta(I493
+I419
+I493
+I420
+ta(I493
+I420
+I494
+I421
+ta(I494
+I421
+I495
+I422
+ta(I495
+I422
+I496
+I422
+ta(I496
+I422
+I497
+I423
+ta(I497
+I423
+I498
+I423
+ta(I498
+I423
+I498
+I424
+ta(I498
+I424
+I499
+I424
+ta(I499
+I424
+I500
+I424
+ta(I500
+I424
+I500
+I425
+ta(I500
+I425
+I501
+I425
+tatp61
 a.
\ No newline at end of file
diff --git a/wxPython/samples/doodle/superdoodle.py b/wxPython/samples/doodle/superdoodle.py
index 08ee49339e..9816691107 100644
--- a/wxPython/samples/doodle/superdoodle.py
+++ b/wxPython/samples/doodle/superdoodle.py
@@ -7,10 +7,12 @@ intelligent Frame.  This one has a menu and a statusbar, is able to
 save and reload doodles, clear the workspace, and has a simple control
 panel for setting color and line thickness in addition to the popup
 menu that DoodleWindow provides.  There is also a nice About dialog
-implmented using an wxHtmlWindow.
+implmented using an wx.html.HtmlWindow.
 """
 
-from wxPython.wx import *
+import wx                  # This module uses the new wx namespace
+import wx.html
+from wx.lib import buttons # for generic button classes
 from doodle import DoodleWindow
 
 import os, cPickle
@@ -18,25 +20,28 @@ import os, cPickle
 
 #----------------------------------------------------------------------
 
-idNEW    = 11001
-idOPEN   = 11002
-idSAVE   = 11003
-idSAVEAS = 11004
-idCLEAR  = 11005
-idEXIT   = 11006
-idABOUT  = 11007
+wx.RegisterId(5000)  # Give a high starting value for the IDs, just for kicks
 
+idNEW    = wx.NewId()
+idOPEN   = wx.NewId()
+idSAVE   = wx.NewId()
+idSAVEAS = wx.NewId()
+idCLEAR  = wx.NewId()
+idEXIT   = wx.NewId()
+idABOUT  = wx.NewId()
 
-class DoodleFrame(wxFrame):
+
+
+class DoodleFrame(wx.Frame):
     """
     A DoodleFrame contains a DoodleWindow and a ControlPanel and manages
-    their layout with a wxBoxSizer.  A menu and associated event handlers
+    their layout with a wx.BoxSizer.  A menu and associated event handlers
     provides for saving a doodle to a file, etc.
     """
     title = "Do a doodle"
     def __init__(self, parent):
-        wxFrame.__init__(self, parent, -1, self.title, size=(800,600),
-                         style=wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE)
+        wx.Frame.__init__(self, parent, -1, self.title, size=(800,600),
+                         style=wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)
         self.CreateStatusBar()
         self.MakeMenu()
         self.filename = None
@@ -47,9 +52,9 @@ class DoodleFrame(wxFrame):
         # Create a sizer to layout the two windows side-by-side.
         # Both will grow vertically, the doodle window will grow
         # horizontally as well.
-        box = wxBoxSizer(wxHORIZONTAL)
-        box.Add(cPanel, 0, wxEXPAND)
-        box.Add(self.doodle, 1, wxEXPAND)
+        box = wx.BoxSizer(wx.HORIZONTAL)
+        box.Add(cPanel, 0, wx.EXPAND)
+        box.Add(self.doodle, 1, wx.EXPAND)
 
         # Tell the frame that it should layout itself in response to
         # size events.
@@ -73,15 +78,19 @@ class DoodleFrame(wxFrame):
                 f.close()
                 self.doodle.SetLinesData(data)
             except cPickle.UnpicklingError:
-                wxMessageBox("%s is not a doodle file." % self.filename,
-                             "oops!", style=wxOK|wxICON_EXCLAMATION)
+                wx.MessageBox("%s is not a doodle file." % self.filename,
+                             "oops!", style=wx.OK|wx.ICON_EXCLAMATION)
 
 
     def MakeMenu(self):
         # create the file menu
-        menu1 = wxMenu()
-        menu1.Append(idOPEN, "&Open", "Open a doodle file")
-        menu1.Append(idSAVE, "&Save", "Save the doodle")
+        menu1 = wx.Menu()
+
+        # Using the "\tKeyName" syntax automatically creates a
+        # wx.AcceleratorTable for this frame and binds the keys to
+        # the menu items.
+        menu1.Append(idOPEN, "&Open\tCtrl-O", "Open a doodle file")
+        menu1.Append(idSAVE, "&Save\tCtrl-S", "Save the doodle")
         menu1.Append(idSAVEAS, "Save &As", "Save the doodle in a new file")
         menu1.AppendSeparator()
         menu1.Append(idCLEAR, "&Clear", "Clear the current doodle")
@@ -89,30 +98,30 @@ class DoodleFrame(wxFrame):
         menu1.Append(idEXIT, "E&xit", "Terminate the application")
 
         # and the help menu
-        menu2 = wxMenu()
-        menu2.Append(idABOUT, "&About", "Display the gratuitous 'about this app' thingamajig")
+        menu2 = wx.Menu()
+        menu2.Append(idABOUT, "&About\tCtrl-H", "Display the gratuitous 'about this app' thingamajig")
 
         # and add them to a menubar
-        menuBar = wxMenuBar()
+        menuBar = wx.MenuBar()
         menuBar.Append(menu1, "&File")
         menuBar.Append(menu2, "&Help")
         self.SetMenuBar(menuBar)
 
-        EVT_MENU(self, idOPEN,   self.OnMenuOpen)
-        EVT_MENU(self, idSAVE,   self.OnMenuSave)
-        EVT_MENU(self, idSAVEAS, self.OnMenuSaveAs)
-        EVT_MENU(self, idCLEAR,  self.OnMenuClear)
-        EVT_MENU(self, idEXIT,   self.OnMenuExit)
-        EVT_MENU(self, idABOUT,  self.OnMenuAbout)
+        wx.EVT_MENU(self, idOPEN,   self.OnMenuOpen)
+        wx.EVT_MENU(self, idSAVE,   self.OnMenuSave)
+        wx.EVT_MENU(self, idSAVEAS, self.OnMenuSaveAs)
+        wx.EVT_MENU(self, idCLEAR,  self.OnMenuClear)
+        wx.EVT_MENU(self, idEXIT,   self.OnMenuExit)
+        wx.EVT_MENU(self, idABOUT,  self.OnMenuAbout)
 
 
 
     wildcard = "Doodle files (*.ddl)|*.ddl|All files (*.*)|*.*"
 
     def OnMenuOpen(self, event):
-        dlg = wxFileDialog(self, "Open doodle file...", os.getcwd(),
-                           style=wxOPEN, wildcard = self.wildcard)
-        if dlg.ShowModal() == wxID_OK:
+        dlg = wx.FileDialog(self, "Open doodle file...", os.getcwd(),
+                           style=wx.OPEN, wildcard = self.wildcard)
+        if dlg.ShowModal() == wx.ID_OK:
             self.filename = dlg.GetPath()
             self.ReadFile()
             self.SetTitle(self.title + ' -- ' + self.filename)
@@ -127,10 +136,10 @@ class DoodleFrame(wxFrame):
 
 
     def OnMenuSaveAs(self, event):
-        dlg = wxFileDialog(self, "Save doodle as...", os.getcwd(),
-                           style=wxSAVE | wxOVERWRITE_PROMPT,
+        dlg = wx.FileDialog(self, "Save doodle as...", os.getcwd(),
+                           style=wx.SAVE | wx.OVERWRITE_PROMPT,
                            wildcard = self.wildcard)
-        if dlg.ShowModal() == wxID_OK:
+        if dlg.ShowModal() == wx.ID_OK:
             filename = dlg.GetPath()
             if not os.path.splitext(filename)[1]:
                 filename = filename + '.ddl'
@@ -159,7 +168,7 @@ class DoodleFrame(wxFrame):
 #----------------------------------------------------------------------
 
 
-class ControlPanel(wxPanel):
+class ControlPanel(wx.Panel):
     """
     This class implements a very simple control panel for the DoodleWindow.
     It creates buttons for each of the colours and thickneses supported by
@@ -167,36 +176,51 @@ class ControlPanel(wxPanel):
     also a little window that shows an example doodleLine in the selected
     values.  Nested sizers are used for layout.
     """
+
+    BMP_SIZE = 16
+    BMP_BORDER = 3
+
     def __init__(self, parent, ID, doodle):
-        wxPanel.__init__(self, parent, ID, style=wxRAISED_BORDER)
+        wx.Panel.__init__(self, parent, ID, style=wx.RAISED_BORDER)
 
         numCols = 4
         spacing = 4
 
+        btnSize = wx.Size(self.BMP_SIZE + 2*self.BMP_BORDER,
+                          self.BMP_SIZE + 2*self.BMP_BORDER)
+
         # Make a grid of buttons for each colour.  Attach each button
         # event to self.OnSetColour.  The button ID is the same as the
         # key in the colour dictionary.
+        self.clrBtns = {}
         colours = doodle.menuColours
         keys = colours.keys()
         keys.sort()
-        cGrid = wxGridSizer(cols=numCols, hgap=2, vgap=2)
+        cGrid = wx.GridSizer(cols=numCols, hgap=2, vgap=2)
         for k in keys:
-            bmp = self.MakeBitmap(wxNamedColour(colours[k]))
-            b = wxBitmapButton(self, k, bmp)
-            EVT_BUTTON(self, k, self.OnSetColour)
+            bmp = self.MakeBitmap(colours[k])
+            b = buttons.GenBitmapToggleButton(self, k, bmp, size=btnSize )
+            b.SetBezelWidth(1)
+            b.SetUseFocusIndicator(False)
+            wx.EVT_BUTTON(self, k, self.OnSetColour)
             cGrid.Add(b, 0)
+            self.clrBtns[colours[k]] = b
+        self.clrBtns[colours[keys[0]]].SetToggle(True)
 
-        # Save the button size so we can use it for the number buttons
-        btnSize = b.GetSize()
 
         # Make a grid of buttons for the thicknesses.  Attach each button
         # event to self.OnSetThickness.  The button ID is the same as the
         # thickness value.
-        tGrid = wxGridSizer(cols=numCols, hgap=2, vgap=2)
+        self.thknsBtns = {}
+        tGrid = wx.GridSizer(cols=numCols, hgap=2, vgap=2)
         for x in range(1, doodle.maxThickness+1):
-            b = wxButton(self, x, str(x), size=btnSize)
-            EVT_BUTTON(self, x, self.OnSetThickness)
+            b = buttons.GenToggleButton(self, x, str(x), size=btnSize)
+            b.SetBezelWidth(1)
+            b.SetUseFocusIndicator(False)
+            wx.EVT_BUTTON(self, x, self.OnSetThickness)
             tGrid.Add(b, 0)
+            self.thknsBtns[x] = b
+        self.thknsBtns[1].SetToggle(True)
 
         # Make a colour indicator window, it is registerd as a listener
         # with the doodle window so it will be notified when the settings
@@ -208,10 +232,10 @@ class ControlPanel(wxPanel):
 
         # Make a box sizer and put the two grids and the indicator
         # window in it.
-        box = wxBoxSizer(wxVERTICAL)
-        box.Add(cGrid, 0, wxALL, spacing)
-        box.Add(tGrid, 0, wxALL, spacing)
-        box.Add(ci, 0, wxEXPAND|wxALL, spacing)
+        box = wx.BoxSizer(wx.VERTICAL)
+        box.Add(cGrid, 0, wx.ALL, spacing)
+        box.Add(tGrid, 0, wx.ALL, spacing)
+        box.Add(ci, 0, wx.EXPAND|wx.ALL, spacing)
         self.SetSizer(box)
         self.SetAutoLayout(True)
 
@@ -224,15 +248,15 @@ class ControlPanel(wxPanel):
     def MakeBitmap(self, colour):
         """
         We can create a bitmap of whatever we want by simply selecting
-        it into a wxMemoryDC and drawing on it.  In this case we just set
+        it into a wx.MemoryDC and drawing on it.  In this case we just set
         a background brush and clear the dc.
         """
-        bmp = wxEmptyBitmap(16,16)
-        dc = wxMemoryDC()
+        bmp = wx.EmptyBitmap(self.BMP_SIZE, self.BMP_SIZE)
+        dc = wx.MemoryDC()
         dc.SelectObject(bmp)
-        dc.SetBackground(wxBrush(colour))
+        dc.SetBackground(wx.Brush(colour))
         dc.Clear()
-        dc.SelectObject(wxNullBitmap)
+        dc.SelectObject(wx.NullBitmap)
         return bmp
 
 
@@ -241,6 +265,10 @@ class ControlPanel(wxPanel):
         Use the event ID to get the colour, set that colour in the doodle.
         """
         colour = self.doodle.menuColours[event.GetId()]
+        if colour != self.doodle.colour:
+            # untoggle the old colour button
+            self.clrBtns[self.doodle.colour].SetToggle(False)
+        # set the new colour
         self.doodle.SetColour(colour)
 
 
@@ -248,22 +276,28 @@ class ControlPanel(wxPanel):
         """
         Use the event ID to set the thickness in the doodle.
         """
-        self.doodle.SetThickness(event.GetId())
+        thickness = event.GetId()
+        if thickness != self.doodle.thickness:
+            # untoggle the old thickness button
+            self.thknsBtns[self.doodle.thickness].SetToggle(False)
+        # set the new colour
+        self.doodle.SetThickness(thickness)
+
 
 
 #----------------------------------------------------------------------
 
-class ColourIndicator(wxWindow):
+class ColourIndicator(wx.Window):
     """
     An instance of this class is used on the ControlPanel to show
     a sample of what the current doodle line will look like.
     """
     def __init__(self, parent):
-        wxWindow.__init__(self, parent, -1, style=wxSUNKEN_BORDER)
-        self.SetBackgroundColour(wxWHITE)
-        self.SetSize(wxSize(-1, 45))
+        wx.Window.__init__(self, parent, -1, style=wx.SUNKEN_BORDER)
+        self.SetBackgroundColour(wx.WHITE)
+        self.SetSize( (-1, 45) )
         self.colour = self.thickness = None
-        EVT_PAINT(self, self.OnPaint)
+        wx.EVT_PAINT(self, self.OnPaint)
 
 
     def Update(self, colour, thickness):
@@ -281,10 +315,10 @@ class ColourIndicator(wxWindow):
         This method is called when all or part of the window needs to be
         redrawn.
         """
-        dc = wxPaintDC(self)
+        dc = wx.PaintDC(self)
         if self.colour:
             sz = self.GetClientSize()
-            pen = wxPen(wxNamedColour(self.colour), self.thickness)
+            pen = wx.Pen(self.colour, self.thickness)
             dc.BeginDrawing()
             dc.SetPen(pen)
             dc.DrawLine(10, sz.height/2, sz.width-10, sz.height/2)
@@ -293,7 +327,7 @@ class ColourIndicator(wxWindow):
 
 #----------------------------------------------------------------------
 
-class DoodleAbout(wxDialog):
+class DoodleAbout(wx.Dialog):
     """ An about box that uses an HTML window """
 
     text = '''
@@ -318,44 +352,43 @@ instructions: </p>
 
 <p><b>SuperDoodle</b> and <b>wxPython</b> are brought to you by
 <b>Robin Dunn</b> and <b>Total Control Software</b>, Copyright
-&copy; 1997-2001.</p>
+&copy; 1997-2003.</p>
 </body>
 </html>
 '''
 
     def __init__(self, parent):
-        wxDialog.__init__(self, parent, -1, 'About SuperDoodle',
-                          size=wxSize(420, 380))
-        from wxPython.html import wxHtmlWindow
+        wx.Dialog.__init__(self, parent, -1, 'About SuperDoodle',
+                          size=(420, 380) )
 
-        html = wxHtmlWindow(self, -1)
+        html = wx.html.HtmlWindow(self, -1)
         html.SetPage(self.text)
-        button = wxButton(self, wxID_OK, "Okay")
+        button = wx.Button(self, wx.ID_OK, "Okay")
 
         # constraints for the html window
-        lc = wxLayoutConstraints()
-        lc.top.SameAs(self, wxTop, 5)
-        lc.left.SameAs(self, wxLeft, 5)
-        lc.bottom.SameAs(button, wxTop, 5)
-        lc.right.SameAs(self, wxRight, 5)
+        lc = wx.LayoutConstraints()
+        lc.top.SameAs(self, wx.Top, 5)
+        lc.left.SameAs(self, wx.Left, 5)
+        lc.bottom.SameAs(button, wx.Top, 5)
+        lc.right.SameAs(self, wx.Right, 5)
         html.SetConstraints(lc)
 
         # constraints for the button
-        lc = wxLayoutConstraints()
-        lc.bottom.SameAs(self, wxBottom, 5)
-        lc.centreX.SameAs(self, wxCentreX)
+        lc = wx.LayoutConstraints()
+        lc.bottom.SameAs(self, wx.Bottom, 5)
+        lc.centreX.SameAs(self, wx.CentreX)
         lc.width.AsIs()
         lc.height.AsIs()
         button.SetConstraints(lc)
 
         self.SetAutoLayout(True)
         self.Layout()
-        self.CentreOnParent(wxBOTH)
+        self.CentreOnParent(wx.BOTH)
 
 
 #----------------------------------------------------------------------
 
-class DoodleApp(wxApp):
+class DoodleApp(wx.App):
     def OnInit(self):
         frame = DoodleFrame(None)
         frame.Show(True)
diff --git a/wxPython/demo/hangman.py b/wxPython/samples/hangman/hangman.py
similarity index 100%
rename from wxPython/demo/hangman.py
rename to wxPython/samples/hangman/hangman.py
diff --git a/wxPython/samples/wx_examples/basic/__init__.py b/wxPython/samples/wx_examples/basic/__init__.py
new file mode 100644
index 0000000000..b929a7db76
--- /dev/null
+++ b/wxPython/samples/wx_examples/basic/__init__.py
@@ -0,0 +1 @@
+# Python package.
diff --git a/wxPython/samples/wx_examples/basic/app.py b/wxPython/samples/wx_examples/basic/app.py
new file mode 100755
index 0000000000..09013ed834
--- /dev/null
+++ b/wxPython/samples/wx_examples/basic/app.py
@@ -0,0 +1,27 @@
+#!/usr/bin/env python
+
+"""Basic application class."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import wx
+
+from frame import Frame
+
+class App(wx.App):
+    """Application class."""
+
+    def OnInit(self):
+        self.frame = Frame()
+        self.frame.Show()
+        self.SetTopWindow(self.frame)
+        return True
+
+def main():
+    app = App()
+    app.MainLoop()
+
+if __name__ == '__main__':
+    main()
diff --git a/wxPython/samples/wx_examples/basic/frame.py b/wxPython/samples/wx_examples/basic/frame.py
new file mode 100755
index 0000000000..3bcecb9f75
--- /dev/null
+++ b/wxPython/samples/wx_examples/basic/frame.py
@@ -0,0 +1,33 @@
+#!/usr/bin/env python
+
+"""Basic frame class, with App for testing."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import wx
+
+class Frame(wx.Frame):
+    """Frame class."""
+
+    def __init__(self, parent=None, id=-1, title='Title',
+                 pos=wx.DefaultPosition, size=(400, 200)):
+        """Create a Frame instance."""
+        wx.Frame.__init__(self, parent, id, title, pos, size)
+
+class App(wx.App):
+    """Application class."""
+
+    def OnInit(self):
+        self.frame = Frame()
+        self.frame.Show()
+        self.SetTopWindow(self.frame)
+        return True
+
+def main():
+    app = App()
+    app.MainLoop()
+
+if __name__ == '__main__':
+    main()
diff --git a/wxPython/samples/wx_examples/hello/__init__.py b/wxPython/samples/wx_examples/hello/__init__.py
new file mode 100644
index 0000000000..b929a7db76
--- /dev/null
+++ b/wxPython/samples/wx_examples/hello/__init__.py
@@ -0,0 +1 @@
+# Python package.
diff --git a/wxPython/samples/wx_examples/hello/hello.py b/wxPython/samples/wx_examples/hello/hello.py
new file mode 100755
index 0000000000..63a29b5666
--- /dev/null
+++ b/wxPython/samples/wx_examples/hello/hello.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python
+
+"""Hello, wxPython! program."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import wx
+
+class Frame(wx.Frame):
+    """Frame class that displays an image."""
+
+    def __init__(self, image, parent=None, id=-1,
+                 pos=wx.DefaultPosition, title='Hello, wxPython!'):
+        """Create a Frame instance and display image."""
+        temp = image.ConvertToBitmap()
+        size = temp.GetWidth(), temp.GetHeight()
+        wx.Frame.__init__(self, parent, id, title, pos, size)
+        self.bmp = wx.StaticBitmap(parent=self, id=-1, bitmap=temp)
+
+class App(wx.App):
+    """Application class."""
+
+    def OnInit(self):
+        wx.InitAllImageHandlers()
+        image = wx.Image('wxPython.jpg', wx.BITMAP_TYPE_JPEG)
+        self.frame = Frame(image)
+        self.frame.Show()
+        self.SetTopWindow(self.frame)
+        return True
+
+def main():
+    app = App()
+    app.MainLoop()
+
+if __name__ == '__main__':
+    main()
diff --git a/wxPython/samples/wx_examples/hello/wxPython.jpg b/wxPython/samples/wx_examples/hello/wxPython.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9770d4e9b875606a97d3e6cb023b21f1ff85df95
GIT binary patch
literal 14557
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
Bis=9V

literal 0
HcmV?d00001

diff --git a/wxPython/scripts/CreateBatchFiles.py b/wxPython/scripts/CreateBatchFiles.py
index 871650d52f..d5d861801f 100644
--- a/wxPython/scripts/CreateBatchFiles.py
+++ b/wxPython/scripts/CreateBatchFiles.py
@@ -16,13 +16,15 @@ python = sys.executable
 pythonw = 'start ' + os.path.join(os.path.split(python)[0], 'pythonw.exe')
 scriptdir = os.getcwd()
 
-scripts = [ ("img2png", 0),
-            ("img2py",  0),
-            ("img2xpm", 0),
-            ("xrced",   1),
-            ("pyshell", 1),
-            ("pycrust", 1),
-            ("pycwrap", 1),
+scripts = [ ("img2png",    0),
+            ("img2py",     0),
+            ("img2xpm",    0),
+            ("xrced",      1),
+            ("pyshell",    1),
+            ("pycrust",    1),
+            ("pywrap",     1),
+            ("pyalamode",  1),
+            ("pyalacarte", 1),
             ("helpviewer", 1),
             ]
 
diff --git a/wxPython/scripts/helpviewer.bat b/wxPython/scripts/helpviewer.bat
index d881374690..e08ab42480 100755
--- a/wxPython/scripts/helpviewer.bat
+++ b/wxPython/scripts/helpviewer.bat
@@ -1,3 +1,3 @@
 @echo off
 
-start e:\tools\Python22\pythonw.exe e:\PROJECTS\wx\wxPython\scripts\helpviewer %1 %2 %3 %4 %5 %6 %7 %8 %9
+start E:\TOOLS\PYTHON22\pythonw.exe C:\PROJECTS\wx\wxPython\scripts\helpviewer %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/wxPython/scripts/img2png.bat b/wxPython/scripts/img2png.bat
index a69fee0c02..2b2511328f 100755
--- a/wxPython/scripts/img2png.bat
+++ b/wxPython/scripts/img2png.bat
@@ -1,3 +1,3 @@
 @echo off
 
-e:\tools\Python22\python.exe e:\PROJECTS\wx\wxPython\scripts\img2png %1 %2 %3 %4 %5 %6 %7 %8 %9
+E:\TOOLS\PYTHON22\PYTHON.EXE C:\PROJECTS\wx\wxPython\scripts\img2png %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/wxPython/scripts/img2py.bat b/wxPython/scripts/img2py.bat
index e2451895ec..fa00d7ff02 100755
--- a/wxPython/scripts/img2py.bat
+++ b/wxPython/scripts/img2py.bat
@@ -1,3 +1,3 @@
 @echo off
 
-e:\tools\Python22\python.exe e:\PROJECTS\wx\wxPython\scripts\img2py %1 %2 %3 %4 %5 %6 %7 %8 %9
+E:\TOOLS\PYTHON22\PYTHON.EXE C:\PROJECTS\wx\wxPython\scripts\img2py %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/wxPython/scripts/img2xpm.bat b/wxPython/scripts/img2xpm.bat
index 45bff43e11..560981e8c9 100755
--- a/wxPython/scripts/img2xpm.bat
+++ b/wxPython/scripts/img2xpm.bat
@@ -1,3 +1,3 @@
 @echo off
 
-e:\tools\Python22\python.exe e:\PROJECTS\wx\wxPython\scripts\img2xpm %1 %2 %3 %4 %5 %6 %7 %8 %9
+E:\TOOLS\PYTHON22\PYTHON.EXE C:\PROJECTS\wx\wxPython\scripts\img2xpm %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/wxPython/scripts/pyalacarte b/wxPython/scripts/pyalacarte
new file mode 100755
index 0000000000..8ce50e1b22
--- /dev/null
+++ b/wxPython/scripts/pyalacarte
@@ -0,0 +1,4 @@
+#!/usr/bin/env python
+
+from wx.py.PyAlaCarte import main
+main()
diff --git a/wxPython/scripts/pyalacarte.bat b/wxPython/scripts/pyalacarte.bat
new file mode 100755
index 0000000000..a3936d841f
--- /dev/null
+++ b/wxPython/scripts/pyalacarte.bat
@@ -0,0 +1,3 @@
+@echo off
+
+start E:\TOOLS\PYTHON22\pythonw.exe C:\PROJECTS\wx\wxPython\scripts\pyalacarte %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/wxPython/scripts/pyalamode b/wxPython/scripts/pyalamode
new file mode 100755
index 0000000000..ac3abdc335
--- /dev/null
+++ b/wxPython/scripts/pyalamode
@@ -0,0 +1,4 @@
+#!/usr/bin/env python
+
+from wx.py.PyAlaMode import main
+main()
diff --git a/wxPython/scripts/pyalamode.bat b/wxPython/scripts/pyalamode.bat
new file mode 100755
index 0000000000..8a0b1d33b7
--- /dev/null
+++ b/wxPython/scripts/pyalamode.bat
@@ -0,0 +1,3 @@
+@echo off
+
+start E:\TOOLS\PYTHON22\pythonw.exe C:\PROJECTS\wx\wxPython\scripts\pyalamode %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/wxPython/scripts/pycrust b/wxPython/scripts/pycrust
index e07058e8e2..2c1aec1121 100755
--- a/wxPython/scripts/pycrust
+++ b/wxPython/scripts/pycrust
@@ -1,4 +1,4 @@
 #!/usr/bin/env python
 
-from wxPython.lib.PyCrust.PyCrustApp import main
+from wx.py.PyCrust import main
 main()
diff --git a/wxPython/scripts/pycrust.bat b/wxPython/scripts/pycrust.bat
index a2fc4f3416..d3e9e0bb6b 100755
--- a/wxPython/scripts/pycrust.bat
+++ b/wxPython/scripts/pycrust.bat
@@ -1,3 +1,3 @@
 @echo off
 
-start e:\tools\Python22\pythonw.exe e:\PROJECTS\wx\wxPython\scripts\pycrust %1 %2 %3 %4 %5 %6 %7 %8 %9
+start E:\TOOLS\PYTHON22\pythonw.exe C:\PROJECTS\wx\wxPython\scripts\pycrust %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/wxPython/scripts/pycwrap b/wxPython/scripts/pycwrap
deleted file mode 100755
index 911c5ec778..0000000000
--- a/wxPython/scripts/pycwrap
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env python
-
-from wxPython.lib.PyCrust.wrap import main
-import sys, os
-
-sys.path.insert(0, os.curdir)
-main(sys.argv)
diff --git a/wxPython/scripts/pycwrap.bat b/wxPython/scripts/pycwrap.bat
deleted file mode 100755
index 40562b5629..0000000000
--- a/wxPython/scripts/pycwrap.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-@echo off
-
-start e:\tools\Python22\pythonw.exe e:\PROJECTS\wx\wxPython\scripts\pycwrap %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/wxPython/scripts/pyshell b/wxPython/scripts/pyshell
index ee9e9228b7..30972b58c4 100755
--- a/wxPython/scripts/pyshell
+++ b/wxPython/scripts/pyshell
@@ -1,4 +1,4 @@
 #!/usr/bin/env python
 
-from wxPython.lib.PyCrust.PyShellApp import main
+from wx.py.PyShell import main
 main()
diff --git a/wxPython/scripts/pyshell.bat b/wxPython/scripts/pyshell.bat
index fff21cd258..e9f0031dd9 100755
--- a/wxPython/scripts/pyshell.bat
+++ b/wxPython/scripts/pyshell.bat
@@ -1,3 +1,3 @@
 @echo off
 
-start e:\tools\Python22\pythonw.exe e:\PROJECTS\wx\wxPython\scripts\pyshell %1 %2 %3 %4 %5 %6 %7 %8 %9
+start E:\TOOLS\PYTHON22\pythonw.exe C:\PROJECTS\wx\wxPython\scripts\pyshell %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/wxPython/scripts/pywrap b/wxPython/scripts/pywrap
new file mode 100755
index 0000000000..3bd7ef1f84
--- /dev/null
+++ b/wxPython/scripts/pywrap
@@ -0,0 +1,4 @@
+#!/usr/bin/env python
+
+from wx.py.PyWrap import main
+main()
diff --git a/wxPython/scripts/pywrap.bat b/wxPython/scripts/pywrap.bat
new file mode 100755
index 0000000000..552a7c8d79
--- /dev/null
+++ b/wxPython/scripts/pywrap.bat
@@ -0,0 +1,3 @@
+@echo off
+
+start E:\TOOLS\PYTHON22\pythonw.exe C:\PROJECTS\wx\wxPython\scripts\pywrap %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/wxPython/scripts/xrced.bat b/wxPython/scripts/xrced.bat
index 2bfdd300cb..04f30b1880 100755
--- a/wxPython/scripts/xrced.bat
+++ b/wxPython/scripts/xrced.bat
@@ -1,3 +1,3 @@
 @echo off
 
-start e:\tools\Python22\pythonw.exe e:\PROJECTS\wx\wxPython\scripts\xrced %1 %2 %3 %4 %5 %6 %7 %8 %9
+start E:\TOOLS\PYTHON22\pythonw.exe C:\PROJECTS\wx\wxPython\scripts\xrced %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/wxPython/setup.py b/wxPython/setup.py
index 44ee2e1359..dc52ba0d25 100755
--- a/wxPython/setup.py
+++ b/wxPython/setup.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 #----------------------------------------------------------------------
 
-import sys, os, glob
+import sys, os, glob, fnmatch
 from distutils.core      import setup, Extension
 from distutils.file_util import copy_file
 from distutils.dir_util  import mkpath
@@ -13,7 +13,12 @@ from distutils.command.install_data import install_data
 # flags and values that affect this script
 #----------------------------------------------------------------------
 
-VERSION          = "2.5.0p1"
+VER_MAJOR        = 2      # The first three must match wxWindows
+VER_MINOR        = 5
+VER_RELEASE      = 0
+VER_SUBREL       = 0      # wxPython release num for x.y.z release of wxWindows
+VER_FLAGS        = "p1"   # release flags, such as prerelease num, unicode, etc.
+
 DESCRIPTION      = "Cross platform GUI toolkit for Python"
 AUTHOR           = "Robin Dunn"
 AUTHOR_EMAIL     = "Robin Dunn <robin@alldunn.com>"
@@ -201,7 +206,7 @@ def Verify_WX_CONFIG():
             uf = 'u'
         else:
             uf = ''
-        ver2 = VERSION[:3]
+        ver2 = "%s.%s" % (VER_MAJOR, VER_MINOR)
         WX_CONFIG = 'wx%s%s%s-%s-config' % (WXPORT, uf, df, ver2)
 
         searchpath = os.environ["PATH"]
@@ -295,6 +300,24 @@ def build_locale_list(srcdir):
     return file_list
 
 
+def find_data_files(srcdir, *wildcards):
+    # get a list of all files under the srcdir matching wildcards,
+    # returned in a format to be used for install_data
+
+    def walk_helper(arg, dirname, files):
+        names = []
+        lst, wildcards = arg
+        for wc in wildcards:
+            for f in files:
+                filename = opj(dirname, f)
+                if fnmatch.fnmatch(filename, wc) and not os.path.isdir(filename):
+                    names.append(filename)
+        if names:
+            lst.append( (dirname, names ) )
+
+    file_list = []
+    os.path.walk(srcdir, walk_helper, (file_list, wildcards))
+    return file_list
 
 
 
@@ -381,7 +404,7 @@ if os.name == 'nt':
     lflags = None
 
     # Other MSVC flags...
-    # To bad I don't remember why I was playing with these, can they be removed?
+    # Too bad I don't remember why I was playing with these, can they be removed?
     if FINAL:
         pass #cflags = cflags + ['/O1']
     elif HYBRID :
@@ -482,22 +505,38 @@ else:
 
 
 #----------------------------------------------------------------------
-# post platform setup checks and tweaks
+# post platform setup checks and tweaks, create the full version string
 #----------------------------------------------------------------------
 
 if UNICODE:
     BUILD_BASE = BUILD_BASE + '.unicode'
-    VERSION = VERSION + 'u'
+    VER_FLAGS += 'u'
 
 
+VERSION = "%s.%s.%s.%s%s" % (VER_MAJOR, VER_MINOR, VER_RELEASE,
+                             VER_SUBREL, VER_FLAGS)
+
 #----------------------------------------------------------------------
-# Check if the version file needs updated
+# Update the version file
 #----------------------------------------------------------------------
 
-##if IN_CVS_TREE and newer('setup.py', 'src/__version__.py'):
+# Unconditionally updated since the version string can change based
+# on the UNICODE flag
+open('src/__version__.py', 'w').write("""\
+# This file was generated by setup.py...
+
+wxVERSION_STRING  = '%(VERSION)s'
+wxMAJOR_VERSION   = %(VER_MAJOR)s
+wxMINOR_VERSION   = %(VER_MINOR)s
+wxRELEASE_VERSION = %(VER_RELEASE)s
+wxSUBREL_VERSION  = %(VER_SUBREL)s
+
+wxVERSION = (wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_VERSION,
+             wxSUBREL_VERSION, '%(VER_FLAGS)s')
+
+wxRELEASE_NUMBER = wxRELEASE_VERSION  # for compatibility
+""" % globals())
 
-# Always do it since the version string can change based on the UNICODE flag
-open('src/__version__.py', 'w').write("ver = '%s'\n" % VERSION)
 
 
 
@@ -787,7 +826,11 @@ if BUILD_STC:
 
 
     ext = Extension('stc_c',
-                    ['%s/scintilla/src/AutoComplete.cxx' % STCLOC,
+                    ['%s/PlatWX.cpp' % STCLOC,
+                     '%s/ScintillaWX.cpp' % STCLOC,
+                     '%s/stc.cpp' % STCLOC,
+
+                     '%s/scintilla/src/AutoComplete.cxx' % STCLOC,
                      '%s/scintilla/src/CallTip.cxx' % STCLOC,
                      '%s/scintilla/src/CellBuffer.cxx' % STCLOC,
                      '%s/scintilla/src/ContractionState.cxx' % STCLOC,
@@ -806,31 +849,10 @@ if BUILD_STC:
                      '%s/scintilla/src/UniConversion.cxx' % STCLOC,
                      '%s/scintilla/src/ViewStyle.cxx' % STCLOC,
                      '%s/scintilla/src/WindowAccessor.cxx' % STCLOC,
-
-                     '%s/scintilla/src/LexAda.cxx' % STCLOC,
-                     '%s/scintilla/src/LexAVE.cxx' % STCLOC,
-                     '%s/scintilla/src/LexBaan.cxx' % STCLOC,
-                     '%s/scintilla/src/LexBullant.cxx' % STCLOC,
-                     '%s/scintilla/src/LexCPP.cxx' % STCLOC,
-                     '%s/scintilla/src/LexConf.cxx' % STCLOC,
-                     '%s/scintilla/src/LexCrontab.cxx' % STCLOC,
-                     '%s/scintilla/src/LexEiffel.cxx' % STCLOC,
-                     '%s/scintilla/src/LexHTML.cxx' % STCLOC,
-                     '%s/scintilla/src/LexLisp.cxx' % STCLOC,
-                     '%s/scintilla/src/LexLua.cxx' % STCLOC,
-                     '%s/scintilla/src/LexMatlab.cxx' % STCLOC,
-                     '%s/scintilla/src/LexOthers.cxx' % STCLOC,
-                     '%s/scintilla/src/LexPascal.cxx' % STCLOC,
-                     '%s/scintilla/src/LexPerl.cxx' % STCLOC,
-                     '%s/scintilla/src/LexPython.cxx' % STCLOC,
-                     '%s/scintilla/src/LexRuby.cxx' % STCLOC,
-                     '%s/scintilla/src/LexSQL.cxx' % STCLOC,
-                     '%s/scintilla/src/LexVB.cxx' % STCLOC,
-
-                     '%s/PlatWX.cpp' % STCLOC,
-                     '%s/ScintillaWX.cpp' % STCLOC,
-                     '%s/stc.cpp' % STCLOC,
-                     ] + swig_sources,
+                     '%s/scintilla/src/XPM.cxx' % STCLOC,
+                     ]
+                    + glob.glob('%s/scintilla/src/Lex*.cxx' % STCLOC)
+                    + swig_sources,
 
                     include_dirs = stc_includes,
                     define_macros = stc_defines,
@@ -903,55 +925,17 @@ if BUILD_XRC:
         contrib_copy_tree(opj(CTRB_INC, 'xrc'), opj(XMLINC, 'wx/xrc'))
         contrib_copy_tree(opj(CTRB_SRC, 'xrc'), XMLLOC)
 
-    ext = Extension('xrcc', ['%s/expat/xmlparse/xmlparse.c' % XMLLOC,
-                                '%s/expat/xmltok/xmlrole.c' % XMLLOC,
-                                '%s/expat/xmltok/xmltok.c' % XMLLOC,
-
-                                '%s/xh_bmp.cpp' % XMLLOC,
-                                '%s/xh_bmpbt.cpp' % XMLLOC,
-                                '%s/xh_bttn.cpp' % XMLLOC,
-                                '%s/xh_cald.cpp' % XMLLOC,
-                                '%s/xh_chckb.cpp' % XMLLOC,
-
-                                '%s/xh_chckl.cpp' % XMLLOC,
-                                '%s/xh_choic.cpp' % XMLLOC,
-                                '%s/xh_combo.cpp' % XMLLOC,
-                                '%s/xh_dlg.cpp' % XMLLOC,
-                                '%s/xh_frame.cpp' % XMLLOC,
-
-                                '%s/xh_gauge.cpp' % XMLLOC,
-                                '%s/xh_gdctl.cpp' % XMLLOC,
-                                '%s/xh_html.cpp' % XMLLOC,
-                                '%s/xh_listb.cpp' % XMLLOC,
-                                '%s/xh_listc.cpp' % XMLLOC,
-                                '%s/xh_menu.cpp' % XMLLOC,
-
-                                '%s/xh_notbk.cpp' % XMLLOC,
-                                '%s/xh_panel.cpp' % XMLLOC,
-                                '%s/xh_radbt.cpp' % XMLLOC,
-                                '%s/xh_radbx.cpp' % XMLLOC,
-                                '%s/xh_scrol.cpp' % XMLLOC,
-                                '%s/xh_scwin.cpp' % XMLLOC,
-
-                                '%s/xh_sizer.cpp' % XMLLOC,
-                                '%s/xh_slidr.cpp' % XMLLOC,
-                                '%s/xh_spin.cpp' % XMLLOC,
-                                '%s/xh_split.cpp' % XMLLOC,
-                                '%s/xh_stbmp.cpp' % XMLLOC,
-                                '%s/xh_stbox.cpp' % XMLLOC,
-
-                                '%s/xh_stlin.cpp' % XMLLOC,
-                                '%s/xh_sttxt.cpp' % XMLLOC,
-                                '%s/xh_text.cpp' % XMLLOC,
-                                '%s/xh_toolb.cpp' % XMLLOC,
-                                '%s/xh_tree.cpp' % XMLLOC,
-
-                                '%s/xh_unkwn.cpp' % XMLLOC,
-                                '%s/xml.cpp' % XMLLOC,
-                                '%s/xmlres.cpp' % XMLLOC,
-                                '%s/xmlrsall.cpp' % XMLLOC,
+    ext = Extension('xrcc',
+                    ['%s/expat/xmlparse/xmlparse.c' % XMLLOC,
+                     '%s/expat/xmltok/xmlrole.c' % XMLLOC,
+                     '%s/expat/xmltok/xmltok.c' % XMLLOC,
 
-                             ] + swig_sources,
+                     ] + glob.glob('%s/xh_*.cpp' % XMLLOC) +
+
+                    [ '%s/xml.cpp' % XMLLOC,
+                      '%s/xmlres.cpp' % XMLLOC,
+                      '%s/xmlrsall.cpp' % XMLLOC,
+                      ] + swig_sources,
 
                     include_dirs =  xmlres_includes,
                     define_macros = defines,
@@ -992,11 +976,14 @@ if BUILD_GIZMOS:
         contrib_copy_tree(opj(CTRB_SRC, 'gizmos'), GIZMOLOC)
 
     ext = Extension('gizmosc', [
-                                '%s/dynamicsash.cpp' % GIZMOLOC,
-                                '%s/editlbox.cpp' % GIZMOLOC,
-                                #'%s/multicell.cpp' % GIZMOLOC,
-                                '%s/splittree.cpp' % GIZMOLOC,
-                                '%s/ledctrl.cpp'   % GIZMOLOC,
+                                '%s/dynamicsash.cpp'  % GIZMOLOC,
+                                '%s/editlbox.cpp'     % GIZMOLOC,
+                                '%s/splittree.cpp'    % GIZMOLOC,
+                                '%s/ledctrl.cpp'      % GIZMOLOC,
+                                #'%s/multicell.cpp'    % GIZMOLOC,
+
+                                '%s/treelistctrl.cpp' % location,
+
                              ] + swig_sources,
 
                     include_dirs =  gizmos_includes,
@@ -1172,15 +1159,16 @@ else:
                opj('scripts/xrced'),
                opj('scripts/pyshell'),
                opj('scripts/pycrust'),
-               opj('scripts/pycwrap'),
+               opj('scripts/pywrap'),
+               opj('scripts/pywrap'),
+               opj('scripts/pyalacarte'),
+               opj('scripts/pyalamode'),
                ]
 
 
-DATA_FILES.append( ('wxPython/tools/XRCed', glob.glob('wxPython/tools/XRCed/*.txt') +
-                                            [ 'wxPython/tools/XRCed/xrced.xrc']))
-
-DATA_FILES.append( ('wxPython/lib/PyCrust', glob.glob('wxPython/lib/PyCrust/*.txt') +
-                                            glob.glob('wxPython/lib/PyCrust/*.ico')))
+DATA_FILES += find_data_files('wxPython/tools/XRCed', '*.txt', '*.xrc')
+DATA_FILES += find_data_files('wxPython/py', '*.txt', '*.ico', '*.css', '*.html')
+DATA_FILES += find_data_files('wx', '*.txt', '*.css', '*.html')
 
 
 #----------------------------------------------------------------------
@@ -1198,15 +1186,25 @@ if __name__ == "__main__":
               url              = URL,
               license          = LICENSE,
 
-              packages = [PKGDIR,
-                          PKGDIR+'.lib',
-                          PKGDIR+'.lib.colourchooser',
-                          PKGDIR+'.lib.editor',
-                          PKGDIR+'.lib.mixins',
-                          PKGDIR+'.lib.PyCrust',
-                          PKGDIR+'.lib.PyCrust.wxd',
-                          PKGDIR+'.tools',
-                          PKGDIR+'.tools.XRCed',
+              packages = ['wxPython',
+                          'wxPython.lib',
+                          'wxPython.lib.colourchooser',
+                          'wxPython.lib.editor',
+                          'wxPython.lib.mixins',
+                          'wxPython.lib.PyCrust',
+                          'wxPython.py',
+                          'wxPython.py.wxd',
+                          'wxPython.tools',
+                          'wxPython.tools.XRCed',
+
+                          'wx',
+                          'wx.lib',
+                          'wx.lib.colourchooser',
+                          'wx.lib.editor',
+                          'wx.lib.mixins',
+                          'wx.py',
+                          'wx.tools',
+                          'wx.tools.XRCed',
                           ],
 
               ext_package = PKGDIR,
diff --git a/wxPython/src/__init__.py b/wxPython/src/__init__.py
index 888f664d07..721ee6cb2b 100644
--- a/wxPython/src/__init__.py
+++ b/wxPython/src/__init__.py
@@ -12,13 +12,12 @@
 #----------------------------------------------------------------------------
 
 import __version__
-__version__ = __version__.ver
+__version__ = __version__.wxVERSION_STRING
 
 
 # Ensure the main extension module is loaded, in case the add-on modules
 # (such as utils,) are used standalone.
 import wxc
-wxc.__version__ = __version__
 
 #----------------------------------------------------------------------------
 
diff --git a/wxPython/src/__version__.py b/wxPython/src/__version__.py
index ccace370f1..d253ef4abb 100644
--- a/wxPython/src/__version__.py
+++ b/wxPython/src/__version__.py
@@ -1 +1,12 @@
-ver = '2.5.0p1'
+# This file was generated by setup.py...
+
+wxVERSION_STRING  = '2.5.0.0p1'
+wxMAJOR_VERSION   = 2
+wxMINOR_VERSION   = 5
+wxRELEASE_VERSION = 0
+wxSUBREL_VERSION  = 0
+
+wxVERSION = (wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_VERSION,
+             wxSUBREL_VERSION, 'p1')
+
+wxRELEASE_NUMBER = wxRELEASE_VERSION  # for compatibility
diff --git a/wxPython/src/_defs.i b/wxPython/src/_defs.i
index 8790c0705d..647352d18b 100644
--- a/wxPython/src/_defs.i
+++ b/wxPython/src/_defs.i
@@ -222,6 +222,7 @@ enum {
     wxFRAME_FLOAT_ON_PARENT,
     wxFRAME_NO_WINDOW_MENU,
     wxFRAME_NO_TASKBAR,
+    wxFRAME_SHAPED,
 
     wxED_CLIENT_MARGIN,
     wxED_BUTTONS_BOTTOM,
@@ -492,6 +493,7 @@ enum {
     wxEXPAND,
 
     wxNB_FIXEDWIDTH,
+    wxNB_TOP,
     wxNB_LEFT,
     wxNB_RIGHT,
     wxNB_BOTTOM,
diff --git a/wxPython/src/_extras.py b/wxPython/src/_extras.py
index 99f9f70dab..1cc71d3a8b 100644
--- a/wxPython/src/_extras.py
+++ b/wxPython/src/_extras.py
@@ -517,10 +517,10 @@ def EVT_SASH_DRAGGED_RANGE(win, id1, id2, func):
     win.Connect(id1, id2, wxEVT_SASH_DRAGGED, func)
 
 def EVT_QUERY_LAYOUT_INFO(win, func):
-    win.Connect(-1, -1, wxEVT_EVT_QUERY_LAYOUT_INFO, func)
+    win.Connect(-1, -1, wxEVT_QUERY_LAYOUT_INFO, func)
 
 def EVT_CALCULATE_LAYOUT(win, func):
-    win.Connect(-1, -1, wxEVT_EVT_CALCULATE_LAYOUT, func)
+    win.Connect(-1, -1, wxEVT_CALCULATE_LAYOUT, func)
 
 
 #wxSplitterWindow
@@ -610,6 +610,8 @@ wxSystemSettings_GetSystemMetric = wxSystemSettings_GetMetric
 
 # workarounds for bad wxRTTI names
 __wxPyPtrTypeMap['wxGauge95']    = 'wxGauge'
+__wxPyPtrTypeMap['wxSlider95']   = 'wxSlider'
+__wxPyPtrTypeMap['wxStatusBar95']   = 'wxStatusBar'
 
 
 
@@ -647,6 +649,8 @@ if wxPlatform == "__WXGTK__":
     except:
         pass
 
+# On MSW add the directory where the wxWindows catalogs were installed
+# to the default catalog path.
 if wxPlatform == "__WXMSW__":
     import os
     localedir = os.path.join(os.path.split(__file__)[0], "locale")
@@ -654,15 +658,17 @@ if wxPlatform == "__WXMSW__":
     del os
 
 #----------------------------------------------------------------------
-# wxWindows version numbers.  wxPython version is in __version__.
+# Load version numbers from __version__...  Ensure that major and minor
+# versions are the same for both wxPython and wxWindows.
 
-wxMAJOR_VERSION   = wxc.wxMAJOR_VERSION
-wxMINOR_VERSION   = wxc.wxMINOR_VERSION
-wxRELEASE_NUMBER  = wxc.wxRELEASE_NUMBER
-wxVERSION_STRING  = wxc.wxVERSION_STRING
-wxVERSION_NUMBER  = wxc.wxVERSION_NUMBER
+from wxPython.__version__ import *
+__version__ = wxVERSION_STRING
 
-wxVERSION = (wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_NUMBER)
+assert wxMAJOR_VERSION == wxc.wxMAJOR_VERSION, "wxPython/wxWindows version mismatch"
+assert wxMINOR_VERSION == wxc.wxMINOR_VERSION, "wxPython/wxWindows version mismatch"
+if wxRELEASE_VERSION != wxc.wxRELEASE_VERSION:
+    import warnings
+    warnings.warn("wxPython/wxWindows release number mismatch")
 
 
 #----------------------------------------------------------------------
@@ -732,7 +738,7 @@ def wxCallAfter(callable, *args, **kw):
     if _wxCallAfterId is None:
         _wxCallAfterId = wxNewEventType()
         app.Connect(-1, -1, _wxCallAfterId,
-              lambda event: apply(event.callable, event.args, event.kw) )
+              lambda event: event.callable(*event.args, **event.kw) )
     evt = wxPyEvent()
     evt.SetEventType(_wxCallAfterId)
     evt.callable = callable
@@ -740,8 +746,97 @@ def wxCallAfter(callable, *args, **kw):
     evt.kw = kw
     wxPostEvent(app, evt)
 
-# an alias
-wxRunLater = wxCallAfter
+
+#----------------------------------------------------------------------
+
+
+class wxFutureCall:
+    """
+    A convenience class for wxTimer, that calls the given callable
+    object once after the given amount of milliseconds, passing any
+    positional or keyword args.  The return value of the callable is
+    availbale after it has been run with the GetResult method.
+
+    If you don't need to get the return value or restart the timer
+    then there is no need to hold a reference to this object.  It will
+    hold a reference to itself while the timer is running (the timer
+    has a reference to self.Notify) but the cycle will be broken when
+    the timer completes, automatically cleaning up the wxFutureCall
+    object.
+    """
+    def __init__(self, millis, callable, *args, **kwargs):
+        self.millis = millis
+        self.callable = callable
+        self.SetArgs(*args, **kwargs)
+        self.runCount = 0
+        self.hasRun = False
+        self.result = None
+        self.timer = None
+        self.Start()
+
+    def __del__(self):
+        self.Stop()
+
+
+    def Start(self, millis=None):
+        """
+        (Re)start the timer
+        """
+        self.hasRun = False
+        if millis is not None:
+            self.millis = millis
+        self.Stop()
+        self.timer = wxPyTimer(self.Notify)
+        self.timer.Start(self.millis, wxTIMER_ONE_SHOT)
+    Restart = Start
+
+
+    def Stop(self):
+        """
+        Stop and destroy the timer.
+        """
+        if self.timer is not None:
+            self.timer.Stop()
+            self.timer = None
+
+
+    def GetInterval(self):
+        if self.timer is not None:
+            return self.timer.GetInterval()
+        else:
+            return 0
+
+
+    def IsRunning(self):
+        return self.timer is not None and self.timer.IsRunning()
+
+
+    def SetArgs(self, *args, **kwargs):
+        """
+        (Re)set the args passed to the callable object.  This is
+        useful in conjunction with Restart if you want to schedule a
+        new call to the same callable object but with different
+        parameters.
+        """
+        self.args = args
+        self.kwargs = kwargs
+
+    def HasRun(self):
+        return self.hasRun
+
+    def GetResult(self):
+        return self.result
+
+    def Notify(self):
+        """
+        The timer has expired so call the callable.
+        """
+        if self.callable and getattr(self.callable, 'im_self', True):
+            self.runCount += 1
+            self.result = self.callable(*self.args, **self.kwargs)
+        self.hasRun = True
+        wxCallAfter(self.Stop)
+
 
 #----------------------------------------------------------------------
 
@@ -771,6 +866,35 @@ class _wxPyDeadObject:
         return 0
 
 
+#----------------------------------------------------------------------
+
+class wxNotebookPage(wxPanel):
+    """
+    There is an old (and apparently unsolvable) bug when placing a
+    window with a nonstandard background colour in a wxNotebook on
+    wxGTK, as the notbooks's background colour would always be used
+    when the window is refreshed.  The solution is to place a panel in
+    the notbook and the coloured window on the panel, sized to cover
+    the panel.  This simple class does that for you, just put an
+    instance of this in the notebook and make your regular window a
+    child of this one and it will handle the resize for you.
+    """
+    def __init__(self, parent, id=-1,
+                 pos=wxDefaultPosition, size=wxDefaultSize,
+                 style=wxTAB_TRAVERSAL, name="panel"):
+        wxPanel.__init__(self, parent, id, pos, size, style, name)
+        self.child = None
+        EVT_SIZE(self, self.OnSize)
+    def OnSize(self, evt):
+        if self.child is None:
+            children = self.GetChildren()
+            if len(children):
+                self.child = children[0]
+        if self.child:
+            self.child.SetPosition((0,0))
+            self.child.SetSize(self.GetSize())
+
+
 #----------------------------------------------------------------------
 #----------------------------------------------------------------------
 
@@ -825,6 +949,18 @@ class wxApp(wxPyApp):
 
     def __init__(self, redirect=_defRedirect, filename=None, useBestVisual=False):
         wxPyApp.__init__(self)
+
+        if wx.wxPlatform == "__WXMAC__":
+            try:
+                import MacOS
+                if not MacOS.WMAvailable():
+                    print """This program needs access to the screen. Please run with
+'pythonw', not 'python', and only when you are logged in on the main display
+of your Mac."""
+                    sys.exit(1)
+            except:
+                pass
+
         self.stdioWin = None
         self.saveStdio = (sys.stdout, sys.stderr)
 
@@ -904,7 +1040,7 @@ class wxPyWidgetTester(wxApp):
         return True
 
     def SetWidget(self, widgetClass, *args):
-        w = apply(widgetClass, (self.frame,) + args)
+        w = widgetClass(self.frame, *args)
         self.frame.Show(True)
 
 #----------------------------------------------------------------------------
diff --git a/wxPython/src/controls.i b/wxPython/src/controls.i
index c3f57ddb65..f6146b9e27 100644
--- a/wxPython/src/controls.i
+++ b/wxPython/src/controls.i
@@ -323,7 +323,7 @@ public:
                const wxPoint& pos = wxDefaultPosition,
                const wxSize& size = wxDefaultSize,
                long style = 0,
-               const wxValidator& val = wxDefaultValidator,
+               const wxValidator& validator = wxDefaultValidator,
                const wxString& name = wxPyCheckBoxNameStr);
     %name(wxPreCheckBox)wxCheckBox();
 
@@ -331,7 +331,7 @@ public:
                const wxPoint& pos = wxDefaultPosition,
                const wxSize& size = wxDefaultSize,
                long style = 0,
-               const wxValidator& val = wxDefaultValidator,
+               const wxValidator& validator = wxDefaultValidator,
                const wxString& name = wxPyCheckBoxNameStr);
 
     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
@@ -381,11 +381,11 @@ public:
 
 //----------------------------------------------------------------------
 
-// wxGTK's wxComboBox doesn't derive from wxChoice like wxMSW, or
-// even wxControlWithItems, so we have to duplicate the methods
-// here... <blech!>
+// wxGTK's wxComboBox doesn't derive from wxChoice like wxMSW, or even
+// wxControlWithItems, so we have to duplicate the methods here... <blech!>
+// wxMac's inheritace is weird too so we'll fake it with this one too.
 
-#ifdef __WXGTK__
+#ifndef __WXMSW__
 class wxComboBox : public wxControl
 {
 public:
@@ -477,8 +477,8 @@ public:
 
 
 
-#else  // For all but wxGTK
-
+#else
+// MSW's version derives from wxChoice
 
 class wxComboBox : public wxChoice {
 public:
@@ -1131,7 +1131,14 @@ public:
     int GetValue();
     void SetRange(int min, int max);
     void SetValue(int value);
-
+#ifdef __WXGTK__
+    %addmethods {
+        void SetSelection(long from, long to) {
+        }
+    }
+#else
+    void SetSelection(long from, long to);
+#endif
 };
 
 
diff --git a/wxPython/src/controls2.i b/wxPython/src/controls2.i
index 323166e3a8..67f87c0475 100644
--- a/wxPython/src/controls2.i
+++ b/wxPython/src/controls2.i
@@ -21,6 +21,8 @@
 #include <wx/treectrl.h>
 #include <wx/imaglist.h>
 #include <wx/dirctrl.h>
+
+#include "pytree.h"
 %}
 
 //----------------------------------------------------------------------
@@ -454,7 +456,7 @@ public:
     } // The OOR typemaps don't know what to do with the %new, so fix it up.
     %pragma(python) addtoclass = "
     def GetColumn(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetColumn,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetColumn(self, *_args, **_kwargs)
         if val is not None: val.thisown = 1
         return val
     "
@@ -493,7 +495,7 @@ public:
     }  // The OOR typemaps don't know what to do with the %new, so fix it up.
     %pragma(python) addtoclass = "
     def GetItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetItem(self, *_args, **_kwargs)
         if val is not None: val.thisown = 1
         return val
     "
@@ -1003,7 +1005,11 @@ public:
     wxTreeItemId();
     ~wxTreeItemId();
     bool IsOk();
-    %pragma(python) addtoclass = "Ok = IsOk"
+    %pragma(python) addtoclass = "
+    Ok = IsOk
+    def __nonzero__(self):
+        return self.IsOk()
+"
 
     %addmethods {
         int __cmp__(wxTreeItemId* other) {
@@ -1015,40 +1021,6 @@ public:
 
 
 
-%{
-class wxPyTreeItemData : public wxTreeItemData {
-public:
-    wxPyTreeItemData(PyObject* obj = NULL) {
-        if (obj == NULL)
-            obj = Py_None;
-        Py_INCREF(obj);
-        m_obj = obj;
-    }
-
-    ~wxPyTreeItemData() {
-        wxPyBeginBlockThreads();
-        Py_DECREF(m_obj);
-        wxPyEndBlockThreads();
-    }
-
-    PyObject* GetData() {
-        Py_INCREF(m_obj);
-        return m_obj;
-    }
-
-    void SetData(PyObject* obj) {
-        wxPyBeginBlockThreads();
-        Py_DECREF(m_obj);
-        wxPyEndBlockThreads();
-        m_obj = obj;
-        Py_INCREF(obj);
-    }
-
-    PyObject* m_obj;
-};
-%}
-
-
 
 %name(wxTreeItemData) class wxPyTreeItemData : public wxObject {
 public:
@@ -1075,6 +1047,12 @@ public:
     %pragma(python) addtoclass = "GetCode = GetKeyCode"
     const wxString& GetLabel();
     bool IsEditCancelled() const;
+    void SetItem(const wxTreeItemId& item);
+    void SetOldItem(const wxTreeItemId& item);
+    void SetPoint(const wxPoint& pt);
+    void SetKeyEvent(const wxKeyEvent& evt);
+    void SetLabel(const wxString& label);
+    void SetEditCanceled(bool editCancelled);
 };
 
 
@@ -1134,19 +1112,19 @@ IMPLEMENT_ABSTRACT_CLASS(wxPyTreeCtrl, wxTreeCtrl);
 %name(wxTreeCtrl)class wxPyTreeCtrl : public wxControl {
 public:
     wxPyTreeCtrl(wxWindow *parent, wxWindowID id = -1,
-               const wxPoint& pos = wxDefaultPosition,
-               const wxSize& size = wxDefaultSize,
-               long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT,
-               const wxValidator& validator = wxDefaultValidator,
-               const wxString& name = wxPy_TreeCtrlNameStr);
+                 const wxPoint& pos = wxDefaultPosition,
+                 const wxSize& size = wxDefaultSize,
+                 long style = wxTR_DEFAULT_STYLE,
+                 const wxValidator& validator = wxDefaultValidator,
+                 const wxString& name = wxPy_TreeCtrlNameStr);
     %name(wxPreTreeCtrl)wxPyTreeCtrl();
 
     bool Create(wxWindow *parent, wxWindowID id = -1,
-               const wxPoint& pos = wxDefaultPosition,
-               const wxSize& size = wxDefaultSize,
-               long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT,
-               const wxValidator& validator = wxDefaultValidator,
-               const wxString& name = wxPy_TreeCtrlNameStr);
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize,
+                long style = wxTR_DEFAULT_STYLE,
+                const wxValidator& validator = wxDefaultValidator,
+                const wxString& name = wxPy_TreeCtrlNameStr);
 
     void _setCallbackInfo(PyObject* self, PyObject* _class);
     %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxTreeCtrl)"
@@ -1340,7 +1318,7 @@ public:
             if (self->GetBoundingRect(item, rect, textOnly)) {
                 wxPyBeginBlockThreads();
                 wxRect* r = new wxRect(rect);
-                PyObject* val = wxPyConstructObject((void*)r, wxT("wxRect"));
+                PyObject* val = wxPyConstructObject((void*)r, wxT("wxRect"), 1);
                 wxPyEndBlockThreads();
                 return val;
             }
@@ -1355,17 +1333,17 @@ public:
 %pragma(python) addtoclass = "
     # Redefine some methods that SWIG gets a bit confused on...
     def GetFirstChild(self, *_args, **_kwargs):
-        val1,val2 = apply(controls2c.wxTreeCtrl_GetFirstChild,(self,) + _args, _kwargs)
+        val1,val2 = controls2c.wxTreeCtrl_GetFirstChild(self, *_args, **_kwargs)
         val1 = wxTreeItemIdPtr(val1)
         val1.thisown = 1
         return (val1,val2)
     def GetNextChild(self, *_args, **_kwargs):
-        val1,val2 = apply(controls2c.wxTreeCtrl_GetNextChild,(self,) + _args, _kwargs)
+        val1,val2 = controls2c.wxTreeCtrl_GetNextChild(self, *_args, **_kwargs)
         val1 = wxTreeItemIdPtr(val1)
         val1.thisown = 1
         return (val1,val2)
     def HitTest(self, *_args, **_kwargs):
-        val1, val2 = apply(controls2c.wxTreeCtrl_HitTest,(self,) + _args, _kwargs)
+        val1, val2 = controls2c.wxTreeCtrl_HitTest(self, *_args, **_kwargs)
         val1 = wxTreeItemIdPtr(val1)
         val1.thisown = 1
         return (val1,val2)
@@ -1458,6 +1436,9 @@ public:
     wxTreeCtrl* GetTreeCtrl() const;
     wxDirFilterListCtrl* GetFilterListCtrl() const;
 
+    // Collapse & expand the tree, thus re-creating it from scratch:
+    void ReCreateTree();
+
 //  //// Helpers
 //      void SetupSections();
 //      // Parse the filter into an array of filters and an array of descriptions
diff --git a/wxPython/src/drawlist.cpp b/wxPython/src/drawlist.cpp
index cba7952b24..4c3e627708 100644
--- a/wxPython/src/drawlist.cpp
+++ b/wxPython/src/drawlist.cpp
@@ -35,7 +35,6 @@ PyObject* wxPyDrawXXXList(wxDC& dc, wxPyDrawListOp_t doDraw,
     wxBrush*  brush;
     PyObject* obj;
     PyObject* coords;
-    int       x1, x2, x3, x4;
     int       i = 0;
     PyObject* retval;
 
diff --git a/wxPython/src/fonts.i b/wxPython/src/fonts.i
index 6e708d91ca..8137e23db8 100644
--- a/wxPython/src/fonts.i
+++ b/wxPython/src/fonts.i
@@ -374,6 +374,7 @@ public:
     static wxFontEncoding GetDefaultEncoding();
     static void SetDefaultEncoding(wxFontEncoding encoding);
 
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.Ok()"
 };
 
 
@@ -739,9 +740,9 @@ public:
     %pragma(python) addtoclass = "
     def Init(self, *_args, **_kwargs):
         if type(_args[0]) in [type(''), type(u'')]:
-            val = apply(self.Init1, _args, _kwargs)
+            val = self.Init1(*_args, **_kwargs)
         else:
-            val = apply(self.Init2, _args, _kwargs)
+            val = self.Init2(*_args, **_kwargs)
         return val
     "
 
@@ -969,6 +970,7 @@ public:
     // equivalent encodings, regardless the platform, including itself.
     static wxFontEncodingArray GetAllEquivalents(wxFontEncoding enc);
 
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.IsOk()"
 };
 
 
diff --git a/wxPython/src/gdi.i b/wxPython/src/gdi.i
index 8b6768eb57..6905b8133e 100644
--- a/wxPython/src/gdi.i
+++ b/wxPython/src/gdi.i
@@ -105,6 +105,7 @@ public:
     void SetQuality(int q);
 #endif
 
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.Ok()"
 };
 
 
@@ -233,6 +234,7 @@ public:
 #endif
     void CopyFromBitmap(const wxBitmap& bmp);
 
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.Ok()"
 };
 
 
@@ -302,9 +304,17 @@ public:
 class wxCursor : public wxGDIObject
 {
 public:
-#ifdef __WXMSW__
-    wxCursor(const wxString& cursorName, long flags, int hotSpotX=0, int hotSpotY=0);
+    %addmethods {
+        wxCursor(const wxString* cursorName, long flags, int hotSpotX=0, int hotSpotY=0) {
+#ifdef __WXGTK__
+            wxCHECK_MSG(FALSE, NULL,
+                        wxT("wxCursor constructor not implemented for wxGTK, use wxStockCursor, wxCursorFromImage, or wxCursorFromBits instead."));
+#else
+            return new wxCursor(*cursorName, flags, hotSpotX, hotSpotY);
 #endif
+        }
+    }
+
     ~wxCursor();
 
     // wxGDIImage methods
@@ -322,23 +332,34 @@ public:
     void SetDepth(int d);
     void SetSize(const wxSize& size);
 #endif
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.Ok()"
 };
 
 %name(wxStockCursor) %new wxCursor* wxPyStockCursor(int id);
-%{                              // Alternate 'constructor'
+%new wxCursor* wxCursorFromImage(const wxImage& image);
+%new wxCursor* wxCursorFromBits(PyObject* bits, int width, int  height,
+                                int hotSpotX=-1, int hotSpotY=-1,
+                                PyObject* maskBits=0);
+
+%{
     wxCursor* wxPyStockCursor(int id) {
         return new wxCursor(id);
     }
-%}
 
-%new wxCursor* wxCursorFromImage(const wxImage& image);
-%{
     wxCursor* wxCursorFromImage(const wxImage& image) {
-    #ifndef __WXMAC__
         return new wxCursor(image);
-    #else
-        return NULL;
-    #endif
+    }
+
+    wxCursor* wxCursorFromBits(PyObject* bits, int width, int  height,
+                               int hotSpotX=-1, int hotSpotY=-1,
+                               PyObject* maskBits=0) {
+        char* bitsbuf;
+        char* maskbuf = NULL;
+        int   length;
+        PyString_AsStringAndSize(bits, &bitsbuf, &length);
+        if (maskBits)
+            PyString_AsStringAndSize(maskBits, &maskbuf, &length);
+        return new wxCursor(bitsbuf, width, height, hotSpotX, hotSpotY, maskbuf);
     }
 %}
 
@@ -481,6 +502,8 @@ public:
     wxBitmap* GetStipple();
     void SetStipple(wxBitmap& stipple);
 #endif
+
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.Ok()"
 };
 
 
@@ -554,6 +577,13 @@ public:
     void SetColour(wxColour &colour);
     void SetStipple(wxBitmap& bitmap);
     void SetStyle(int style);
+
+#ifdef __WXMAC__
+    short GetMacTheme();
+    void SetMacTheme(short macThemeBrush);
+#endif
+
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.Ok()"
 };
 
 
@@ -713,6 +743,8 @@ public:
         // See below for implementation
     }
 
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.Ok()"
+
 #ifdef __WXMSW__
     long GetHDC();
 #endif
@@ -967,6 +999,7 @@ public:
 
     const wxString& GetFileName() const { return m_filename; }
 
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.Ok()"
 };
 
 // bool wxMakeMetaFilePlaceable(const wxString& filename,
@@ -993,6 +1026,8 @@ public:
     int GetPixel(byte red, byte green, byte blue);
     bool GetRGB(int pixel, byte* OUTPUT, byte* OUTPUT, byte* OUTPUT);
     bool Ok();
+
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.Ok()"
 };
 
 //---------------------------------------------------------------------------
@@ -1083,7 +1118,7 @@ public:
     %name(XorRect)bool Xor(const wxRect& rect);
     %name(XorRegion)bool Xor(const wxRegion& region);
 
-    // Convert the region to a B&W bitmap with the black pixels being inside
+    // Convert the region to a B&W bitmap with the white pixels being inside
     // the region.
     wxBitmap ConvertToBitmap();
 
diff --git a/wxPython/src/grid.i b/wxPython/src/grid.i
index d78a22b050..7686ab6d1b 100644
--- a/wxPython/src/grid.i
+++ b/wxPython/src/grid.i
@@ -1042,7 +1042,7 @@ public:
     wxColour GetBackgroundColour() const;
     wxFont GetFont() const;
     void GetAlignment(int *OUTPUT, int *OUTPUT) const;
-    void GetSize(int *num_rows, int *num_cols) const;
+    void GetSize(int *OUTPUT, int *OUTPUT) const;
     bool GetOverflow() const;
     wxGridCellRenderer *GetRenderer(wxGrid* grid, int row, int col) const;
     wxGridCellEditor *GetEditor(wxGrid* grid, int row, int col) const;
@@ -1727,8 +1727,8 @@ public:
     wxColour GetCellTextColour( int row, int col );
     wxFont   GetDefaultCellFont();
     wxFont   GetCellFont( int row, int col );
-    void     GetDefaultCellAlignment( int *horiz, int *vert );
-    void     GetCellAlignment( int row, int col, int *horiz, int *vert );
+    void     GetDefaultCellAlignment( int *OUTPUT, int *OUTPUT );
+    void     GetCellAlignment( int row, int col, int *OUTPUT, int *OUTPUT );
     bool     GetDefaultCellOverflow();
     bool     GetCellOverflow( int row, int col );
     void     GetCellSize( int row, int col, int *OUTPUT, int *OUTPUT );
@@ -1767,6 +1767,11 @@ public:
     void     SetColMinimalWidth( int col, int width );
     void     SetRowMinimalHeight( int row, int width );
 
+    void     SetColMinimalAcceptableWidth( int width );
+    void     SetRowMinimalAcceptableHeight( int width );
+    int      GetColMinimalAcceptableWidth() const;
+    int      GetRowMinimalAcceptableHeight() const;
+
     void     SetDefaultCellBackgroundColour( const wxColour& );
     void     SetCellBackgroundColour( int row, int col, const wxColour& );
     void     SetDefaultCellTextColour( const wxColour& );
diff --git a/wxPython/src/gtk/calendar.py b/wxPython/src/gtk/calendar.py
index 355ee1bfa5..6dab932b4d 100644
--- a/wxPython/src/gtk/calendar.py
+++ b/wxPython/src/gtk/calendar.py
@@ -42,71 +42,71 @@ class wxCalendarDateAttrPtr :
         self.this = this
         self.thisown = 0
     def SetTextColour(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_SetTextColour,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_SetTextColour(self, *_args, **_kwargs)
         return val
     def SetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_SetBackgroundColour,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_SetBackgroundColour(self, *_args, **_kwargs)
         return val
     def SetBorderColour(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_SetBorderColour,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_SetBorderColour(self, *_args, **_kwargs)
         return val
     def SetFont(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_SetFont,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_SetFont(self, *_args, **_kwargs)
         return val
     def SetBorder(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_SetBorder,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_SetBorder(self, *_args, **_kwargs)
         return val
     def SetHoliday(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_SetHoliday,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_SetHoliday(self, *_args, **_kwargs)
         return val
     def HasTextColour(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_HasTextColour,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_HasTextColour(self, *_args, **_kwargs)
         return val
     def HasBackgroundColour(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_HasBackgroundColour,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_HasBackgroundColour(self, *_args, **_kwargs)
         return val
     def HasBorderColour(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_HasBorderColour,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_HasBorderColour(self, *_args, **_kwargs)
         return val
     def HasFont(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_HasFont,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_HasFont(self, *_args, **_kwargs)
         return val
     def HasBorder(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_HasBorder,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_HasBorder(self, *_args, **_kwargs)
         return val
     def IsHoliday(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_IsHoliday,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_IsHoliday(self, *_args, **_kwargs)
         return val
     def GetTextColour(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_GetTextColour,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_GetTextColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_GetBackgroundColour,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_GetBackgroundColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetBorderColour(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_GetBorderColour,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_GetBorderColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetFont(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_GetFont,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_GetFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def GetBorder(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarDateAttr_GetBorder,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarDateAttr_GetBorder(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxCalendarDateAttr instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxCalendarDateAttr instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxCalendarDateAttr(wxCalendarDateAttrPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(calendarc.new_wxCalendarDateAttr,_args,_kwargs)
+        self.this = calendarc.new_wxCalendarDateAttr(*_args,**_kwargs)
         self.thisown = 1
 
 
 
 def wxCalendarDateAttrBorder(*_args,**_kwargs):
-    val = wxCalendarDateAttrPtr(apply(calendarc.new_wxCalendarDateAttrBorder,_args,_kwargs))
+    val = wxCalendarDateAttrPtr(calendarc.new_wxCalendarDateAttrBorder(*_args,**_kwargs))
     val.thisown = 1
     return val
 
@@ -116,17 +116,17 @@ class wxCalendarEventPtr(wxCommandEventPtr):
         self.this = this
         self.thisown = 0
     def GetDate(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarEvent_GetDate,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarEvent_GetDate(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def GetWeekDay(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarEvent_GetWeekDay,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarEvent_GetWeekDay(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxCalendarEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxCalendarEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxCalendarEvent(wxCalendarEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(calendarc.new_wxCalendarEvent,_args,_kwargs)
+        self.this = calendarc.new_wxCalendarEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -137,108 +137,108 @@ class wxCalendarCtrlPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_Create,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_Create(self, *_args, **_kwargs)
         return val
     def SetDate(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_SetDate,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_SetDate(self, *_args, **_kwargs)
         return val
     def GetDate(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_GetDate,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_GetDate(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SetLowerDateLimit(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_SetLowerDateLimit,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_SetLowerDateLimit(self, *_args, **_kwargs)
         return val
     def GetLowerDateLimit(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_GetLowerDateLimit,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_GetLowerDateLimit(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SetUpperDateLimit(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_SetUpperDateLimit,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_SetUpperDateLimit(self, *_args, **_kwargs)
         return val
     def GetUpperDateLimit(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_GetUpperDateLimit,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_GetUpperDateLimit(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SetDateRange(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_SetDateRange,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_SetDateRange(self, *_args, **_kwargs)
         return val
     def EnableYearChange(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_EnableYearChange,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_EnableYearChange(self, *_args, **_kwargs)
         return val
     def EnableMonthChange(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_EnableMonthChange,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_EnableMonthChange(self, *_args, **_kwargs)
         return val
     def EnableHolidayDisplay(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_EnableHolidayDisplay,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_EnableHolidayDisplay(self, *_args, **_kwargs)
         return val
     def SetHeaderColours(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_SetHeaderColours,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_SetHeaderColours(self, *_args, **_kwargs)
         return val
     def GetHeaderColourFg(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_GetHeaderColourFg,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_GetHeaderColourFg(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetHeaderColourBg(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_GetHeaderColourBg,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_GetHeaderColourBg(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetHighlightColours(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_SetHighlightColours,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_SetHighlightColours(self, *_args, **_kwargs)
         return val
     def GetHighlightColourFg(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_GetHighlightColourFg,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_GetHighlightColourFg(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetHighlightColourBg(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_GetHighlightColourBg,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_GetHighlightColourBg(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetHolidayColours(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_SetHolidayColours,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_SetHolidayColours(self, *_args, **_kwargs)
         return val
     def GetHolidayColourFg(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_GetHolidayColourFg,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_GetHolidayColourFg(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetHolidayColourBg(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_GetHolidayColourBg,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_GetHolidayColourBg(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetAttr(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_GetAttr,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_GetAttr(self, *_args, **_kwargs)
         if val: val = wxCalendarDateAttrPtr(val) 
         return val
     def SetAttr(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_SetAttr,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_SetAttr(self, *_args, **_kwargs)
         return val
     def SetHoliday(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_SetHoliday,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_SetHoliday(self, *_args, **_kwargs)
         return val
     def ResetAttr(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_ResetAttr,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_ResetAttr(self, *_args, **_kwargs)
         return val
     def HitTest(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_HitTest,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_HitTest(self, *_args, **_kwargs)
         return val
     def Enable(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_Enable,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_Enable(self, *_args, **_kwargs)
         return val
     def Show(self, *_args, **_kwargs):
-        val = apply(calendarc.wxCalendarCtrl_Show,(self,) + _args, _kwargs)
+        val = calendarc.wxCalendarCtrl_Show(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxCalendarCtrl instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxCalendarCtrl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxCalendarCtrl(wxCalendarCtrlPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(calendarc.new_wxCalendarCtrl,_args,_kwargs)
+        self.this = calendarc.new_wxCalendarCtrl(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreCalendarCtrl(*_args,**_kwargs):
-    val = wxCalendarCtrlPtr(apply(calendarc.new_wxPreCalendarCtrl,_args,_kwargs))
+    val = wxCalendarCtrlPtr(calendarc.new_wxPreCalendarCtrl(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
diff --git a/wxPython/src/gtk/clip_dnd.py b/wxPython/src/gtk/clip_dnd.py
index d77b5da68d..a6a828354c 100644
--- a/wxPython/src/gtk/clip_dnd.py
+++ b/wxPython/src/gtk/clip_dnd.py
@@ -18,22 +18,22 @@ class wxDataFormatPtr :
             except:
                 pass
     def SetType(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDataFormat_SetType,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDataFormat_SetType(self, *_args, **_kwargs)
         return val
     def GetType(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDataFormat_GetType,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDataFormat_GetType(self, *_args, **_kwargs)
         return val
     def GetId(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDataFormat_GetId,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDataFormat_GetId(self, *_args, **_kwargs)
         return val
     def SetId(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDataFormat_SetId,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDataFormat_SetId(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxDataFormat instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDataFormat instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDataFormat(wxDataFormatPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxDataFormat,_args,_kwargs)
+        self.this = clip_dndc.new_wxDataFormat(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -53,29 +53,29 @@ class wxDataObjectPtr :
             except:
                 pass
     def GetPreferredFormat(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDataObject_GetPreferredFormat,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDataObject_GetPreferredFormat(self, *_args, **_kwargs)
         if val: val = wxDataFormatPtr(val) ; val.thisown = 1
         return val
     def GetFormatCount(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDataObject_GetFormatCount,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDataObject_GetFormatCount(self, *_args, **_kwargs)
         return val
     def GetAllFormats(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDataObject_GetAllFormats,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDataObject_GetAllFormats(self, *_args, **_kwargs)
         return val
     def GetDataHere(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDataObject_GetDataHere,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDataObject_GetDataHere(self, *_args, **_kwargs)
         return val
     def GetDataSize(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDataObject_GetDataSize,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDataObject_GetDataSize(self, *_args, **_kwargs)
         return val
     def SetData(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDataObject_SetData,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDataObject_SetData(self, *_args, **_kwargs)
         return val
     def IsSupportedFormat(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDataObject_IsSupportedFormat,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDataObject_IsSupportedFormat(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxDataObject instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDataObject instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDataObject(wxDataObjectPtr):
     def __init__(self,this):
         self.this = this
@@ -88,17 +88,17 @@ class wxDataObjectSimplePtr(wxDataObjectPtr):
         self.this = this
         self.thisown = 0
     def GetFormat(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDataObjectSimple_GetFormat,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDataObjectSimple_GetFormat(self, *_args, **_kwargs)
         if val: val = wxDataFormatPtr(val) 
         return val
     def SetFormat(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDataObjectSimple_SetFormat,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDataObjectSimple_SetFormat(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxDataObjectSimple instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDataObjectSimple instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDataObjectSimple(wxDataObjectSimplePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxDataObjectSimple,_args,_kwargs)
+        self.this = clip_dndc.new_wxDataObjectSimple(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -109,13 +109,13 @@ class wxPyDataObjectSimplePtr(wxDataObjectSimplePtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxPyDataObjectSimple__setCallbackInfo,(self,) + _args, _kwargs)
+        val = clip_dndc.wxPyDataObjectSimple__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyDataObjectSimple instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyDataObjectSimple instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyDataObjectSimple(wxPyDataObjectSimplePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxPyDataObjectSimple,_args,_kwargs)
+        self.this = clip_dndc.new_wxPyDataObjectSimple(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyDataObjectSimple)
 
@@ -127,14 +127,14 @@ class wxDataObjectCompositePtr(wxDataObjectPtr):
         self.this = this
         self.thisown = 0
     def Add(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDataObjectComposite_Add,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDataObjectComposite_Add(self, *_args, **_kwargs)
         _args[0].thisown = 0
         return val
     def __repr__(self):
-        return "<C wxDataObjectComposite instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDataObjectComposite instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDataObjectComposite(wxDataObjectCompositePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxDataObjectComposite,_args,_kwargs)
+        self.this = clip_dndc.new_wxDataObjectComposite(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -145,19 +145,19 @@ class wxTextDataObjectPtr(wxDataObjectSimplePtr):
         self.this = this
         self.thisown = 0
     def GetTextLength(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxTextDataObject_GetTextLength,(self,) + _args, _kwargs)
+        val = clip_dndc.wxTextDataObject_GetTextLength(self, *_args, **_kwargs)
         return val
     def GetText(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxTextDataObject_GetText,(self,) + _args, _kwargs)
+        val = clip_dndc.wxTextDataObject_GetText(self, *_args, **_kwargs)
         return val
     def SetText(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxTextDataObject_SetText,(self,) + _args, _kwargs)
+        val = clip_dndc.wxTextDataObject_SetText(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTextDataObject instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTextDataObject instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxTextDataObject(wxTextDataObjectPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxTextDataObject,_args,_kwargs)
+        self.this = clip_dndc.new_wxTextDataObject(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -168,13 +168,13 @@ class wxPyTextDataObjectPtr(wxTextDataObjectPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxPyTextDataObject__setCallbackInfo,(self,) + _args, _kwargs)
+        val = clip_dndc.wxPyTextDataObject__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyTextDataObject instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyTextDataObject instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyTextDataObject(wxPyTextDataObjectPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxPyTextDataObject,_args,_kwargs)
+        self.this = clip_dndc.new_wxPyTextDataObject(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyTextDataObject)
 
@@ -186,17 +186,17 @@ class wxBitmapDataObjectPtr(wxDataObjectSimplePtr):
         self.this = this
         self.thisown = 0
     def GetBitmap(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxBitmapDataObject_GetBitmap,(self,) + _args, _kwargs)
+        val = clip_dndc.wxBitmapDataObject_GetBitmap(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) ; val.thisown = 1
         return val
     def SetBitmap(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxBitmapDataObject_SetBitmap,(self,) + _args, _kwargs)
+        val = clip_dndc.wxBitmapDataObject_SetBitmap(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxBitmapDataObject instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxBitmapDataObject instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxBitmapDataObject(wxBitmapDataObjectPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxBitmapDataObject,_args,_kwargs)
+        self.this = clip_dndc.new_wxBitmapDataObject(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -207,13 +207,13 @@ class wxPyBitmapDataObjectPtr(wxBitmapDataObjectPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxPyBitmapDataObject__setCallbackInfo,(self,) + _args, _kwargs)
+        val = clip_dndc.wxPyBitmapDataObject__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyBitmapDataObject instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyBitmapDataObject instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyBitmapDataObject(wxPyBitmapDataObjectPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxPyBitmapDataObject,_args,_kwargs)
+        self.this = clip_dndc.new_wxPyBitmapDataObject(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyBitmapDataObject)
 
@@ -225,13 +225,13 @@ class wxFileDataObjectPtr(wxDataObjectSimplePtr):
         self.this = this
         self.thisown = 0
     def GetFilenames(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxFileDataObject_GetFilenames,(self,) + _args, _kwargs)
+        val = clip_dndc.wxFileDataObject_GetFilenames(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFileDataObject instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFileDataObject instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFileDataObject(wxFileDataObjectPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxFileDataObject,_args,_kwargs)
+        self.this = clip_dndc.new_wxFileDataObject(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -242,22 +242,22 @@ class wxCustomDataObjectPtr(wxDataObjectSimplePtr):
         self.this = this
         self.thisown = 0
     def TakeData(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxCustomDataObject_TakeData,(self,) + _args, _kwargs)
+        val = clip_dndc.wxCustomDataObject_TakeData(self, *_args, **_kwargs)
         return val
     def SetData(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxCustomDataObject_SetData,(self,) + _args, _kwargs)
+        val = clip_dndc.wxCustomDataObject_SetData(self, *_args, **_kwargs)
         return val
     def GetSize(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxCustomDataObject_GetSize,(self,) + _args, _kwargs)
+        val = clip_dndc.wxCustomDataObject_GetSize(self, *_args, **_kwargs)
         return val
     def GetData(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxCustomDataObject_GetData,(self,) + _args, _kwargs)
+        val = clip_dndc.wxCustomDataObject_GetData(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxCustomDataObject instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxCustomDataObject instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxCustomDataObject(wxCustomDataObjectPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxCustomDataObject,_args,_kwargs)
+        self.this = clip_dndc.new_wxCustomDataObject(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -268,16 +268,16 @@ class wxURLDataObjectPtr(wxDataObjectCompositePtr):
         self.this = this
         self.thisown = 0
     def GetURL(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxURLDataObject_GetURL,(self,) + _args, _kwargs)
+        val = clip_dndc.wxURLDataObject_GetURL(self, *_args, **_kwargs)
         return val
     def SetURL(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxURLDataObject_SetURL,(self,) + _args, _kwargs)
+        val = clip_dndc.wxURLDataObject_SetURL(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxURLDataObject instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxURLDataObject instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxURLDataObject(wxURLDataObjectPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxURLDataObject,_args,_kwargs)
+        self.this = clip_dndc.new_wxURLDataObject(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -288,42 +288,42 @@ class wxClipboardPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def Open(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxClipboard_Open,(self,) + _args, _kwargs)
+        val = clip_dndc.wxClipboard_Open(self, *_args, **_kwargs)
         return val
     def Close(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxClipboard_Close,(self,) + _args, _kwargs)
+        val = clip_dndc.wxClipboard_Close(self, *_args, **_kwargs)
         return val
     def IsOpened(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxClipboard_IsOpened,(self,) + _args, _kwargs)
+        val = clip_dndc.wxClipboard_IsOpened(self, *_args, **_kwargs)
         return val
     def AddData(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxClipboard_AddData,(self,) + _args, _kwargs)
+        val = clip_dndc.wxClipboard_AddData(self, *_args, **_kwargs)
         _args[0].thisown = 0
         return val
     def SetData(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxClipboard_SetData,(self,) + _args, _kwargs)
+        val = clip_dndc.wxClipboard_SetData(self, *_args, **_kwargs)
         _args[0].thisown = 0
         return val
     def IsSupported(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxClipboard_IsSupported,(self,) + _args, _kwargs)
+        val = clip_dndc.wxClipboard_IsSupported(self, *_args, **_kwargs)
         return val
     def GetData(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxClipboard_GetData,(self,) + _args, _kwargs)
+        val = clip_dndc.wxClipboard_GetData(self, *_args, **_kwargs)
         return val
     def Clear(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxClipboard_Clear,(self,) + _args, _kwargs)
+        val = clip_dndc.wxClipboard_Clear(self, *_args, **_kwargs)
         return val
     def Flush(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxClipboard_Flush,(self,) + _args, _kwargs)
+        val = clip_dndc.wxClipboard_Flush(self, *_args, **_kwargs)
         return val
     def UsePrimarySelection(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxClipboard_UsePrimarySelection,(self,) + _args, _kwargs)
+        val = clip_dndc.wxClipboard_UsePrimarySelection(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxClipboard instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxClipboard instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxClipboard(wxClipboardPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxClipboard,_args,_kwargs)
+        self.this = clip_dndc.new_wxClipboard(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -334,7 +334,7 @@ class wxDropSourcePtr :
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDropSource__setCallbackInfo,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDropSource__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def __del__(self, delfunc=clip_dndc.delete_wxDropSource):
         if self.thisown == 1:
@@ -343,26 +343,26 @@ class wxDropSourcePtr :
             except:
                 pass
     def SetData(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDropSource_SetData,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDropSource_SetData(self, *_args, **_kwargs)
         return val
     def GetDataObject(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDropSource_GetDataObject,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDropSource_GetDataObject(self, *_args, **_kwargs)
         if val: val = wxDataObjectPtr(val) 
         return val
     def SetCursor(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDropSource_SetCursor,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDropSource_SetCursor(self, *_args, **_kwargs)
         return val
     def DoDragDrop(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDropSource_DoDragDrop,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDropSource_DoDragDrop(self, *_args, **_kwargs)
         return val
     def base_GiveFeedback(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxDropSource_base_GiveFeedback,(self,) + _args, _kwargs)
+        val = clip_dndc.wxDropSource_base_GiveFeedback(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxDropSource instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDropSource instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDropSource(wxDropSourcePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxDropSource,_args,_kwargs)
+        self.this = clip_dndc.new_wxDropSource(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxDropSource, 0)
 
@@ -374,7 +374,7 @@ class wxDropTargetPtr :
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxDropTarget instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDropTarget instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDropTarget(wxDropTargetPtr):
     def __init__(self,this):
         self.this = this
@@ -387,7 +387,7 @@ class wxPyDropTargetPtr(wxDropTargetPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxPyDropTarget__setCallbackInfo,(self,) + _args, _kwargs)
+        val = clip_dndc.wxPyDropTarget__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def __del__(self, delfunc=clip_dndc.delete_wxPyDropTarget):
         if self.thisown == 1:
@@ -396,33 +396,33 @@ class wxPyDropTargetPtr(wxDropTargetPtr):
             except:
                 pass
     def GetDataObject(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxPyDropTarget_GetDataObject,(self,) + _args, _kwargs)
+        val = clip_dndc.wxPyDropTarget_GetDataObject(self, *_args, **_kwargs)
         if val: val = wxDataObjectPtr(val) 
         return val
     def SetDataObject(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxPyDropTarget_SetDataObject,(self,) + _args, _kwargs)
+        val = clip_dndc.wxPyDropTarget_SetDataObject(self, *_args, **_kwargs)
         if _args:_args[0].thisown = 0
         return val
     def base_OnEnter(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxPyDropTarget_base_OnEnter,(self,) + _args, _kwargs)
+        val = clip_dndc.wxPyDropTarget_base_OnEnter(self, *_args, **_kwargs)
         return val
     def base_OnDragOver(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxPyDropTarget_base_OnDragOver,(self,) + _args, _kwargs)
+        val = clip_dndc.wxPyDropTarget_base_OnDragOver(self, *_args, **_kwargs)
         return val
     def base_OnLeave(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxPyDropTarget_base_OnLeave,(self,) + _args, _kwargs)
+        val = clip_dndc.wxPyDropTarget_base_OnLeave(self, *_args, **_kwargs)
         return val
     def base_OnDrop(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxPyDropTarget_base_OnDrop,(self,) + _args, _kwargs)
+        val = clip_dndc.wxPyDropTarget_base_OnDrop(self, *_args, **_kwargs)
         return val
     def GetData(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxPyDropTarget_GetData,(self,) + _args, _kwargs)
+        val = clip_dndc.wxPyDropTarget_GetData(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyDropTarget instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyDropTarget instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyDropTarget(wxPyDropTargetPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxPyDropTarget,_args,_kwargs)
+        self.this = clip_dndc.new_wxPyDropTarget(*_args,**_kwargs)
         self.thisown = 1
         if _args:_args[0].thisown = 0
         self._setCallbackInfo(self, wxPyDropTarget)
@@ -435,28 +435,28 @@ class wxTextDropTargetPtr(wxPyDropTargetPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxTextDropTarget__setCallbackInfo,(self,) + _args, _kwargs)
+        val = clip_dndc.wxTextDropTarget__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def base_OnEnter(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxTextDropTarget_base_OnEnter,(self,) + _args, _kwargs)
+        val = clip_dndc.wxTextDropTarget_base_OnEnter(self, *_args, **_kwargs)
         return val
     def base_OnDragOver(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxTextDropTarget_base_OnDragOver,(self,) + _args, _kwargs)
+        val = clip_dndc.wxTextDropTarget_base_OnDragOver(self, *_args, **_kwargs)
         return val
     def base_OnLeave(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxTextDropTarget_base_OnLeave,(self,) + _args, _kwargs)
+        val = clip_dndc.wxTextDropTarget_base_OnLeave(self, *_args, **_kwargs)
         return val
     def base_OnDrop(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxTextDropTarget_base_OnDrop,(self,) + _args, _kwargs)
+        val = clip_dndc.wxTextDropTarget_base_OnDrop(self, *_args, **_kwargs)
         return val
     def base_OnData(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxTextDropTarget_base_OnData,(self,) + _args, _kwargs)
+        val = clip_dndc.wxTextDropTarget_base_OnData(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTextDropTarget instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTextDropTarget instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxTextDropTarget(wxTextDropTargetPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxTextDropTarget,_args,_kwargs)
+        self.this = clip_dndc.new_wxTextDropTarget(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxTextDropTarget)
 
@@ -468,28 +468,28 @@ class wxFileDropTargetPtr(wxPyDropTargetPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxFileDropTarget__setCallbackInfo,(self,) + _args, _kwargs)
+        val = clip_dndc.wxFileDropTarget__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def base_OnEnter(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxFileDropTarget_base_OnEnter,(self,) + _args, _kwargs)
+        val = clip_dndc.wxFileDropTarget_base_OnEnter(self, *_args, **_kwargs)
         return val
     def base_OnDragOver(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxFileDropTarget_base_OnDragOver,(self,) + _args, _kwargs)
+        val = clip_dndc.wxFileDropTarget_base_OnDragOver(self, *_args, **_kwargs)
         return val
     def base_OnLeave(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxFileDropTarget_base_OnLeave,(self,) + _args, _kwargs)
+        val = clip_dndc.wxFileDropTarget_base_OnLeave(self, *_args, **_kwargs)
         return val
     def base_OnDrop(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxFileDropTarget_base_OnDrop,(self,) + _args, _kwargs)
+        val = clip_dndc.wxFileDropTarget_base_OnDrop(self, *_args, **_kwargs)
         return val
     def base_OnData(self, *_args, **_kwargs):
-        val = apply(clip_dndc.wxFileDropTarget_base_OnData,(self,) + _args, _kwargs)
+        val = clip_dndc.wxFileDropTarget_base_OnData(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFileDropTarget instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFileDropTarget instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFileDropTarget(wxFileDropTargetPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(clip_dndc.new_wxFileDropTarget,_args,_kwargs)
+        self.this = clip_dndc.new_wxFileDropTarget(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxFileDropTarget)
 
@@ -501,7 +501,7 @@ class wxFileDropTarget(wxFileDropTargetPtr):
 #-------------- FUNCTION WRAPPERS ------------------
 
 def wxCustomDataFormat(*_args, **_kwargs):
-    val = apply(clip_dndc.wxCustomDataFormat,_args,_kwargs)
+    val = clip_dndc.wxCustomDataFormat(*_args,**_kwargs)
     if val: val = wxDataFormatPtr(val); val.thisown = 1
     return val
 
diff --git a/wxPython/src/gtk/cmndlgs.py b/wxPython/src/gtk/cmndlgs.py
index 9555d3bc82..a0b448fa30 100644
--- a/wxPython/src/gtk/cmndlgs.py
+++ b/wxPython/src/gtk/cmndlgs.py
@@ -48,30 +48,30 @@ class wxColourDataPtr(wxObjectPtr):
             except:
                 pass
     def GetChooseFull(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxColourData_GetChooseFull,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxColourData_GetChooseFull(self, *_args, **_kwargs)
         return val
     def GetColour(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxColourData_GetColour,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxColourData_GetColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetCustomColour(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxColourData_GetCustomColour,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxColourData_GetCustomColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetChooseFull(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxColourData_SetChooseFull,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxColourData_SetChooseFull(self, *_args, **_kwargs)
         return val
     def SetColour(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxColourData_SetColour,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxColourData_SetColour(self, *_args, **_kwargs)
         return val
     def SetCustomColour(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxColourData_SetCustomColour,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxColourData_SetCustomColour(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxColourData instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxColourData instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxColourData(wxColourDataPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(cmndlgsc.new_wxColourData,_args,_kwargs)
+        self.this = cmndlgsc.new_wxColourData(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -82,17 +82,17 @@ class wxColourDialogPtr(wxDialogPtr):
         self.this = this
         self.thisown = 0
     def GetColourData(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxColourDialog_GetColourData,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxColourDialog_GetColourData(self, *_args, **_kwargs)
         if val: val = wxColourDataPtr(val) 
         return val
     def ShowModal(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxColourDialog_ShowModal,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxColourDialog_ShowModal(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxColourDialog instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxColourDialog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxColourDialog(wxColourDialogPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(cmndlgsc.new_wxColourDialog,_args,_kwargs)
+        self.this = cmndlgsc.new_wxColourDialog(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -104,28 +104,28 @@ class wxDirDialogPtr(wxDialogPtr):
         self.this = this
         self.thisown = 0
     def GetPath(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxDirDialog_GetPath,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxDirDialog_GetPath(self, *_args, **_kwargs)
         return val
     def GetMessage(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxDirDialog_GetMessage,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxDirDialog_GetMessage(self, *_args, **_kwargs)
         return val
     def GetStyle(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxDirDialog_GetStyle,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxDirDialog_GetStyle(self, *_args, **_kwargs)
         return val
     def SetMessage(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxDirDialog_SetMessage,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxDirDialog_SetMessage(self, *_args, **_kwargs)
         return val
     def SetPath(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxDirDialog_SetPath,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxDirDialog_SetPath(self, *_args, **_kwargs)
         return val
     def ShowModal(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxDirDialog_ShowModal,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxDirDialog_ShowModal(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxDirDialog instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDirDialog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDirDialog(wxDirDialogPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(cmndlgsc.new_wxDirDialog,_args,_kwargs)
+        self.this = cmndlgsc.new_wxDirDialog(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -137,61 +137,61 @@ class wxFileDialogPtr(wxDialogPtr):
         self.this = this
         self.thisown = 0
     def GetDirectory(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_GetDirectory,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_GetDirectory(self, *_args, **_kwargs)
         return val
     def GetFilename(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_GetFilename,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_GetFilename(self, *_args, **_kwargs)
         return val
     def GetFilterIndex(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_GetFilterIndex,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_GetFilterIndex(self, *_args, **_kwargs)
         return val
     def GetMessage(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_GetMessage,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_GetMessage(self, *_args, **_kwargs)
         return val
     def GetPath(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_GetPath,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_GetPath(self, *_args, **_kwargs)
         return val
     def GetStyle(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_GetStyle,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_GetStyle(self, *_args, **_kwargs)
         return val
     def GetWildcard(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_GetWildcard,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_GetWildcard(self, *_args, **_kwargs)
         return val
     def SetDirectory(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_SetDirectory,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_SetDirectory(self, *_args, **_kwargs)
         return val
     def SetFilename(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_SetFilename,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_SetFilename(self, *_args, **_kwargs)
         return val
     def SetFilterIndex(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_SetFilterIndex,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_SetFilterIndex(self, *_args, **_kwargs)
         return val
     def SetMessage(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_SetMessage,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_SetMessage(self, *_args, **_kwargs)
         return val
     def SetPath(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_SetPath,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_SetPath(self, *_args, **_kwargs)
         return val
     def SetStyle(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_SetStyle,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_SetStyle(self, *_args, **_kwargs)
         return val
     def SetWildcard(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_SetWildcard,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_SetWildcard(self, *_args, **_kwargs)
         return val
     def ShowModal(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_ShowModal,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_ShowModal(self, *_args, **_kwargs)
         return val
     def GetFilenames(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_GetFilenames,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_GetFilenames(self, *_args, **_kwargs)
         return val
     def GetPaths(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFileDialog_GetPaths,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFileDialog_GetPaths(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFileDialog instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFileDialog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFileDialog(wxFileDialogPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(cmndlgsc.new_wxFileDialog,_args,_kwargs)
+        self.this = cmndlgsc.new_wxFileDialog(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -203,16 +203,16 @@ class wxMultiChoiceDialogPtr(wxDialogPtr):
         self.this = this
         self.thisown = 0
     def SetSelections(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxMultiChoiceDialog_SetSelections,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxMultiChoiceDialog_SetSelections(self, *_args, **_kwargs)
         return val
     def GetSelections(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxMultiChoiceDialog_GetSelections,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxMultiChoiceDialog_GetSelections(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxMultiChoiceDialog instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMultiChoiceDialog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMultiChoiceDialog(wxMultiChoiceDialogPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(cmndlgsc.new_wxMultiChoiceDialog,_args,_kwargs)
+        self.this = cmndlgsc.new_wxMultiChoiceDialog(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -224,22 +224,22 @@ class wxSingleChoiceDialogPtr(wxDialogPtr):
         self.this = this
         self.thisown = 0
     def GetSelection(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxSingleChoiceDialog_GetSelection,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxSingleChoiceDialog_GetSelection(self, *_args, **_kwargs)
         return val
     def GetStringSelection(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxSingleChoiceDialog_GetStringSelection,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxSingleChoiceDialog_GetStringSelection(self, *_args, **_kwargs)
         return val
     def SetSelection(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxSingleChoiceDialog_SetSelection,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxSingleChoiceDialog_SetSelection(self, *_args, **_kwargs)
         return val
     def ShowModal(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxSingleChoiceDialog_ShowModal,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxSingleChoiceDialog_ShowModal(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxSingleChoiceDialog instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSingleChoiceDialog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSingleChoiceDialog(wxSingleChoiceDialogPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(cmndlgsc.new_wxSingleChoiceDialog,_args,_kwargs)
+        self.this = cmndlgsc.new_wxSingleChoiceDialog(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -251,19 +251,19 @@ class wxTextEntryDialogPtr(wxDialogPtr):
         self.this = this
         self.thisown = 0
     def GetValue(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxTextEntryDialog_GetValue,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxTextEntryDialog_GetValue(self, *_args, **_kwargs)
         return val
     def SetValue(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxTextEntryDialog_SetValue,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxTextEntryDialog_SetValue(self, *_args, **_kwargs)
         return val
     def ShowModal(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxTextEntryDialog_ShowModal,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxTextEntryDialog_ShowModal(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTextEntryDialog instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTextEntryDialog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxTextEntryDialog(wxTextEntryDialogPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(cmndlgsc.new_wxTextEntryDialog,_args,_kwargs)
+        self.this = cmndlgsc.new_wxTextEntryDialog(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -281,52 +281,52 @@ class wxFontDataPtr(wxObjectPtr):
             except:
                 pass
     def EnableEffects(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFontData_EnableEffects,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFontData_EnableEffects(self, *_args, **_kwargs)
         return val
     def GetAllowSymbols(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFontData_GetAllowSymbols,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFontData_GetAllowSymbols(self, *_args, **_kwargs)
         return val
     def GetColour(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFontData_GetColour,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFontData_GetColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetChosenFont(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFontData_GetChosenFont,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFontData_GetChosenFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def GetEnableEffects(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFontData_GetEnableEffects,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFontData_GetEnableEffects(self, *_args, **_kwargs)
         return val
     def GetInitialFont(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFontData_GetInitialFont,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFontData_GetInitialFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def GetShowHelp(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFontData_GetShowHelp,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFontData_GetShowHelp(self, *_args, **_kwargs)
         return val
     def SetAllowSymbols(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFontData_SetAllowSymbols,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFontData_SetAllowSymbols(self, *_args, **_kwargs)
         return val
     def SetChosenFont(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFontData_SetChosenFont,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFontData_SetChosenFont(self, *_args, **_kwargs)
         return val
     def SetColour(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFontData_SetColour,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFontData_SetColour(self, *_args, **_kwargs)
         return val
     def SetInitialFont(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFontData_SetInitialFont,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFontData_SetInitialFont(self, *_args, **_kwargs)
         return val
     def SetRange(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFontData_SetRange,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFontData_SetRange(self, *_args, **_kwargs)
         return val
     def SetShowHelp(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFontData_SetShowHelp,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFontData_SetShowHelp(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFontData instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFontData instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFontData(wxFontDataPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(cmndlgsc.new_wxFontData,_args,_kwargs)
+        self.this = cmndlgsc.new_wxFontData(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -337,17 +337,17 @@ class wxFontDialogPtr(wxDialogPtr):
         self.this = this
         self.thisown = 0
     def GetFontData(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFontDialog_GetFontData,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFontDialog_GetFontData(self, *_args, **_kwargs)
         if val: val = wxFontDataPtr(val) 
         return val
     def ShowModal(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFontDialog_ShowModal,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFontDialog_ShowModal(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFontDialog instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFontDialog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFontDialog(wxFontDialogPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(cmndlgsc.new_wxFontDialog,_args,_kwargs)
+        self.this = cmndlgsc.new_wxFontDialog(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -359,13 +359,13 @@ class wxMessageDialogPtr(wxDialogPtr):
         self.this = this
         self.thisown = 0
     def ShowModal(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxMessageDialog_ShowModal,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxMessageDialog_ShowModal(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxMessageDialog instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMessageDialog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMessageDialog(wxMessageDialogPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(cmndlgsc.new_wxMessageDialog,_args,_kwargs)
+        self.this = cmndlgsc.new_wxMessageDialog(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -377,16 +377,16 @@ class wxProgressDialogPtr(wxFramePtr):
         self.this = this
         self.thisown = 0
     def Update(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxProgressDialog_Update,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxProgressDialog_Update(self, *_args, **_kwargs)
         return val
     def Resume(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxProgressDialog_Resume,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxProgressDialog_Resume(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxProgressDialog instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxProgressDialog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxProgressDialog(wxProgressDialogPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(cmndlgsc.new_wxProgressDialog,_args,_kwargs)
+        self.this = cmndlgsc.new_wxProgressDialog(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -398,32 +398,32 @@ class wxFindDialogEventPtr(wxCommandEventPtr):
         self.this = this
         self.thisown = 0
     def GetFlags(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindDialogEvent_GetFlags,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindDialogEvent_GetFlags(self, *_args, **_kwargs)
         return val
     def GetFindString(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindDialogEvent_GetFindString,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindDialogEvent_GetFindString(self, *_args, **_kwargs)
         return val
     def GetReplaceString(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindDialogEvent_GetReplaceString,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindDialogEvent_GetReplaceString(self, *_args, **_kwargs)
         return val
     def GetDialog(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindDialogEvent_GetDialog,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindDialogEvent_GetDialog(self, *_args, **_kwargs)
         if val: val = wxFindReplaceDialogPtr(val) 
         return val
     def SetFlags(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindDialogEvent_SetFlags,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindDialogEvent_SetFlags(self, *_args, **_kwargs)
         return val
     def SetFindString(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindDialogEvent_SetFindString,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindDialogEvent_SetFindString(self, *_args, **_kwargs)
         return val
     def SetReplaceString(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindDialogEvent_SetReplaceString,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindDialogEvent_SetReplaceString(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFindDialogEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFindDialogEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFindDialogEvent(wxFindDialogEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(cmndlgsc.new_wxFindDialogEvent,_args,_kwargs)
+        self.this = cmndlgsc.new_wxFindDialogEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -440,28 +440,28 @@ class wxFindReplaceDataPtr(wxObjectPtr):
             except:
                 pass
     def GetFindString(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindReplaceData_GetFindString,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindReplaceData_GetFindString(self, *_args, **_kwargs)
         return val
     def GetReplaceString(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindReplaceData_GetReplaceString,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindReplaceData_GetReplaceString(self, *_args, **_kwargs)
         return val
     def GetFlags(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindReplaceData_GetFlags,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindReplaceData_GetFlags(self, *_args, **_kwargs)
         return val
     def SetFlags(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindReplaceData_SetFlags,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindReplaceData_SetFlags(self, *_args, **_kwargs)
         return val
     def SetFindString(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindReplaceData_SetFindString,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindReplaceData_SetFindString(self, *_args, **_kwargs)
         return val
     def SetReplaceString(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindReplaceData_SetReplaceString,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindReplaceData_SetReplaceString(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFindReplaceData instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFindReplaceData instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFindReplaceData(wxFindReplaceDataPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(cmndlgsc.new_wxFindReplaceData,_args,_kwargs)
+        self.this = cmndlgsc.new_wxFindReplaceData(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -472,27 +472,27 @@ class wxFindReplaceDialogPtr(wxDialogPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindReplaceDialog_Create,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindReplaceDialog_Create(self, *_args, **_kwargs)
         return val
     def GetData(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindReplaceDialog_GetData,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindReplaceDialog_GetData(self, *_args, **_kwargs)
         if val: val = wxFindReplaceDataPtr(val) 
         return val
     def SetData(self, *_args, **_kwargs):
-        val = apply(cmndlgsc.wxFindReplaceDialog_SetData,(self,) + _args, _kwargs)
+        val = cmndlgsc.wxFindReplaceDialog_SetData(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFindReplaceDialog instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFindReplaceDialog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFindReplaceDialog(wxFindReplaceDialogPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(cmndlgsc.new_wxFindReplaceDialog,_args,_kwargs)
+        self.this = cmndlgsc.new_wxFindReplaceDialog(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreFindReplaceDialog(*_args,**_kwargs):
-    val = wxFindReplaceDialogPtr(apply(cmndlgsc.new_wxPreFindReplaceDialog,_args,_kwargs))
+    val = wxFindReplaceDialogPtr(cmndlgsc.new_wxPreFindReplaceDialog(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
diff --git a/wxPython/src/gtk/controls.cpp b/wxPython/src/gtk/controls.cpp
index 336a7ddb98..e3f2b5d553 100644
--- a/wxPython/src/gtk/controls.cpp
+++ b/wxPython/src/gtk/controls.cpp
@@ -1924,7 +1924,7 @@ static PyObject *_wrap_new_wxCheckBox(PyObject *self, PyObject *args, PyObject *
     PyObject * _obj4 = 0;
     PyObject * _argo6 = 0;
     PyObject * _obj7 = 0;
-    char *_kwnames[] = { "parent","id","label","pos","size","style","val","name", NULL };
+    char *_kwnames[] = { "parent","id","label","pos","size","style","validator","name", NULL };
     char _ptemp[128];
 
     self = self;
@@ -2038,7 +2038,7 @@ static PyObject *_wrap_wxCheckBox_Create(PyObject *self, PyObject *args, PyObjec
     PyObject * _obj5 = 0;
     PyObject * _argo7 = 0;
     PyObject * _obj8 = 0;
-    char *_kwnames[] = { "self","parent","id","label","pos","size","style","val","name", NULL };
+    char *_kwnames[] = { "self","parent","id","label","pos","size","style","validator","name", NULL };
 
     self = self;
     if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOiO|OOlOO:wxCheckBox_Create",_kwnames,&_argo0,&_argo1,&_arg2,&_obj3,&_obj4,&_obj5,&_arg6,&_argo7,&_obj8)) 
@@ -11389,6 +11389,37 @@ static PyObject *_wrap_wxSpinCtrl_SetValue(PyObject *self, PyObject *args, PyObj
     return _resultobj;
 }
 
+static void  wxSpinCtrl_SetSelection(wxSpinCtrl *self,long  from,long  to) {
+        }
+static PyObject *_wrap_wxSpinCtrl_SetSelection(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxSpinCtrl * _arg0;
+    long  _arg1;
+    long  _arg2;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","from","to", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oll:wxSpinCtrl_SetSelection",_kwnames,&_argo0,&_arg1,&_arg2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSpinCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSpinCtrl_SetSelection. Expected _wxSpinCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxSpinCtrl_SetSelection(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 static void *SwigwxToggleButtonTowxControl(void *ptr) {
     wxToggleButton *src;
     wxControl *dest;
@@ -11726,6 +11757,7 @@ static PyMethodDef controlscMethods[] = {
 	 { "wxToggleButton_Create", (PyCFunction) _wrap_wxToggleButton_Create, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxPreToggleButton", (PyCFunction) _wrap_new_wxPreToggleButton, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxToggleButton", (PyCFunction) _wrap_new_wxToggleButton, METH_VARARGS | METH_KEYWORDS },
+	 { "wxSpinCtrl_SetSelection", (PyCFunction) _wrap_wxSpinCtrl_SetSelection, METH_VARARGS | METH_KEYWORDS },
 	 { "wxSpinCtrl_SetValue", (PyCFunction) _wrap_wxSpinCtrl_SetValue, METH_VARARGS | METH_KEYWORDS },
 	 { "wxSpinCtrl_SetRange", (PyCFunction) _wrap_wxSpinCtrl_SetRange, METH_VARARGS | METH_KEYWORDS },
 	 { "wxSpinCtrl_GetValue", (PyCFunction) _wrap_wxSpinCtrl_GetValue, METH_VARARGS | METH_KEYWORDS },
diff --git a/wxPython/src/gtk/controls.py b/wxPython/src/gtk/controls.py
index d1b3ccc1bc..d7cee29ee4 100644
--- a/wxPython/src/gtk/controls.py
+++ b/wxPython/src/gtk/controls.py
@@ -18,29 +18,29 @@ class wxControlPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControl_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxControl_Create(self, *_args, **_kwargs)
         return val
     def Command(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControl_Command,(self,) + _args, _kwargs)
+        val = controlsc.wxControl_Command(self, *_args, **_kwargs)
         return val
     def GetLabel(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControl_GetLabel,(self,) + _args, _kwargs)
+        val = controlsc.wxControl_GetLabel(self, *_args, **_kwargs)
         return val
     def SetLabel(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControl_SetLabel,(self,) + _args, _kwargs)
+        val = controlsc.wxControl_SetLabel(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxControl instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxControl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxControl(wxControlPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxControl,_args,_kwargs)
+        self.this = controlsc.new_wxControl(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreControl(*_args,**_kwargs):
-    val = wxControlPtr(apply(controlsc.new_wxPreControl,_args,_kwargs))
+    val = wxControlPtr(controlsc.new_wxPreControl(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -51,43 +51,43 @@ class wxControlWithItemsPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Delete(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControlWithItems_Delete,(self,) + _args, _kwargs)
+        val = controlsc.wxControlWithItems_Delete(self, *_args, **_kwargs)
         return val
     def GetCount(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControlWithItems_GetCount,(self,) + _args, _kwargs)
+        val = controlsc.wxControlWithItems_GetCount(self, *_args, **_kwargs)
         return val
     def GetString(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControlWithItems_GetString,(self,) + _args, _kwargs)
+        val = controlsc.wxControlWithItems_GetString(self, *_args, **_kwargs)
         return val
     def SetString(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControlWithItems_SetString,(self,) + _args, _kwargs)
+        val = controlsc.wxControlWithItems_SetString(self, *_args, **_kwargs)
         return val
     def FindString(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControlWithItems_FindString,(self,) + _args, _kwargs)
+        val = controlsc.wxControlWithItems_FindString(self, *_args, **_kwargs)
         return val
     def Select(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControlWithItems_Select,(self,) + _args, _kwargs)
+        val = controlsc.wxControlWithItems_Select(self, *_args, **_kwargs)
         return val
     def GetSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControlWithItems_GetSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxControlWithItems_GetSelection(self, *_args, **_kwargs)
         return val
     def GetStringSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControlWithItems_GetStringSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxControlWithItems_GetStringSelection(self, *_args, **_kwargs)
         return val
     def Append(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControlWithItems_Append,(self,) + _args, _kwargs)
+        val = controlsc.wxControlWithItems_Append(self, *_args, **_kwargs)
         return val
     def GetClientData(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControlWithItems_GetClientData,(self,) + _args, _kwargs)
+        val = controlsc.wxControlWithItems_GetClientData(self, *_args, **_kwargs)
         return val
     def SetClientData(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControlWithItems_SetClientData,(self,) + _args, _kwargs)
+        val = controlsc.wxControlWithItems_SetClientData(self, *_args, **_kwargs)
         return val
     def AppendItems(self, *_args, **_kwargs):
-        val = apply(controlsc.wxControlWithItems_AppendItems,(self,) + _args, _kwargs)
+        val = controlsc.wxControlWithItems_AppendItems(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxControlWithItems instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxControlWithItems instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     Number = GetCount
 class wxControlWithItems(wxControlWithItemsPtr):
     def __init__(self,this):
@@ -101,29 +101,29 @@ class wxButtonPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxButton_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxButton_Create(self, *_args, **_kwargs)
         return val
     def SetDefault(self, *_args, **_kwargs):
-        val = apply(controlsc.wxButton_SetDefault,(self,) + _args, _kwargs)
+        val = controlsc.wxButton_SetDefault(self, *_args, **_kwargs)
         return val
     def SetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controlsc.wxButton_SetBackgroundColour,(self,) + _args, _kwargs)
+        val = controlsc.wxButton_SetBackgroundColour(self, *_args, **_kwargs)
         return val
     def SetForegroundColour(self, *_args, **_kwargs):
-        val = apply(controlsc.wxButton_SetForegroundColour,(self,) + _args, _kwargs)
+        val = controlsc.wxButton_SetForegroundColour(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxButton instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxButton instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxButton(wxButtonPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxButton,_args,_kwargs)
+        self.this = controlsc.new_wxButton(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreButton(*_args,**_kwargs):
-    val = wxButtonPtr(apply(controlsc.new_wxPreButton,_args,_kwargs))
+    val = wxButtonPtr(controlsc.new_wxPreButton(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -134,57 +134,57 @@ class wxBitmapButtonPtr(wxButtonPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxBitmapButton_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxBitmapButton_Create(self, *_args, **_kwargs)
         return val
     def GetBitmapLabel(self, *_args, **_kwargs):
-        val = apply(controlsc.wxBitmapButton_GetBitmapLabel,(self,) + _args, _kwargs)
+        val = controlsc.wxBitmapButton_GetBitmapLabel(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) ; val.thisown = 1
         return val
     def GetBitmapDisabled(self, *_args, **_kwargs):
-        val = apply(controlsc.wxBitmapButton_GetBitmapDisabled,(self,) + _args, _kwargs)
+        val = controlsc.wxBitmapButton_GetBitmapDisabled(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) ; val.thisown = 1
         return val
     def GetBitmapFocus(self, *_args, **_kwargs):
-        val = apply(controlsc.wxBitmapButton_GetBitmapFocus,(self,) + _args, _kwargs)
+        val = controlsc.wxBitmapButton_GetBitmapFocus(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) ; val.thisown = 1
         return val
     def GetBitmapSelected(self, *_args, **_kwargs):
-        val = apply(controlsc.wxBitmapButton_GetBitmapSelected,(self,) + _args, _kwargs)
+        val = controlsc.wxBitmapButton_GetBitmapSelected(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) ; val.thisown = 1
         return val
     def SetBitmapDisabled(self, *_args, **_kwargs):
-        val = apply(controlsc.wxBitmapButton_SetBitmapDisabled,(self,) + _args, _kwargs)
+        val = controlsc.wxBitmapButton_SetBitmapDisabled(self, *_args, **_kwargs)
         return val
     def SetBitmapFocus(self, *_args, **_kwargs):
-        val = apply(controlsc.wxBitmapButton_SetBitmapFocus,(self,) + _args, _kwargs)
+        val = controlsc.wxBitmapButton_SetBitmapFocus(self, *_args, **_kwargs)
         return val
     def SetBitmapSelected(self, *_args, **_kwargs):
-        val = apply(controlsc.wxBitmapButton_SetBitmapSelected,(self,) + _args, _kwargs)
+        val = controlsc.wxBitmapButton_SetBitmapSelected(self, *_args, **_kwargs)
         return val
     def SetBitmapLabel(self, *_args, **_kwargs):
-        val = apply(controlsc.wxBitmapButton_SetBitmapLabel,(self,) + _args, _kwargs)
+        val = controlsc.wxBitmapButton_SetBitmapLabel(self, *_args, **_kwargs)
         return val
     def SetMargins(self, *_args, **_kwargs):
-        val = apply(controlsc.wxBitmapButton_SetMargins,(self,) + _args, _kwargs)
+        val = controlsc.wxBitmapButton_SetMargins(self, *_args, **_kwargs)
         return val
     def GetMarginX(self, *_args, **_kwargs):
-        val = apply(controlsc.wxBitmapButton_GetMarginX,(self,) + _args, _kwargs)
+        val = controlsc.wxBitmapButton_GetMarginX(self, *_args, **_kwargs)
         return val
     def GetMarginY(self, *_args, **_kwargs):
-        val = apply(controlsc.wxBitmapButton_GetMarginY,(self,) + _args, _kwargs)
+        val = controlsc.wxBitmapButton_GetMarginY(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxBitmapButton instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxBitmapButton instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxBitmapButton(wxBitmapButtonPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxBitmapButton,_args,_kwargs)
+        self.this = controlsc.new_wxBitmapButton(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreBitmapButton(*_args,**_kwargs):
-    val = wxBitmapButtonPtr(apply(controlsc.new_wxPreBitmapButton,_args,_kwargs))
+    val = wxBitmapButtonPtr(controlsc.new_wxPreBitmapButton(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -195,29 +195,29 @@ class wxCheckBoxPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxCheckBox_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxCheckBox_Create(self, *_args, **_kwargs)
         return val
     def GetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxCheckBox_GetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxCheckBox_GetValue(self, *_args, **_kwargs)
         return val
     def IsChecked(self, *_args, **_kwargs):
-        val = apply(controlsc.wxCheckBox_IsChecked,(self,) + _args, _kwargs)
+        val = controlsc.wxCheckBox_IsChecked(self, *_args, **_kwargs)
         return val
     def SetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxCheckBox_SetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxCheckBox_SetValue(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxCheckBox instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxCheckBox instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxCheckBox(wxCheckBoxPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxCheckBox,_args,_kwargs)
+        self.this = controlsc.new_wxCheckBox(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreCheckBox(*_args,**_kwargs):
-    val = wxCheckBoxPtr(apply(controlsc.new_wxPreCheckBox,_args,_kwargs))
+    val = wxCheckBoxPtr(controlsc.new_wxPreCheckBox(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -228,41 +228,41 @@ class wxChoicePtr(wxControlWithItemsPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxChoice_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxChoice_Create(self, *_args, **_kwargs)
         return val
     def Clear(self, *_args, **_kwargs):
-        val = apply(controlsc.wxChoice_Clear,(self,) + _args, _kwargs)
+        val = controlsc.wxChoice_Clear(self, *_args, **_kwargs)
         return val
     def GetColumns(self, *_args, **_kwargs):
-        val = apply(controlsc.wxChoice_GetColumns,(self,) + _args, _kwargs)
+        val = controlsc.wxChoice_GetColumns(self, *_args, **_kwargs)
         return val
     def SetColumns(self, *_args, **_kwargs):
-        val = apply(controlsc.wxChoice_SetColumns,(self,) + _args, _kwargs)
+        val = controlsc.wxChoice_SetColumns(self, *_args, **_kwargs)
         return val
     def SetSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxChoice_SetSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxChoice_SetSelection(self, *_args, **_kwargs)
         return val
     def SetStringSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxChoice_SetStringSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxChoice_SetStringSelection(self, *_args, **_kwargs)
         return val
     def SetString(self, *_args, **_kwargs):
-        val = apply(controlsc.wxChoice_SetString,(self,) + _args, _kwargs)
+        val = controlsc.wxChoice_SetString(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxChoice instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxChoice instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     Select = SetSelection
     
 class wxChoice(wxChoicePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxChoice,_args,_kwargs)
+        self.this = controlsc.new_wxChoice(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreChoice(*_args,**_kwargs):
-    val = wxChoicePtr(apply(controlsc.new_wxPreChoice,_args,_kwargs))
+    val = wxChoicePtr(controlsc.new_wxPreChoice(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -273,94 +273,94 @@ class wxComboBoxPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_Create(self, *_args, **_kwargs)
         return val
     def Copy(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_Copy,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_Copy(self, *_args, **_kwargs)
         return val
     def Cut(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_Cut,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_Cut(self, *_args, **_kwargs)
         return val
     def GetInsertionPoint(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_GetInsertionPoint,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_GetInsertionPoint(self, *_args, **_kwargs)
         return val
     def GetLastPosition(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_GetLastPosition,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_GetLastPosition(self, *_args, **_kwargs)
         return val
     def GetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_GetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_GetValue(self, *_args, **_kwargs)
         return val
     def Paste(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_Paste,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_Paste(self, *_args, **_kwargs)
         return val
     def Replace(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_Replace,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_Replace(self, *_args, **_kwargs)
         return val
     def Remove(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_Remove,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_Remove(self, *_args, **_kwargs)
         return val
     def SetInsertionPoint(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_SetInsertionPoint,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_SetInsertionPoint(self, *_args, **_kwargs)
         return val
     def SetInsertionPointEnd(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_SetInsertionPointEnd,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_SetInsertionPointEnd(self, *_args, **_kwargs)
         return val
     def SetSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_SetSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_SetSelection(self, *_args, **_kwargs)
         return val
     def SetMark(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_SetMark,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_SetMark(self, *_args, **_kwargs)
         return val
     def SetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_SetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_SetValue(self, *_args, **_kwargs)
         return val
     def SetEditable(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_SetEditable,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_SetEditable(self, *_args, **_kwargs)
         return val
     def Clear(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_Clear,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_Clear(self, *_args, **_kwargs)
         return val
     def Delete(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_Delete,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_Delete(self, *_args, **_kwargs)
         return val
     def GetCount(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_GetCount,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_GetCount(self, *_args, **_kwargs)
         return val
     def GetString(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_GetString,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_GetString(self, *_args, **_kwargs)
         return val
     def FindString(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_FindString,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_FindString(self, *_args, **_kwargs)
         return val
     def GetSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_GetSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_GetSelection(self, *_args, **_kwargs)
         return val
     def GetStringSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_GetStringSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_GetStringSelection(self, *_args, **_kwargs)
         return val
     def Append(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_Append,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_Append(self, *_args, **_kwargs)
         return val
     def GetClientData(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_GetClientData,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_GetClientData(self, *_args, **_kwargs)
         return val
     def SetClientData(self, *_args, **_kwargs):
-        val = apply(controlsc.wxComboBox_SetClientData,(self,) + _args, _kwargs)
+        val = controlsc.wxComboBox_SetClientData(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxComboBox instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxComboBox instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     Number = GetCount
     Select = SetSelection
 class wxComboBox(wxComboBoxPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxComboBox,_args,_kwargs)
+        self.this = controlsc.new_wxComboBox(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreComboBox(*_args,**_kwargs):
-    val = wxComboBoxPtr(apply(controlsc.new_wxPreComboBox,_args,_kwargs))
+    val = wxComboBoxPtr(controlsc.new_wxPreComboBox(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -371,44 +371,44 @@ class wxGaugePtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxGauge_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxGauge_Create(self, *_args, **_kwargs)
         return val
     def GetBezelFace(self, *_args, **_kwargs):
-        val = apply(controlsc.wxGauge_GetBezelFace,(self,) + _args, _kwargs)
+        val = controlsc.wxGauge_GetBezelFace(self, *_args, **_kwargs)
         return val
     def GetRange(self, *_args, **_kwargs):
-        val = apply(controlsc.wxGauge_GetRange,(self,) + _args, _kwargs)
+        val = controlsc.wxGauge_GetRange(self, *_args, **_kwargs)
         return val
     def GetShadowWidth(self, *_args, **_kwargs):
-        val = apply(controlsc.wxGauge_GetShadowWidth,(self,) + _args, _kwargs)
+        val = controlsc.wxGauge_GetShadowWidth(self, *_args, **_kwargs)
         return val
     def GetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxGauge_GetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxGauge_GetValue(self, *_args, **_kwargs)
         return val
     def SetBezelFace(self, *_args, **_kwargs):
-        val = apply(controlsc.wxGauge_SetBezelFace,(self,) + _args, _kwargs)
+        val = controlsc.wxGauge_SetBezelFace(self, *_args, **_kwargs)
         return val
     def SetRange(self, *_args, **_kwargs):
-        val = apply(controlsc.wxGauge_SetRange,(self,) + _args, _kwargs)
+        val = controlsc.wxGauge_SetRange(self, *_args, **_kwargs)
         return val
     def SetShadowWidth(self, *_args, **_kwargs):
-        val = apply(controlsc.wxGauge_SetShadowWidth,(self,) + _args, _kwargs)
+        val = controlsc.wxGauge_SetShadowWidth(self, *_args, **_kwargs)
         return val
     def SetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxGauge_SetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxGauge_SetValue(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGauge instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGauge instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGauge(wxGaugePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxGauge,_args,_kwargs)
+        self.this = controlsc.new_wxGauge(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreGauge(*_args,**_kwargs):
-    val = wxGaugePtr(apply(controlsc.new_wxPreGauge,_args,_kwargs))
+    val = wxGaugePtr(controlsc.new_wxPreGauge(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -419,20 +419,20 @@ class wxStaticBoxPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxStaticBox_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxStaticBox_Create(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxStaticBox instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxStaticBox instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxStaticBox(wxStaticBoxPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxStaticBox,_args,_kwargs)
+        self.this = controlsc.new_wxStaticBox(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreStaticBox(*_args,**_kwargs):
-    val = wxStaticBoxPtr(apply(controlsc.new_wxPreStaticBox,_args,_kwargs))
+    val = wxStaticBoxPtr(controlsc.new_wxPreStaticBox(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -443,20 +443,20 @@ class wxStaticLinePtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxStaticLine_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxStaticLine_Create(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxStaticLine instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxStaticLine instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxStaticLine(wxStaticLinePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxStaticLine,_args,_kwargs)
+        self.this = controlsc.new_wxStaticLine(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreStaticLine(*_args,**_kwargs):
-    val = wxStaticLinePtr(apply(controlsc.new_wxPreStaticLine,_args,_kwargs))
+    val = wxStaticLinePtr(controlsc.new_wxPreStaticLine(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -467,26 +467,26 @@ class wxStaticTextPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxStaticText_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxStaticText_Create(self, *_args, **_kwargs)
         return val
     def GetLabel(self, *_args, **_kwargs):
-        val = apply(controlsc.wxStaticText_GetLabel,(self,) + _args, _kwargs)
+        val = controlsc.wxStaticText_GetLabel(self, *_args, **_kwargs)
         return val
     def SetLabel(self, *_args, **_kwargs):
-        val = apply(controlsc.wxStaticText_SetLabel,(self,) + _args, _kwargs)
+        val = controlsc.wxStaticText_SetLabel(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxStaticText instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxStaticText instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxStaticText(wxStaticTextPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxStaticText,_args,_kwargs)
+        self.this = controlsc.new_wxStaticText(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreStaticText(*_args,**_kwargs):
-    val = wxStaticTextPtr(apply(controlsc.new_wxPreStaticText,_args,_kwargs))
+    val = wxStaticTextPtr(controlsc.new_wxPreStaticText(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -497,56 +497,56 @@ class wxListBoxPtr(wxControlWithItemsPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxListBox_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxListBox_Create(self, *_args, **_kwargs)
         return val
     def Clear(self, *_args, **_kwargs):
-        val = apply(controlsc.wxListBox_Clear,(self,) + _args, _kwargs)
+        val = controlsc.wxListBox_Clear(self, *_args, **_kwargs)
         return val
     def Deselect(self, *_args, **_kwargs):
-        val = apply(controlsc.wxListBox_Deselect,(self,) + _args, _kwargs)
+        val = controlsc.wxListBox_Deselect(self, *_args, **_kwargs)
         return val
     def GetSelections(self, *_args, **_kwargs):
-        val = apply(controlsc.wxListBox_GetSelections,(self,) + _args, _kwargs)
+        val = controlsc.wxListBox_GetSelections(self, *_args, **_kwargs)
         return val
     def InsertItems(self, *_args, **_kwargs):
-        val = apply(controlsc.wxListBox_InsertItems,(self,) + _args, _kwargs)
+        val = controlsc.wxListBox_InsertItems(self, *_args, **_kwargs)
         return val
     def IsSelected(self, *_args, **_kwargs):
-        val = apply(controlsc.wxListBox_IsSelected,(self,) + _args, _kwargs)
+        val = controlsc.wxListBox_IsSelected(self, *_args, **_kwargs)
         return val
     def Selected(self, *_args, **_kwargs):
-        val = apply(controlsc.wxListBox_Selected,(self,) + _args, _kwargs)
+        val = controlsc.wxListBox_Selected(self, *_args, **_kwargs)
         return val
     def Set(self, *_args, **_kwargs):
-        val = apply(controlsc.wxListBox_Set,(self,) + _args, _kwargs)
+        val = controlsc.wxListBox_Set(self, *_args, **_kwargs)
         return val
     def SetFirstItem(self, *_args, **_kwargs):
-        val = apply(controlsc.wxListBox_SetFirstItem,(self,) + _args, _kwargs)
+        val = controlsc.wxListBox_SetFirstItem(self, *_args, **_kwargs)
         return val
     def SetFirstItemStr(self, *_args, **_kwargs):
-        val = apply(controlsc.wxListBox_SetFirstItemStr,(self,) + _args, _kwargs)
+        val = controlsc.wxListBox_SetFirstItemStr(self, *_args, **_kwargs)
         return val
     def SetSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxListBox_SetSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxListBox_SetSelection(self, *_args, **_kwargs)
         return val
     def SetString(self, *_args, **_kwargs):
-        val = apply(controlsc.wxListBox_SetString,(self,) + _args, _kwargs)
+        val = controlsc.wxListBox_SetString(self, *_args, **_kwargs)
         return val
     def SetStringSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxListBox_SetStringSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxListBox_SetStringSelection(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxListBox instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxListBox instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxListBox(wxListBoxPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxListBox,_args,_kwargs)
+        self.this = controlsc.new_wxListBox(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreListBox(*_args,**_kwargs):
-    val = wxListBoxPtr(apply(controlsc.new_wxPreListBox,_args,_kwargs))
+    val = wxListBoxPtr(controlsc.new_wxPreListBox(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -557,38 +557,38 @@ class wxCheckListBoxPtr(wxListBoxPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxCheckListBox_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxCheckListBox_Create(self, *_args, **_kwargs)
         return val
     def IsChecked(self, *_args, **_kwargs):
-        val = apply(controlsc.wxCheckListBox_IsChecked,(self,) + _args, _kwargs)
+        val = controlsc.wxCheckListBox_IsChecked(self, *_args, **_kwargs)
         return val
     def Check(self, *_args, **_kwargs):
-        val = apply(controlsc.wxCheckListBox_Check,(self,) + _args, _kwargs)
+        val = controlsc.wxCheckListBox_Check(self, *_args, **_kwargs)
         return val
     def InsertItems(self, *_args, **_kwargs):
-        val = apply(controlsc.wxCheckListBox_InsertItems,(self,) + _args, _kwargs)
+        val = controlsc.wxCheckListBox_InsertItems(self, *_args, **_kwargs)
         return val
     def GetItemHeight(self, *_args, **_kwargs):
-        val = apply(controlsc.wxCheckListBox_GetItemHeight,(self,) + _args, _kwargs)
+        val = controlsc.wxCheckListBox_GetItemHeight(self, *_args, **_kwargs)
         return val
     def HitTest(self, *_args, **_kwargs):
-        val = apply(controlsc.wxCheckListBox_HitTest,(self,) + _args, _kwargs)
+        val = controlsc.wxCheckListBox_HitTest(self, *_args, **_kwargs)
         return val
     def HitTestXY(self, *_args, **_kwargs):
-        val = apply(controlsc.wxCheckListBox_HitTestXY,(self,) + _args, _kwargs)
+        val = controlsc.wxCheckListBox_HitTestXY(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxCheckListBox instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxCheckListBox instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxCheckListBox(wxCheckListBoxPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxCheckListBox,_args,_kwargs)
+        self.this = controlsc.new_wxCheckListBox(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreCheckListBox(*_args,**_kwargs):
-    val = wxCheckListBoxPtr(apply(controlsc.new_wxPreCheckListBox,_args,_kwargs))
+    val = wxCheckListBoxPtr(controlsc.new_wxPreCheckListBox(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -605,43 +605,43 @@ class wxTextAttrPtr :
             except:
                 pass
     def SetTextColour(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextAttr_SetTextColour,(self,) + _args, _kwargs)
+        val = controlsc.wxTextAttr_SetTextColour(self, *_args, **_kwargs)
         return val
     def SetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextAttr_SetBackgroundColour,(self,) + _args, _kwargs)
+        val = controlsc.wxTextAttr_SetBackgroundColour(self, *_args, **_kwargs)
         return val
     def SetFont(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextAttr_SetFont,(self,) + _args, _kwargs)
+        val = controlsc.wxTextAttr_SetFont(self, *_args, **_kwargs)
         return val
     def HasTextColour(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextAttr_HasTextColour,(self,) + _args, _kwargs)
+        val = controlsc.wxTextAttr_HasTextColour(self, *_args, **_kwargs)
         return val
     def HasBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextAttr_HasBackgroundColour,(self,) + _args, _kwargs)
+        val = controlsc.wxTextAttr_HasBackgroundColour(self, *_args, **_kwargs)
         return val
     def HasFont(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextAttr_HasFont,(self,) + _args, _kwargs)
+        val = controlsc.wxTextAttr_HasFont(self, *_args, **_kwargs)
         return val
     def GetTextColour(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextAttr_GetTextColour,(self,) + _args, _kwargs)
+        val = controlsc.wxTextAttr_GetTextColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextAttr_GetBackgroundColour,(self,) + _args, _kwargs)
+        val = controlsc.wxTextAttr_GetBackgroundColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetFont(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextAttr_GetFont,(self,) + _args, _kwargs)
+        val = controlsc.wxTextAttr_GetFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def IsDefault(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextAttr_IsDefault,(self,) + _args, _kwargs)
+        val = controlsc.wxTextAttr_IsDefault(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTextAttr instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTextAttr instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxTextAttr(wxTextAttrPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxTextAttr,_args,_kwargs)
+        self.this = controlsc.new_wxTextAttr(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -652,162 +652,162 @@ class wxTextCtrlPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_Create(self, *_args, **_kwargs)
         return val
     def GetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_GetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_GetValue(self, *_args, **_kwargs)
         return val
     def SetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_SetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_SetValue(self, *_args, **_kwargs)
         return val
     def GetRange(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_GetRange,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_GetRange(self, *_args, **_kwargs)
         return val
     def GetLineLength(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_GetLineLength,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_GetLineLength(self, *_args, **_kwargs)
         return val
     def GetLineText(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_GetLineText,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_GetLineText(self, *_args, **_kwargs)
         return val
     def GetNumberOfLines(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_GetNumberOfLines,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_GetNumberOfLines(self, *_args, **_kwargs)
         return val
     def IsModified(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_IsModified,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_IsModified(self, *_args, **_kwargs)
         return val
     def IsEditable(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_IsEditable,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_IsEditable(self, *_args, **_kwargs)
         return val
     def GetSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_GetSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_GetSelection(self, *_args, **_kwargs)
         return val
     def GetStringSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_GetStringSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_GetStringSelection(self, *_args, **_kwargs)
         return val
     def Clear(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_Clear,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_Clear(self, *_args, **_kwargs)
         return val
     def Replace(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_Replace,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_Replace(self, *_args, **_kwargs)
         return val
     def Remove(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_Remove,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_Remove(self, *_args, **_kwargs)
         return val
     def LoadFile(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_LoadFile,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_LoadFile(self, *_args, **_kwargs)
         return val
     def SaveFile(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_SaveFile,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_SaveFile(self, *_args, **_kwargs)
         return val
     def DiscardEdits(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_DiscardEdits,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_DiscardEdits(self, *_args, **_kwargs)
         return val
     def SetMaxLength(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_SetMaxLength,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_SetMaxLength(self, *_args, **_kwargs)
         return val
     def WriteText(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_WriteText,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_WriteText(self, *_args, **_kwargs)
         return val
     def AppendText(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_AppendText,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_AppendText(self, *_args, **_kwargs)
         return val
     def EmulateKeyPress(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_EmulateKeyPress,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_EmulateKeyPress(self, *_args, **_kwargs)
         return val
     def SetStyle(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_SetStyle,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_SetStyle(self, *_args, **_kwargs)
         return val
     def SetDefaultStyle(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_SetDefaultStyle,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_SetDefaultStyle(self, *_args, **_kwargs)
         return val
     def GetDefaultStyle(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_GetDefaultStyle,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_GetDefaultStyle(self, *_args, **_kwargs)
         if val: val = wxTextAttrPtr(val) 
         return val
     def XYToPosition(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_XYToPosition,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_XYToPosition(self, *_args, **_kwargs)
         return val
     def PositionToXY(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_PositionToXY,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_PositionToXY(self, *_args, **_kwargs)
         return val
     def ShowPosition(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_ShowPosition,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_ShowPosition(self, *_args, **_kwargs)
         return val
     def Copy(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_Copy,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_Copy(self, *_args, **_kwargs)
         return val
     def Cut(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_Cut,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_Cut(self, *_args, **_kwargs)
         return val
     def Paste(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_Paste,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_Paste(self, *_args, **_kwargs)
         return val
     def CanCopy(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_CanCopy,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_CanCopy(self, *_args, **_kwargs)
         return val
     def CanCut(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_CanCut,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_CanCut(self, *_args, **_kwargs)
         return val
     def CanPaste(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_CanPaste,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_CanPaste(self, *_args, **_kwargs)
         return val
     def Undo(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_Undo,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_Undo(self, *_args, **_kwargs)
         return val
     def Redo(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_Redo,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_Redo(self, *_args, **_kwargs)
         return val
     def CanUndo(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_CanUndo,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_CanUndo(self, *_args, **_kwargs)
         return val
     def CanRedo(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_CanRedo,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_CanRedo(self, *_args, **_kwargs)
         return val
     def SetInsertionPoint(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_SetInsertionPoint,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_SetInsertionPoint(self, *_args, **_kwargs)
         return val
     def SetInsertionPointEnd(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_SetInsertionPointEnd,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_SetInsertionPointEnd(self, *_args, **_kwargs)
         return val
     def GetInsertionPoint(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_GetInsertionPoint,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_GetInsertionPoint(self, *_args, **_kwargs)
         return val
     def GetLastPosition(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_GetLastPosition,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_GetLastPosition(self, *_args, **_kwargs)
         return val
     def SetSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_SetSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_SetSelection(self, *_args, **_kwargs)
         return val
     def SelectAll(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_SelectAll,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_SelectAll(self, *_args, **_kwargs)
         return val
     def SetEditable(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_SetEditable,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_SetEditable(self, *_args, **_kwargs)
         return val
     def IsSingleLine(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_IsSingleLine,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_IsSingleLine(self, *_args, **_kwargs)
         return val
     def IsMultiLine(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_IsMultiLine,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_IsMultiLine(self, *_args, **_kwargs)
         return val
     def write(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_write,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_write(self, *_args, **_kwargs)
         return val
     def GetString(self, *_args, **_kwargs):
-        val = apply(controlsc.wxTextCtrl_GetString,(self,) + _args, _kwargs)
+        val = controlsc.wxTextCtrl_GetString(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTextCtrl instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTextCtrl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxTextCtrl(wxTextCtrlPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxTextCtrl,_args,_kwargs)
+        self.this = controlsc.new_wxTextCtrl(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreTextCtrl(*_args,**_kwargs):
-    val = wxTextCtrlPtr(apply(controlsc.new_wxPreTextCtrl,_args,_kwargs))
+    val = wxTextCtrlPtr(controlsc.new_wxPreTextCtrl(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -818,44 +818,44 @@ class wxScrollBarPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxScrollBar_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxScrollBar_Create(self, *_args, **_kwargs)
         return val
     def GetRange(self, *_args, **_kwargs):
-        val = apply(controlsc.wxScrollBar_GetRange,(self,) + _args, _kwargs)
+        val = controlsc.wxScrollBar_GetRange(self, *_args, **_kwargs)
         return val
     def GetPageSize(self, *_args, **_kwargs):
-        val = apply(controlsc.wxScrollBar_GetPageSize,(self,) + _args, _kwargs)
+        val = controlsc.wxScrollBar_GetPageSize(self, *_args, **_kwargs)
         return val
     def GetThumbPosition(self, *_args, **_kwargs):
-        val = apply(controlsc.wxScrollBar_GetThumbPosition,(self,) + _args, _kwargs)
+        val = controlsc.wxScrollBar_GetThumbPosition(self, *_args, **_kwargs)
         return val
     def GetThumbSize(self, *_args, **_kwargs):
-        val = apply(controlsc.wxScrollBar_GetThumbSize,(self,) + _args, _kwargs)
+        val = controlsc.wxScrollBar_GetThumbSize(self, *_args, **_kwargs)
         return val
     def GetThumbLength(self, *_args, **_kwargs):
-        val = apply(controlsc.wxScrollBar_GetThumbLength,(self,) + _args, _kwargs)
+        val = controlsc.wxScrollBar_GetThumbLength(self, *_args, **_kwargs)
         return val
     def IsVertical(self, *_args, **_kwargs):
-        val = apply(controlsc.wxScrollBar_IsVertical,(self,) + _args, _kwargs)
+        val = controlsc.wxScrollBar_IsVertical(self, *_args, **_kwargs)
         return val
     def SetThumbPosition(self, *_args, **_kwargs):
-        val = apply(controlsc.wxScrollBar_SetThumbPosition,(self,) + _args, _kwargs)
+        val = controlsc.wxScrollBar_SetThumbPosition(self, *_args, **_kwargs)
         return val
     def SetScrollbar(self, *_args, **_kwargs):
-        val = apply(controlsc.wxScrollBar_SetScrollbar,(self,) + _args, _kwargs)
+        val = controlsc.wxScrollBar_SetScrollbar(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxScrollBar instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxScrollBar instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxScrollBar(wxScrollBarPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxScrollBar,_args,_kwargs)
+        self.this = controlsc.new_wxScrollBar(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreScrollBar(*_args,**_kwargs):
-    val = wxScrollBarPtr(apply(controlsc.new_wxPreScrollBar,_args,_kwargs))
+    val = wxScrollBarPtr(controlsc.new_wxPreScrollBar(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -866,35 +866,35 @@ class wxSpinButtonPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSpinButton_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxSpinButton_Create(self, *_args, **_kwargs)
         return val
     def GetMax(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSpinButton_GetMax,(self,) + _args, _kwargs)
+        val = controlsc.wxSpinButton_GetMax(self, *_args, **_kwargs)
         return val
     def GetMin(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSpinButton_GetMin,(self,) + _args, _kwargs)
+        val = controlsc.wxSpinButton_GetMin(self, *_args, **_kwargs)
         return val
     def GetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSpinButton_GetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxSpinButton_GetValue(self, *_args, **_kwargs)
         return val
     def SetRange(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSpinButton_SetRange,(self,) + _args, _kwargs)
+        val = controlsc.wxSpinButton_SetRange(self, *_args, **_kwargs)
         return val
     def SetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSpinButton_SetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxSpinButton_SetValue(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxSpinButton instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSpinButton instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSpinButton(wxSpinButtonPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxSpinButton,_args,_kwargs)
+        self.this = controlsc.new_wxSpinButton(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreSpinButton(*_args,**_kwargs):
-    val = wxSpinButtonPtr(apply(controlsc.new_wxPreSpinButton,_args,_kwargs))
+    val = wxSpinButtonPtr(controlsc.new_wxPreSpinButton(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -905,30 +905,30 @@ class wxStaticBitmapPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxStaticBitmap_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxStaticBitmap_Create(self, *_args, **_kwargs)
         return val
     def GetBitmap(self, *_args, **_kwargs):
-        val = apply(controlsc.wxStaticBitmap_GetBitmap,(self,) + _args, _kwargs)
+        val = controlsc.wxStaticBitmap_GetBitmap(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) ; val.thisown = 1
         return val
     def SetBitmap(self, *_args, **_kwargs):
-        val = apply(controlsc.wxStaticBitmap_SetBitmap,(self,) + _args, _kwargs)
+        val = controlsc.wxStaticBitmap_SetBitmap(self, *_args, **_kwargs)
         return val
     def SetIcon(self, *_args, **_kwargs):
-        val = apply(controlsc.wxStaticBitmap_SetIcon,(self,) + _args, _kwargs)
+        val = controlsc.wxStaticBitmap_SetIcon(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxStaticBitmap instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxStaticBitmap instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxStaticBitmap(wxStaticBitmapPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxStaticBitmap,_args,_kwargs)
+        self.this = controlsc.new_wxStaticBitmap(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreStaticBitmap(*_args,**_kwargs):
-    val = wxStaticBitmapPtr(apply(controlsc.new_wxPreStaticBitmap,_args,_kwargs))
+    val = wxStaticBitmapPtr(controlsc.new_wxPreStaticBitmap(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -939,46 +939,46 @@ class wxRadioBoxPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioBox_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioBox_Create(self, *_args, **_kwargs)
         return val
     def Enable(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioBox_Enable,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioBox_Enable(self, *_args, **_kwargs)
         return val
     def EnableItem(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioBox_EnableItem,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioBox_EnableItem(self, *_args, **_kwargs)
         return val
     def FindString(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioBox_FindString,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioBox_FindString(self, *_args, **_kwargs)
         return val
     def GetString(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioBox_GetString,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioBox_GetString(self, *_args, **_kwargs)
         return val
     def SetString(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioBox_SetString,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioBox_SetString(self, *_args, **_kwargs)
         return val
     def GetSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioBox_GetSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioBox_GetSelection(self, *_args, **_kwargs)
         return val
     def GetStringSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioBox_GetStringSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioBox_GetStringSelection(self, *_args, **_kwargs)
         return val
     def GetCount(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioBox_GetCount,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioBox_GetCount(self, *_args, **_kwargs)
         return val
     def SetSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioBox_SetSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioBox_SetSelection(self, *_args, **_kwargs)
         return val
     def SetStringSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioBox_SetStringSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioBox_SetStringSelection(self, *_args, **_kwargs)
         return val
     def Show(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioBox_Show,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioBox_Show(self, *_args, **_kwargs)
         return val
     def ShowItem(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioBox_ShowItem,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioBox_ShowItem(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxRadioBox instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxRadioBox instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     GetItemLabel = GetString
     SetItemLabel = SetString
@@ -986,14 +986,14 @@ class wxRadioBoxPtr(wxControlPtr):
     Number = GetCount
 class wxRadioBox(wxRadioBoxPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxRadioBox,_args,_kwargs)
+        self.this = controlsc.new_wxRadioBox(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreRadioBox(*_args,**_kwargs):
-    val = wxRadioBoxPtr(apply(controlsc.new_wxPreRadioBox,_args,_kwargs))
+    val = wxRadioBoxPtr(controlsc.new_wxPreRadioBox(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -1004,26 +1004,26 @@ class wxRadioButtonPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioButton_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioButton_Create(self, *_args, **_kwargs)
         return val
     def GetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioButton_GetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioButton_GetValue(self, *_args, **_kwargs)
         return val
     def SetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxRadioButton_SetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxRadioButton_SetValue(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxRadioButton instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxRadioButton instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxRadioButton(wxRadioButtonPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxRadioButton,_args,_kwargs)
+        self.this = controlsc.new_wxRadioButton(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreRadioButton(*_args,**_kwargs):
-    val = wxRadioButtonPtr(apply(controlsc.new_wxPreRadioButton,_args,_kwargs))
+    val = wxRadioButtonPtr(controlsc.new_wxPreRadioButton(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -1034,77 +1034,77 @@ class wxSliderPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_Create(self, *_args, **_kwargs)
         return val
     def ClearSel(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_ClearSel,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_ClearSel(self, *_args, **_kwargs)
         return val
     def ClearTicks(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_ClearTicks,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_ClearTicks(self, *_args, **_kwargs)
         return val
     def GetLineSize(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_GetLineSize,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_GetLineSize(self, *_args, **_kwargs)
         return val
     def GetMax(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_GetMax,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_GetMax(self, *_args, **_kwargs)
         return val
     def GetMin(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_GetMin,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_GetMin(self, *_args, **_kwargs)
         return val
     def GetPageSize(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_GetPageSize,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_GetPageSize(self, *_args, **_kwargs)
         return val
     def GetSelEnd(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_GetSelEnd,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_GetSelEnd(self, *_args, **_kwargs)
         return val
     def GetSelStart(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_GetSelStart,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_GetSelStart(self, *_args, **_kwargs)
         return val
     def GetThumbLength(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_GetThumbLength,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_GetThumbLength(self, *_args, **_kwargs)
         return val
     def GetTickFreq(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_GetTickFreq,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_GetTickFreq(self, *_args, **_kwargs)
         return val
     def GetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_GetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_GetValue(self, *_args, **_kwargs)
         return val
     def SetRange(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_SetRange,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_SetRange(self, *_args, **_kwargs)
         return val
     def SetTickFreq(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_SetTickFreq,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_SetTickFreq(self, *_args, **_kwargs)
         return val
     def SetLineSize(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_SetLineSize,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_SetLineSize(self, *_args, **_kwargs)
         return val
     def SetPageSize(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_SetPageSize,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_SetPageSize(self, *_args, **_kwargs)
         return val
     def SetSelection(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_SetSelection,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_SetSelection(self, *_args, **_kwargs)
         return val
     def SetThumbLength(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_SetThumbLength,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_SetThumbLength(self, *_args, **_kwargs)
         return val
     def SetTick(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_SetTick,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_SetTick(self, *_args, **_kwargs)
         return val
     def SetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSlider_SetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxSlider_SetValue(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxSlider instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSlider instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSlider(wxSliderPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxSlider,_args,_kwargs)
+        self.this = controlsc.new_wxSlider(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreSlider(*_args,**_kwargs):
-    val = wxSliderPtr(apply(controlsc.new_wxPreSlider,_args,_kwargs))
+    val = wxSliderPtr(controlsc.new_wxPreSlider(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -1115,35 +1115,38 @@ class wxSpinCtrlPtr(wxSpinButtonPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSpinCtrl_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxSpinCtrl_Create(self, *_args, **_kwargs)
         return val
     def GetMax(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSpinCtrl_GetMax,(self,) + _args, _kwargs)
+        val = controlsc.wxSpinCtrl_GetMax(self, *_args, **_kwargs)
         return val
     def GetMin(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSpinCtrl_GetMin,(self,) + _args, _kwargs)
+        val = controlsc.wxSpinCtrl_GetMin(self, *_args, **_kwargs)
         return val
     def GetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSpinCtrl_GetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxSpinCtrl_GetValue(self, *_args, **_kwargs)
         return val
     def SetRange(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSpinCtrl_SetRange,(self,) + _args, _kwargs)
+        val = controlsc.wxSpinCtrl_SetRange(self, *_args, **_kwargs)
         return val
     def SetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxSpinCtrl_SetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxSpinCtrl_SetValue(self, *_args, **_kwargs)
+        return val
+    def SetSelection(self, *_args, **_kwargs):
+        val = controlsc.wxSpinCtrl_SetSelection(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxSpinCtrl instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSpinCtrl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSpinCtrl(wxSpinCtrlPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxSpinCtrl,_args,_kwargs)
+        self.this = controlsc.new_wxSpinCtrl(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreSpinCtrl(*_args,**_kwargs):
-    val = wxSpinCtrlPtr(apply(controlsc.new_wxPreSpinCtrl,_args,_kwargs))
+    val = wxSpinCtrlPtr(controlsc.new_wxPreSpinCtrl(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -1154,29 +1157,29 @@ class wxToggleButtonPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controlsc.wxToggleButton_Create,(self,) + _args, _kwargs)
+        val = controlsc.wxToggleButton_Create(self, *_args, **_kwargs)
         return val
     def SetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxToggleButton_SetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxToggleButton_SetValue(self, *_args, **_kwargs)
         return val
     def GetValue(self, *_args, **_kwargs):
-        val = apply(controlsc.wxToggleButton_GetValue,(self,) + _args, _kwargs)
+        val = controlsc.wxToggleButton_GetValue(self, *_args, **_kwargs)
         return val
     def SetLabel(self, *_args, **_kwargs):
-        val = apply(controlsc.wxToggleButton_SetLabel,(self,) + _args, _kwargs)
+        val = controlsc.wxToggleButton_SetLabel(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxToggleButton instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxToggleButton instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxToggleButton(wxToggleButtonPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controlsc.new_wxToggleButton,_args,_kwargs)
+        self.this = controlsc.new_wxToggleButton(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreToggleButton(*_args,**_kwargs):
-    val = wxToggleButtonPtr(apply(controlsc.new_wxPreToggleButton,_args,_kwargs))
+    val = wxToggleButtonPtr(controlsc.new_wxPreToggleButton(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -1187,12 +1190,12 @@ def wxPreToggleButton(*_args,**_kwargs):
 #-------------- FUNCTION WRAPPERS ------------------
 
 def wxButton_GetDefaultSize(*_args, **_kwargs):
-    val = apply(controlsc.wxButton_GetDefaultSize,_args,_kwargs)
+    val = controlsc.wxButton_GetDefaultSize(*_args,**_kwargs)
     if val: val = wxSizePtr(val); val.thisown = 1
     return val
 
 def wxTextAttr_Combine(*_args, **_kwargs):
-    val = apply(controlsc.wxTextAttr_Combine,_args,_kwargs)
+    val = controlsc.wxTextAttr_Combine(*_args,**_kwargs)
     if val: val = wxTextAttrPtr(val); val.thisown = 1
     return val
 
diff --git a/wxPython/src/gtk/controls2.cpp b/wxPython/src/gtk/controls2.cpp
index a4f1913505..ed48036c07 100644
--- a/wxPython/src/gtk/controls2.cpp
+++ b/wxPython/src/gtk/controls2.cpp
@@ -63,6 +63,8 @@ extern PyObject *SWIG_newvarlink(void);
 #include <wx/imaglist.h>
 #include <wx/dirctrl.h>
 
+#include "pytree.h"
+
 
 static PyObject* t_output_helper(PyObject* target, PyObject* o) {
     PyObject*   o2;
@@ -153,37 +155,6 @@ IMP_PYCALLBACK_LISTATTR_LONG(wxPyListCtrl, wxListCtrl, OnGetItemAttr);
         return retval;
     }
 
-
-class wxPyTreeItemData : public wxTreeItemData {
-public:
-    wxPyTreeItemData(PyObject* obj = NULL) {
-        if (obj == NULL)
-            obj = Py_None;
-        Py_INCREF(obj);
-        m_obj = obj;
-    }
-
-    ~wxPyTreeItemData() {
-        wxPyBeginBlockThreads();
-        Py_DECREF(m_obj);
-        wxPyEndBlockThreads();
-    }
-
-    PyObject* GetData() {
-        Py_INCREF(m_obj);
-        return m_obj;
-    }
-
-    void SetData(PyObject* obj) {
-        wxPyBeginBlockThreads();
-        Py_DECREF(m_obj);
-        wxPyEndBlockThreads();
-        m_obj = obj;
-        Py_INCREF(obj);
-    }
-
-    PyObject* m_obj;
-};
  // C++ version of Python aware wxTreeCtrl
 class wxPyTreeCtrl : public wxTreeCtrl {
     DECLARE_ABSTRACT_CLASS(wxPyTreeCtrl);
@@ -6389,6 +6360,220 @@ static PyObject *_wrap_wxTreeEvent_IsEditCancelled(PyObject *self, PyObject *arg
     return _resultobj;
 }
 
+#define wxTreeEvent_SetItem(_swigobj,_swigarg0)  (_swigobj->SetItem(_swigarg0))
+static PyObject *_wrap_wxTreeEvent_SetItem(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeEvent * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeEvent_SetItem",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeEvent_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeEvent_SetItem. Expected _wxTreeEvent_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeEvent_SetItem. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeEvent_SetItem(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeEvent_SetOldItem(_swigobj,_swigarg0)  (_swigobj->SetOldItem(_swigarg0))
+static PyObject *_wrap_wxTreeEvent_SetOldItem(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeEvent * _arg0;
+    wxTreeItemId * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeEvent_SetOldItem",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeEvent_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeEvent_SetOldItem. Expected _wxTreeEvent_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxTreeItemId_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeEvent_SetOldItem. Expected _wxTreeItemId_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeEvent_SetOldItem(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeEvent_SetPoint(_swigobj,_swigarg0)  (_swigobj->SetPoint(_swigarg0))
+static PyObject *_wrap_wxTreeEvent_SetPoint(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeEvent * _arg0;
+    wxPoint * _arg1;
+    PyObject * _argo0 = 0;
+    wxPoint  temp;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","pt", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeEvent_SetPoint",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeEvent_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeEvent_SetPoint. Expected _wxTreeEvent_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = &temp;
+    if (! wxPoint_helper(_obj1, &_arg1))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeEvent_SetPoint(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeEvent_SetKeyEvent(_swigobj,_swigarg0)  (_swigobj->SetKeyEvent(_swigarg0))
+static PyObject *_wrap_wxTreeEvent_SetKeyEvent(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeEvent * _arg0;
+    wxKeyEvent * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","evt", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeEvent_SetKeyEvent",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeEvent_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeEvent_SetKeyEvent. Expected _wxTreeEvent_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxKeyEvent_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTreeEvent_SetKeyEvent. Expected _wxKeyEvent_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeEvent_SetKeyEvent(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxTreeEvent_SetLabel(_swigobj,_swigarg0)  (_swigobj->SetLabel(_swigarg0))
+static PyObject *_wrap_wxTreeEvent_SetLabel(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeEvent * _arg0;
+    wxString * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","label", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeEvent_SetLabel",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeEvent_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeEvent_SetLabel. Expected _wxTreeEvent_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = wxString_in_helper(_obj1);
+    if (_arg1 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeEvent_SetLabel(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+{
+    if (_obj1)
+        delete _arg1;
+}
+    return _resultobj;
+}
+
+#define wxTreeEvent_SetEditCanceled(_swigobj,_swigarg0)  (_swigobj->SetEditCanceled(_swigarg0))
+static PyObject *_wrap_wxTreeEvent_SetEditCanceled(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxTreeEvent * _arg0;
+    bool  _arg1;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    char *_kwnames[] = { "self","editCancelled", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxTreeEvent_SetEditCanceled",_kwnames,&_argo0,&tempbool1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTreeEvent_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTreeEvent_SetEditCanceled. Expected _wxTreeEvent_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxTreeEvent_SetEditCanceled(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 static void *SwigwxPyTreeCtrlTowxControl(void *ptr) {
     wxPyTreeCtrl *src;
     wxControl *dest;
@@ -6429,7 +6614,7 @@ static PyObject *_wrap_new_wxTreeCtrl(PyObject *self, PyObject *args, PyObject *
     wxWindowID  _arg1 = (wxWindowID ) -1;
     wxPoint * _arg2 = (wxPoint *) &wxDefaultPosition;
     wxSize * _arg3 = (wxSize *) &wxDefaultSize;
-    long  _arg4 = (long ) (wxTR_HAS_BUTTONS)|(wxTR_LINES_AT_ROOT);
+    long  _arg4 = (long ) (wxTR_DEFAULT_STYLE);
     wxValidator * _arg5 = (wxValidator *) &wxDefaultValidator;
     wxString * _arg6 = (wxString *) &wxPy_TreeCtrlNameStr;
     PyObject * _argo0 = 0;
@@ -6531,7 +6716,7 @@ static PyObject *_wrap_wxTreeCtrl_Create(PyObject *self, PyObject *args, PyObjec
     wxWindowID  _arg2 = (wxWindowID ) -1;
     wxPoint * _arg3 = (wxPoint *) &wxDefaultPosition;
     wxSize * _arg4 = (wxSize *) &wxDefaultSize;
-    long  _arg5 = (long ) (wxTR_HAS_BUTTONS)|(wxTR_LINES_AT_ROOT);
+    long  _arg5 = (long ) (wxTR_DEFAULT_STYLE);
     wxValidator * _arg6 = (wxValidator *) &wxDefaultValidator;
     wxString * _arg7 = (wxString *) &wxPy_TreeCtrlNameStr;
     PyObject * _argo0 = 0;
@@ -9282,7 +9467,7 @@ static PyObject * wxPyTreeCtrl_GetBoundingRect(wxPyTreeCtrl *self,const wxTreeIt
             if (self->GetBoundingRect(item, rect, textOnly)) {
                 wxPyBeginBlockThreads();
                 wxRect* r = new wxRect(rect);
-                PyObject* val = wxPyConstructObject((void*)r, wxT("wxRect"));
+                PyObject* val = wxPyConstructObject((void*)r, wxT("wxRect"), 1);
                 wxPyEndBlockThreads();
                 return val;
             }
@@ -10519,6 +10704,34 @@ static PyObject *_wrap_wxGenericDirCtrl_GetFilterListCtrl(PyObject *self, PyObje
     return _resultobj;
 }
 
+#define wxGenericDirCtrl_ReCreateTree(_swigobj)  (_swigobj->ReCreateTree())
+static PyObject *_wrap_wxGenericDirCtrl_ReCreateTree(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxGenericDirCtrl * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxGenericDirCtrl_ReCreateTree",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxGenericDirCtrl_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxGenericDirCtrl_ReCreateTree. Expected _wxGenericDirCtrl_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxGenericDirCtrl_ReCreateTree(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 static void *SwigwxDirFilterListCtrlTowxChoice(void *ptr) {
     wxDirFilterListCtrl *src;
     wxChoice *dest;
@@ -10750,6 +10963,7 @@ static PyMethodDef controls2cMethods[] = {
 	 { "wxDirFilterListCtrl_Create", (PyCFunction) _wrap_wxDirFilterListCtrl_Create, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxPreDirFilterListCtrl", (PyCFunction) _wrap_new_wxPreDirFilterListCtrl, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxDirFilterListCtrl", (PyCFunction) _wrap_new_wxDirFilterListCtrl, METH_VARARGS | METH_KEYWORDS },
+	 { "wxGenericDirCtrl_ReCreateTree", (PyCFunction) _wrap_wxGenericDirCtrl_ReCreateTree, METH_VARARGS | METH_KEYWORDS },
 	 { "wxGenericDirCtrl_GetFilterListCtrl", (PyCFunction) _wrap_wxGenericDirCtrl_GetFilterListCtrl, METH_VARARGS | METH_KEYWORDS },
 	 { "wxGenericDirCtrl_GetTreeCtrl", (PyCFunction) _wrap_wxGenericDirCtrl_GetTreeCtrl, METH_VARARGS | METH_KEYWORDS },
 	 { "wxGenericDirCtrl_GetRootId", (PyCFunction) _wrap_wxGenericDirCtrl_GetRootId, METH_VARARGS | METH_KEYWORDS },
@@ -10853,6 +11067,12 @@ static PyMethodDef controls2cMethods[] = {
 	 { "wxTreeCtrl_Create", (PyCFunction) _wrap_wxTreeCtrl_Create, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxPreTreeCtrl", (PyCFunction) _wrap_new_wxPreTreeCtrl, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxTreeCtrl", (PyCFunction) _wrap_new_wxTreeCtrl, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeEvent_SetEditCanceled", (PyCFunction) _wrap_wxTreeEvent_SetEditCanceled, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeEvent_SetLabel", (PyCFunction) _wrap_wxTreeEvent_SetLabel, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeEvent_SetKeyEvent", (PyCFunction) _wrap_wxTreeEvent_SetKeyEvent, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeEvent_SetPoint", (PyCFunction) _wrap_wxTreeEvent_SetPoint, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeEvent_SetOldItem", (PyCFunction) _wrap_wxTreeEvent_SetOldItem, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTreeEvent_SetItem", (PyCFunction) _wrap_wxTreeEvent_SetItem, METH_VARARGS | METH_KEYWORDS },
 	 { "wxTreeEvent_IsEditCancelled", (PyCFunction) _wrap_wxTreeEvent_IsEditCancelled, METH_VARARGS | METH_KEYWORDS },
 	 { "wxTreeEvent_GetLabel", (PyCFunction) _wrap_wxTreeEvent_GetLabel, METH_VARARGS | METH_KEYWORDS },
 	 { "wxTreeEvent_GetKeyCode", (PyCFunction) _wrap_wxTreeEvent_GetKeyCode, METH_VARARGS | METH_KEYWORDS },
diff --git a/wxPython/src/gtk/controls2.py b/wxPython/src/gtk/controls2.py
index fcbe7ee362..d07fd0d97b 100644
--- a/wxPython/src/gtk/controls2.py
+++ b/wxPython/src/gtk/controls2.py
@@ -143,40 +143,40 @@ class wxListItemAttrPtr :
         self.this = this
         self.thisown = 0
     def SetTextColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItemAttr_SetTextColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListItemAttr_SetTextColour(self, *_args, **_kwargs)
         return val
     def SetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItemAttr_SetBackgroundColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListItemAttr_SetBackgroundColour(self, *_args, **_kwargs)
         return val
     def SetFont(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItemAttr_SetFont,(self,) + _args, _kwargs)
+        val = controls2c.wxListItemAttr_SetFont(self, *_args, **_kwargs)
         return val
     def HasTextColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItemAttr_HasTextColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListItemAttr_HasTextColour(self, *_args, **_kwargs)
         return val
     def HasBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItemAttr_HasBackgroundColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListItemAttr_HasBackgroundColour(self, *_args, **_kwargs)
         return val
     def HasFont(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItemAttr_HasFont,(self,) + _args, _kwargs)
+        val = controls2c.wxListItemAttr_HasFont(self, *_args, **_kwargs)
         return val
     def GetTextColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItemAttr_GetTextColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListItemAttr_GetTextColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItemAttr_GetBackgroundColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListItemAttr_GetBackgroundColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetFont(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItemAttr_GetFont,(self,) + _args, _kwargs)
+        val = controls2c.wxListItemAttr_GetFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def __repr__(self):
-        return "<C wxListItemAttr instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxListItemAttr instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxListItemAttr(wxListItemAttrPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controls2c.new_wxListItemAttr,_args,_kwargs)
+        self.this = controls2c.new_wxListItemAttr(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -193,94 +193,94 @@ class wxListItemPtr(wxObjectPtr):
             except:
                 pass
     def Clear(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_Clear,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_Clear(self, *_args, **_kwargs)
         return val
     def ClearAttributes(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_ClearAttributes,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_ClearAttributes(self, *_args, **_kwargs)
         return val
     def SetMask(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_SetMask,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_SetMask(self, *_args, **_kwargs)
         return val
     def SetId(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_SetId,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_SetId(self, *_args, **_kwargs)
         return val
     def SetColumn(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_SetColumn,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_SetColumn(self, *_args, **_kwargs)
         return val
     def SetState(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_SetState,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_SetState(self, *_args, **_kwargs)
         return val
     def SetStateMask(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_SetStateMask,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_SetStateMask(self, *_args, **_kwargs)
         return val
     def SetText(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_SetText,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_SetText(self, *_args, **_kwargs)
         return val
     def SetImage(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_SetImage,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_SetImage(self, *_args, **_kwargs)
         return val
     def SetData(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_SetData,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_SetData(self, *_args, **_kwargs)
         return val
     def SetWidth(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_SetWidth,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_SetWidth(self, *_args, **_kwargs)
         return val
     def SetAlign(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_SetAlign,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_SetAlign(self, *_args, **_kwargs)
         return val
     def SetTextColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_SetTextColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_SetTextColour(self, *_args, **_kwargs)
         return val
     def SetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_SetBackgroundColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_SetBackgroundColour(self, *_args, **_kwargs)
         return val
     def SetFont(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_SetFont,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_SetFont(self, *_args, **_kwargs)
         return val
     def GetMask(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_GetMask,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_GetMask(self, *_args, **_kwargs)
         return val
     def GetId(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_GetId,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_GetId(self, *_args, **_kwargs)
         return val
     def GetColumn(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_GetColumn,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_GetColumn(self, *_args, **_kwargs)
         return val
     def GetState(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_GetState,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_GetState(self, *_args, **_kwargs)
         return val
     def GetText(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_GetText,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_GetText(self, *_args, **_kwargs)
         return val
     def GetImage(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_GetImage,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_GetImage(self, *_args, **_kwargs)
         return val
     def GetData(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_GetData,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_GetData(self, *_args, **_kwargs)
         return val
     def GetWidth(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_GetWidth,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_GetWidth(self, *_args, **_kwargs)
         return val
     def GetAlign(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_GetAlign,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_GetAlign(self, *_args, **_kwargs)
         return val
     def GetAttributes(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_GetAttributes,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_GetAttributes(self, *_args, **_kwargs)
         if val: val = wxListItemAttrPtr(val) 
         return val
     def HasAttributes(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_HasAttributes,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_HasAttributes(self, *_args, **_kwargs)
         return val
     def GetTextColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_GetTextColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_GetTextColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_GetBackgroundColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_GetBackgroundColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetFont(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListItem_GetFont,(self,) + _args, _kwargs)
+        val = controls2c.wxListItem_GetFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def __setattr__(self,name,value):
@@ -338,10 +338,10 @@ class wxListItemPtr(wxObjectPtr):
             return controls2c.wxListItem_m_width_get(self)
         raise AttributeError,name
     def __repr__(self):
-        return "<C wxListItem instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxListItem instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxListItem(wxListItemPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controls2c.new_wxListItem,_args,_kwargs)
+        self.this = controls2c.new_wxListItem(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -352,41 +352,41 @@ class wxListEventPtr(wxNotifyEventPtr):
         self.this = this
         self.thisown = 0
     def GetKeyCode(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListEvent_GetKeyCode,(self,) + _args, _kwargs)
+        val = controls2c.wxListEvent_GetKeyCode(self, *_args, **_kwargs)
         return val
     def GetIndex(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListEvent_GetIndex,(self,) + _args, _kwargs)
+        val = controls2c.wxListEvent_GetIndex(self, *_args, **_kwargs)
         return val
     def GetColumn(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListEvent_GetColumn,(self,) + _args, _kwargs)
+        val = controls2c.wxListEvent_GetColumn(self, *_args, **_kwargs)
         return val
     def GetPoint(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListEvent_GetPoint,(self,) + _args, _kwargs)
+        val = controls2c.wxListEvent_GetPoint(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetLabel(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListEvent_GetLabel,(self,) + _args, _kwargs)
+        val = controls2c.wxListEvent_GetLabel(self, *_args, **_kwargs)
         return val
     def GetText(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListEvent_GetText,(self,) + _args, _kwargs)
+        val = controls2c.wxListEvent_GetText(self, *_args, **_kwargs)
         return val
     def GetImage(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListEvent_GetImage,(self,) + _args, _kwargs)
+        val = controls2c.wxListEvent_GetImage(self, *_args, **_kwargs)
         return val
     def GetData(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListEvent_GetData,(self,) + _args, _kwargs)
+        val = controls2c.wxListEvent_GetData(self, *_args, **_kwargs)
         return val
     def GetMask(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListEvent_GetMask,(self,) + _args, _kwargs)
+        val = controls2c.wxListEvent_GetMask(self, *_args, **_kwargs)
         return val
     def GetItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListEvent_GetItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListEvent_GetItem(self, *_args, **_kwargs)
         return val
     def GetCacheFrom(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListEvent_GetCacheFrom,(self,) + _args, _kwargs)
+        val = controls2c.wxListEvent_GetCacheFrom(self, *_args, **_kwargs)
         return val
     def GetCacheTo(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListEvent_GetCacheTo,(self,) + _args, _kwargs)
+        val = controls2c.wxListEvent_GetCacheTo(self, *_args, **_kwargs)
         return val
     def __setattr__(self,name,value):
         if name == "m_code" :
@@ -423,11 +423,11 @@ class wxListEventPtr(wxNotifyEventPtr):
             return wxListItemPtr(controls2c.wxListEvent_m_item_get(self))
         raise AttributeError,name
     def __repr__(self):
-        return "<C wxListEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxListEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     GetCode = GetKeyCode
 class wxListEvent(wxListEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controls2c.new_wxListEvent,_args,_kwargs)
+        self.this = controls2c.new_wxListEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -438,217 +438,217 @@ class wxListCtrlPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_Create,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_Create(self, *_args, **_kwargs)
         return val
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl__setCallbackInfo,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def SetForegroundColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetForegroundColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetForegroundColour(self, *_args, **_kwargs)
         return val
     def SetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetBackgroundColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetBackgroundColour(self, *_args, **_kwargs)
         return val
     def GetColumn(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetColumn,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetColumn(self, *_args, **_kwargs)
         return val
     def SetColumn(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetColumn,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetColumn(self, *_args, **_kwargs)
         return val
     def GetColumnWidth(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetColumnWidth,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetColumnWidth(self, *_args, **_kwargs)
         return val
     def SetColumnWidth(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetColumnWidth,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetColumnWidth(self, *_args, **_kwargs)
         return val
     def GetCountPerPage(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetCountPerPage,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetCountPerPage(self, *_args, **_kwargs)
         return val
     def GetItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetItem(self, *_args, **_kwargs)
         return val
     def SetItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetItem(self, *_args, **_kwargs)
         return val
     def SetStringItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetStringItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetStringItem(self, *_args, **_kwargs)
         return val
     def GetItemState(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetItemState,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetItemState(self, *_args, **_kwargs)
         return val
     def SetItemState(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetItemState,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetItemState(self, *_args, **_kwargs)
         return val
     def SetItemImage(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetItemImage,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetItemImage(self, *_args, **_kwargs)
         return val
     def GetItemText(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetItemText,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetItemText(self, *_args, **_kwargs)
         return val
     def SetItemText(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetItemText,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetItemText(self, *_args, **_kwargs)
         return val
     def GetItemData(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetItemData,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetItemData(self, *_args, **_kwargs)
         return val
     def SetItemData(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetItemData,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetItemData(self, *_args, **_kwargs)
         return val
     def GetItemPosition(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetItemPosition,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetItemPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetItemRect(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetItemRect,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetItemRect(self, *_args, **_kwargs)
         if val: val = wxRectPtr(val) ; val.thisown = 1
         return val
     def SetItemPosition(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetItemPosition,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetItemPosition(self, *_args, **_kwargs)
         return val
     def GetItemCount(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetItemCount,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetItemCount(self, *_args, **_kwargs)
         return val
     def GetColumnCount(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetColumnCount,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetColumnCount(self, *_args, **_kwargs)
         return val
     def GetItemSpacing(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetItemSpacing,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetItemSpacing(self, *_args, **_kwargs)
         return val
     def SetItemSpacing(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetItemSpacing,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetItemSpacing(self, *_args, **_kwargs)
         return val
     def GetSelectedItemCount(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetSelectedItemCount,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetSelectedItemCount(self, *_args, **_kwargs)
         return val
     def GetTextColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetTextColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetTextColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetTextColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetTextColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetTextColour(self, *_args, **_kwargs)
         return val
     def GetTopItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetTopItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetTopItem(self, *_args, **_kwargs)
         return val
     def SetSingleStyle(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetSingleStyle,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetSingleStyle(self, *_args, **_kwargs)
         return val
     def SetWindowStyleFlag(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetWindowStyleFlag,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetWindowStyleFlag(self, *_args, **_kwargs)
         return val
     def GetNextItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetNextItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetNextItem(self, *_args, **_kwargs)
         return val
     def GetImageList(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetImageList,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetImageList(self, *_args, **_kwargs)
         return val
     def SetImageList(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetImageList,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetImageList(self, *_args, **_kwargs)
         return val
     def AssignImageList(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_AssignImageList,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_AssignImageList(self, *_args, **_kwargs)
         _args[0].thisown = 0
         return val
     def IsVirtual(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_IsVirtual,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_IsVirtual(self, *_args, **_kwargs)
         return val
     def RefreshItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_RefreshItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_RefreshItem(self, *_args, **_kwargs)
         return val
     def RefreshItems(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_RefreshItems,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_RefreshItems(self, *_args, **_kwargs)
         return val
     def Arrange(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_Arrange,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_Arrange(self, *_args, **_kwargs)
         return val
     def DeleteItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_DeleteItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_DeleteItem(self, *_args, **_kwargs)
         return val
     def DeleteAllItems(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_DeleteAllItems,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_DeleteAllItems(self, *_args, **_kwargs)
         return val
     def DeleteColumn(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_DeleteColumn,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_DeleteColumn(self, *_args, **_kwargs)
         return val
     def DeleteAllColumns(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_DeleteAllColumns,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_DeleteAllColumns(self, *_args, **_kwargs)
         return val
     def ClearAll(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_ClearAll,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_ClearAll(self, *_args, **_kwargs)
         return val
     def EditLabel(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_EditLabel,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_EditLabel(self, *_args, **_kwargs)
         return val
     def EnsureVisible(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_EnsureVisible,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_EnsureVisible(self, *_args, **_kwargs)
         return val
     def FindItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_FindItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_FindItem(self, *_args, **_kwargs)
         return val
     def FindItemData(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_FindItemData,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_FindItemData(self, *_args, **_kwargs)
         return val
     def FindItemAtPos(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_FindItemAtPos,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_FindItemAtPos(self, *_args, **_kwargs)
         return val
     def HitTest(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_HitTest,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_HitTest(self, *_args, **_kwargs)
         return val
     def InsertItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_InsertItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_InsertItem(self, *_args, **_kwargs)
         return val
     def InsertStringItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_InsertStringItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_InsertStringItem(self, *_args, **_kwargs)
         return val
     def InsertImageItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_InsertImageItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_InsertImageItem(self, *_args, **_kwargs)
         return val
     def InsertImageStringItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_InsertImageStringItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_InsertImageStringItem(self, *_args, **_kwargs)
         return val
     def InsertColumnInfo(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_InsertColumnInfo,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_InsertColumnInfo(self, *_args, **_kwargs)
         return val
     def InsertColumn(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_InsertColumn,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_InsertColumn(self, *_args, **_kwargs)
         return val
     def SetItemCount(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetItemCount,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetItemCount(self, *_args, **_kwargs)
         return val
     def ScrollList(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_ScrollList,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_ScrollList(self, *_args, **_kwargs)
         return val
     def SetItemTextColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetItemTextColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetItemTextColour(self, *_args, **_kwargs)
         return val
     def GetItemTextColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetItemTextColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetItemTextColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetItemBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SetItemBackgroundColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SetItemBackgroundColour(self, *_args, **_kwargs)
         return val
     def GetItemBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetItemBackgroundColour,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetItemBackgroundColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SortItems(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_SortItems,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_SortItems(self, *_args, **_kwargs)
         return val
     def GetMainWindow(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetMainWindow,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetMainWindow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxListCtrl instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxListCtrl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     def GetColumn(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetColumn,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetColumn(self, *_args, **_kwargs)
         if val is not None: val.thisown = 1
         return val
     
     
     def GetItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListCtrl_GetItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListCtrl_GetItem(self, *_args, **_kwargs)
         if val is not None: val.thisown = 1
         return val
     
@@ -707,7 +707,7 @@ class wxListCtrlPtr(wxControlPtr):
     
 class wxListCtrl(wxListCtrlPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controls2c.new_wxListCtrl,_args,_kwargs)
+        self.this = controls2c.new_wxListCtrl(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxListCtrl)
         self._setOORInfo(self)
@@ -715,7 +715,7 @@ class wxListCtrl(wxListCtrlPtr):
 
 
 def wxPreListCtrl(*_args,**_kwargs):
-    val = wxListCtrlPtr(apply(controls2c.new_wxPreListCtrl,_args,_kwargs))
+    val = wxListCtrlPtr(controls2c.new_wxPreListCtrl(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -726,44 +726,44 @@ class wxListViewPtr(wxListCtrlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListView_Create,(self,) + _args, _kwargs)
+        val = controls2c.wxListView_Create(self, *_args, **_kwargs)
         return val
     def Select(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListView_Select,(self,) + _args, _kwargs)
+        val = controls2c.wxListView_Select(self, *_args, **_kwargs)
         return val
     def Focus(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListView_Focus,(self,) + _args, _kwargs)
+        val = controls2c.wxListView_Focus(self, *_args, **_kwargs)
         return val
     def GetFocusedItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListView_GetFocusedItem,(self,) + _args, _kwargs)
+        val = controls2c.wxListView_GetFocusedItem(self, *_args, **_kwargs)
         return val
     def GetNextSelected(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListView_GetNextSelected,(self,) + _args, _kwargs)
+        val = controls2c.wxListView_GetNextSelected(self, *_args, **_kwargs)
         return val
     def GetFirstSelected(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListView_GetFirstSelected,(self,) + _args, _kwargs)
+        val = controls2c.wxListView_GetFirstSelected(self, *_args, **_kwargs)
         return val
     def IsSelected(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListView_IsSelected,(self,) + _args, _kwargs)
+        val = controls2c.wxListView_IsSelected(self, *_args, **_kwargs)
         return val
     def SetColumnImage(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListView_SetColumnImage,(self,) + _args, _kwargs)
+        val = controls2c.wxListView_SetColumnImage(self, *_args, **_kwargs)
         return val
     def ClearColumnImage(self, *_args, **_kwargs):
-        val = apply(controls2c.wxListView_ClearColumnImage,(self,) + _args, _kwargs)
+        val = controls2c.wxListView_ClearColumnImage(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxListView instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxListView instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxListView(wxListViewPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controls2c.new_wxListView,_args,_kwargs)
+        self.this = controls2c.new_wxListView(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreListView(*_args,**_kwargs):
-    val = wxListViewPtr(apply(controls2c.new_wxPreListView,_args,_kwargs))
+    val = wxListViewPtr(controls2c.new_wxPreListView(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -774,40 +774,40 @@ class wxTreeItemAttrPtr :
         self.this = this
         self.thisown = 0
     def SetTextColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeItemAttr_SetTextColour,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeItemAttr_SetTextColour(self, *_args, **_kwargs)
         return val
     def SetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeItemAttr_SetBackgroundColour,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeItemAttr_SetBackgroundColour(self, *_args, **_kwargs)
         return val
     def SetFont(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeItemAttr_SetFont,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeItemAttr_SetFont(self, *_args, **_kwargs)
         return val
     def HasTextColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeItemAttr_HasTextColour,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeItemAttr_HasTextColour(self, *_args, **_kwargs)
         return val
     def HasBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeItemAttr_HasBackgroundColour,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeItemAttr_HasBackgroundColour(self, *_args, **_kwargs)
         return val
     def HasFont(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeItemAttr_HasFont,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeItemAttr_HasFont(self, *_args, **_kwargs)
         return val
     def GetTextColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeItemAttr_GetTextColour,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeItemAttr_GetTextColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeItemAttr_GetBackgroundColour,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeItemAttr_GetBackgroundColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetFont(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeItemAttr_GetFont,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeItemAttr_GetFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def __repr__(self):
-        return "<C wxTreeItemAttr instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTreeItemAttr instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxTreeItemAttr(wxTreeItemAttrPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controls2c.new_wxTreeItemAttr,_args,_kwargs)
+        self.this = controls2c.new_wxTreeItemAttr(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -824,17 +824,21 @@ class wxTreeItemIdPtr :
             except:
                 pass
     def IsOk(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeItemId_IsOk,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeItemId_IsOk(self, *_args, **_kwargs)
         return val
     def __cmp__(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeItemId___cmp__,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeItemId___cmp__(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTreeItemId instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTreeItemId instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    
     Ok = IsOk
+    def __nonzero__(self):
+        return self.IsOk()
+
 class wxTreeItemId(wxTreeItemIdPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controls2c.new_wxTreeItemId,_args,_kwargs)
+        self.this = controls2c.new_wxTreeItemId(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -845,23 +849,23 @@ class wxTreeItemDataPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def GetData(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeItemData_GetData,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeItemData_GetData(self, *_args, **_kwargs)
         return val
     def SetData(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeItemData_SetData,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeItemData_SetData(self, *_args, **_kwargs)
         return val
     def GetId(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeItemData_GetId,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeItemData_GetId(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) 
         return val
     def SetId(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeItemData_SetId,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeItemData_SetId(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTreeItemData instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTreeItemData instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxTreeItemData(wxTreeItemDataPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controls2c.new_wxTreeItemData,_args,_kwargs)
+        self.this = controls2c.new_wxTreeItemData(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -872,36 +876,54 @@ class wxTreeEventPtr(wxNotifyEventPtr):
         self.this = this
         self.thisown = 0
     def GetItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeEvent_GetItem,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeEvent_GetItem(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def GetOldItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeEvent_GetOldItem,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeEvent_GetOldItem(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def GetPoint(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeEvent_GetPoint,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeEvent_GetPoint(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetKeyEvent(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeEvent_GetKeyEvent,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeEvent_GetKeyEvent(self, *_args, **_kwargs)
         if val: val = wxKeyEventPtr(val) 
         return val
     def GetKeyCode(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeEvent_GetKeyCode,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeEvent_GetKeyCode(self, *_args, **_kwargs)
         return val
     def GetLabel(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeEvent_GetLabel,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeEvent_GetLabel(self, *_args, **_kwargs)
         return val
     def IsEditCancelled(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeEvent_IsEditCancelled,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeEvent_IsEditCancelled(self, *_args, **_kwargs)
+        return val
+    def SetItem(self, *_args, **_kwargs):
+        val = controls2c.wxTreeEvent_SetItem(self, *_args, **_kwargs)
+        return val
+    def SetOldItem(self, *_args, **_kwargs):
+        val = controls2c.wxTreeEvent_SetOldItem(self, *_args, **_kwargs)
+        return val
+    def SetPoint(self, *_args, **_kwargs):
+        val = controls2c.wxTreeEvent_SetPoint(self, *_args, **_kwargs)
+        return val
+    def SetKeyEvent(self, *_args, **_kwargs):
+        val = controls2c.wxTreeEvent_SetKeyEvent(self, *_args, **_kwargs)
+        return val
+    def SetLabel(self, *_args, **_kwargs):
+        val = controls2c.wxTreeEvent_SetLabel(self, *_args, **_kwargs)
+        return val
+    def SetEditCanceled(self, *_args, **_kwargs):
+        val = controls2c.wxTreeEvent_SetEditCanceled(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTreeEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTreeEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     GetCode = GetKeyCode
 class wxTreeEvent(wxTreeEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controls2c.new_wxTreeEvent,_args,_kwargs)
+        self.this = controls2c.new_wxTreeEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -912,261 +934,261 @@ class wxTreeCtrlPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_Create,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_Create(self, *_args, **_kwargs)
         return val
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl__setCallbackInfo,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def GetCount(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetCount,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetCount(self, *_args, **_kwargs)
         return val
     def GetIndent(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetIndent,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetIndent(self, *_args, **_kwargs)
         return val
     def SetIndent(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SetIndent,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SetIndent(self, *_args, **_kwargs)
         return val
     def GetImageList(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetImageList,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetImageList(self, *_args, **_kwargs)
         return val
     def GetStateImageList(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetStateImageList,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetStateImageList(self, *_args, **_kwargs)
         return val
     def SetImageList(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SetImageList,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SetImageList(self, *_args, **_kwargs)
         return val
     def SetStateImageList(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SetStateImageList,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SetStateImageList(self, *_args, **_kwargs)
         return val
     def AssignImageList(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_AssignImageList,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_AssignImageList(self, *_args, **_kwargs)
         _args[0].thisown = 0
         return val
     def AssignStateImageList(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_AssignStateImageList,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_AssignStateImageList(self, *_args, **_kwargs)
         _args[0].thisown = 0
         return val
     def GetSpacing(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetSpacing,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetSpacing(self, *_args, **_kwargs)
         return val
     def SetSpacing(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SetSpacing,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SetSpacing(self, *_args, **_kwargs)
         return val
     def GetItemText(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetItemText,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetItemText(self, *_args, **_kwargs)
         return val
     def GetItemImage(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetItemImage,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetItemImage(self, *_args, **_kwargs)
         return val
     def GetItemSelectedImage(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetItemSelectedImage,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetItemSelectedImage(self, *_args, **_kwargs)
         return val
     def SetItemText(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SetItemText,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SetItemText(self, *_args, **_kwargs)
         return val
     def SetItemImage(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SetItemImage,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SetItemImage(self, *_args, **_kwargs)
         return val
     def SetItemSelectedImage(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SetItemSelectedImage,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SetItemSelectedImage(self, *_args, **_kwargs)
         return val
     def SetItemHasChildren(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SetItemHasChildren,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SetItemHasChildren(self, *_args, **_kwargs)
         return val
     def GetItemData(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetItemData,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetItemData(self, *_args, **_kwargs)
         if val: val = wxTreeItemDataPtr(val) 
         return val
     def SetItemData(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SetItemData,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SetItemData(self, *_args, **_kwargs)
         return val
     def GetPyData(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetPyData,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetPyData(self, *_args, **_kwargs)
         return val
     def SetPyData(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SetPyData,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SetPyData(self, *_args, **_kwargs)
         return val
     def GetItemTextColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetItemTextColour,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetItemTextColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetItemBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetItemBackgroundColour,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetItemBackgroundColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetItemFont(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetItemFont,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetItemFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def IsVisible(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_IsVisible,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_IsVisible(self, *_args, **_kwargs)
         return val
     def ItemHasChildren(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_ItemHasChildren,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_ItemHasChildren(self, *_args, **_kwargs)
         return val
     def IsExpanded(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_IsExpanded,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_IsExpanded(self, *_args, **_kwargs)
         return val
     def IsSelected(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_IsSelected,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_IsSelected(self, *_args, **_kwargs)
         return val
     def GetRootItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetRootItem,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetRootItem(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def GetSelection(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetSelection,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetSelection(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def GetItemParent(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetItemParent,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetItemParent(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def GetSelections(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetSelections,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetSelections(self, *_args, **_kwargs)
         return val
     def GetChildrenCount(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetChildrenCount,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetChildrenCount(self, *_args, **_kwargs)
         return val
     def GetFirstChild(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetFirstChild,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetFirstChild(self, *_args, **_kwargs)
         return val
     def GetNextChild(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetNextChild,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetNextChild(self, *_args, **_kwargs)
         return val
     def GetNextSibling(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetNextSibling,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetNextSibling(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def GetPrevSibling(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetPrevSibling,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetPrevSibling(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def GetFirstVisibleItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetFirstVisibleItem,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetFirstVisibleItem(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def GetNextVisible(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetNextVisible,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetNextVisible(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def GetPrevVisible(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetPrevVisible,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetPrevVisible(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def GetLastChild(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetLastChild,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetLastChild(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def AddRoot(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_AddRoot,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_AddRoot(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def PrependItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_PrependItem,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_PrependItem(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def InsertItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_InsertItem,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_InsertItem(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def InsertItemBefore(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_InsertItemBefore,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_InsertItemBefore(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def AppendItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_AppendItem,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_AppendItem(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def Delete(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_Delete,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_Delete(self, *_args, **_kwargs)
         return val
     def DeleteChildren(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_DeleteChildren,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_DeleteChildren(self, *_args, **_kwargs)
         return val
     def DeleteAllItems(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_DeleteAllItems,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_DeleteAllItems(self, *_args, **_kwargs)
         return val
     def Expand(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_Expand,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_Expand(self, *_args, **_kwargs)
         return val
     def Collapse(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_Collapse,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_Collapse(self, *_args, **_kwargs)
         return val
     def CollapseAndReset(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_CollapseAndReset,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_CollapseAndReset(self, *_args, **_kwargs)
         return val
     def Toggle(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_Toggle,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_Toggle(self, *_args, **_kwargs)
         return val
     def Unselect(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_Unselect,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_Unselect(self, *_args, **_kwargs)
         return val
     def UnselectAll(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_UnselectAll,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_UnselectAll(self, *_args, **_kwargs)
         return val
     def SelectItem(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SelectItem,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SelectItem(self, *_args, **_kwargs)
         return val
     def EnsureVisible(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_EnsureVisible,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_EnsureVisible(self, *_args, **_kwargs)
         return val
     def ScrollTo(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_ScrollTo,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_ScrollTo(self, *_args, **_kwargs)
         return val
     def GetEditControl(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetEditControl,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetEditControl(self, *_args, **_kwargs)
         return val
     def EditLabel(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_EditLabel,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_EditLabel(self, *_args, **_kwargs)
         return val
     def SortChildren(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SortChildren,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SortChildren(self, *_args, **_kwargs)
         return val
     def SetItemBold(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SetItemBold,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SetItemBold(self, *_args, **_kwargs)
         return val
     def IsBold(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_IsBold,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_IsBold(self, *_args, **_kwargs)
         return val
     def HitTest(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_HitTest,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_HitTest(self, *_args, **_kwargs)
         return val
     def SetItemTextColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SetItemTextColour,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SetItemTextColour(self, *_args, **_kwargs)
         return val
     def SetItemBackgroundColour(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SetItemBackgroundColour,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SetItemBackgroundColour(self, *_args, **_kwargs)
         return val
     def SetItemFont(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_SetItemFont,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_SetItemFont(self, *_args, **_kwargs)
         return val
     def GetBoundingRect(self, *_args, **_kwargs):
-        val = apply(controls2c.wxTreeCtrl_GetBoundingRect,(self,) + _args, _kwargs)
+        val = controls2c.wxTreeCtrl_GetBoundingRect(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTreeCtrl instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTreeCtrl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     # Redefine some methods that SWIG gets a bit confused on...
     def GetFirstChild(self, *_args, **_kwargs):
-        val1,val2 = apply(controls2c.wxTreeCtrl_GetFirstChild,(self,) + _args, _kwargs)
+        val1,val2 = controls2c.wxTreeCtrl_GetFirstChild(self, *_args, **_kwargs)
         val1 = wxTreeItemIdPtr(val1)
         val1.thisown = 1
         return (val1,val2)
     def GetNextChild(self, *_args, **_kwargs):
-        val1,val2 = apply(controls2c.wxTreeCtrl_GetNextChild,(self,) + _args, _kwargs)
+        val1,val2 = controls2c.wxTreeCtrl_GetNextChild(self, *_args, **_kwargs)
         val1 = wxTreeItemIdPtr(val1)
         val1.thisown = 1
         return (val1,val2)
     def HitTest(self, *_args, **_kwargs):
-        val1, val2 = apply(controls2c.wxTreeCtrl_HitTest,(self,) + _args, _kwargs)
+        val1, val2 = controls2c.wxTreeCtrl_HitTest(self, *_args, **_kwargs)
         val1 = wxTreeItemIdPtr(val1)
         val1.thisown = 1
         return (val1,val2)
 
 class wxTreeCtrl(wxTreeCtrlPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controls2c.new_wxTreeCtrl,_args,_kwargs)
+        self.this = controls2c.new_wxTreeCtrl(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxTreeCtrl)
         self._setOORInfo(self)
@@ -1174,7 +1196,7 @@ class wxTreeCtrl(wxTreeCtrlPtr):
 
 
 def wxPreTreeCtrl(*_args,**_kwargs):
-    val = wxTreeCtrlPtr(apply(controls2c.new_wxPreTreeCtrl,_args,_kwargs))
+    val = wxTreeCtrlPtr(controls2c.new_wxPreTreeCtrl(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -1185,7 +1207,7 @@ class wxDirItemDataPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def SetNewDirName(self, *_args, **_kwargs):
-        val = apply(controls2c.wxDirItemData_SetNewDirName,(self,) + _args, _kwargs)
+        val = controls2c.wxDirItemData_SetNewDirName(self, *_args, **_kwargs)
         return val
     def __setattr__(self,name,value):
         if name == "m_path" :
@@ -1217,10 +1239,10 @@ class wxDirItemDataPtr(wxObjectPtr):
             return controls2c.wxDirItemData_m_isDir_get(self)
         raise AttributeError,name
     def __repr__(self):
-        return "<C wxDirItemData instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDirItemData instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDirItemData(wxDirItemDataPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controls2c.new_wxDirItemData,_args,_kwargs)
+        self.this = controls2c.new_wxDirItemData(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1231,67 +1253,70 @@ class wxGenericDirCtrlPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_Create,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_Create(self, *_args, **_kwargs)
         return val
     def ExpandPath(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_ExpandPath,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_ExpandPath(self, *_args, **_kwargs)
         return val
     def GetDefaultPath(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_GetDefaultPath,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_GetDefaultPath(self, *_args, **_kwargs)
         return val
     def SetDefaultPath(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_SetDefaultPath,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_SetDefaultPath(self, *_args, **_kwargs)
         return val
     def GetPath(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_GetPath,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_GetPath(self, *_args, **_kwargs)
         return val
     def GetFilePath(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_GetFilePath,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_GetFilePath(self, *_args, **_kwargs)
         return val
     def SetPath(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_SetPath,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_SetPath(self, *_args, **_kwargs)
         return val
     def ShowHidden(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_ShowHidden,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_ShowHidden(self, *_args, **_kwargs)
         return val
     def GetShowHidden(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_GetShowHidden,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_GetShowHidden(self, *_args, **_kwargs)
         return val
     def GetFilter(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_GetFilter,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_GetFilter(self, *_args, **_kwargs)
         return val
     def SetFilter(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_SetFilter,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_SetFilter(self, *_args, **_kwargs)
         return val
     def GetFilterIndex(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_GetFilterIndex,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_GetFilterIndex(self, *_args, **_kwargs)
         return val
     def SetFilterIndex(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_SetFilterIndex,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_SetFilterIndex(self, *_args, **_kwargs)
         return val
     def GetRootId(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_GetRootId,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_GetRootId(self, *_args, **_kwargs)
         if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1
         return val
     def GetTreeCtrl(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_GetTreeCtrl,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_GetTreeCtrl(self, *_args, **_kwargs)
         return val
     def GetFilterListCtrl(self, *_args, **_kwargs):
-        val = apply(controls2c.wxGenericDirCtrl_GetFilterListCtrl,(self,) + _args, _kwargs)
+        val = controls2c.wxGenericDirCtrl_GetFilterListCtrl(self, *_args, **_kwargs)
         if val: val = wxDirFilterListCtrlPtr(val) 
         return val
+    def ReCreateTree(self, *_args, **_kwargs):
+        val = controls2c.wxGenericDirCtrl_ReCreateTree(self, *_args, **_kwargs)
+        return val
     def __repr__(self):
-        return "<C wxGenericDirCtrl instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGenericDirCtrl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGenericDirCtrl(wxGenericDirCtrlPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controls2c.new_wxGenericDirCtrl,_args,_kwargs)
+        self.this = controls2c.new_wxGenericDirCtrl(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreGenericDirCtrl(*_args,**_kwargs):
-    val = wxGenericDirCtrlPtr(apply(controls2c.new_wxPreGenericDirCtrl,_args,_kwargs))
+    val = wxGenericDirCtrlPtr(controls2c.new_wxPreGenericDirCtrl(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -1302,23 +1327,23 @@ class wxDirFilterListCtrlPtr(wxChoicePtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(controls2c.wxDirFilterListCtrl_Create,(self,) + _args, _kwargs)
+        val = controls2c.wxDirFilterListCtrl_Create(self, *_args, **_kwargs)
         return val
     def FillFilterList(self, *_args, **_kwargs):
-        val = apply(controls2c.wxDirFilterListCtrl_FillFilterList,(self,) + _args, _kwargs)
+        val = controls2c.wxDirFilterListCtrl_FillFilterList(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxDirFilterListCtrl instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDirFilterListCtrl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDirFilterListCtrl(wxDirFilterListCtrlPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(controls2c.new_wxDirFilterListCtrl,_args,_kwargs)
+        self.this = controls2c.new_wxDirFilterListCtrl(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreDirFilterListCtrl(*_args,**_kwargs):
-    val = wxDirFilterListCtrlPtr(apply(controls2c.new_wxPreDirFilterListCtrl,_args,_kwargs))
+    val = wxDirFilterListCtrlPtr(controls2c.new_wxPreDirFilterListCtrl(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
diff --git a/wxPython/src/gtk/events.py b/wxPython/src/gtk/events.py
index 3f52c08034..2d5de7f5b7 100644
--- a/wxPython/src/gtk/events.py
+++ b/wxPython/src/gtk/events.py
@@ -17,41 +17,41 @@ class wxEventPtr(wxObjectPtr):
             except:
                 pass
     def GetEventObject(self, *_args, **_kwargs):
-        val = apply(eventsc.wxEvent_GetEventObject,(self,) + _args, _kwargs)
+        val = eventsc.wxEvent_GetEventObject(self, *_args, **_kwargs)
         return val
     def GetEventType(self, *_args, **_kwargs):
-        val = apply(eventsc.wxEvent_GetEventType,(self,) + _args, _kwargs)
+        val = eventsc.wxEvent_GetEventType(self, *_args, **_kwargs)
         return val
     def GetId(self, *_args, **_kwargs):
-        val = apply(eventsc.wxEvent_GetId,(self,) + _args, _kwargs)
+        val = eventsc.wxEvent_GetId(self, *_args, **_kwargs)
         return val
     def GetSkipped(self, *_args, **_kwargs):
-        val = apply(eventsc.wxEvent_GetSkipped,(self,) + _args, _kwargs)
+        val = eventsc.wxEvent_GetSkipped(self, *_args, **_kwargs)
         return val
     def GetTimestamp(self, *_args, **_kwargs):
-        val = apply(eventsc.wxEvent_GetTimestamp,(self,) + _args, _kwargs)
+        val = eventsc.wxEvent_GetTimestamp(self, *_args, **_kwargs)
         return val
     def SetEventObject(self, *_args, **_kwargs):
-        val = apply(eventsc.wxEvent_SetEventObject,(self,) + _args, _kwargs)
+        val = eventsc.wxEvent_SetEventObject(self, *_args, **_kwargs)
         return val
     def SetEventType(self, *_args, **_kwargs):
-        val = apply(eventsc.wxEvent_SetEventType,(self,) + _args, _kwargs)
+        val = eventsc.wxEvent_SetEventType(self, *_args, **_kwargs)
         return val
     def SetId(self, *_args, **_kwargs):
-        val = apply(eventsc.wxEvent_SetId,(self,) + _args, _kwargs)
+        val = eventsc.wxEvent_SetId(self, *_args, **_kwargs)
         return val
     def SetTimestamp(self, *_args, **_kwargs):
-        val = apply(eventsc.wxEvent_SetTimestamp,(self,) + _args, _kwargs)
+        val = eventsc.wxEvent_SetTimestamp(self, *_args, **_kwargs)
         return val
     def Skip(self, *_args, **_kwargs):
-        val = apply(eventsc.wxEvent_Skip,(self,) + _args, _kwargs)
+        val = eventsc.wxEvent_Skip(self, *_args, **_kwargs)
         return val
     def Clone(self, *_args, **_kwargs):
-        val = apply(eventsc.wxEvent_Clone,(self,) + _args, _kwargs)
+        val = eventsc.wxEvent_Clone(self, *_args, **_kwargs)
         if val: val = wxEventPtr(val) 
         return val
     def __repr__(self):
-        return "<C wxEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxEvent(wxEventPtr):
     def __init__(self,this):
         self.this = this
@@ -64,14 +64,14 @@ class wxSizeEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def GetSize(self, *_args, **_kwargs):
-        val = apply(eventsc.wxSizeEvent_GetSize,(self,) + _args, _kwargs)
+        val = eventsc.wxSizeEvent_GetSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def __repr__(self):
-        return "<C wxSizeEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSizeEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSizeEvent(wxSizeEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxSizeEvent,_args,_kwargs)
+        self.this = eventsc.new_wxSizeEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -82,28 +82,28 @@ class wxCloseEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def SetLoggingOff(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCloseEvent_SetLoggingOff,(self,) + _args, _kwargs)
+        val = eventsc.wxCloseEvent_SetLoggingOff(self, *_args, **_kwargs)
         return val
     def GetLoggingOff(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCloseEvent_GetLoggingOff,(self,) + _args, _kwargs)
+        val = eventsc.wxCloseEvent_GetLoggingOff(self, *_args, **_kwargs)
         return val
     def Veto(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCloseEvent_Veto,(self,) + _args, _kwargs)
+        val = eventsc.wxCloseEvent_Veto(self, *_args, **_kwargs)
         return val
     def CanVeto(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCloseEvent_CanVeto,(self,) + _args, _kwargs)
+        val = eventsc.wxCloseEvent_CanVeto(self, *_args, **_kwargs)
         return val
     def GetVeto(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCloseEvent_GetVeto,(self,) + _args, _kwargs)
+        val = eventsc.wxCloseEvent_GetVeto(self, *_args, **_kwargs)
         return val
     def SetCanVeto(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCloseEvent_SetCanVeto,(self,) + _args, _kwargs)
+        val = eventsc.wxCloseEvent_SetCanVeto(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxCloseEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxCloseEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxCloseEvent(wxCloseEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxCloseEvent,_args,_kwargs)
+        self.this = eventsc.new_wxCloseEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -114,43 +114,43 @@ class wxCommandEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def IsChecked(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCommandEvent_IsChecked,(self,) + _args, _kwargs)
+        val = eventsc.wxCommandEvent_IsChecked(self, *_args, **_kwargs)
         return val
     def Checked(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCommandEvent_Checked,(self,) + _args, _kwargs)
+        val = eventsc.wxCommandEvent_Checked(self, *_args, **_kwargs)
         return val
     def GetExtraLong(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCommandEvent_GetExtraLong,(self,) + _args, _kwargs)
+        val = eventsc.wxCommandEvent_GetExtraLong(self, *_args, **_kwargs)
         return val
     def GetInt(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCommandEvent_GetInt,(self,) + _args, _kwargs)
+        val = eventsc.wxCommandEvent_GetInt(self, *_args, **_kwargs)
         return val
     def GetSelection(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCommandEvent_GetSelection,(self,) + _args, _kwargs)
+        val = eventsc.wxCommandEvent_GetSelection(self, *_args, **_kwargs)
         return val
     def GetString(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCommandEvent_GetString,(self,) + _args, _kwargs)
+        val = eventsc.wxCommandEvent_GetString(self, *_args, **_kwargs)
         return val
     def IsSelection(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCommandEvent_IsSelection,(self,) + _args, _kwargs)
+        val = eventsc.wxCommandEvent_IsSelection(self, *_args, **_kwargs)
         return val
     def SetString(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCommandEvent_SetString,(self,) + _args, _kwargs)
+        val = eventsc.wxCommandEvent_SetString(self, *_args, **_kwargs)
         return val
     def SetExtraLong(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCommandEvent_SetExtraLong,(self,) + _args, _kwargs)
+        val = eventsc.wxCommandEvent_SetExtraLong(self, *_args, **_kwargs)
         return val
     def SetInt(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCommandEvent_SetInt,(self,) + _args, _kwargs)
+        val = eventsc.wxCommandEvent_SetInt(self, *_args, **_kwargs)
         return val
     def GetClientData(self, *_args, **_kwargs):
-        val = apply(eventsc.wxCommandEvent_GetClientData,(self,) + _args, _kwargs)
+        val = eventsc.wxCommandEvent_GetClientData(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxCommandEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxCommandEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxCommandEvent(wxCommandEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxCommandEvent,_args,_kwargs)
+        self.this = eventsc.new_wxCommandEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -161,16 +161,16 @@ class wxScrollEventPtr(wxCommandEventPtr):
         self.this = this
         self.thisown = 0
     def GetOrientation(self, *_args, **_kwargs):
-        val = apply(eventsc.wxScrollEvent_GetOrientation,(self,) + _args, _kwargs)
+        val = eventsc.wxScrollEvent_GetOrientation(self, *_args, **_kwargs)
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(eventsc.wxScrollEvent_GetPosition,(self,) + _args, _kwargs)
+        val = eventsc.wxScrollEvent_GetPosition(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxScrollEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxScrollEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxScrollEvent(wxScrollEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxScrollEvent,_args,_kwargs)
+        self.this = eventsc.new_wxScrollEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -181,16 +181,16 @@ class wxScrollWinEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def GetOrientation(self, *_args, **_kwargs):
-        val = apply(eventsc.wxScrollWinEvent_GetOrientation,(self,) + _args, _kwargs)
+        val = eventsc.wxScrollWinEvent_GetOrientation(self, *_args, **_kwargs)
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(eventsc.wxScrollWinEvent_GetPosition,(self,) + _args, _kwargs)
+        val = eventsc.wxScrollWinEvent_GetPosition(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxScrollWinEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxScrollWinEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxScrollWinEvent(wxScrollWinEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxScrollWinEvent,_args,_kwargs)
+        self.this = eventsc.new_wxScrollWinEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -201,10 +201,10 @@ class wxSpinEventPtr(wxScrollEventPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxSpinEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSpinEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSpinEvent(wxSpinEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxSpinEvent,_args,_kwargs)
+        self.this = eventsc.new_wxSpinEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -215,108 +215,108 @@ class wxMouseEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def IsButton(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_IsButton,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_IsButton(self, *_args, **_kwargs)
         return val
     def ButtonDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_ButtonDown,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_ButtonDown(self, *_args, **_kwargs)
         return val
     def ButtonDClick(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_ButtonDClick,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_ButtonDClick(self, *_args, **_kwargs)
         return val
     def ButtonUp(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_ButtonUp,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_ButtonUp(self, *_args, **_kwargs)
         return val
     def Button(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_Button,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_Button(self, *_args, **_kwargs)
         return val
     def ButtonIsDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_ButtonIsDown,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_ButtonIsDown(self, *_args, **_kwargs)
         return val
     def ControlDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_ControlDown,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_ControlDown(self, *_args, **_kwargs)
         return val
     def MetaDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_MetaDown,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_MetaDown(self, *_args, **_kwargs)
         return val
     def AltDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_AltDown,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_AltDown(self, *_args, **_kwargs)
         return val
     def ShiftDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_ShiftDown,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_ShiftDown(self, *_args, **_kwargs)
         return val
     def LeftDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_LeftDown,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_LeftDown(self, *_args, **_kwargs)
         return val
     def MiddleDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_MiddleDown,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_MiddleDown(self, *_args, **_kwargs)
         return val
     def RightDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_RightDown,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_RightDown(self, *_args, **_kwargs)
         return val
     def LeftUp(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_LeftUp,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_LeftUp(self, *_args, **_kwargs)
         return val
     def MiddleUp(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_MiddleUp,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_MiddleUp(self, *_args, **_kwargs)
         return val
     def RightUp(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_RightUp,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_RightUp(self, *_args, **_kwargs)
         return val
     def LeftDClick(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_LeftDClick,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_LeftDClick(self, *_args, **_kwargs)
         return val
     def MiddleDClick(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_MiddleDClick,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_MiddleDClick(self, *_args, **_kwargs)
         return val
     def RightDClick(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_RightDClick,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_RightDClick(self, *_args, **_kwargs)
         return val
     def LeftIsDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_LeftIsDown,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_LeftIsDown(self, *_args, **_kwargs)
         return val
     def MiddleIsDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_MiddleIsDown,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_MiddleIsDown(self, *_args, **_kwargs)
         return val
     def RightIsDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_RightIsDown,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_RightIsDown(self, *_args, **_kwargs)
         return val
     def Dragging(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_Dragging,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_Dragging(self, *_args, **_kwargs)
         return val
     def Moving(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_Moving,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_Moving(self, *_args, **_kwargs)
         return val
     def Entering(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_Entering,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_Entering(self, *_args, **_kwargs)
         return val
     def Leaving(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_Leaving,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_Leaving(self, *_args, **_kwargs)
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_GetPosition,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetPositionTuple(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_GetPositionTuple,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_GetPositionTuple(self, *_args, **_kwargs)
         return val
     def GetLogicalPosition(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_GetLogicalPosition,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_GetLogicalPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetX(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_GetX,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_GetX(self, *_args, **_kwargs)
         return val
     def GetY(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_GetY,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_GetY(self, *_args, **_kwargs)
         return val
     def GetWheelRotation(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_GetWheelRotation,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_GetWheelRotation(self, *_args, **_kwargs)
         return val
     def GetWheelDelta(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_GetWheelDelta,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_GetWheelDelta(self, *_args, **_kwargs)
         return val
     def GetLinesPerAction(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseEvent_GetLinesPerAction,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseEvent_GetLinesPerAction(self, *_args, **_kwargs)
         return val
     def __setattr__(self,name,value):
         if name == "m_x" :
@@ -383,10 +383,10 @@ class wxMouseEventPtr(wxEventPtr):
             return eventsc.wxMouseEvent_m_linesPerAction_get(self)
         raise AttributeError,name
     def __repr__(self):
-        return "<C wxMouseEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMouseEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMouseEvent(wxMouseEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxMouseEvent,_args,_kwargs)
+        self.this = eventsc.new_wxMouseEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -397,13 +397,13 @@ class wxMouseCaptureChangedEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def GetCapturedWindow(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMouseCaptureChangedEvent_GetCapturedWindow,(self,) + _args, _kwargs)
+        val = eventsc.wxMouseCaptureChangedEvent_GetCapturedWindow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxMouseCaptureChangedEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMouseCaptureChangedEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMouseCaptureChangedEvent(wxMouseCaptureChangedEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxMouseCaptureChangedEvent,_args,_kwargs)
+        self.this = eventsc.new_wxMouseCaptureChangedEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -414,26 +414,26 @@ class wxSetCursorEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def GetX(self, *_args, **_kwargs):
-        val = apply(eventsc.wxSetCursorEvent_GetX,(self,) + _args, _kwargs)
+        val = eventsc.wxSetCursorEvent_GetX(self, *_args, **_kwargs)
         return val
     def GetY(self, *_args, **_kwargs):
-        val = apply(eventsc.wxSetCursorEvent_GetY,(self,) + _args, _kwargs)
+        val = eventsc.wxSetCursorEvent_GetY(self, *_args, **_kwargs)
         return val
     def SetCursor(self, *_args, **_kwargs):
-        val = apply(eventsc.wxSetCursorEvent_SetCursor,(self,) + _args, _kwargs)
+        val = eventsc.wxSetCursorEvent_SetCursor(self, *_args, **_kwargs)
         return val
     def GetCursor(self, *_args, **_kwargs):
-        val = apply(eventsc.wxSetCursorEvent_GetCursor,(self,) + _args, _kwargs)
+        val = eventsc.wxSetCursorEvent_GetCursor(self, *_args, **_kwargs)
         if val: val = wxCursorPtr(val) 
         return val
     def HasCursor(self, *_args, **_kwargs):
-        val = apply(eventsc.wxSetCursorEvent_HasCursor,(self,) + _args, _kwargs)
+        val = eventsc.wxSetCursorEvent_HasCursor(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxSetCursorEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSetCursorEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSetCursorEvent(wxSetCursorEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxSetCursorEvent,_args,_kwargs)
+        self.this = eventsc.new_wxSetCursorEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -444,41 +444,41 @@ class wxKeyEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def ControlDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxKeyEvent_ControlDown,(self,) + _args, _kwargs)
+        val = eventsc.wxKeyEvent_ControlDown(self, *_args, **_kwargs)
         return val
     def MetaDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxKeyEvent_MetaDown,(self,) + _args, _kwargs)
+        val = eventsc.wxKeyEvent_MetaDown(self, *_args, **_kwargs)
         return val
     def AltDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxKeyEvent_AltDown,(self,) + _args, _kwargs)
+        val = eventsc.wxKeyEvent_AltDown(self, *_args, **_kwargs)
         return val
     def ShiftDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxKeyEvent_ShiftDown,(self,) + _args, _kwargs)
+        val = eventsc.wxKeyEvent_ShiftDown(self, *_args, **_kwargs)
         return val
     def GetKeyCode(self, *_args, **_kwargs):
-        val = apply(eventsc.wxKeyEvent_GetKeyCode,(self,) + _args, _kwargs)
+        val = eventsc.wxKeyEvent_GetKeyCode(self, *_args, **_kwargs)
         return val
     def HasModifiers(self, *_args, **_kwargs):
-        val = apply(eventsc.wxKeyEvent_HasModifiers,(self,) + _args, _kwargs)
+        val = eventsc.wxKeyEvent_HasModifiers(self, *_args, **_kwargs)
         return val
     def GetRawKeyCode(self, *_args, **_kwargs):
-        val = apply(eventsc.wxKeyEvent_GetRawKeyCode,(self,) + _args, _kwargs)
+        val = eventsc.wxKeyEvent_GetRawKeyCode(self, *_args, **_kwargs)
         return val
     def GetRawKeyFlags(self, *_args, **_kwargs):
-        val = apply(eventsc.wxKeyEvent_GetRawKeyFlags,(self,) + _args, _kwargs)
+        val = eventsc.wxKeyEvent_GetRawKeyFlags(self, *_args, **_kwargs)
         return val
     def GetX(self, *_args, **_kwargs):
-        val = apply(eventsc.wxKeyEvent_GetX,(self,) + _args, _kwargs)
+        val = eventsc.wxKeyEvent_GetX(self, *_args, **_kwargs)
         return val
     def GetY(self, *_args, **_kwargs):
-        val = apply(eventsc.wxKeyEvent_GetY,(self,) + _args, _kwargs)
+        val = eventsc.wxKeyEvent_GetY(self, *_args, **_kwargs)
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(eventsc.wxKeyEvent_GetPosition,(self,) + _args, _kwargs)
+        val = eventsc.wxKeyEvent_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetPositionTuple(self, *_args, **_kwargs):
-        val = apply(eventsc.wxKeyEvent_GetPositionTuple,(self,) + _args, _kwargs)
+        val = eventsc.wxKeyEvent_GetPositionTuple(self, *_args, **_kwargs)
         return val
     def __setattr__(self,name,value):
         if name == "m_x" :
@@ -535,11 +535,11 @@ class wxKeyEventPtr(wxEventPtr):
             return eventsc.wxKeyEvent_m_rawFlags_get(self)
         raise AttributeError,name
     def __repr__(self):
-        return "<C wxKeyEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxKeyEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     KeyCode = GetKeyCode
 class wxKeyEvent(wxKeyEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxKeyEvent,_args,_kwargs)
+        self.this = eventsc.new_wxKeyEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -550,28 +550,28 @@ class wxNavigationKeyEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def GetDirection(self, *_args, **_kwargs):
-        val = apply(eventsc.wxNavigationKeyEvent_GetDirection,(self,) + _args, _kwargs)
+        val = eventsc.wxNavigationKeyEvent_GetDirection(self, *_args, **_kwargs)
         return val
     def SetDirection(self, *_args, **_kwargs):
-        val = apply(eventsc.wxNavigationKeyEvent_SetDirection,(self,) + _args, _kwargs)
+        val = eventsc.wxNavigationKeyEvent_SetDirection(self, *_args, **_kwargs)
         return val
     def IsWindowChange(self, *_args, **_kwargs):
-        val = apply(eventsc.wxNavigationKeyEvent_IsWindowChange,(self,) + _args, _kwargs)
+        val = eventsc.wxNavigationKeyEvent_IsWindowChange(self, *_args, **_kwargs)
         return val
     def SetWindowChange(self, *_args, **_kwargs):
-        val = apply(eventsc.wxNavigationKeyEvent_SetWindowChange,(self,) + _args, _kwargs)
+        val = eventsc.wxNavigationKeyEvent_SetWindowChange(self, *_args, **_kwargs)
         return val
     def GetCurrentFocus(self, *_args, **_kwargs):
-        val = apply(eventsc.wxNavigationKeyEvent_GetCurrentFocus,(self,) + _args, _kwargs)
+        val = eventsc.wxNavigationKeyEvent_GetCurrentFocus(self, *_args, **_kwargs)
         return val
     def SetCurrentFocus(self, *_args, **_kwargs):
-        val = apply(eventsc.wxNavigationKeyEvent_SetCurrentFocus,(self,) + _args, _kwargs)
+        val = eventsc.wxNavigationKeyEvent_SetCurrentFocus(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxNavigationKeyEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxNavigationKeyEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxNavigationKeyEvent(wxNavigationKeyEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxNavigationKeyEvent,_args,_kwargs)
+        self.this = eventsc.new_wxNavigationKeyEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -582,14 +582,14 @@ class wxMoveEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMoveEvent_GetPosition,(self,) + _args, _kwargs)
+        val = eventsc.wxMoveEvent_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def __repr__(self):
-        return "<C wxMoveEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMoveEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMoveEvent(wxMoveEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxMoveEvent,_args,_kwargs)
+        self.this = eventsc.new_wxMoveEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -600,10 +600,10 @@ class wxPaintEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxPaintEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPaintEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPaintEvent(wxPaintEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxPaintEvent,_args,_kwargs)
+        self.this = eventsc.new_wxPaintEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -614,13 +614,13 @@ class wxEraseEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def GetDC(self, *_args, **_kwargs):
-        val = apply(eventsc.wxEraseEvent_GetDC,(self,) + _args, _kwargs)
+        val = eventsc.wxEraseEvent_GetDC(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxEraseEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxEraseEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxEraseEvent(wxEraseEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxEraseEvent,_args,_kwargs)
+        self.this = eventsc.new_wxEraseEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -631,10 +631,10 @@ class wxFocusEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxFocusEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFocusEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFocusEvent(wxFocusEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxFocusEvent,_args,_kwargs)
+        self.this = eventsc.new_wxFocusEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -645,13 +645,13 @@ class wxChildFocusEventPtr(wxCommandEventPtr):
         self.this = this
         self.thisown = 0
     def GetWindow(self, *_args, **_kwargs):
-        val = apply(eventsc.wxChildFocusEvent_GetWindow,(self,) + _args, _kwargs)
+        val = eventsc.wxChildFocusEvent_GetWindow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxChildFocusEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxChildFocusEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxChildFocusEvent(wxChildFocusEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxChildFocusEvent,_args,_kwargs)
+        self.this = eventsc.new_wxChildFocusEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -662,13 +662,13 @@ class wxActivateEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def GetActive(self, *_args, **_kwargs):
-        val = apply(eventsc.wxActivateEvent_GetActive,(self,) + _args, _kwargs)
+        val = eventsc.wxActivateEvent_GetActive(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxActivateEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxActivateEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxActivateEvent(wxActivateEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxActivateEvent,_args,_kwargs)
+        self.this = eventsc.new_wxActivateEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -679,10 +679,10 @@ class wxInitDialogEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxInitDialogEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxInitDialogEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxInitDialogEvent(wxInitDialogEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxInitDialogEvent,_args,_kwargs)
+        self.this = eventsc.new_wxInitDialogEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -693,16 +693,16 @@ class wxMenuEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def GetMenuId(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMenuEvent_GetMenuId,(self,) + _args, _kwargs)
+        val = eventsc.wxMenuEvent_GetMenuId(self, *_args, **_kwargs)
         return val
     def IsPopup(self, *_args, **_kwargs):
-        val = apply(eventsc.wxMenuEvent_IsPopup,(self,) + _args, _kwargs)
+        val = eventsc.wxMenuEvent_IsPopup(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxMenuEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMenuEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMenuEvent(wxMenuEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxMenuEvent,_args,_kwargs)
+        self.this = eventsc.new_wxMenuEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -713,16 +713,16 @@ class wxShowEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def SetShow(self, *_args, **_kwargs):
-        val = apply(eventsc.wxShowEvent_SetShow,(self,) + _args, _kwargs)
+        val = eventsc.wxShowEvent_SetShow(self, *_args, **_kwargs)
         return val
     def GetShow(self, *_args, **_kwargs):
-        val = apply(eventsc.wxShowEvent_GetShow,(self,) + _args, _kwargs)
+        val = eventsc.wxShowEvent_GetShow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxShowEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxShowEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxShowEvent(wxShowEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxShowEvent,_args,_kwargs)
+        self.this = eventsc.new_wxShowEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -733,13 +733,13 @@ class wxIconizeEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def Iconized(self, *_args, **_kwargs):
-        val = apply(eventsc.wxIconizeEvent_Iconized,(self,) + _args, _kwargs)
+        val = eventsc.wxIconizeEvent_Iconized(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxIconizeEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxIconizeEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxIconizeEvent(wxIconizeEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxIconizeEvent,_args,_kwargs)
+        self.this = eventsc.new_wxIconizeEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -750,10 +750,10 @@ class wxMaximizeEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxMaximizeEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMaximizeEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMaximizeEvent(wxMaximizeEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxMaximizeEvent,_args,_kwargs)
+        self.this = eventsc.new_wxMaximizeEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -764,59 +764,59 @@ class wxJoystickEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_GetPosition,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetZPosition(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_GetZPosition,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_GetZPosition(self, *_args, **_kwargs)
         return val
     def GetButtonState(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_GetButtonState,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_GetButtonState(self, *_args, **_kwargs)
         return val
     def GetButtonChange(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_GetButtonChange,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_GetButtonChange(self, *_args, **_kwargs)
         return val
     def GetJoystick(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_GetJoystick,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_GetJoystick(self, *_args, **_kwargs)
         return val
     def SetJoystick(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_SetJoystick,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_SetJoystick(self, *_args, **_kwargs)
         return val
     def SetButtonState(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_SetButtonState,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_SetButtonState(self, *_args, **_kwargs)
         return val
     def SetButtonChange(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_SetButtonChange,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_SetButtonChange(self, *_args, **_kwargs)
         return val
     def SetPosition(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_SetPosition,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_SetPosition(self, *_args, **_kwargs)
         return val
     def SetZPosition(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_SetZPosition,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_SetZPosition(self, *_args, **_kwargs)
         return val
     def IsButton(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_IsButton,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_IsButton(self, *_args, **_kwargs)
         return val
     def IsMove(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_IsMove,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_IsMove(self, *_args, **_kwargs)
         return val
     def IsZMove(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_IsZMove,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_IsZMove(self, *_args, **_kwargs)
         return val
     def ButtonDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_ButtonDown,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_ButtonDown(self, *_args, **_kwargs)
         return val
     def ButtonUp(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_ButtonUp,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_ButtonUp(self, *_args, **_kwargs)
         return val
     def ButtonIsDown(self, *_args, **_kwargs):
-        val = apply(eventsc.wxJoystickEvent_ButtonIsDown,(self,) + _args, _kwargs)
+        val = eventsc.wxJoystickEvent_ButtonIsDown(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxJoystickEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxJoystickEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxJoystickEvent(wxJoystickEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxJoystickEvent,_args,_kwargs)
+        self.this = eventsc.new_wxJoystickEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -827,17 +827,17 @@ class wxDropFilesEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(eventsc.wxDropFilesEvent_GetPosition,(self,) + _args, _kwargs)
+        val = eventsc.wxDropFilesEvent_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetNumberOfFiles(self, *_args, **_kwargs):
-        val = apply(eventsc.wxDropFilesEvent_GetNumberOfFiles,(self,) + _args, _kwargs)
+        val = eventsc.wxDropFilesEvent_GetNumberOfFiles(self, *_args, **_kwargs)
         return val
     def GetFiles(self, *_args, **_kwargs):
-        val = apply(eventsc.wxDropFilesEvent_GetFiles,(self,) + _args, _kwargs)
+        val = eventsc.wxDropFilesEvent_GetFiles(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxDropFilesEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDropFilesEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDropFilesEvent(wxDropFilesEventPtr):
     def __init__(self,this):
         self.this = this
@@ -850,16 +850,16 @@ class wxIdleEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def RequestMore(self, *_args, **_kwargs):
-        val = apply(eventsc.wxIdleEvent_RequestMore,(self,) + _args, _kwargs)
+        val = eventsc.wxIdleEvent_RequestMore(self, *_args, **_kwargs)
         return val
     def MoreRequested(self, *_args, **_kwargs):
-        val = apply(eventsc.wxIdleEvent_MoreRequested,(self,) + _args, _kwargs)
+        val = eventsc.wxIdleEvent_MoreRequested(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxIdleEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxIdleEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxIdleEvent(wxIdleEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxIdleEvent,_args,_kwargs)
+        self.this = eventsc.new_wxIdleEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -870,37 +870,37 @@ class wxUpdateUIEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def GetChecked(self, *_args, **_kwargs):
-        val = apply(eventsc.wxUpdateUIEvent_GetChecked,(self,) + _args, _kwargs)
+        val = eventsc.wxUpdateUIEvent_GetChecked(self, *_args, **_kwargs)
         return val
     def GetEnabled(self, *_args, **_kwargs):
-        val = apply(eventsc.wxUpdateUIEvent_GetEnabled,(self,) + _args, _kwargs)
+        val = eventsc.wxUpdateUIEvent_GetEnabled(self, *_args, **_kwargs)
         return val
     def GetText(self, *_args, **_kwargs):
-        val = apply(eventsc.wxUpdateUIEvent_GetText,(self,) + _args, _kwargs)
+        val = eventsc.wxUpdateUIEvent_GetText(self, *_args, **_kwargs)
         return val
     def GetSetText(self, *_args, **_kwargs):
-        val = apply(eventsc.wxUpdateUIEvent_GetSetText,(self,) + _args, _kwargs)
+        val = eventsc.wxUpdateUIEvent_GetSetText(self, *_args, **_kwargs)
         return val
     def GetSetChecked(self, *_args, **_kwargs):
-        val = apply(eventsc.wxUpdateUIEvent_GetSetChecked,(self,) + _args, _kwargs)
+        val = eventsc.wxUpdateUIEvent_GetSetChecked(self, *_args, **_kwargs)
         return val
     def GetSetEnabled(self, *_args, **_kwargs):
-        val = apply(eventsc.wxUpdateUIEvent_GetSetEnabled,(self,) + _args, _kwargs)
+        val = eventsc.wxUpdateUIEvent_GetSetEnabled(self, *_args, **_kwargs)
         return val
     def Check(self, *_args, **_kwargs):
-        val = apply(eventsc.wxUpdateUIEvent_Check,(self,) + _args, _kwargs)
+        val = eventsc.wxUpdateUIEvent_Check(self, *_args, **_kwargs)
         return val
     def Enable(self, *_args, **_kwargs):
-        val = apply(eventsc.wxUpdateUIEvent_Enable,(self,) + _args, _kwargs)
+        val = eventsc.wxUpdateUIEvent_Enable(self, *_args, **_kwargs)
         return val
     def SetText(self, *_args, **_kwargs):
-        val = apply(eventsc.wxUpdateUIEvent_SetText,(self,) + _args, _kwargs)
+        val = eventsc.wxUpdateUIEvent_SetText(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxUpdateUIEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxUpdateUIEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxUpdateUIEvent(wxUpdateUIEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxUpdateUIEvent,_args,_kwargs)
+        self.this = eventsc.new_wxUpdateUIEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -911,10 +911,10 @@ class wxSysColourChangedEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxSysColourChangedEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSysColourChangedEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSysColourChangedEvent(wxSysColourChangedEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxSysColourChangedEvent,_args,_kwargs)
+        self.this = eventsc.new_wxSysColourChangedEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -925,19 +925,19 @@ class wxNotifyEventPtr(wxCommandEventPtr):
         self.this = this
         self.thisown = 0
     def IsAllowed(self, *_args, **_kwargs):
-        val = apply(eventsc.wxNotifyEvent_IsAllowed,(self,) + _args, _kwargs)
+        val = eventsc.wxNotifyEvent_IsAllowed(self, *_args, **_kwargs)
         return val
     def Allow(self, *_args, **_kwargs):
-        val = apply(eventsc.wxNotifyEvent_Allow,(self,) + _args, _kwargs)
+        val = eventsc.wxNotifyEvent_Allow(self, *_args, **_kwargs)
         return val
     def Veto(self, *_args, **_kwargs):
-        val = apply(eventsc.wxNotifyEvent_Veto,(self,) + _args, _kwargs)
+        val = eventsc.wxNotifyEvent_Veto(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxNotifyEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxNotifyEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxNotifyEvent(wxNotifyEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxNotifyEvent,_args,_kwargs)
+        self.this = eventsc.new_wxNotifyEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -948,10 +948,10 @@ class wxDisplayChangedEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxDisplayChangedEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDisplayChangedEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDisplayChangedEvent(wxDisplayChangedEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxDisplayChangedEvent,_args,_kwargs)
+        self.this = eventsc.new_wxDisplayChangedEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -962,16 +962,16 @@ class wxPaletteChangedEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def SetChangedWindow(self, *_args, **_kwargs):
-        val = apply(eventsc.wxPaletteChangedEvent_SetChangedWindow,(self,) + _args, _kwargs)
+        val = eventsc.wxPaletteChangedEvent_SetChangedWindow(self, *_args, **_kwargs)
         return val
     def GetChangedWindow(self, *_args, **_kwargs):
-        val = apply(eventsc.wxPaletteChangedEvent_GetChangedWindow,(self,) + _args, _kwargs)
+        val = eventsc.wxPaletteChangedEvent_GetChangedWindow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPaletteChangedEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPaletteChangedEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPaletteChangedEvent(wxPaletteChangedEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxPaletteChangedEvent,_args,_kwargs)
+        self.this = eventsc.new_wxPaletteChangedEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -982,16 +982,16 @@ class wxQueryNewPaletteEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def SetPaletteRealized(self, *_args, **_kwargs):
-        val = apply(eventsc.wxQueryNewPaletteEvent_SetPaletteRealized,(self,) + _args, _kwargs)
+        val = eventsc.wxQueryNewPaletteEvent_SetPaletteRealized(self, *_args, **_kwargs)
         return val
     def GetPaletteRealized(self, *_args, **_kwargs):
-        val = apply(eventsc.wxQueryNewPaletteEvent_GetPaletteRealized,(self,) + _args, _kwargs)
+        val = eventsc.wxQueryNewPaletteEvent_GetPaletteRealized(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxQueryNewPaletteEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxQueryNewPaletteEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxQueryNewPaletteEvent(wxQueryNewPaletteEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxQueryNewPaletteEvent,_args,_kwargs)
+        self.this = eventsc.new_wxQueryNewPaletteEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1002,13 +1002,13 @@ class wxWindowCreateEventPtr(wxCommandEventPtr):
         self.this = this
         self.thisown = 0
     def GetWindow(self, *_args, **_kwargs):
-        val = apply(eventsc.wxWindowCreateEvent_GetWindow,(self,) + _args, _kwargs)
+        val = eventsc.wxWindowCreateEvent_GetWindow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxWindowCreateEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxWindowCreateEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxWindowCreateEvent(wxWindowCreateEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxWindowCreateEvent,_args,_kwargs)
+        self.this = eventsc.new_wxWindowCreateEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1019,13 +1019,13 @@ class wxWindowDestroyEventPtr(wxCommandEventPtr):
         self.this = this
         self.thisown = 0
     def GetWindow(self, *_args, **_kwargs):
-        val = apply(eventsc.wxWindowDestroyEvent_GetWindow,(self,) + _args, _kwargs)
+        val = eventsc.wxWindowDestroyEvent_GetWindow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxWindowDestroyEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxWindowDestroyEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxWindowDestroyEvent(wxWindowDestroyEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxWindowDestroyEvent,_args,_kwargs)
+        self.this = eventsc.new_wxWindowDestroyEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1036,17 +1036,17 @@ class wxContextMenuEventPtr(wxCommandEventPtr):
         self.this = this
         self.thisown = 0
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(eventsc.wxContextMenuEvent_GetPosition,(self,) + _args, _kwargs)
+        val = eventsc.wxContextMenuEvent_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) 
         return val
     def SetPosition(self, *_args, **_kwargs):
-        val = apply(eventsc.wxContextMenuEvent_SetPosition,(self,) + _args, _kwargs)
+        val = eventsc.wxContextMenuEvent_SetPosition(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxContextMenuEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxContextMenuEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxContextMenuEvent(wxContextMenuEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxContextMenuEvent,_args,_kwargs)
+        self.this = eventsc.new_wxContextMenuEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1057,13 +1057,13 @@ class wxTimerEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def GetInterval(self, *_args, **_kwargs):
-        val = apply(eventsc.wxTimerEvent_GetInterval,(self,) + _args, _kwargs)
+        val = eventsc.wxTimerEvent_GetInterval(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTimerEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTimerEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxTimerEvent(wxTimerEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxTimerEvent,_args,_kwargs)
+        self.this = eventsc.new_wxTimerEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1074,19 +1074,19 @@ class wxTextUrlEventPtr(wxCommandEventPtr):
         self.this = this
         self.thisown = 0
     def GetMouseEvent(self, *_args, **_kwargs):
-        val = apply(eventsc.wxTextUrlEvent_GetMouseEvent,(self,) + _args, _kwargs)
+        val = eventsc.wxTextUrlEvent_GetMouseEvent(self, *_args, **_kwargs)
         return val
     def GetURLStart(self, *_args, **_kwargs):
-        val = apply(eventsc.wxTextUrlEvent_GetURLStart,(self,) + _args, _kwargs)
+        val = eventsc.wxTextUrlEvent_GetURLStart(self, *_args, **_kwargs)
         return val
     def GetURLEnd(self, *_args, **_kwargs):
-        val = apply(eventsc.wxTextUrlEvent_GetURLEnd,(self,) + _args, _kwargs)
+        val = eventsc.wxTextUrlEvent_GetURLEnd(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTextUrlEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTextUrlEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxTextUrlEvent(wxTextUrlEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxTextUrlEvent,_args,_kwargs)
+        self.this = eventsc.new_wxTextUrlEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1103,16 +1103,16 @@ class wxPyEventPtr(wxEventPtr):
             except:
                 pass
     def SetSelf(self, *_args, **_kwargs):
-        val = apply(eventsc.wxPyEvent_SetSelf,(self,) + _args, _kwargs)
+        val = eventsc.wxPyEvent_SetSelf(self, *_args, **_kwargs)
         return val
     def GetSelf(self, *_args, **_kwargs):
-        val = apply(eventsc.wxPyEvent_GetSelf,(self,) + _args, _kwargs)
+        val = eventsc.wxPyEvent_GetSelf(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyEvent(wxPyEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxPyEvent,_args,_kwargs)
+        self.this = eventsc.new_wxPyEvent(*_args,**_kwargs)
         self.thisown = 1
         self.SetSelf(self)
 
@@ -1130,16 +1130,16 @@ class wxPyCommandEventPtr(wxCommandEventPtr):
             except:
                 pass
     def SetSelf(self, *_args, **_kwargs):
-        val = apply(eventsc.wxPyCommandEvent_SetSelf,(self,) + _args, _kwargs)
+        val = eventsc.wxPyCommandEvent_SetSelf(self, *_args, **_kwargs)
         return val
     def GetSelf(self, *_args, **_kwargs):
-        val = apply(eventsc.wxPyCommandEvent_GetSelf,(self,) + _args, _kwargs)
+        val = eventsc.wxPyCommandEvent_GetSelf(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyCommandEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyCommandEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyCommandEvent(wxPyCommandEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(eventsc.new_wxPyCommandEvent,_args,_kwargs)
+        self.this = eventsc.new_wxPyCommandEvent(*_args,**_kwargs)
         self.thisown = 1
         self.SetSelf(self)
 
diff --git a/wxPython/src/gtk/filesys.py b/wxPython/src/gtk/filesys.py
index 8950e6059b..9605ded1e0 100644
--- a/wxPython/src/gtk/filesys.py
+++ b/wxPython/src/gtk/filesys.py
@@ -30,26 +30,26 @@ class wxFSFilePtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def GetStream(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFSFile_GetStream,(self,) + _args, _kwargs)
+        val = filesysc.wxFSFile_GetStream(self, *_args, **_kwargs)
         return val
     def GetMimeType(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFSFile_GetMimeType,(self,) + _args, _kwargs)
+        val = filesysc.wxFSFile_GetMimeType(self, *_args, **_kwargs)
         return val
     def GetLocation(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFSFile_GetLocation,(self,) + _args, _kwargs)
+        val = filesysc.wxFSFile_GetLocation(self, *_args, **_kwargs)
         return val
     def GetAnchor(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFSFile_GetAnchor,(self,) + _args, _kwargs)
+        val = filesysc.wxFSFile_GetAnchor(self, *_args, **_kwargs)
         return val
     def GetModificationTime(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFSFile_GetModificationTime,(self,) + _args, _kwargs)
+        val = filesysc.wxFSFile_GetModificationTime(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) ; val.thisown = 1
         return val
     def __repr__(self):
-        return "<C wxFSFile instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFSFile instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFSFile(wxFSFilePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(filesysc.new_wxFSFile,_args,_kwargs)
+        self.this = filesysc.new_wxFSFile(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -60,7 +60,7 @@ class wxCPPFileSystemHandlerPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxCPPFileSystemHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxCPPFileSystemHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxCPPFileSystemHandler(wxCPPFileSystemHandlerPtr):
     def __init__(self,this):
         self.this = this
@@ -73,40 +73,40 @@ class wxFileSystemHandlerPtr(wxCPPFileSystemHandlerPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFileSystemHandler__setCallbackInfo,(self,) + _args, _kwargs)
+        val = filesysc.wxFileSystemHandler__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def CanOpen(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFileSystemHandler_CanOpen,(self,) + _args, _kwargs)
+        val = filesysc.wxFileSystemHandler_CanOpen(self, *_args, **_kwargs)
         return val
     def OpenFile(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFileSystemHandler_OpenFile,(self,) + _args, _kwargs)
+        val = filesysc.wxFileSystemHandler_OpenFile(self, *_args, **_kwargs)
         return val
     def FindFirst(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFileSystemHandler_FindFirst,(self,) + _args, _kwargs)
+        val = filesysc.wxFileSystemHandler_FindFirst(self, *_args, **_kwargs)
         return val
     def FindNext(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFileSystemHandler_FindNext,(self,) + _args, _kwargs)
+        val = filesysc.wxFileSystemHandler_FindNext(self, *_args, **_kwargs)
         return val
     def GetProtocol(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFileSystemHandler_GetProtocol,(self,) + _args, _kwargs)
+        val = filesysc.wxFileSystemHandler_GetProtocol(self, *_args, **_kwargs)
         return val
     def GetLeftLocation(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFileSystemHandler_GetLeftLocation,(self,) + _args, _kwargs)
+        val = filesysc.wxFileSystemHandler_GetLeftLocation(self, *_args, **_kwargs)
         return val
     def GetAnchor(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFileSystemHandler_GetAnchor,(self,) + _args, _kwargs)
+        val = filesysc.wxFileSystemHandler_GetAnchor(self, *_args, **_kwargs)
         return val
     def GetRightLocation(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFileSystemHandler_GetRightLocation,(self,) + _args, _kwargs)
+        val = filesysc.wxFileSystemHandler_GetRightLocation(self, *_args, **_kwargs)
         return val
     def GetMimeTypeFromExt(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFileSystemHandler_GetMimeTypeFromExt,(self,) + _args, _kwargs)
+        val = filesysc.wxFileSystemHandler_GetMimeTypeFromExt(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFileSystemHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFileSystemHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFileSystemHandler(wxFileSystemHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(filesysc.new_wxFileSystemHandler,_args,_kwargs)
+        self.this = filesysc.new_wxFileSystemHandler(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxFileSystemHandler)
 
@@ -118,25 +118,25 @@ class wxFileSystemPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def ChangePathTo(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFileSystem_ChangePathTo,(self,) + _args, _kwargs)
+        val = filesysc.wxFileSystem_ChangePathTo(self, *_args, **_kwargs)
         return val
     def GetPath(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFileSystem_GetPath,(self,) + _args, _kwargs)
+        val = filesysc.wxFileSystem_GetPath(self, *_args, **_kwargs)
         return val
     def OpenFile(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFileSystem_OpenFile,(self,) + _args, _kwargs)
+        val = filesysc.wxFileSystem_OpenFile(self, *_args, **_kwargs)
         return val
     def FindFirst(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFileSystem_FindFirst,(self,) + _args, _kwargs)
+        val = filesysc.wxFileSystem_FindFirst(self, *_args, **_kwargs)
         return val
     def FindNext(self, *_args, **_kwargs):
-        val = apply(filesysc.wxFileSystem_FindNext,(self,) + _args, _kwargs)
+        val = filesysc.wxFileSystem_FindNext(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFileSystem instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFileSystem instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFileSystem(wxFileSystemPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(filesysc.new_wxFileSystem,_args,_kwargs)
+        self.this = filesysc.new_wxFileSystem(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -147,16 +147,16 @@ class wxInternetFSHandlerPtr(wxCPPFileSystemHandlerPtr):
         self.this = this
         self.thisown = 0
     def CanOpen(self, *_args, **_kwargs):
-        val = apply(filesysc.wxInternetFSHandler_CanOpen,(self,) + _args, _kwargs)
+        val = filesysc.wxInternetFSHandler_CanOpen(self, *_args, **_kwargs)
         return val
     def OpenFile(self, *_args, **_kwargs):
-        val = apply(filesysc.wxInternetFSHandler_OpenFile,(self,) + _args, _kwargs)
+        val = filesysc.wxInternetFSHandler_OpenFile(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxInternetFSHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxInternetFSHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxInternetFSHandler(wxInternetFSHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(filesysc.new_wxInternetFSHandler,_args,_kwargs)
+        self.this = filesysc.new_wxInternetFSHandler(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -167,22 +167,22 @@ class wxZipFSHandlerPtr(wxCPPFileSystemHandlerPtr):
         self.this = this
         self.thisown = 0
     def CanOpen(self, *_args, **_kwargs):
-        val = apply(filesysc.wxZipFSHandler_CanOpen,(self,) + _args, _kwargs)
+        val = filesysc.wxZipFSHandler_CanOpen(self, *_args, **_kwargs)
         return val
     def OpenFile(self, *_args, **_kwargs):
-        val = apply(filesysc.wxZipFSHandler_OpenFile,(self,) + _args, _kwargs)
+        val = filesysc.wxZipFSHandler_OpenFile(self, *_args, **_kwargs)
         return val
     def FindFirst(self, *_args, **_kwargs):
-        val = apply(filesysc.wxZipFSHandler_FindFirst,(self,) + _args, _kwargs)
+        val = filesysc.wxZipFSHandler_FindFirst(self, *_args, **_kwargs)
         return val
     def FindNext(self, *_args, **_kwargs):
-        val = apply(filesysc.wxZipFSHandler_FindNext,(self,) + _args, _kwargs)
+        val = filesysc.wxZipFSHandler_FindNext(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxZipFSHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxZipFSHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxZipFSHandler(wxZipFSHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(filesysc.new_wxZipFSHandler,_args,_kwargs)
+        self.this = filesysc.new_wxZipFSHandler(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -193,22 +193,22 @@ class wxMemoryFSHandlerPtr(wxCPPFileSystemHandlerPtr):
         self.this = this
         self.thisown = 0
     def CanOpen(self, *_args, **_kwargs):
-        val = apply(filesysc.wxMemoryFSHandler_CanOpen,(self,) + _args, _kwargs)
+        val = filesysc.wxMemoryFSHandler_CanOpen(self, *_args, **_kwargs)
         return val
     def OpenFile(self, *_args, **_kwargs):
-        val = apply(filesysc.wxMemoryFSHandler_OpenFile,(self,) + _args, _kwargs)
+        val = filesysc.wxMemoryFSHandler_OpenFile(self, *_args, **_kwargs)
         return val
     def FindFirst(self, *_args, **_kwargs):
-        val = apply(filesysc.wxMemoryFSHandler_FindFirst,(self,) + _args, _kwargs)
+        val = filesysc.wxMemoryFSHandler_FindFirst(self, *_args, **_kwargs)
         return val
     def FindNext(self, *_args, **_kwargs):
-        val = apply(filesysc.wxMemoryFSHandler_FindNext,(self,) + _args, _kwargs)
+        val = filesysc.wxMemoryFSHandler_FindNext(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxMemoryFSHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMemoryFSHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMemoryFSHandler(wxMemoryFSHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(filesysc.new_wxMemoryFSHandler,_args,_kwargs)
+        self.this = filesysc.new_wxMemoryFSHandler(*_args,**_kwargs)
         self.thisown = 1
 
 
diff --git a/wxPython/src/gtk/fonts.py b/wxPython/src/gtk/fonts.py
index 2b3782ef93..82c50f821c 100644
--- a/wxPython/src/gtk/fonts.py
+++ b/wxPython/src/gtk/fonts.py
@@ -7,70 +7,70 @@ class wxNativeFontInfoPtr :
         self.this = this
         self.thisown = 0
     def Init(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_Init,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_Init(self, *_args, **_kwargs)
         return val
     def GetPointSize(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_GetPointSize,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_GetPointSize(self, *_args, **_kwargs)
         return val
     def GetStyle(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_GetStyle,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_GetStyle(self, *_args, **_kwargs)
         return val
     def GetWeight(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_GetWeight,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_GetWeight(self, *_args, **_kwargs)
         return val
     def GetUnderlined(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_GetUnderlined,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_GetUnderlined(self, *_args, **_kwargs)
         return val
     def GetFaceName(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_GetFaceName,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_GetFaceName(self, *_args, **_kwargs)
         return val
     def GetFamily(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_GetFamily,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_GetFamily(self, *_args, **_kwargs)
         return val
     def GetEncoding(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_GetEncoding,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_GetEncoding(self, *_args, **_kwargs)
         return val
     def SetPointSize(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_SetPointSize,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_SetPointSize(self, *_args, **_kwargs)
         return val
     def SetStyle(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_SetStyle,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_SetStyle(self, *_args, **_kwargs)
         return val
     def SetWeight(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_SetWeight,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_SetWeight(self, *_args, **_kwargs)
         return val
     def SetUnderlined(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_SetUnderlined,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_SetUnderlined(self, *_args, **_kwargs)
         return val
     def SetFaceName(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_SetFaceName,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_SetFaceName(self, *_args, **_kwargs)
         return val
     def SetFamily(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_SetFamily,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_SetFamily(self, *_args, **_kwargs)
         return val
     def SetEncoding(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_SetEncoding,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_SetEncoding(self, *_args, **_kwargs)
         return val
     def FromString(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_FromString,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_FromString(self, *_args, **_kwargs)
         return val
     def ToString(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_ToString,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_ToString(self, *_args, **_kwargs)
         return val
     def __str__(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo___str__,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo___str__(self, *_args, **_kwargs)
         return val
     def FromUserString(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_FromUserString,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_FromUserString(self, *_args, **_kwargs)
         return val
     def ToUserString(self, *_args, **_kwargs):
-        val = apply(fontsc.wxNativeFontInfo_ToUserString,(self,) + _args, _kwargs)
+        val = fontsc.wxNativeFontInfo_ToUserString(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxNativeFontInfo instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxNativeFontInfo instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxNativeFontInfo(wxNativeFontInfoPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(fontsc.new_wxNativeFontInfo,_args,_kwargs)
+        self.this = fontsc.new_wxNativeFontInfo(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -87,31 +87,31 @@ class wxFontMapperPtr :
             except:
                 pass
     def GetAltForEncoding(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontMapper_GetAltForEncoding,(self,) + _args, _kwargs)
+        val = fontsc.wxFontMapper_GetAltForEncoding(self, *_args, **_kwargs)
         return val
     def IsEncodingAvailable(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontMapper_IsEncodingAvailable,(self,) + _args, _kwargs)
+        val = fontsc.wxFontMapper_IsEncodingAvailable(self, *_args, **_kwargs)
         return val
     def CharsetToEncoding(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontMapper_CharsetToEncoding,(self,) + _args, _kwargs)
+        val = fontsc.wxFontMapper_CharsetToEncoding(self, *_args, **_kwargs)
         return val
     def SetDialogParent(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontMapper_SetDialogParent,(self,) + _args, _kwargs)
+        val = fontsc.wxFontMapper_SetDialogParent(self, *_args, **_kwargs)
         return val
     def SetDialogTitle(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontMapper_SetDialogTitle,(self,) + _args, _kwargs)
+        val = fontsc.wxFontMapper_SetDialogTitle(self, *_args, **_kwargs)
         return val
     def SetConfig(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontMapper_SetConfig,(self,) + _args, _kwargs)
+        val = fontsc.wxFontMapper_SetConfig(self, *_args, **_kwargs)
         return val
     def SetConfigPath(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontMapper_SetConfigPath,(self,) + _args, _kwargs)
+        val = fontsc.wxFontMapper_SetConfigPath(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFontMapper instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFontMapper instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFontMapper(wxFontMapperPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(fontsc.new_wxFontMapper,_args,_kwargs)
+        self.this = fontsc.new_wxFontMapper(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -122,7 +122,7 @@ class wxFontPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def wxFontFromNativeInfoString(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_wxFontFromNativeInfoString,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_wxFontFromNativeInfoString(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def __del__(self, delfunc=fontsc.delete_wxFont):
@@ -132,95 +132,96 @@ class wxFontPtr(wxObjectPtr):
             except:
                 pass
     def Ok(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_Ok,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_Ok(self, *_args, **_kwargs)
         return val
     def GetPointSize(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_GetPointSize,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_GetPointSize(self, *_args, **_kwargs)
         return val
     def GetFamily(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_GetFamily,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_GetFamily(self, *_args, **_kwargs)
         return val
     def GetStyle(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_GetStyle,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_GetStyle(self, *_args, **_kwargs)
         return val
     def GetWeight(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_GetWeight,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_GetWeight(self, *_args, **_kwargs)
         return val
     def GetUnderlined(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_GetUnderlined,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_GetUnderlined(self, *_args, **_kwargs)
         return val
     def GetFaceName(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_GetFaceName,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_GetFaceName(self, *_args, **_kwargs)
         return val
     def GetEncoding(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_GetEncoding,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_GetEncoding(self, *_args, **_kwargs)
         return val
     def IsFixedWidth(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_IsFixedWidth,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_IsFixedWidth(self, *_args, **_kwargs)
         return val
     def GetNativeFontInfo(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_GetNativeFontInfo,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_GetNativeFontInfo(self, *_args, **_kwargs)
         if val: val = wxNativeFontInfoPtr(val) 
         return val
     def GetNativeFontInfoDesc(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_GetNativeFontInfoDesc,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_GetNativeFontInfoDesc(self, *_args, **_kwargs)
         return val
     def GetNativeFontInfoUserDesc(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_GetNativeFontInfoUserDesc,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_GetNativeFontInfoUserDesc(self, *_args, **_kwargs)
         return val
     def SetPointSize(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_SetPointSize,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_SetPointSize(self, *_args, **_kwargs)
         return val
     def SetFamily(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_SetFamily,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_SetFamily(self, *_args, **_kwargs)
         return val
     def SetStyle(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_SetStyle,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_SetStyle(self, *_args, **_kwargs)
         return val
     def SetWeight(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_SetWeight,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_SetWeight(self, *_args, **_kwargs)
         return val
     def SetFaceName(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_SetFaceName,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_SetFaceName(self, *_args, **_kwargs)
         return val
     def SetUnderlined(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_SetUnderlined,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_SetUnderlined(self, *_args, **_kwargs)
         return val
     def SetEncoding(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_SetEncoding,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_SetEncoding(self, *_args, **_kwargs)
         return val
     def SetNativeFontInfo(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_SetNativeFontInfo,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_SetNativeFontInfo(self, *_args, **_kwargs)
         return val
     def SetNativeFontInfoUserDesc(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_SetNativeFontInfoUserDesc,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_SetNativeFontInfoUserDesc(self, *_args, **_kwargs)
         return val
     def GetFamilyString(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_GetFamilyString,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_GetFamilyString(self, *_args, **_kwargs)
         return val
     def GetStyleString(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_GetStyleString,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_GetStyleString(self, *_args, **_kwargs)
         return val
     def GetWeightString(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_GetWeightString,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_GetWeightString(self, *_args, **_kwargs)
         return val
     def SetNoAntiAliasing(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_SetNoAntiAliasing,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_SetNoAntiAliasing(self, *_args, **_kwargs)
         return val
     def GetNoAntiAliasing(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFont_GetNoAntiAliasing,(self,) + _args, _kwargs)
+        val = fontsc.wxFont_GetNoAntiAliasing(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFont instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFont instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.Ok()
 class wxFont(wxFontPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(fontsc.new_wxFont,_args,_kwargs)
+        self.this = fontsc.new_wxFont(*_args,**_kwargs)
         self.thisown = 1
 
 
 
 def wxFontFromNativeInfo(*_args,**_kwargs):
-    val = wxFontPtr(apply(fontsc.new_wxFontFromNativeInfo,_args,_kwargs))
+    val = wxFontPtr(fontsc.new_wxFontFromNativeInfo(*_args,**_kwargs))
     val.thisown = 1
     return val
 
@@ -230,20 +231,20 @@ class wxFontListPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def AddFont(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontList_AddFont,(self,) + _args, _kwargs)
+        val = fontsc.wxFontList_AddFont(self, *_args, **_kwargs)
         return val
     def FindOrCreateFont(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontList_FindOrCreateFont,(self,) + _args, _kwargs)
+        val = fontsc.wxFontList_FindOrCreateFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) 
         return val
     def RemoveFont(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontList_RemoveFont,(self,) + _args, _kwargs)
+        val = fontsc.wxFontList_RemoveFont(self, *_args, **_kwargs)
         return val
     def GetCount(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontList_GetCount,(self,) + _args, _kwargs)
+        val = fontsc.wxFontList_GetCount(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFontList instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFontList instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFontList(wxFontListPtr):
     def __init__(self,this):
         self.this = this
@@ -262,25 +263,25 @@ class wxFontEnumeratorPtr :
             except:
                 pass
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontEnumerator__setCallbackInfo,(self,) + _args, _kwargs)
+        val = fontsc.wxFontEnumerator__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def EnumerateFacenames(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontEnumerator_EnumerateFacenames,(self,) + _args, _kwargs)
+        val = fontsc.wxFontEnumerator_EnumerateFacenames(self, *_args, **_kwargs)
         return val
     def EnumerateEncodings(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontEnumerator_EnumerateEncodings,(self,) + _args, _kwargs)
+        val = fontsc.wxFontEnumerator_EnumerateEncodings(self, *_args, **_kwargs)
         return val
     def GetEncodings(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontEnumerator_GetEncodings,(self,) + _args, _kwargs)
+        val = fontsc.wxFontEnumerator_GetEncodings(self, *_args, **_kwargs)
         return val
     def GetFacenames(self, *_args, **_kwargs):
-        val = apply(fontsc.wxFontEnumerator_GetFacenames,(self,) + _args, _kwargs)
+        val = fontsc.wxFontEnumerator_GetFacenames(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFontEnumerator instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFontEnumerator instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFontEnumerator(wxFontEnumeratorPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(fontsc.new_wxFontEnumerator,_args,_kwargs)
+        self.this = fontsc.new_wxFontEnumerator(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxFontEnumerator, 0)
 
@@ -311,7 +312,7 @@ class wxLanguageInfoPtr :
             return fontsc.wxLanguageInfo_Description_get(self)
         raise AttributeError,name
     def __repr__(self):
-        return "<C wxLanguageInfo instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxLanguageInfo instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxLanguageInfo(wxLanguageInfoPtr):
     def __init__(self,this):
         self.this = this
@@ -330,51 +331,51 @@ class wxLocalePtr :
             except:
                 pass
     def Init1(self, *_args, **_kwargs):
-        val = apply(fontsc.wxLocale_Init1,(self,) + _args, _kwargs)
+        val = fontsc.wxLocale_Init1(self, *_args, **_kwargs)
         return val
     def Init2(self, *_args, **_kwargs):
-        val = apply(fontsc.wxLocale_Init2,(self,) + _args, _kwargs)
+        val = fontsc.wxLocale_Init2(self, *_args, **_kwargs)
         return val
     def IsOk(self, *_args, **_kwargs):
-        val = apply(fontsc.wxLocale_IsOk,(self,) + _args, _kwargs)
+        val = fontsc.wxLocale_IsOk(self, *_args, **_kwargs)
         return val
     def GetLocale(self, *_args, **_kwargs):
-        val = apply(fontsc.wxLocale_GetLocale,(self,) + _args, _kwargs)
+        val = fontsc.wxLocale_GetLocale(self, *_args, **_kwargs)
         return val
     def GetLanguage(self, *_args, **_kwargs):
-        val = apply(fontsc.wxLocale_GetLanguage,(self,) + _args, _kwargs)
+        val = fontsc.wxLocale_GetLanguage(self, *_args, **_kwargs)
         return val
     def GetSysName(self, *_args, **_kwargs):
-        val = apply(fontsc.wxLocale_GetSysName,(self,) + _args, _kwargs)
+        val = fontsc.wxLocale_GetSysName(self, *_args, **_kwargs)
         return val
     def GetCanonicalName(self, *_args, **_kwargs):
-        val = apply(fontsc.wxLocale_GetCanonicalName,(self,) + _args, _kwargs)
+        val = fontsc.wxLocale_GetCanonicalName(self, *_args, **_kwargs)
         return val
     def AddCatalog(self, *_args, **_kwargs):
-        val = apply(fontsc.wxLocale_AddCatalog,(self,) + _args, _kwargs)
+        val = fontsc.wxLocale_AddCatalog(self, *_args, **_kwargs)
         return val
     def IsLoaded(self, *_args, **_kwargs):
-        val = apply(fontsc.wxLocale_IsLoaded,(self,) + _args, _kwargs)
+        val = fontsc.wxLocale_IsLoaded(self, *_args, **_kwargs)
         return val
     def GetString(self, *_args, **_kwargs):
-        val = apply(fontsc.wxLocale_GetString,(self,) + _args, _kwargs)
+        val = fontsc.wxLocale_GetString(self, *_args, **_kwargs)
         return val
     def GetName(self, *_args, **_kwargs):
-        val = apply(fontsc.wxLocale_GetName,(self,) + _args, _kwargs)
+        val = fontsc.wxLocale_GetName(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxLocale instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxLocale instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     def Init(self, *_args, **_kwargs):
         if type(_args[0]) in [type(''), type(u'')]:
-            val = apply(self.Init1, _args, _kwargs)
+            val = self.Init1(*_args, **_kwargs)
         else:
-            val = apply(self.Init2, _args, _kwargs)
+            val = self.Init2(*_args, **_kwargs)
         return val
     
 class wxLocale(wxLocalePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(fontsc.new_wxLocale,_args,_kwargs)
+        self.this = fontsc.new_wxLocale(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -391,16 +392,17 @@ class wxEncodingConverterPtr(wxObjectPtr):
             except:
                 pass
     def Init(self, *_args, **_kwargs):
-        val = apply(fontsc.wxEncodingConverter_Init,(self,) + _args, _kwargs)
+        val = fontsc.wxEncodingConverter_Init(self, *_args, **_kwargs)
         return val
     def Convert(self, *_args, **_kwargs):
-        val = apply(fontsc.wxEncodingConverter_Convert,(self,) + _args, _kwargs)
+        val = fontsc.wxEncodingConverter_Convert(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxEncodingConverter instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxEncodingConverter instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.IsOk()
 class wxEncodingConverter(wxEncodingConverterPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(fontsc.new_wxEncodingConverter,_args,_kwargs)
+        self.this = fontsc.new_wxEncodingConverter(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -411,19 +413,19 @@ class wxEncodingConverter(wxEncodingConverterPtr):
 #-------------- FUNCTION WRAPPERS ------------------
 
 def wxGetLocale(*_args, **_kwargs):
-    val = apply(fontsc.wxGetLocale,_args,_kwargs)
+    val = fontsc.wxGetLocale(*_args,**_kwargs)
     if val: val = wxLocalePtr(val)
     return val
 
 wxGetTranslation = fontsc.wxGetTranslation
 
 def wxFontMapper_Get(*_args, **_kwargs):
-    val = apply(fontsc.wxFontMapper_Get,_args,_kwargs)
+    val = fontsc.wxFontMapper_Get(*_args,**_kwargs)
     if val: val = wxFontMapperPtr(val)
     return val
 
 def wxFontMapper_Set(*_args, **_kwargs):
-    val = apply(fontsc.wxFontMapper_Set,_args,_kwargs)
+    val = fontsc.wxFontMapper_Set(*_args,**_kwargs)
     if val: val = wxFontMapperPtr(val)
     return val
 
@@ -446,12 +448,12 @@ wxLocale_GetSystemEncodingName = fontsc.wxLocale_GetSystemEncodingName
 wxLocale_AddCatalogLookupPathPrefix = fontsc.wxLocale_AddCatalogLookupPathPrefix
 
 def wxLocale_GetLanguageInfo(*_args, **_kwargs):
-    val = apply(fontsc.wxLocale_GetLanguageInfo,_args,_kwargs)
+    val = fontsc.wxLocale_GetLanguageInfo(*_args,**_kwargs)
     if val: val = wxLanguageInfoPtr(val)
     return val
 
 def wxLocale_FindLanguageInfo(*_args, **_kwargs):
-    val = apply(fontsc.wxLocale_FindLanguageInfo,_args,_kwargs)
+    val = fontsc.wxLocale_FindLanguageInfo(*_args,**_kwargs)
     if val: val = wxLanguageInfoPtr(val)
     return val
 
diff --git a/wxPython/src/gtk/frames.cpp b/wxPython/src/gtk/frames.cpp
index 4ed6489256..21ba3ecad6 100644
--- a/wxPython/src/gtk/frames.cpp
+++ b/wxPython/src/gtk/frames.cpp
@@ -685,6 +685,42 @@ static PyObject *_wrap_wxTopLevelWindow_GetTitle(PyObject *self, PyObject *args,
     return _resultobj;
 }
 
+#define wxTopLevelWindow_SetShape(_swigobj,_swigarg0)  (_swigobj->SetShape(_swigarg0))
+static PyObject *_wrap_wxTopLevelWindow_SetShape(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxTopLevelWindow * _arg0;
+    wxRegion * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","region", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTopLevelWindow_SetShape",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxTopLevelWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxTopLevelWindow_SetShape. Expected _wxTopLevelWindow_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxRegion_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxTopLevelWindow_SetShape. Expected _wxRegion_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxTopLevelWindow_SetShape(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
 static void *SwigwxFrameTowxTopLevelWindow(void *ptr) {
     wxFrame *src;
     wxTopLevelWindow *dest;
@@ -2634,6 +2670,7 @@ static PyMethodDef framescMethods[] = {
 	 { "wxFrame_Create", (PyCFunction) _wrap_wxFrame_Create, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxPreFrame", (PyCFunction) _wrap_new_wxPreFrame, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxFrame", (PyCFunction) _wrap_new_wxFrame, METH_VARARGS | METH_KEYWORDS },
+	 { "wxTopLevelWindow_SetShape", (PyCFunction) _wrap_wxTopLevelWindow_SetShape, METH_VARARGS | METH_KEYWORDS },
 	 { "wxTopLevelWindow_GetTitle", (PyCFunction) _wrap_wxTopLevelWindow_GetTitle, METH_VARARGS | METH_KEYWORDS },
 	 { "wxTopLevelWindow_SetTitle", (PyCFunction) _wrap_wxTopLevelWindow_SetTitle, METH_VARARGS | METH_KEYWORDS },
 	 { "wxTopLevelWindow_IsFullScreen", (PyCFunction) _wrap_wxTopLevelWindow_IsFullScreen, METH_VARARGS | METH_KEYWORDS },
diff --git a/wxPython/src/gtk/frames.py b/wxPython/src/gtk/frames.py
index 0fae1a5d20..77aa341cba 100644
--- a/wxPython/src/gtk/frames.py
+++ b/wxPython/src/gtk/frames.py
@@ -22,57 +22,60 @@ class wxTopLevelWindowPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(framesc.wxTopLevelWindow_Create,(self,) + _args, _kwargs)
+        val = framesc.wxTopLevelWindow_Create(self, *_args, **_kwargs)
         return val
     def Maximize(self, *_args, **_kwargs):
-        val = apply(framesc.wxTopLevelWindow_Maximize,(self,) + _args, _kwargs)
+        val = framesc.wxTopLevelWindow_Maximize(self, *_args, **_kwargs)
         return val
     def Restore(self, *_args, **_kwargs):
-        val = apply(framesc.wxTopLevelWindow_Restore,(self,) + _args, _kwargs)
+        val = framesc.wxTopLevelWindow_Restore(self, *_args, **_kwargs)
         return val
     def Iconize(self, *_args, **_kwargs):
-        val = apply(framesc.wxTopLevelWindow_Iconize,(self,) + _args, _kwargs)
+        val = framesc.wxTopLevelWindow_Iconize(self, *_args, **_kwargs)
         return val
     def IsMaximized(self, *_args, **_kwargs):
-        val = apply(framesc.wxTopLevelWindow_IsMaximized,(self,) + _args, _kwargs)
+        val = framesc.wxTopLevelWindow_IsMaximized(self, *_args, **_kwargs)
         return val
     def IsIconized(self, *_args, **_kwargs):
-        val = apply(framesc.wxTopLevelWindow_IsIconized,(self,) + _args, _kwargs)
+        val = framesc.wxTopLevelWindow_IsIconized(self, *_args, **_kwargs)
         return val
     def GetIcon(self, *_args, **_kwargs):
-        val = apply(framesc.wxTopLevelWindow_GetIcon,(self,) + _args, _kwargs)
+        val = framesc.wxTopLevelWindow_GetIcon(self, *_args, **_kwargs)
         if val: val = wxIconPtr(val) ; val.thisown = 1
         return val
     def SetIcon(self, *_args, **_kwargs):
-        val = apply(framesc.wxTopLevelWindow_SetIcon,(self,) + _args, _kwargs)
+        val = framesc.wxTopLevelWindow_SetIcon(self, *_args, **_kwargs)
         return val
     def SetIcons(self, *_args, **_kwargs):
-        val = apply(framesc.wxTopLevelWindow_SetIcons,(self,) + _args, _kwargs)
+        val = framesc.wxTopLevelWindow_SetIcons(self, *_args, **_kwargs)
         return val
     def ShowFullScreen(self, *_args, **_kwargs):
-        val = apply(framesc.wxTopLevelWindow_ShowFullScreen,(self,) + _args, _kwargs)
+        val = framesc.wxTopLevelWindow_ShowFullScreen(self, *_args, **_kwargs)
         return val
     def IsFullScreen(self, *_args, **_kwargs):
-        val = apply(framesc.wxTopLevelWindow_IsFullScreen,(self,) + _args, _kwargs)
+        val = framesc.wxTopLevelWindow_IsFullScreen(self, *_args, **_kwargs)
         return val
     def SetTitle(self, *_args, **_kwargs):
-        val = apply(framesc.wxTopLevelWindow_SetTitle,(self,) + _args, _kwargs)
+        val = framesc.wxTopLevelWindow_SetTitle(self, *_args, **_kwargs)
         return val
     def GetTitle(self, *_args, **_kwargs):
-        val = apply(framesc.wxTopLevelWindow_GetTitle,(self,) + _args, _kwargs)
+        val = framesc.wxTopLevelWindow_GetTitle(self, *_args, **_kwargs)
+        return val
+    def SetShape(self, *_args, **_kwargs):
+        val = framesc.wxTopLevelWindow_SetShape(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTopLevelWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTopLevelWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxTopLevelWindow(wxTopLevelWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(framesc.new_wxTopLevelWindow,_args,_kwargs)
+        self.this = framesc.new_wxTopLevelWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreTopLevelWindow(*_args,**_kwargs):
-    val = wxTopLevelWindowPtr(apply(framesc.new_wxPreTopLevelWindow,_args,_kwargs))
+    val = wxTopLevelWindowPtr(framesc.new_wxPreTopLevelWindow(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -83,76 +86,76 @@ class wxFramePtr(wxTopLevelWindowPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_Create,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_Create(self, *_args, **_kwargs)
         return val
     def GetClientAreaOrigin(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_GetClientAreaOrigin,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_GetClientAreaOrigin(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def SetMenuBar(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_SetMenuBar,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_SetMenuBar(self, *_args, **_kwargs)
         return val
     def GetMenuBar(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_GetMenuBar,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_GetMenuBar(self, *_args, **_kwargs)
         return val
     def ProcessCommand(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_ProcessCommand,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_ProcessCommand(self, *_args, **_kwargs)
         return val
     def CreateStatusBar(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_CreateStatusBar,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_CreateStatusBar(self, *_args, **_kwargs)
         return val
     def GetStatusBar(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_GetStatusBar,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_GetStatusBar(self, *_args, **_kwargs)
         return val
     def SetStatusBar(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_SetStatusBar,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_SetStatusBar(self, *_args, **_kwargs)
         return val
     def SetStatusText(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_SetStatusText,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_SetStatusText(self, *_args, **_kwargs)
         return val
     def SetStatusWidths(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_SetStatusWidths,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_SetStatusWidths(self, *_args, **_kwargs)
         return val
     def PushStatusText(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_PushStatusText,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_PushStatusText(self, *_args, **_kwargs)
         return val
     def PopStatusText(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_PopStatusText,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_PopStatusText(self, *_args, **_kwargs)
         return val
     def DoGiveHelp(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_DoGiveHelp,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_DoGiveHelp(self, *_args, **_kwargs)
         return val
     def SetStatusBarPane(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_SetStatusBarPane,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_SetStatusBarPane(self, *_args, **_kwargs)
         return val
     def GetStatusBarPane(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_GetStatusBarPane,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_GetStatusBarPane(self, *_args, **_kwargs)
         return val
     def CreateToolBar(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_CreateToolBar,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_CreateToolBar(self, *_args, **_kwargs)
         return val
     def GetToolBar(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_GetToolBar,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_GetToolBar(self, *_args, **_kwargs)
         return val
     def SetToolBar(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_SetToolBar,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_SetToolBar(self, *_args, **_kwargs)
         return val
     def SendSizeEvent(self, *_args, **_kwargs):
-        val = apply(framesc.wxFrame_SendSizeEvent,(self,) + _args, _kwargs)
+        val = framesc.wxFrame_SendSizeEvent(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFrame instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFrame instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     Command = ProcessCommand
 class wxFrame(wxFramePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(framesc.new_wxFrame,_args,_kwargs)
+        self.this = framesc.new_wxFrame(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreFrame(*_args,**_kwargs):
-    val = wxFramePtr(apply(framesc.new_wxPreFrame,_args,_kwargs))
+    val = wxFramePtr(framesc.new_wxPreFrame(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -163,47 +166,47 @@ class wxDialogPtr(wxTopLevelWindowPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(framesc.wxDialog_Create,(self,) + _args, _kwargs)
+        val = framesc.wxDialog_Create(self, *_args, **_kwargs)
         return val
     def Centre(self, *_args, **_kwargs):
-        val = apply(framesc.wxDialog_Centre,(self,) + _args, _kwargs)
+        val = framesc.wxDialog_Centre(self, *_args, **_kwargs)
         return val
     def EndModal(self, *_args, **_kwargs):
-        val = apply(framesc.wxDialog_EndModal,(self,) + _args, _kwargs)
+        val = framesc.wxDialog_EndModal(self, *_args, **_kwargs)
         return val
     def SetModal(self, *_args, **_kwargs):
-        val = apply(framesc.wxDialog_SetModal,(self,) + _args, _kwargs)
+        val = framesc.wxDialog_SetModal(self, *_args, **_kwargs)
         return val
     def IsModal(self, *_args, **_kwargs):
-        val = apply(framesc.wxDialog_IsModal,(self,) + _args, _kwargs)
+        val = framesc.wxDialog_IsModal(self, *_args, **_kwargs)
         return val
     def ShowModal(self, *_args, **_kwargs):
-        val = apply(framesc.wxDialog_ShowModal,(self,) + _args, _kwargs)
+        val = framesc.wxDialog_ShowModal(self, *_args, **_kwargs)
         return val
     def GetReturnCode(self, *_args, **_kwargs):
-        val = apply(framesc.wxDialog_GetReturnCode,(self,) + _args, _kwargs)
+        val = framesc.wxDialog_GetReturnCode(self, *_args, **_kwargs)
         return val
     def SetReturnCode(self, *_args, **_kwargs):
-        val = apply(framesc.wxDialog_SetReturnCode,(self,) + _args, _kwargs)
+        val = framesc.wxDialog_SetReturnCode(self, *_args, **_kwargs)
         return val
     def CreateTextSizer(self, *_args, **_kwargs):
-        val = apply(framesc.wxDialog_CreateTextSizer,(self,) + _args, _kwargs)
+        val = framesc.wxDialog_CreateTextSizer(self, *_args, **_kwargs)
         return val
     def CreateButtonSizer(self, *_args, **_kwargs):
-        val = apply(framesc.wxDialog_CreateButtonSizer,(self,) + _args, _kwargs)
+        val = framesc.wxDialog_CreateButtonSizer(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxDialog instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDialog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDialog(wxDialogPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(framesc.new_wxDialog,_args,_kwargs)
+        self.this = framesc.new_wxDialog(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreDialog(*_args,**_kwargs):
-    val = wxDialogPtr(apply(framesc.new_wxPreDialog,_args,_kwargs))
+    val = wxDialogPtr(framesc.new_wxPreDialog(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -214,20 +217,20 @@ class wxMiniFramePtr(wxFramePtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(framesc.wxMiniFrame_Create,(self,) + _args, _kwargs)
+        val = framesc.wxMiniFrame_Create(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxMiniFrame instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMiniFrame instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMiniFrame(wxMiniFramePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(framesc.new_wxMiniFrame,_args,_kwargs)
+        self.this = framesc.new_wxMiniFrame(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreMiniFrame(*_args,**_kwargs):
-    val = wxMiniFramePtr(apply(framesc.new_wxPreMiniFrame,_args,_kwargs))
+    val = wxMiniFramePtr(framesc.new_wxPreMiniFrame(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -238,17 +241,17 @@ class wxSplashScreenWindowPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def SetBitmap(self, *_args, **_kwargs):
-        val = apply(framesc.wxSplashScreenWindow_SetBitmap,(self,) + _args, _kwargs)
+        val = framesc.wxSplashScreenWindow_SetBitmap(self, *_args, **_kwargs)
         return val
     def GetBitmap(self, *_args, **_kwargs):
-        val = apply(framesc.wxSplashScreenWindow_GetBitmap,(self,) + _args, _kwargs)
+        val = framesc.wxSplashScreenWindow_GetBitmap(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) 
         return val
     def __repr__(self):
-        return "<C wxSplashScreenWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSplashScreenWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSplashScreenWindow(wxSplashScreenWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(framesc.new_wxSplashScreenWindow,_args,_kwargs)
+        self.this = framesc.new_wxSplashScreenWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -260,20 +263,20 @@ class wxSplashScreenPtr(wxFramePtr):
         self.this = this
         self.thisown = 0
     def GetSplashStyle(self, *_args, **_kwargs):
-        val = apply(framesc.wxSplashScreen_GetSplashStyle,(self,) + _args, _kwargs)
+        val = framesc.wxSplashScreen_GetSplashStyle(self, *_args, **_kwargs)
         return val
     def GetSplashWindow(self, *_args, **_kwargs):
-        val = apply(framesc.wxSplashScreen_GetSplashWindow,(self,) + _args, _kwargs)
+        val = framesc.wxSplashScreen_GetSplashWindow(self, *_args, **_kwargs)
         if val: val = wxSplashScreenWindowPtr(val) 
         return val
     def GetTimeout(self, *_args, **_kwargs):
-        val = apply(framesc.wxSplashScreen_GetTimeout,(self,) + _args, _kwargs)
+        val = framesc.wxSplashScreen_GetTimeout(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxSplashScreen instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSplashScreen instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSplashScreen(wxSplashScreenPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(framesc.new_wxSplashScreen,_args,_kwargs)
+        self.this = framesc.new_wxSplashScreen(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
diff --git a/wxPython/src/gtk/gdi.cpp b/wxPython/src/gtk/gdi.cpp
index c4e48dacdf..5060a2d0f0 100644
--- a/wxPython/src/gtk/gdi.cpp
+++ b/wxPython/src/gtk/gdi.cpp
@@ -179,17 +179,25 @@ static PyObject* t_output_helper(PyObject* target, PyObject* o) {
         icon->CopyFromBitmap(bmp);
         return icon;
     }
-                              // Alternate 'constructor'
+
     wxCursor* wxPyStockCursor(int id) {
         return new wxCursor(id);
     }
 
     wxCursor* wxCursorFromImage(const wxImage& image) {
-    #ifndef __WXMAC__
         return new wxCursor(image);
-    #else
-        return NULL;
-    #endif
+    }
+
+    wxCursor* wxCursorFromBits(PyObject* bits, int width, int  height,
+                               int hotSpotX=-1, int hotSpotY=-1,
+                               PyObject* maskBits=0) {
+        char* bitsbuf;
+        char* maskbuf = NULL;
+        int   length;
+        PyString_AsStringAndSize(bits, &bitsbuf, &length);
+        if (maskBits)
+            PyString_AsStringAndSize(maskBits, &maskbuf, &length);
+        return new wxCursor(bitsbuf, width, height, hotSpotX, hotSpotY, maskbuf);
     }
                                       // Alternate 'constructor'
     wxColour* wxNamedColour(const wxString& colorName) {
@@ -595,6 +603,46 @@ static PyObject *_wrap_wxCursorFromImage(PyObject *self, PyObject *args, PyObjec
     return _resultobj;
 }
 
+static PyObject *_wrap_wxCursorFromBits(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxCursor * _result;
+    PyObject * _arg0;
+    int  _arg1;
+    int  _arg2;
+    int  _arg3 = (int ) -1;
+    int  _arg4 = (int ) -1;
+    PyObject * _arg5 = (PyObject *) 0;
+    PyObject * _obj0 = 0;
+    PyObject * _obj5 = 0;
+    char *_kwnames[] = { "bits","width","height","hotSpotX","hotSpotY","maskBits", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oii|iiO:wxCursorFromBits",_kwnames,&_obj0,&_arg1,&_arg2,&_arg3,&_arg4,&_obj5)) 
+        return NULL;
+{
+  _arg0 = _obj0;
+}
+    if (_obj5)
+{
+  _arg5 = _obj5;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxCursor *)wxCursorFromBits(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxCursor_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
 static PyObject *_wrap_wxNamedColour(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxColour * _result;
@@ -2746,6 +2794,54 @@ static void *SwigwxCursorTowxObject(void *ptr) {
     return (void *) dest;
 }
 
+static wxCursor *new_wxCursor(const wxString *cursorName,long flags,int hotSpotX,int hotSpotY) {
+#ifdef __WXGTK__
+            wxCHECK_MSG(FALSE, NULL,
+                        wxT("wxCursor constructor not implemented for wxGTK, use wxStockCursor, wxCursorFromImage, or wxCursorFromBits instead."));
+#else
+            return new wxCursor(*cursorName, flags, hotSpotX, hotSpotY);
+#endif
+        }
+
+static PyObject *_wrap_new_wxCursor(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxCursor * _result;
+    wxString * _arg0;
+    long  _arg1;
+    int  _arg2 = (int ) 0;
+    int  _arg3 = (int ) 0;
+    PyObject * _obj0 = 0;
+    char *_kwnames[] = { "cursorName","flags","hotSpotX","hotSpotY", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Ol|ii:new_wxCursor",_kwnames,&_obj0,&_arg1,&_arg2,&_arg3)) 
+        return NULL;
+{
+    _arg0 = wxString_in_helper(_obj0);
+    if (_arg0 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxCursor *)new_wxCursor(_arg0,_arg1,_arg2,_arg3);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxCursor_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+{
+    if (_obj0)
+        delete _arg0;
+}
+    return _resultobj;
+}
+
 #define delete_wxCursor(_swigobj) (delete _swigobj)
 static PyObject *_wrap_delete_wxCursor(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -9408,6 +9504,50 @@ static PyObject *_wrap_new_wxRegionFromPoints(PyObject *self, PyObject *args, Py
     return _resultobj;
 }
 
+#define new_wxRegionFromBitmap(_swigarg0,_swigarg1,_swigarg2) (new wxRegion(_swigarg0,_swigarg1,_swigarg2))
+static PyObject *_wrap_new_wxRegionFromBitmap(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxRegion * _result;
+    wxBitmap * _arg0;
+    wxColour * _arg1 = (wxColour *) &wxNullColour;
+    int  _arg2 = (int ) 0;
+    PyObject * _argo0 = 0;
+    wxColour  temp;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "bmp","transColour","tolerance", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O|Oi:new_wxRegionFromBitmap",_kwnames,&_argo0,&_obj1,&_arg2)) 
+        return NULL;
+    if (_argo0) {
+        if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxBitmap_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxRegionFromBitmap. Expected _wxBitmap_p.");
+        return NULL;
+        }
+    }
+    if (_obj1)
+{
+    _arg1 = &temp;
+    if (! wxColour_helper(_obj1, &_arg1))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxRegion *)new_wxRegionFromBitmap(*_arg0,*_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxRegion_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
 #define delete_wxRegion(_swigobj) (delete _swigobj)
 static PyObject *_wrap_delete_wxRegion(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -10102,6 +10242,82 @@ static PyObject *_wrap_wxRegion_XorRegion(PyObject *self, PyObject *args, PyObje
     return _resultobj;
 }
 
+#define wxRegion_ConvertToBitmap(_swigobj)  (_swigobj->ConvertToBitmap())
+static PyObject *_wrap_wxRegion_ConvertToBitmap(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxBitmap * _result;
+    wxRegion * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxRegion_ConvertToBitmap",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxRegion_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxRegion_ConvertToBitmap. Expected _wxRegion_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = new wxBitmap (wxRegion_ConvertToBitmap(_arg0));
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxBitmap_p");
+    _resultobj = Py_BuildValue("s",_ptemp);
+    return _resultobj;
+}
+
+#define wxRegion_UnionBitmap(_swigobj,_swigarg0,_swigarg1,_swigarg2)  (_swigobj->Union(_swigarg0,_swigarg1,_swigarg2))
+static PyObject *_wrap_wxRegion_UnionBitmap(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxRegion * _arg0;
+    wxBitmap * _arg1;
+    wxColour * _arg2 = (wxColour *) &wxNullColour;
+    int  _arg3 = (int ) 0;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    wxColour  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","bmp","transColour","tolerance", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|Oi:wxRegion_UnionBitmap",_kwnames,&_argo0,&_argo1,&_obj2,&_arg3)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxRegion_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxRegion_UnionBitmap. Expected _wxRegion_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxBitmap_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxRegion_UnionBitmap. Expected _wxBitmap_p.");
+        return NULL;
+        }
+    }
+    if (_obj2)
+{
+    _arg2 = &temp;
+    if (! wxColour_helper(_obj2, &_arg2))
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxRegion_UnionBitmap(_arg0,*_arg1,*_arg2,_arg3);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
 static void *SwigwxRegionIteratorTowxObject(void *ptr) {
     wxRegionIterator *src;
     wxObject *dest;
@@ -10469,6 +10685,8 @@ static PyMethodDef gdicMethods[] = {
 	 { "wxRegionIterator_GetX", (PyCFunction) _wrap_wxRegionIterator_GetX, METH_VARARGS | METH_KEYWORDS },
 	 { "delete_wxRegionIterator", (PyCFunction) _wrap_delete_wxRegionIterator, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxRegionIterator", (PyCFunction) _wrap_new_wxRegionIterator, METH_VARARGS | METH_KEYWORDS },
+	 { "wxRegion_UnionBitmap", (PyCFunction) _wrap_wxRegion_UnionBitmap, METH_VARARGS | METH_KEYWORDS },
+	 { "wxRegion_ConvertToBitmap", (PyCFunction) _wrap_wxRegion_ConvertToBitmap, METH_VARARGS | METH_KEYWORDS },
 	 { "wxRegion_XorRegion", (PyCFunction) _wrap_wxRegion_XorRegion, METH_VARARGS | METH_KEYWORDS },
 	 { "wxRegion_XorRect", (PyCFunction) _wrap_wxRegion_XorRect, METH_VARARGS | METH_KEYWORDS },
 	 { "wxRegion_Xor", (PyCFunction) _wrap_wxRegion_Xor, METH_VARARGS | METH_KEYWORDS },
@@ -10490,6 +10708,7 @@ static PyMethodDef gdicMethods[] = {
 	 { "wxRegion_Offset", (PyCFunction) _wrap_wxRegion_Offset, METH_VARARGS | METH_KEYWORDS },
 	 { "wxRegion_Clear", (PyCFunction) _wrap_wxRegion_Clear, METH_VARARGS | METH_KEYWORDS },
 	 { "delete_wxRegion", (PyCFunction) _wrap_delete_wxRegion, METH_VARARGS | METH_KEYWORDS },
+	 { "new_wxRegionFromBitmap", (PyCFunction) _wrap_new_wxRegionFromBitmap, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxRegionFromPoints", (PyCFunction) _wrap_new_wxRegionFromPoints, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxRegion", (PyCFunction) _wrap_new_wxRegion, METH_VARARGS | METH_KEYWORDS },
 	 { "wxImageList_GetSize", (PyCFunction) _wrap_wxImageList_GetSize, METH_VARARGS | METH_KEYWORDS },
@@ -10669,6 +10888,7 @@ static PyMethodDef gdicMethods[] = {
 	 { "new_wxColour", (PyCFunction) _wrap_new_wxColour, METH_VARARGS | METH_KEYWORDS },
 	 { "wxCursor_Ok", (PyCFunction) _wrap_wxCursor_Ok, METH_VARARGS | METH_KEYWORDS },
 	 { "delete_wxCursor", (PyCFunction) _wrap_delete_wxCursor, METH_VARARGS | METH_KEYWORDS },
+	 { "new_wxCursor", (PyCFunction) _wrap_new_wxCursor, METH_VARARGS | METH_KEYWORDS },
 	 { "wxIconBundle_GetIcon", (PyCFunction) _wrap_wxIconBundle_GetIcon, METH_VARARGS | METH_KEYWORDS },
 	 { "wxIconBundle_AddIconFromFile", (PyCFunction) _wrap_wxIconBundle_AddIconFromFile, METH_VARARGS | METH_KEYWORDS },
 	 { "wxIconBundle_AddIcon", (PyCFunction) _wrap_wxIconBundle_AddIcon, METH_VARARGS | METH_KEYWORDS },
@@ -10712,6 +10932,7 @@ static PyMethodDef gdicMethods[] = {
 	 { "new_wxGDIObject", (PyCFunction) _wrap_new_wxGDIObject, METH_VARARGS | METH_KEYWORDS },
 	 { "wxMemoryDCFromDC", (PyCFunction) _wrap_wxMemoryDCFromDC, METH_VARARGS | METH_KEYWORDS },
 	 { "wxNamedColour", (PyCFunction) _wrap_wxNamedColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxCursorFromBits", (PyCFunction) _wrap_wxCursorFromBits, METH_VARARGS | METH_KEYWORDS },
 	 { "wxCursorFromImage", (PyCFunction) _wrap_wxCursorFromImage, METH_VARARGS | METH_KEYWORDS },
 	 { "wxStockCursor", (PyCFunction) _wrap_wxStockCursor, METH_VARARGS | METH_KEYWORDS },
 	 { "wxIconFromBitmap", (PyCFunction) _wrap_wxIconFromBitmap, METH_VARARGS | METH_KEYWORDS },
diff --git a/wxPython/src/gtk/gdi.py b/wxPython/src/gtk/gdi.py
index a5a770e9aa..2724b09ce0 100644
--- a/wxPython/src/gtk/gdi.py
+++ b/wxPython/src/gtk/gdi.py
@@ -16,19 +16,19 @@ class wxGDIObjectPtr(wxObjectPtr):
             except:
                 pass
     def GetVisible(self, *_args, **_kwargs):
-        val = apply(gdic.wxGDIObject_GetVisible,(self,) + _args, _kwargs)
+        val = gdic.wxGDIObject_GetVisible(self, *_args, **_kwargs)
         return val
     def SetVisible(self, *_args, **_kwargs):
-        val = apply(gdic.wxGDIObject_SetVisible,(self,) + _args, _kwargs)
+        val = gdic.wxGDIObject_SetVisible(self, *_args, **_kwargs)
         return val
     def IsNull(self, *_args, **_kwargs):
-        val = apply(gdic.wxGDIObject_IsNull,(self,) + _args, _kwargs)
+        val = gdic.wxGDIObject_IsNull(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGDIObject instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGDIObject instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGDIObject(wxGDIObjectPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxGDIObject,_args,_kwargs)
+        self.this = gdic.new_wxGDIObject(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -45,60 +45,61 @@ class wxBitmapPtr(wxGDIObjectPtr):
             except:
                 pass
     def GetPalette(self, *_args, **_kwargs):
-        val = apply(gdic.wxBitmap_GetPalette,(self,) + _args, _kwargs)
+        val = gdic.wxBitmap_GetPalette(self, *_args, **_kwargs)
         if val: val = wxPalettePtr(val) 
         return val
     def GetMask(self, *_args, **_kwargs):
-        val = apply(gdic.wxBitmap_GetMask,(self,) + _args, _kwargs)
+        val = gdic.wxBitmap_GetMask(self, *_args, **_kwargs)
         if val: val = wxMaskPtr(val) 
         return val
     def LoadFile(self, *_args, **_kwargs):
-        val = apply(gdic.wxBitmap_LoadFile,(self,) + _args, _kwargs)
+        val = gdic.wxBitmap_LoadFile(self, *_args, **_kwargs)
         return val
     def SaveFile(self, *_args, **_kwargs):
-        val = apply(gdic.wxBitmap_SaveFile,(self,) + _args, _kwargs)
+        val = gdic.wxBitmap_SaveFile(self, *_args, **_kwargs)
         return val
     def SetMask(self, *_args, **_kwargs):
-        val = apply(gdic.wxBitmap_SetMask,(self,) + _args, _kwargs)
+        val = gdic.wxBitmap_SetMask(self, *_args, **_kwargs)
         return val
     def Ok(self, *_args, **_kwargs):
-        val = apply(gdic.wxBitmap_Ok,(self,) + _args, _kwargs)
+        val = gdic.wxBitmap_Ok(self, *_args, **_kwargs)
         return val
     def GetWidth(self, *_args, **_kwargs):
-        val = apply(gdic.wxBitmap_GetWidth,(self,) + _args, _kwargs)
+        val = gdic.wxBitmap_GetWidth(self, *_args, **_kwargs)
         return val
     def GetHeight(self, *_args, **_kwargs):
-        val = apply(gdic.wxBitmap_GetHeight,(self,) + _args, _kwargs)
+        val = gdic.wxBitmap_GetHeight(self, *_args, **_kwargs)
         return val
     def GetDepth(self, *_args, **_kwargs):
-        val = apply(gdic.wxBitmap_GetDepth,(self,) + _args, _kwargs)
+        val = gdic.wxBitmap_GetDepth(self, *_args, **_kwargs)
         return val
     def SetWidth(self, *_args, **_kwargs):
-        val = apply(gdic.wxBitmap_SetWidth,(self,) + _args, _kwargs)
+        val = gdic.wxBitmap_SetWidth(self, *_args, **_kwargs)
         return val
     def SetHeight(self, *_args, **_kwargs):
-        val = apply(gdic.wxBitmap_SetHeight,(self,) + _args, _kwargs)
+        val = gdic.wxBitmap_SetHeight(self, *_args, **_kwargs)
         return val
     def SetDepth(self, *_args, **_kwargs):
-        val = apply(gdic.wxBitmap_SetDepth,(self,) + _args, _kwargs)
+        val = gdic.wxBitmap_SetDepth(self, *_args, **_kwargs)
         return val
     def GetSubBitmap(self, *_args, **_kwargs):
-        val = apply(gdic.wxBitmap_GetSubBitmap,(self,) + _args, _kwargs)
+        val = gdic.wxBitmap_GetSubBitmap(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) ; val.thisown = 1
         return val
     def CopyFromIcon(self, *_args, **_kwargs):
-        val = apply(gdic.wxBitmap_CopyFromIcon,(self,) + _args, _kwargs)
+        val = gdic.wxBitmap_CopyFromIcon(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxBitmap instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxBitmap instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     def SetMaskColour(self, colour):
         mask = wxMaskColour(self, colour)
         self.SetMask(mask)
     
+    def __nonzero__(self): return self.Ok()
 class wxBitmap(wxBitmapPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxBitmap,_args,_kwargs)
+        self.this = gdic.new_wxBitmap(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -109,13 +110,13 @@ class wxMaskPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def Destroy(self, *_args, **_kwargs):
-        val = apply(gdic.wxMask_Destroy,(self,) + _args, _kwargs)
+        val = gdic.wxMask_Destroy(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxMask instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMask instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMask(wxMaskPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxMask,_args,_kwargs)
+        self.this = gdic.new_wxMask(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -132,37 +133,38 @@ class wxIconPtr(wxGDIObjectPtr):
             except:
                 pass
     def LoadFile(self, *_args, **_kwargs):
-        val = apply(gdic.wxIcon_LoadFile,(self,) + _args, _kwargs)
+        val = gdic.wxIcon_LoadFile(self, *_args, **_kwargs)
         return val
     def Ok(self, *_args, **_kwargs):
-        val = apply(gdic.wxIcon_Ok,(self,) + _args, _kwargs)
+        val = gdic.wxIcon_Ok(self, *_args, **_kwargs)
         return val
     def GetWidth(self, *_args, **_kwargs):
-        val = apply(gdic.wxIcon_GetWidth,(self,) + _args, _kwargs)
+        val = gdic.wxIcon_GetWidth(self, *_args, **_kwargs)
         return val
     def GetHeight(self, *_args, **_kwargs):
-        val = apply(gdic.wxIcon_GetHeight,(self,) + _args, _kwargs)
+        val = gdic.wxIcon_GetHeight(self, *_args, **_kwargs)
         return val
     def GetDepth(self, *_args, **_kwargs):
-        val = apply(gdic.wxIcon_GetDepth,(self,) + _args, _kwargs)
+        val = gdic.wxIcon_GetDepth(self, *_args, **_kwargs)
         return val
     def SetWidth(self, *_args, **_kwargs):
-        val = apply(gdic.wxIcon_SetWidth,(self,) + _args, _kwargs)
+        val = gdic.wxIcon_SetWidth(self, *_args, **_kwargs)
         return val
     def SetHeight(self, *_args, **_kwargs):
-        val = apply(gdic.wxIcon_SetHeight,(self,) + _args, _kwargs)
+        val = gdic.wxIcon_SetHeight(self, *_args, **_kwargs)
         return val
     def SetDepth(self, *_args, **_kwargs):
-        val = apply(gdic.wxIcon_SetDepth,(self,) + _args, _kwargs)
+        val = gdic.wxIcon_SetDepth(self, *_args, **_kwargs)
         return val
     def CopyFromBitmap(self, *_args, **_kwargs):
-        val = apply(gdic.wxIcon_CopyFromBitmap,(self,) + _args, _kwargs)
+        val = gdic.wxIcon_CopyFromBitmap(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxIcon instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxIcon instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.Ok()
 class wxIcon(wxIconPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxIcon,_args,_kwargs)
+        self.this = gdic.new_wxIcon(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -179,31 +181,31 @@ class wxIconBundlePtr :
             except:
                 pass
     def AddIcon(self, *_args, **_kwargs):
-        val = apply(gdic.wxIconBundle_AddIcon,(self,) + _args, _kwargs)
+        val = gdic.wxIconBundle_AddIcon(self, *_args, **_kwargs)
         return val
     def AddIconFromFile(self, *_args, **_kwargs):
-        val = apply(gdic.wxIconBundle_AddIconFromFile,(self,) + _args, _kwargs)
+        val = gdic.wxIconBundle_AddIconFromFile(self, *_args, **_kwargs)
         return val
     def GetIcon(self, *_args, **_kwargs):
-        val = apply(gdic.wxIconBundle_GetIcon,(self,) + _args, _kwargs)
+        val = gdic.wxIconBundle_GetIcon(self, *_args, **_kwargs)
         if val: val = wxIconPtr(val) 
         return val
     def __repr__(self):
-        return "<C wxIconBundle instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxIconBundle instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxIconBundle(wxIconBundlePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxIconBundle,_args,_kwargs)
+        self.this = gdic.new_wxIconBundle(*_args,**_kwargs)
         self.thisown = 1
 
 
 
 def wxIconBundleFromFile(*_args,**_kwargs):
-    val = wxIconBundlePtr(apply(gdic.new_wxIconBundleFromFile,_args,_kwargs))
+    val = wxIconBundlePtr(gdic.new_wxIconBundleFromFile(*_args,**_kwargs))
     val.thisown = 1
     return val
 
 def wxIconBundleFromIcon(*_args,**_kwargs):
-    val = wxIconBundlePtr(apply(gdic.new_wxIconBundleFromIcon,_args,_kwargs))
+    val = wxIconBundlePtr(gdic.new_wxIconBundleFromIcon(*_args,**_kwargs))
     val.thisown = 1
     return val
 
@@ -219,13 +221,15 @@ class wxCursorPtr(wxGDIObjectPtr):
             except:
                 pass
     def Ok(self, *_args, **_kwargs):
-        val = apply(gdic.wxCursor_Ok,(self,) + _args, _kwargs)
+        val = gdic.wxCursor_Ok(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxCursor instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxCursor instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.Ok()
 class wxCursor(wxCursorPtr):
-    def __init__(self,this):
-        self.this = this
+    def __init__(self,*_args,**_kwargs):
+        self.this = gdic.new_wxCursor(*_args,**_kwargs)
+        self.thisown = 1
 
 
 
@@ -241,31 +245,31 @@ class wxColourPtr(wxObjectPtr):
             except:
                 pass
     def Red(self, *_args, **_kwargs):
-        val = apply(gdic.wxColour_Red,(self,) + _args, _kwargs)
+        val = gdic.wxColour_Red(self, *_args, **_kwargs)
         return val
     def Green(self, *_args, **_kwargs):
-        val = apply(gdic.wxColour_Green,(self,) + _args, _kwargs)
+        val = gdic.wxColour_Green(self, *_args, **_kwargs)
         return val
     def Blue(self, *_args, **_kwargs):
-        val = apply(gdic.wxColour_Blue,(self,) + _args, _kwargs)
+        val = gdic.wxColour_Blue(self, *_args, **_kwargs)
         return val
     def Ok(self, *_args, **_kwargs):
-        val = apply(gdic.wxColour_Ok,(self,) + _args, _kwargs)
+        val = gdic.wxColour_Ok(self, *_args, **_kwargs)
         return val
     def Set(self, *_args, **_kwargs):
-        val = apply(gdic.wxColour_Set,(self,) + _args, _kwargs)
+        val = gdic.wxColour_Set(self, *_args, **_kwargs)
         return val
     def Get(self, *_args, **_kwargs):
-        val = apply(gdic.wxColour_Get,(self,) + _args, _kwargs)
+        val = gdic.wxColour_Get(self, *_args, **_kwargs)
         return val
     def __eq__(self, *_args, **_kwargs):
-        val = apply(gdic.wxColour___eq__,(self,) + _args, _kwargs)
+        val = gdic.wxColour___eq__(self, *_args, **_kwargs)
         return val
     def __ne__(self, *_args, **_kwargs):
-        val = apply(gdic.wxColour___ne__,(self,) + _args, _kwargs)
+        val = gdic.wxColour___ne__(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxColour instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxColour instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     asTuple = Get
     def __str__(self):                  return str(self.asTuple())
     def __repr__(self):                 return 'wxColour:' + str(self.asTuple())
@@ -276,7 +280,7 @@ class wxColourPtr(wxObjectPtr):
 
 class wxColour(wxColourPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxColour,_args,_kwargs)
+        self.this = gdic.new_wxColour(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -287,17 +291,17 @@ class wxColourDatabasePtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def FindColour(self, *_args, **_kwargs):
-        val = apply(gdic.wxColourDatabase_FindColour,(self,) + _args, _kwargs)
+        val = gdic.wxColourDatabase_FindColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) 
         return val
     def FindName(self, *_args, **_kwargs):
-        val = apply(gdic.wxColourDatabase_FindName,(self,) + _args, _kwargs)
+        val = gdic.wxColourDatabase_FindName(self, *_args, **_kwargs)
         return val
     def Append(self, *_args, **_kwargs):
-        val = apply(gdic.wxColourDatabase_Append,(self,) + _args, _kwargs)
+        val = gdic.wxColourDatabase_Append(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxColourDatabase instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxColourDatabase instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxColourDatabase(wxColourDatabasePtr):
     def __init__(self,this):
         self.this = this
@@ -316,50 +320,51 @@ class wxPenPtr(wxGDIObjectPtr):
             except:
                 pass
     def GetCap(self, *_args, **_kwargs):
-        val = apply(gdic.wxPen_GetCap,(self,) + _args, _kwargs)
+        val = gdic.wxPen_GetCap(self, *_args, **_kwargs)
         return val
     def GetColour(self, *_args, **_kwargs):
-        val = apply(gdic.wxPen_GetColour,(self,) + _args, _kwargs)
+        val = gdic.wxPen_GetColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetJoin(self, *_args, **_kwargs):
-        val = apply(gdic.wxPen_GetJoin,(self,) + _args, _kwargs)
+        val = gdic.wxPen_GetJoin(self, *_args, **_kwargs)
         return val
     def GetStyle(self, *_args, **_kwargs):
-        val = apply(gdic.wxPen_GetStyle,(self,) + _args, _kwargs)
+        val = gdic.wxPen_GetStyle(self, *_args, **_kwargs)
         return val
     def GetWidth(self, *_args, **_kwargs):
-        val = apply(gdic.wxPen_GetWidth,(self,) + _args, _kwargs)
+        val = gdic.wxPen_GetWidth(self, *_args, **_kwargs)
         return val
     def Ok(self, *_args, **_kwargs):
-        val = apply(gdic.wxPen_Ok,(self,) + _args, _kwargs)
+        val = gdic.wxPen_Ok(self, *_args, **_kwargs)
         return val
     def SetCap(self, *_args, **_kwargs):
-        val = apply(gdic.wxPen_SetCap,(self,) + _args, _kwargs)
+        val = gdic.wxPen_SetCap(self, *_args, **_kwargs)
         return val
     def SetColour(self, *_args, **_kwargs):
-        val = apply(gdic.wxPen_SetColour,(self,) + _args, _kwargs)
+        val = gdic.wxPen_SetColour(self, *_args, **_kwargs)
         return val
     def SetJoin(self, *_args, **_kwargs):
-        val = apply(gdic.wxPen_SetJoin,(self,) + _args, _kwargs)
+        val = gdic.wxPen_SetJoin(self, *_args, **_kwargs)
         return val
     def SetStyle(self, *_args, **_kwargs):
-        val = apply(gdic.wxPen_SetStyle,(self,) + _args, _kwargs)
+        val = gdic.wxPen_SetStyle(self, *_args, **_kwargs)
         return val
     def SetWidth(self, *_args, **_kwargs):
-        val = apply(gdic.wxPen_SetWidth,(self,) + _args, _kwargs)
+        val = gdic.wxPen_SetWidth(self, *_args, **_kwargs)
         return val
     def SetDashes(self, *_args, **_kwargs):
-        val = apply(gdic.wxPen_SetDashes,(self,) + _args, _kwargs)
+        val = gdic.wxPen_SetDashes(self, *_args, **_kwargs)
         return val
     def GetDashes(self, *_args, **_kwargs):
-        val = apply(gdic.wxPen_GetDashes,(self,) + _args, _kwargs)
+        val = gdic.wxPen_GetDashes(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPen instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPen instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.Ok()
 class wxPen(wxPenPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxPen,_args,_kwargs)
+        self.this = gdic.new_wxPen(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -376,13 +381,13 @@ class wxPyPenPtr(wxPenPtr):
             except:
                 pass
     def SetDashes(self, *_args, **_kwargs):
-        val = apply(gdic.wxPyPen_SetDashes,(self,) + _args, _kwargs)
+        val = gdic.wxPyPen_SetDashes(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyPen instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyPen instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyPen(wxPyPenPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxPyPen,_args,_kwargs)
+        self.this = gdic.new_wxPyPen(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -393,20 +398,20 @@ class wxPenListPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def AddPen(self, *_args, **_kwargs):
-        val = apply(gdic.wxPenList_AddPen,(self,) + _args, _kwargs)
+        val = gdic.wxPenList_AddPen(self, *_args, **_kwargs)
         return val
     def FindOrCreatePen(self, *_args, **_kwargs):
-        val = apply(gdic.wxPenList_FindOrCreatePen,(self,) + _args, _kwargs)
+        val = gdic.wxPenList_FindOrCreatePen(self, *_args, **_kwargs)
         if val: val = wxPenPtr(val) 
         return val
     def RemovePen(self, *_args, **_kwargs):
-        val = apply(gdic.wxPenList_RemovePen,(self,) + _args, _kwargs)
+        val = gdic.wxPenList_RemovePen(self, *_args, **_kwargs)
         return val
     def GetCount(self, *_args, **_kwargs):
-        val = apply(gdic.wxPenList_GetCount,(self,) + _args, _kwargs)
+        val = gdic.wxPenList_GetCount(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPenList instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPenList instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPenList(wxPenListPtr):
     def __init__(self,this):
         self.this = this
@@ -425,33 +430,34 @@ class wxBrushPtr(wxGDIObjectPtr):
             except:
                 pass
     def GetColour(self, *_args, **_kwargs):
-        val = apply(gdic.wxBrush_GetColour,(self,) + _args, _kwargs)
+        val = gdic.wxBrush_GetColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetStipple(self, *_args, **_kwargs):
-        val = apply(gdic.wxBrush_GetStipple,(self,) + _args, _kwargs)
+        val = gdic.wxBrush_GetStipple(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) 
         return val
     def GetStyle(self, *_args, **_kwargs):
-        val = apply(gdic.wxBrush_GetStyle,(self,) + _args, _kwargs)
+        val = gdic.wxBrush_GetStyle(self, *_args, **_kwargs)
         return val
     def Ok(self, *_args, **_kwargs):
-        val = apply(gdic.wxBrush_Ok,(self,) + _args, _kwargs)
+        val = gdic.wxBrush_Ok(self, *_args, **_kwargs)
         return val
     def SetColour(self, *_args, **_kwargs):
-        val = apply(gdic.wxBrush_SetColour,(self,) + _args, _kwargs)
+        val = gdic.wxBrush_SetColour(self, *_args, **_kwargs)
         return val
     def SetStipple(self, *_args, **_kwargs):
-        val = apply(gdic.wxBrush_SetStipple,(self,) + _args, _kwargs)
+        val = gdic.wxBrush_SetStipple(self, *_args, **_kwargs)
         return val
     def SetStyle(self, *_args, **_kwargs):
-        val = apply(gdic.wxBrush_SetStyle,(self,) + _args, _kwargs)
+        val = gdic.wxBrush_SetStyle(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxBrush instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxBrush instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.Ok()
 class wxBrush(wxBrushPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxBrush,_args,_kwargs)
+        self.this = gdic.new_wxBrush(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -462,20 +468,20 @@ class wxBrushListPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def AddBrush(self, *_args, **_kwargs):
-        val = apply(gdic.wxBrushList_AddBrush,(self,) + _args, _kwargs)
+        val = gdic.wxBrushList_AddBrush(self, *_args, **_kwargs)
         return val
     def FindOrCreateBrush(self, *_args, **_kwargs):
-        val = apply(gdic.wxBrushList_FindOrCreateBrush,(self,) + _args, _kwargs)
+        val = gdic.wxBrushList_FindOrCreateBrush(self, *_args, **_kwargs)
         if val: val = wxBrushPtr(val) 
         return val
     def RemoveBrush(self, *_args, **_kwargs):
-        val = apply(gdic.wxBrushList_RemoveBrush,(self,) + _args, _kwargs)
+        val = gdic.wxBrushList_RemoveBrush(self, *_args, **_kwargs)
         return val
     def GetCount(self, *_args, **_kwargs):
-        val = apply(gdic.wxBrushList_GetCount,(self,) + _args, _kwargs)
+        val = gdic.wxBrushList_GetCount(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxBrushList instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxBrushList instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxBrushList(wxBrushListPtr):
     def __init__(self,this):
         self.this = this
@@ -494,309 +500,310 @@ class wxDCPtr(wxObjectPtr):
             except:
                 pass
     def BeginDrawing(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_BeginDrawing,(self,) + _args, _kwargs)
+        val = gdic.wxDC_BeginDrawing(self, *_args, **_kwargs)
         return val
     def Blit(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_Blit,(self,) + _args, _kwargs)
+        val = gdic.wxDC_Blit(self, *_args, **_kwargs)
         return val
     def Clear(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_Clear,(self,) + _args, _kwargs)
+        val = gdic.wxDC_Clear(self, *_args, **_kwargs)
         return val
     def CrossHair(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_CrossHair,(self,) + _args, _kwargs)
+        val = gdic.wxDC_CrossHair(self, *_args, **_kwargs)
         return val
     def DestroyClippingRegion(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DestroyClippingRegion,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DestroyClippingRegion(self, *_args, **_kwargs)
         return val
     def DeviceToLogicalX(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DeviceToLogicalX,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DeviceToLogicalX(self, *_args, **_kwargs)
         return val
     def DeviceToLogicalXRel(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DeviceToLogicalXRel,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DeviceToLogicalXRel(self, *_args, **_kwargs)
         return val
     def DeviceToLogicalY(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DeviceToLogicalY,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DeviceToLogicalY(self, *_args, **_kwargs)
         return val
     def DeviceToLogicalYRel(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DeviceToLogicalYRel,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DeviceToLogicalYRel(self, *_args, **_kwargs)
         return val
     def DrawArc(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawArc,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawArc(self, *_args, **_kwargs)
         return val
     def DrawCircle(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawCircle,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawCircle(self, *_args, **_kwargs)
         return val
     def DrawEllipse(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawEllipse,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawEllipse(self, *_args, **_kwargs)
         return val
     def DrawEllipticArc(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawEllipticArc,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawEllipticArc(self, *_args, **_kwargs)
         return val
     def DrawIcon(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawIcon,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawIcon(self, *_args, **_kwargs)
         return val
     def DrawLabel(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawLabel,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawLabel(self, *_args, **_kwargs)
         return val
     def DrawImageLabel(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawImageLabel,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawImageLabel(self, *_args, **_kwargs)
         if val: val = wxRectPtr(val) ; val.thisown = 1
         return val
     def DrawLine(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawLine,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawLine(self, *_args, **_kwargs)
         return val
     def DrawLines(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawLines,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawLines(self, *_args, **_kwargs)
         return val
     def DrawPolygon(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawPolygon,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawPolygon(self, *_args, **_kwargs)
         return val
     def DrawPoint(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawPoint,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawPoint(self, *_args, **_kwargs)
         return val
     def DrawRectangle(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawRectangle,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawRectangle(self, *_args, **_kwargs)
         return val
     def DrawRectangleRect(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawRectangleRect,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawRectangleRect(self, *_args, **_kwargs)
         return val
     def DrawRotatedText(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawRotatedText,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawRotatedText(self, *_args, **_kwargs)
         return val
     def DrawRoundedRectangle(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawRoundedRectangle,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawRoundedRectangle(self, *_args, **_kwargs)
         return val
     def DrawSpline(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawSpline,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawSpline(self, *_args, **_kwargs)
         return val
     def DrawText(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawText,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawText(self, *_args, **_kwargs)
         return val
     def EndDoc(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_EndDoc,(self,) + _args, _kwargs)
+        val = gdic.wxDC_EndDoc(self, *_args, **_kwargs)
         return val
     def EndDrawing(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_EndDrawing,(self,) + _args, _kwargs)
+        val = gdic.wxDC_EndDrawing(self, *_args, **_kwargs)
         return val
     def EndPage(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_EndPage,(self,) + _args, _kwargs)
+        val = gdic.wxDC_EndPage(self, *_args, **_kwargs)
         return val
     def FloodFill(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_FloodFill,(self,) + _args, _kwargs)
+        val = gdic.wxDC_FloodFill(self, *_args, **_kwargs)
         return val
     def GetBackground(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetBackground,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetBackground(self, *_args, **_kwargs)
         if val: val = wxBrushPtr(val) ; val.thisown = 1
         return val
     def GetBrush(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetBrush,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetBrush(self, *_args, **_kwargs)
         if val: val = wxBrushPtr(val) ; val.thisown = 1
         return val
     def GetCharHeight(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetCharHeight,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetCharHeight(self, *_args, **_kwargs)
         return val
     def GetCharWidth(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetCharWidth,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetCharWidth(self, *_args, **_kwargs)
         return val
     def GetClippingBox(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetClippingBox,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetClippingBox(self, *_args, **_kwargs)
         return val
     def GetFont(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetFont,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def GetLogicalFunction(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetLogicalFunction,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetLogicalFunction(self, *_args, **_kwargs)
         return val
     def GetLogicalScale(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetLogicalScale,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetLogicalScale(self, *_args, **_kwargs)
         return val
     def GetMapMode(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetMapMode,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetMapMode(self, *_args, **_kwargs)
         return val
     def GetOptimization(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetOptimization,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetOptimization(self, *_args, **_kwargs)
         return val
     def GetPen(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetPen,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetPen(self, *_args, **_kwargs)
         if val: val = wxPenPtr(val) ; val.thisown = 1
         return val
     def GetPixel(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetPixel,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetPixel(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetSizeTuple(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetSizeTuple,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetSizeTuple(self, *_args, **_kwargs)
         return val
     def GetSize(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetSize,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetSizeMM(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetSizeMM,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetSizeMM(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetTextBackground(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetTextBackground,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetTextBackground(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetTextExtent(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetTextExtent,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetTextExtent(self, *_args, **_kwargs)
         return val
     def GetFullTextExtent(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetFullTextExtent,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetFullTextExtent(self, *_args, **_kwargs)
         return val
     def GetMultiLineTextExtent(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetMultiLineTextExtent,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetMultiLineTextExtent(self, *_args, **_kwargs)
         return val
     def GetTextForeground(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetTextForeground,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetTextForeground(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetUserScale(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetUserScale,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetUserScale(self, *_args, **_kwargs)
         return val
     def LogicalToDeviceX(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_LogicalToDeviceX,(self,) + _args, _kwargs)
+        val = gdic.wxDC_LogicalToDeviceX(self, *_args, **_kwargs)
         return val
     def LogicalToDeviceXRel(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_LogicalToDeviceXRel,(self,) + _args, _kwargs)
+        val = gdic.wxDC_LogicalToDeviceXRel(self, *_args, **_kwargs)
         return val
     def LogicalToDeviceY(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_LogicalToDeviceY,(self,) + _args, _kwargs)
+        val = gdic.wxDC_LogicalToDeviceY(self, *_args, **_kwargs)
         return val
     def LogicalToDeviceYRel(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_LogicalToDeviceYRel,(self,) + _args, _kwargs)
+        val = gdic.wxDC_LogicalToDeviceYRel(self, *_args, **_kwargs)
         return val
     def MaxX(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_MaxX,(self,) + _args, _kwargs)
+        val = gdic.wxDC_MaxX(self, *_args, **_kwargs)
         return val
     def MaxY(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_MaxY,(self,) + _args, _kwargs)
+        val = gdic.wxDC_MaxY(self, *_args, **_kwargs)
         return val
     def MinX(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_MinX,(self,) + _args, _kwargs)
+        val = gdic.wxDC_MinX(self, *_args, **_kwargs)
         return val
     def MinY(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_MinY,(self,) + _args, _kwargs)
+        val = gdic.wxDC_MinY(self, *_args, **_kwargs)
         return val
     def Ok(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_Ok,(self,) + _args, _kwargs)
+        val = gdic.wxDC_Ok(self, *_args, **_kwargs)
         return val
     def SetDeviceOrigin(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetDeviceOrigin,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetDeviceOrigin(self, *_args, **_kwargs)
         return val
     def SetBackground(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetBackground,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetBackground(self, *_args, **_kwargs)
         return val
     def SetBackgroundMode(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetBackgroundMode,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetBackgroundMode(self, *_args, **_kwargs)
         return val
     def SetClippingRegion(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetClippingRegion,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetClippingRegion(self, *_args, **_kwargs)
         return val
     def SetClippingRegionAsRegion(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetClippingRegionAsRegion,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetClippingRegionAsRegion(self, *_args, **_kwargs)
         return val
     def SetClippingRect(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetClippingRect,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetClippingRect(self, *_args, **_kwargs)
         return val
     def SetPalette(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetPalette,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetPalette(self, *_args, **_kwargs)
         return val
     def SetBrush(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetBrush,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetBrush(self, *_args, **_kwargs)
         return val
     def SetFont(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetFont,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetFont(self, *_args, **_kwargs)
         return val
     def SetLogicalFunction(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetLogicalFunction,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetLogicalFunction(self, *_args, **_kwargs)
         return val
     def SetLogicalScale(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetLogicalScale,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetLogicalScale(self, *_args, **_kwargs)
         return val
     def SetMapMode(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetMapMode,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetMapMode(self, *_args, **_kwargs)
         return val
     def SetOptimization(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetOptimization,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetOptimization(self, *_args, **_kwargs)
         return val
     def SetPen(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetPen,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetPen(self, *_args, **_kwargs)
         return val
     def SetTextBackground(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetTextBackground,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetTextBackground(self, *_args, **_kwargs)
         return val
     def SetTextForeground(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetTextForeground,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetTextForeground(self, *_args, **_kwargs)
         return val
     def SetUserScale(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetUserScale,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetUserScale(self, *_args, **_kwargs)
         return val
     def StartDoc(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_StartDoc,(self,) + _args, _kwargs)
+        val = gdic.wxDC_StartDoc(self, *_args, **_kwargs)
         return val
     def StartPage(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_StartPage,(self,) + _args, _kwargs)
+        val = gdic.wxDC_StartPage(self, *_args, **_kwargs)
         return val
     def DrawBitmap(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_DrawBitmap,(self,) + _args, _kwargs)
+        val = gdic.wxDC_DrawBitmap(self, *_args, **_kwargs)
         return val
     def CanDrawBitmap(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_CanDrawBitmap,(self,) + _args, _kwargs)
+        val = gdic.wxDC_CanDrawBitmap(self, *_args, **_kwargs)
         return val
     def CanGetTextExtent(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_CanGetTextExtent,(self,) + _args, _kwargs)
+        val = gdic.wxDC_CanGetTextExtent(self, *_args, **_kwargs)
         return val
     def GetDepth(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetDepth,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetDepth(self, *_args, **_kwargs)
         return val
     def GetPPI(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetPPI,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetPPI(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetLogicalOrigin(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetLogicalOrigin,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetLogicalOrigin(self, *_args, **_kwargs)
         return val
     def SetLogicalOrigin(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetLogicalOrigin,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetLogicalOrigin(self, *_args, **_kwargs)
         return val
     def GetDeviceOrigin(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetDeviceOrigin,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetDeviceOrigin(self, *_args, **_kwargs)
         return val
     def SetAxisOrientation(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_SetAxisOrientation,(self,) + _args, _kwargs)
+        val = gdic.wxDC_SetAxisOrientation(self, *_args, **_kwargs)
         return val
     def CalcBoundingBox(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_CalcBoundingBox,(self,) + _args, _kwargs)
+        val = gdic.wxDC_CalcBoundingBox(self, *_args, **_kwargs)
         return val
     def ResetBoundingBox(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_ResetBoundingBox,(self,) + _args, _kwargs)
+        val = gdic.wxDC_ResetBoundingBox(self, *_args, **_kwargs)
         return val
     def GetBoundingBox(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC_GetBoundingBox,(self,) + _args, _kwargs)
+        val = gdic.wxDC_GetBoundingBox(self, *_args, **_kwargs)
         return val
     def _DrawPointList(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC__DrawPointList,(self,) + _args, _kwargs)
+        val = gdic.wxDC__DrawPointList(self, *_args, **_kwargs)
         return val
     def _DrawLineList(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC__DrawLineList,(self,) + _args, _kwargs)
+        val = gdic.wxDC__DrawLineList(self, *_args, **_kwargs)
         return val
     def _DrawRectangleList(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC__DrawRectangleList,(self,) + _args, _kwargs)
+        val = gdic.wxDC__DrawRectangleList(self, *_args, **_kwargs)
         return val
     def _DrawEllipseList(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC__DrawEllipseList,(self,) + _args, _kwargs)
+        val = gdic.wxDC__DrawEllipseList(self, *_args, **_kwargs)
         return val
     def _DrawPolygonList(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC__DrawPolygonList,(self,) + _args, _kwargs)
+        val = gdic.wxDC__DrawPolygonList(self, *_args, **_kwargs)
         return val
     def _DrawTextList(self, *_args, **_kwargs):
-        val = apply(gdic.wxDC__DrawTextList,(self,) + _args, _kwargs)
+        val = gdic.wxDC__DrawTextList(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxDC instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDC instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.Ok()
     
     def DrawPointList(self, points, pens=None):
         if pens is None:
@@ -905,13 +912,13 @@ class wxMemoryDCPtr(wxDCPtr):
         self.this = this
         self.thisown = 0
     def SelectObject(self, *_args, **_kwargs):
-        val = apply(gdic.wxMemoryDC_SelectObject,(self,) + _args, _kwargs)
+        val = gdic.wxMemoryDC_SelectObject(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxMemoryDC instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMemoryDC instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMemoryDC(wxMemoryDCPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxMemoryDC,_args,_kwargs)
+        self.this = gdic.new_wxMemoryDC(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -922,20 +929,20 @@ class wxBufferedDCPtr(wxMemoryDCPtr):
         self.this = this
         self.thisown = 0
     def UnMask(self, *_args, **_kwargs):
-        val = apply(gdic.wxBufferedDC_UnMask,(self,) + _args, _kwargs)
+        val = gdic.wxBufferedDC_UnMask(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxBufferedDC instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxBufferedDC instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxBufferedDC(wxBufferedDCPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxBufferedDC,_args,_kwargs)
+        self.this = gdic.new_wxBufferedDC(*_args,**_kwargs)
         self.thisown = 1
         self._dc = _args[0] # save a ref so the other dc won't be deleted before self
 
 
 
 def wxBufferedDCInternalBuffer(*_args,**_kwargs):
-    val = wxBufferedDCPtr(apply(gdic.new_wxBufferedDCInternalBuffer,_args,_kwargs))
+    val = wxBufferedDCPtr(gdic.new_wxBufferedDCInternalBuffer(*_args,**_kwargs))
     val.thisown = 1
     val._dc = _args[0] # save a ref so the other dc won't be deleted before self
     return val
@@ -946,10 +953,10 @@ class wxBufferedPaintDCPtr(wxBufferedDCPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxBufferedPaintDC instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxBufferedPaintDC instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxBufferedPaintDC(wxBufferedPaintDCPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxBufferedPaintDC,_args,_kwargs)
+        self.this = gdic.new_wxBufferedPaintDC(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -960,19 +967,19 @@ class wxScreenDCPtr(wxDCPtr):
         self.this = this
         self.thisown = 0
     def StartDrawingOnTopWin(self, *_args, **_kwargs):
-        val = apply(gdic.wxScreenDC_StartDrawingOnTopWin,(self,) + _args, _kwargs)
+        val = gdic.wxScreenDC_StartDrawingOnTopWin(self, *_args, **_kwargs)
         return val
     def StartDrawingOnTop(self, *_args, **_kwargs):
-        val = apply(gdic.wxScreenDC_StartDrawingOnTop,(self,) + _args, _kwargs)
+        val = gdic.wxScreenDC_StartDrawingOnTop(self, *_args, **_kwargs)
         return val
     def EndDrawingOnTop(self, *_args, **_kwargs):
-        val = apply(gdic.wxScreenDC_EndDrawingOnTop,(self,) + _args, _kwargs)
+        val = gdic.wxScreenDC_EndDrawingOnTop(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxScreenDC instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxScreenDC instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxScreenDC(wxScreenDCPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxScreenDC,_args,_kwargs)
+        self.this = gdic.new_wxScreenDC(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -983,10 +990,10 @@ class wxClientDCPtr(wxDCPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxClientDC instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxClientDC instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxClientDC(wxClientDCPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxClientDC,_args,_kwargs)
+        self.this = gdic.new_wxClientDC(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -997,10 +1004,10 @@ class wxPaintDCPtr(wxDCPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxPaintDC instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPaintDC instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPaintDC(wxPaintDCPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxPaintDC,_args,_kwargs)
+        self.this = gdic.new_wxPaintDC(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1011,10 +1018,10 @@ class wxWindowDCPtr(wxDCPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxWindowDC instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxWindowDC instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxWindowDC(wxWindowDCPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxWindowDC,_args,_kwargs)
+        self.this = gdic.new_wxWindowDC(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1031,19 +1038,20 @@ class wxPalettePtr(wxGDIObjectPtr):
             except:
                 pass
     def GetPixel(self, *_args, **_kwargs):
-        val = apply(gdic.wxPalette_GetPixel,(self,) + _args, _kwargs)
+        val = gdic.wxPalette_GetPixel(self, *_args, **_kwargs)
         return val
     def GetRGB(self, *_args, **_kwargs):
-        val = apply(gdic.wxPalette_GetRGB,(self,) + _args, _kwargs)
+        val = gdic.wxPalette_GetRGB(self, *_args, **_kwargs)
         return val
     def Ok(self, *_args, **_kwargs):
-        val = apply(gdic.wxPalette_Ok,(self,) + _args, _kwargs)
+        val = gdic.wxPalette_Ok(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPalette instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPalette instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.Ok()
 class wxPalette(wxPalettePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxPalette,_args,_kwargs)
+        self.this = gdic.new_wxPalette(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1060,37 +1068,37 @@ class wxImageListPtr(wxObjectPtr):
             except:
                 pass
     def Add(self, *_args, **_kwargs):
-        val = apply(gdic.wxImageList_Add,(self,) + _args, _kwargs)
+        val = gdic.wxImageList_Add(self, *_args, **_kwargs)
         return val
     def AddWithColourMask(self, *_args, **_kwargs):
-        val = apply(gdic.wxImageList_AddWithColourMask,(self,) + _args, _kwargs)
+        val = gdic.wxImageList_AddWithColourMask(self, *_args, **_kwargs)
         return val
     def AddIcon(self, *_args, **_kwargs):
-        val = apply(gdic.wxImageList_AddIcon,(self,) + _args, _kwargs)
+        val = gdic.wxImageList_AddIcon(self, *_args, **_kwargs)
         return val
     def Replace(self, *_args, **_kwargs):
-        val = apply(gdic.wxImageList_Replace,(self,) + _args, _kwargs)
+        val = gdic.wxImageList_Replace(self, *_args, **_kwargs)
         return val
     def Draw(self, *_args, **_kwargs):
-        val = apply(gdic.wxImageList_Draw,(self,) + _args, _kwargs)
+        val = gdic.wxImageList_Draw(self, *_args, **_kwargs)
         return val
     def GetImageCount(self, *_args, **_kwargs):
-        val = apply(gdic.wxImageList_GetImageCount,(self,) + _args, _kwargs)
+        val = gdic.wxImageList_GetImageCount(self, *_args, **_kwargs)
         return val
     def Remove(self, *_args, **_kwargs):
-        val = apply(gdic.wxImageList_Remove,(self,) + _args, _kwargs)
+        val = gdic.wxImageList_Remove(self, *_args, **_kwargs)
         return val
     def RemoveAll(self, *_args, **_kwargs):
-        val = apply(gdic.wxImageList_RemoveAll,(self,) + _args, _kwargs)
+        val = gdic.wxImageList_RemoveAll(self, *_args, **_kwargs)
         return val
     def GetSize(self, *_args, **_kwargs):
-        val = apply(gdic.wxImageList_GetSize,(self,) + _args, _kwargs)
+        val = gdic.wxImageList_GetSize(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxImageList instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxImageList instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxImageList(wxImageListPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxImageList,_args,_kwargs)
+        self.this = gdic.new_wxImageList(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1107,77 +1115,89 @@ class wxRegionPtr(wxGDIObjectPtr):
             except:
                 pass
     def Clear(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_Clear,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_Clear(self, *_args, **_kwargs)
         return val
     def Offset(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_Offset,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_Offset(self, *_args, **_kwargs)
         return val
     def Contains(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_Contains,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_Contains(self, *_args, **_kwargs)
         return val
     def ContainsPoint(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_ContainsPoint,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_ContainsPoint(self, *_args, **_kwargs)
         return val
     def ContainsRect(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_ContainsRect,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_ContainsRect(self, *_args, **_kwargs)
         return val
     def ContainsRectDim(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_ContainsRectDim,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_ContainsRectDim(self, *_args, **_kwargs)
         return val
     def GetBox(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_GetBox,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_GetBox(self, *_args, **_kwargs)
         if val: val = wxRectPtr(val) ; val.thisown = 1
         return val
     def Intersect(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_Intersect,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_Intersect(self, *_args, **_kwargs)
         return val
     def IntersectRect(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_IntersectRect,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_IntersectRect(self, *_args, **_kwargs)
         return val
     def IntersectRegion(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_IntersectRegion,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_IntersectRegion(self, *_args, **_kwargs)
         return val
     def IsEmpty(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_IsEmpty,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_IsEmpty(self, *_args, **_kwargs)
         return val
     def Union(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_Union,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_Union(self, *_args, **_kwargs)
         return val
     def UnionRect(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_UnionRect,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_UnionRect(self, *_args, **_kwargs)
         return val
     def UnionRegion(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_UnionRegion,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_UnionRegion(self, *_args, **_kwargs)
         return val
     def Subtract(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_Subtract,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_Subtract(self, *_args, **_kwargs)
         return val
     def SubtractRect(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_SubtractRect,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_SubtractRect(self, *_args, **_kwargs)
         return val
     def SubtractRegion(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_SubtractRegion,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_SubtractRegion(self, *_args, **_kwargs)
         return val
     def Xor(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_Xor,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_Xor(self, *_args, **_kwargs)
         return val
     def XorRect(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_XorRect,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_XorRect(self, *_args, **_kwargs)
         return val
     def XorRegion(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegion_XorRegion,(self,) + _args, _kwargs)
+        val = gdic.wxRegion_XorRegion(self, *_args, **_kwargs)
+        return val
+    def ConvertToBitmap(self, *_args, **_kwargs):
+        val = gdic.wxRegion_ConvertToBitmap(self, *_args, **_kwargs)
+        if val: val = wxBitmapPtr(val) ; val.thisown = 1
+        return val
+    def UnionBitmap(self, *_args, **_kwargs):
+        val = gdic.wxRegion_UnionBitmap(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxRegion instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxRegion instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxRegion(wxRegionPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxRegion,_args,_kwargs)
+        self.this = gdic.new_wxRegion(*_args,**_kwargs)
         self.thisown = 1
 
 
 
 def wxRegionFromPoints(*_args,**_kwargs):
-    val = wxRegionPtr(apply(gdic.new_wxRegionFromPoints,_args,_kwargs))
+    val = wxRegionPtr(gdic.new_wxRegionFromPoints(*_args,**_kwargs))
+    val.thisown = 1
+    return val
+
+def wxRegionFromBitmap(*_args,**_kwargs):
+    val = wxRegionPtr(gdic.new_wxRegionFromBitmap(*_args,**_kwargs))
     val.thisown = 1
     return val
 
@@ -1193,41 +1213,41 @@ class wxRegionIteratorPtr(wxObjectPtr):
             except:
                 pass
     def GetX(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegionIterator_GetX,(self,) + _args, _kwargs)
+        val = gdic.wxRegionIterator_GetX(self, *_args, **_kwargs)
         return val
     def GetY(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegionIterator_GetY,(self,) + _args, _kwargs)
+        val = gdic.wxRegionIterator_GetY(self, *_args, **_kwargs)
         return val
     def GetW(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegionIterator_GetW,(self,) + _args, _kwargs)
+        val = gdic.wxRegionIterator_GetW(self, *_args, **_kwargs)
         return val
     def GetWidth(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegionIterator_GetWidth,(self,) + _args, _kwargs)
+        val = gdic.wxRegionIterator_GetWidth(self, *_args, **_kwargs)
         return val
     def GetH(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegionIterator_GetH,(self,) + _args, _kwargs)
+        val = gdic.wxRegionIterator_GetH(self, *_args, **_kwargs)
         return val
     def GetHeight(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegionIterator_GetHeight,(self,) + _args, _kwargs)
+        val = gdic.wxRegionIterator_GetHeight(self, *_args, **_kwargs)
         return val
     def GetRect(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegionIterator_GetRect,(self,) + _args, _kwargs)
+        val = gdic.wxRegionIterator_GetRect(self, *_args, **_kwargs)
         if val: val = wxRectPtr(val) ; val.thisown = 1
         return val
     def HaveRects(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegionIterator_HaveRects,(self,) + _args, _kwargs)
+        val = gdic.wxRegionIterator_HaveRects(self, *_args, **_kwargs)
         return val
     def Reset(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegionIterator_Reset,(self,) + _args, _kwargs)
+        val = gdic.wxRegionIterator_Reset(self, *_args, **_kwargs)
         return val
     def Next(self, *_args, **_kwargs):
-        val = apply(gdic.wxRegionIterator_Next,(self,) + _args, _kwargs)
+        val = gdic.wxRegionIterator_Next(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxRegionIterator instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxRegionIterator instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxRegionIterator(wxRegionIteratorPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gdic.new_wxRegionIterator,_args,_kwargs)
+        self.this = gdic.new_wxRegionIterator(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1238,62 +1258,67 @@ class wxRegionIterator(wxRegionIteratorPtr):
 #-------------- FUNCTION WRAPPERS ------------------
 
 def wxEmptyBitmap(*_args, **_kwargs):
-    val = apply(gdic.wxEmptyBitmap,_args,_kwargs)
+    val = gdic.wxEmptyBitmap(*_args,**_kwargs)
     if val: val = wxBitmapPtr(val); val.thisown = 1
     return val
 
 def wxBitmapFromXPMData(*_args, **_kwargs):
-    val = apply(gdic.wxBitmapFromXPMData,_args,_kwargs)
+    val = gdic.wxBitmapFromXPMData(*_args,**_kwargs)
     if val: val = wxBitmapPtr(val); val.thisown = 1
     return val
 
 def wxBitmapFromIcon(*_args, **_kwargs):
-    val = apply(gdic.wxBitmapFromIcon,_args,_kwargs)
+    val = gdic.wxBitmapFromIcon(*_args,**_kwargs)
     if val: val = wxBitmapPtr(val); val.thisown = 1
     return val
 
 def wxBitmapFromBits(*_args, **_kwargs):
-    val = apply(gdic.wxBitmapFromBits,_args,_kwargs)
+    val = gdic.wxBitmapFromBits(*_args,**_kwargs)
     if val: val = wxBitmapPtr(val); val.thisown = 1
     return val
 
 def wxMaskColour(*_args, **_kwargs):
-    val = apply(gdic.wxMaskColour,_args,_kwargs)
+    val = gdic.wxMaskColour(*_args,**_kwargs)
     if val: val = wxMaskPtr(val); val.thisown = 1
     return val
 
 def wxEmptyIcon(*_args, **_kwargs):
-    val = apply(gdic.wxEmptyIcon,_args,_kwargs)
+    val = gdic.wxEmptyIcon(*_args,**_kwargs)
     if val: val = wxIconPtr(val); val.thisown = 1
     return val
 
 def wxIconFromXPMData(*_args, **_kwargs):
-    val = apply(gdic.wxIconFromXPMData,_args,_kwargs)
+    val = gdic.wxIconFromXPMData(*_args,**_kwargs)
     if val: val = wxIconPtr(val); val.thisown = 1
     return val
 
 def wxIconFromBitmap(*_args, **_kwargs):
-    val = apply(gdic.wxIconFromBitmap,_args,_kwargs)
+    val = gdic.wxIconFromBitmap(*_args,**_kwargs)
     if val: val = wxIconPtr(val); val.thisown = 1
     return val
 
 def wxStockCursor(*_args, **_kwargs):
-    val = apply(gdic.wxStockCursor,_args,_kwargs)
+    val = gdic.wxStockCursor(*_args,**_kwargs)
     if val: val = wxCursorPtr(val); val.thisown = 1
     return val
 
 def wxCursorFromImage(*_args, **_kwargs):
-    val = apply(gdic.wxCursorFromImage,_args,_kwargs)
+    val = gdic.wxCursorFromImage(*_args,**_kwargs)
+    if val: val = wxCursorPtr(val); val.thisown = 1
+    return val
+
+def wxCursorFromBits(*_args, **_kwargs):
+    val = gdic.wxCursorFromBits(*_args,**_kwargs)
     if val: val = wxCursorPtr(val); val.thisown = 1
     return val
 
 def wxNamedColour(*_args, **_kwargs):
-    val = apply(gdic.wxNamedColour,_args,_kwargs)
+    val = gdic.wxNamedColour(*_args,**_kwargs)
     if val: val = wxColourPtr(val); val.thisown = 1
     return val
 
 def wxMemoryDCFromDC(*_args, **_kwargs):
-    val = apply(gdic.wxMemoryDCFromDC,_args,_kwargs)
+    val = gdic.wxMemoryDCFromDC(*_args,**_kwargs)
     if val: val = wxMemoryDCPtr(val); val.thisown = 1
     return val
 
diff --git a/wxPython/src/gtk/grid.cpp b/wxPython/src/gtk/grid.cpp
index e1218affd8..7579600d8a 100644
--- a/wxPython/src/gtk/grid.cpp
+++ b/wxPython/src/gtk/grid.cpp
@@ -4355,14 +4355,20 @@ static PyObject *_wrap_wxGridCellAttr_GetSize(PyObject *self, PyObject *args, Py
     PyObject * _resultobj;
     wxGridCellAttr * _arg0;
     int * _arg1;
+    int  temp;
     int * _arg2;
+    int  temp0;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    PyObject * _argo2 = 0;
-    char *_kwnames[] = { "self","num_rows","num_cols", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxGridCellAttr_GetSize",_kwnames,&_argo0,&_argo1,&_argo2)) 
+{
+  _arg1 = &temp;
+}
+{
+  _arg2 = &temp0;
+}
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxGridCellAttr_GetSize",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
@@ -4371,20 +4377,6 @@ static PyObject *_wrap_wxGridCellAttr_GetSize(PyObject *self, PyObject *args, Py
         return NULL;
         }
     }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_int_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxGridCellAttr_GetSize. Expected _int_p.");
-        return NULL;
-        }
-    }
-    if (_argo2) {
-        if (_argo2 == Py_None) { _arg2 = NULL; }
-        else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_int_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxGridCellAttr_GetSize. Expected _int_p.");
-        return NULL;
-        }
-    }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
     wxGridCellAttr_GetSize(_arg0,_arg1,_arg2);
@@ -4393,6 +4385,16 @@ static PyObject *_wrap_wxGridCellAttr_GetSize(PyObject *self, PyObject *args, Py
     if (PyErr_Occurred()) return NULL;
 }    Py_INCREF(Py_None);
     _resultobj = Py_None;
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg1));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg2));
+    _resultobj = t_output_helper(_resultobj, o);
+}
     return _resultobj;
 }
 
@@ -11341,14 +11343,20 @@ static PyObject *_wrap_wxGrid_GetDefaultCellAlignment(PyObject *self, PyObject *
     PyObject * _resultobj;
     wxGrid * _arg0;
     int * _arg1;
+    int  temp;
     int * _arg2;
+    int  temp0;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    PyObject * _argo2 = 0;
-    char *_kwnames[] = { "self","horiz","vert", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxGrid_GetDefaultCellAlignment",_kwnames,&_argo0,&_argo1,&_argo2)) 
+{
+  _arg1 = &temp;
+}
+{
+  _arg2 = &temp0;
+}
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxGrid_GetDefaultCellAlignment",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
@@ -11357,20 +11365,6 @@ static PyObject *_wrap_wxGrid_GetDefaultCellAlignment(PyObject *self, PyObject *
         return NULL;
         }
     }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_int_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxGrid_GetDefaultCellAlignment. Expected _int_p.");
-        return NULL;
-        }
-    }
-    if (_argo2) {
-        if (_argo2 == Py_None) { _arg2 = NULL; }
-        else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_int_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxGrid_GetDefaultCellAlignment. Expected _int_p.");
-        return NULL;
-        }
-    }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
     wxGrid_GetDefaultCellAlignment(_arg0,_arg1,_arg2);
@@ -11379,6 +11373,16 @@ static PyObject *_wrap_wxGrid_GetDefaultCellAlignment(PyObject *self, PyObject *
     if (PyErr_Occurred()) return NULL;
 }    Py_INCREF(Py_None);
     _resultobj = Py_None;
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg1));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg2));
+    _resultobj = t_output_helper(_resultobj, o);
+}
     return _resultobj;
 }
 
@@ -11389,14 +11393,20 @@ static PyObject *_wrap_wxGrid_GetCellAlignment(PyObject *self, PyObject *args, P
     int  _arg1;
     int  _arg2;
     int * _arg3;
+    int  temp;
     int * _arg4;
+    int  temp0;
     PyObject * _argo0 = 0;
-    PyObject * _argo3 = 0;
-    PyObject * _argo4 = 0;
-    char *_kwnames[] = { "self","row","col","horiz","vert", NULL };
+    char *_kwnames[] = { "self","row","col", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiiOO:wxGrid_GetCellAlignment",_kwnames,&_argo0,&_arg1,&_arg2,&_argo3,&_argo4)) 
+{
+  _arg3 = &temp;
+}
+{
+  _arg4 = &temp0;
+}
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oii:wxGrid_GetCellAlignment",_kwnames,&_argo0,&_arg1,&_arg2)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
@@ -11405,20 +11415,6 @@ static PyObject *_wrap_wxGrid_GetCellAlignment(PyObject *self, PyObject *args, P
         return NULL;
         }
     }
-    if (_argo3) {
-        if (_argo3 == Py_None) { _arg3 = NULL; }
-        else if (SWIG_GetPtrObj(_argo3,(void **) &_arg3,"_int_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 4 of wxGrid_GetCellAlignment. Expected _int_p.");
-        return NULL;
-        }
-    }
-    if (_argo4) {
-        if (_argo4 == Py_None) { _arg4 = NULL; }
-        else if (SWIG_GetPtrObj(_argo4,(void **) &_arg4,"_int_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 5 of wxGrid_GetCellAlignment. Expected _int_p.");
-        return NULL;
-        }
-    }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
     wxGrid_GetCellAlignment(_arg0,_arg1,_arg2,_arg3,_arg4);
@@ -11427,6 +11423,16 @@ static PyObject *_wrap_wxGrid_GetCellAlignment(PyObject *self, PyObject *args, P
     if (PyErr_Occurred()) return NULL;
 }    Py_INCREF(Py_None);
     _resultobj = Py_None;
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg3));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg4));
+    _resultobj = t_output_helper(_resultobj, o);
+}
     return _resultobj;
 }
 
@@ -11934,6 +11940,120 @@ static PyObject *_wrap_wxGrid_SetRowMinimalHeight(PyObject *self, PyObject *args
     return _resultobj;
 }
 
+#define wxGrid_SetColMinimalAcceptableWidth(_swigobj,_swigarg0)  (_swigobj->SetColMinimalAcceptableWidth(_swigarg0))
+static PyObject *_wrap_wxGrid_SetColMinimalAcceptableWidth(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxGrid * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","width", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxGrid_SetColMinimalAcceptableWidth",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxGrid_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxGrid_SetColMinimalAcceptableWidth. Expected _wxGrid_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxGrid_SetColMinimalAcceptableWidth(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxGrid_SetRowMinimalAcceptableHeight(_swigobj,_swigarg0)  (_swigobj->SetRowMinimalAcceptableHeight(_swigarg0))
+static PyObject *_wrap_wxGrid_SetRowMinimalAcceptableHeight(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxGrid * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","width", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxGrid_SetRowMinimalAcceptableHeight",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxGrid_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxGrid_SetRowMinimalAcceptableHeight. Expected _wxGrid_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxGrid_SetRowMinimalAcceptableHeight(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxGrid_GetColMinimalAcceptableWidth(_swigobj)  (_swigobj->GetColMinimalAcceptableWidth())
+static PyObject *_wrap_wxGrid_GetColMinimalAcceptableWidth(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    wxGrid * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxGrid_GetColMinimalAcceptableWidth",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxGrid_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxGrid_GetColMinimalAcceptableWidth. Expected _wxGrid_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxGrid_GetColMinimalAcceptableWidth(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxGrid_GetRowMinimalAcceptableHeight(_swigobj)  (_swigobj->GetRowMinimalAcceptableHeight())
+static PyObject *_wrap_wxGrid_GetRowMinimalAcceptableHeight(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    wxGrid * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxGrid_GetRowMinimalAcceptableHeight",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxGrid_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxGrid_GetRowMinimalAcceptableHeight. Expected _wxGrid_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxGrid_GetRowMinimalAcceptableHeight(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
 #define wxGrid_SetDefaultCellBackgroundColour(_swigobj,_swigarg0)  (_swigobj->SetDefaultCellBackgroundColour(_swigarg0))
 static PyObject *_wrap_wxGrid_SetDefaultCellBackgroundColour(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -15034,6 +15154,10 @@ static PyMethodDef gridcMethods[] = {
 	 { "wxGrid_SetDefaultCellTextColour", (PyCFunction) _wrap_wxGrid_SetDefaultCellTextColour, METH_VARARGS | METH_KEYWORDS },
 	 { "wxGrid_SetCellBackgroundColour", (PyCFunction) _wrap_wxGrid_SetCellBackgroundColour, METH_VARARGS | METH_KEYWORDS },
 	 { "wxGrid_SetDefaultCellBackgroundColour", (PyCFunction) _wrap_wxGrid_SetDefaultCellBackgroundColour, METH_VARARGS | METH_KEYWORDS },
+	 { "wxGrid_GetRowMinimalAcceptableHeight", (PyCFunction) _wrap_wxGrid_GetRowMinimalAcceptableHeight, METH_VARARGS | METH_KEYWORDS },
+	 { "wxGrid_GetColMinimalAcceptableWidth", (PyCFunction) _wrap_wxGrid_GetColMinimalAcceptableWidth, METH_VARARGS | METH_KEYWORDS },
+	 { "wxGrid_SetRowMinimalAcceptableHeight", (PyCFunction) _wrap_wxGrid_SetRowMinimalAcceptableHeight, METH_VARARGS | METH_KEYWORDS },
+	 { "wxGrid_SetColMinimalAcceptableWidth", (PyCFunction) _wrap_wxGrid_SetColMinimalAcceptableWidth, METH_VARARGS | METH_KEYWORDS },
 	 { "wxGrid_SetRowMinimalHeight", (PyCFunction) _wrap_wxGrid_SetRowMinimalHeight, METH_VARARGS | METH_KEYWORDS },
 	 { "wxGrid_SetColMinimalWidth", (PyCFunction) _wrap_wxGrid_SetColMinimalWidth, METH_VARARGS | METH_KEYWORDS },
 	 { "wxGrid_AutoSizeColLabelSize", (PyCFunction) _wrap_wxGrid_AutoSizeColLabelSize, METH_VARARGS | METH_KEYWORDS },
diff --git a/wxPython/src/gtk/grid.py b/wxPython/src/gtk/grid.py
index 258b2736ec..f8c13b6eab 100644
--- a/wxPython/src/gtk/grid.py
+++ b/wxPython/src/gtk/grid.py
@@ -70,29 +70,29 @@ class wxGridCellRendererPtr :
         self.this = this
         self.thisown = 0
     def _setOORInfo(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellRenderer__setOORInfo,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellRenderer__setOORInfo(self, *_args, **_kwargs)
         return val
     def SetParameters(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellRenderer_SetParameters,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellRenderer_SetParameters(self, *_args, **_kwargs)
         return val
     def IncRef(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellRenderer_IncRef,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellRenderer_IncRef(self, *_args, **_kwargs)
         return val
     def DecRef(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellRenderer_DecRef,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellRenderer_DecRef(self, *_args, **_kwargs)
         return val
     def Draw(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellRenderer_Draw,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellRenderer_Draw(self, *_args, **_kwargs)
         return val
     def GetBestSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellRenderer_GetBestSize,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellRenderer_GetBestSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def Clone(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellRenderer_Clone,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellRenderer_Clone(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridCellRenderer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellRenderer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellRenderer(wxGridCellRendererPtr):
     def __init__(self,this):
         self.this = this
@@ -105,16 +105,16 @@ class wxPyGridCellRendererPtr(wxGridCellRendererPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellRenderer__setCallbackInfo,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellRenderer__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def base_SetParameters(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellRenderer_base_SetParameters,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellRenderer_base_SetParameters(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyGridCellRenderer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyGridCellRenderer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyGridCellRenderer(wxPyGridCellRendererPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxPyGridCellRenderer,_args,_kwargs)
+        self.this = gridc.new_wxPyGridCellRenderer(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyGridCellRenderer)
         self._setOORInfo(self)
@@ -127,10 +127,10 @@ class wxGridCellStringRendererPtr(wxGridCellRendererPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxGridCellStringRenderer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellStringRenderer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellStringRenderer(wxGridCellStringRendererPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellStringRenderer,_args,_kwargs)
+        self.this = gridc.new_wxGridCellStringRenderer(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -142,10 +142,10 @@ class wxGridCellNumberRendererPtr(wxGridCellStringRendererPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxGridCellNumberRenderer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellNumberRenderer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellNumberRenderer(wxGridCellNumberRendererPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellNumberRenderer,_args,_kwargs)
+        self.this = gridc.new_wxGridCellNumberRenderer(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -157,22 +157,22 @@ class wxGridCellFloatRendererPtr(wxGridCellStringRendererPtr):
         self.this = this
         self.thisown = 0
     def GetWidth(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellFloatRenderer_GetWidth,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellFloatRenderer_GetWidth(self, *_args, **_kwargs)
         return val
     def SetWidth(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellFloatRenderer_SetWidth,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellFloatRenderer_SetWidth(self, *_args, **_kwargs)
         return val
     def GetPrecision(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellFloatRenderer_GetPrecision,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellFloatRenderer_GetPrecision(self, *_args, **_kwargs)
         return val
     def SetPrecision(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellFloatRenderer_SetPrecision,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellFloatRenderer_SetPrecision(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridCellFloatRenderer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellFloatRenderer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellFloatRenderer(wxGridCellFloatRendererPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellFloatRenderer,_args,_kwargs)
+        self.this = gridc.new_wxGridCellFloatRenderer(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -184,10 +184,10 @@ class wxGridCellBoolRendererPtr(wxGridCellRendererPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxGridCellBoolRenderer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellBoolRenderer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellBoolRenderer(wxGridCellBoolRendererPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellBoolRenderer,_args,_kwargs)
+        self.this = gridc.new_wxGridCellBoolRenderer(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -199,10 +199,10 @@ class wxGridCellDateTimeRendererPtr(wxGridCellStringRendererPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxGridCellDateTimeRenderer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellDateTimeRenderer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellDateTimeRenderer(wxGridCellDateTimeRendererPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellDateTimeRenderer,_args,_kwargs)
+        self.this = gridc.new_wxGridCellDateTimeRenderer(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -214,10 +214,10 @@ class wxGridCellEnumRendererPtr(wxGridCellStringRendererPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxGridCellEnumRenderer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellEnumRenderer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellEnumRenderer(wxGridCellEnumRendererPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellEnumRenderer,_args,_kwargs)
+        self.this = gridc.new_wxGridCellEnumRenderer(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -229,10 +229,10 @@ class wxGridCellAutoWrapStringRendererPtr(wxGridCellStringRendererPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxGridCellAutoWrapStringRenderer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellAutoWrapStringRenderer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellAutoWrapStringRenderer(wxGridCellAutoWrapStringRendererPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellAutoWrapStringRenderer,_args,_kwargs)
+        self.this = gridc.new_wxGridCellAutoWrapStringRenderer(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -244,73 +244,73 @@ class wxGridCellEditorPtr :
         self.this = this
         self.thisown = 0
     def _setOORInfo(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor__setOORInfo,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor__setOORInfo(self, *_args, **_kwargs)
         return val
     def IsCreated(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_IsCreated,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_IsCreated(self, *_args, **_kwargs)
         return val
     def GetControl(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_GetControl,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_GetControl(self, *_args, **_kwargs)
         return val
     def SetControl(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_SetControl,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_SetControl(self, *_args, **_kwargs)
         return val
     def GetCellAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_GetCellAttr,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_GetCellAttr(self, *_args, **_kwargs)
         return val
     def SetCellAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_SetCellAttr,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_SetCellAttr(self, *_args, **_kwargs)
         return val
     def SetParameters(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_SetParameters,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_SetParameters(self, *_args, **_kwargs)
         return val
     def IncRef(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_IncRef,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_IncRef(self, *_args, **_kwargs)
         return val
     def DecRef(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_DecRef,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_DecRef(self, *_args, **_kwargs)
         return val
     def Create(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_Create,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_Create(self, *_args, **_kwargs)
         return val
     def BeginEdit(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_BeginEdit,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_BeginEdit(self, *_args, **_kwargs)
         return val
     def EndEdit(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_EndEdit,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_EndEdit(self, *_args, **_kwargs)
         return val
     def Reset(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_Reset,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_Reset(self, *_args, **_kwargs)
         return val
     def Clone(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_Clone,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_Clone(self, *_args, **_kwargs)
         return val
     def SetSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_SetSize,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_SetSize(self, *_args, **_kwargs)
         return val
     def Show(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_Show,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_Show(self, *_args, **_kwargs)
         return val
     def PaintBackground(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_PaintBackground,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_PaintBackground(self, *_args, **_kwargs)
         return val
     def IsAcceptedKey(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_IsAcceptedKey,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_IsAcceptedKey(self, *_args, **_kwargs)
         return val
     def StartingKey(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_StartingKey,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_StartingKey(self, *_args, **_kwargs)
         return val
     def StartingClick(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_StartingClick,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_StartingClick(self, *_args, **_kwargs)
         return val
     def HandleReturn(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_HandleReturn,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_HandleReturn(self, *_args, **_kwargs)
         return val
     def Destroy(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEditor_Destroy,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEditor_Destroy(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridCellEditor instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellEditor instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellEditor(wxGridCellEditorPtr):
     def __init__(self,this):
         self.this = this
@@ -323,40 +323,40 @@ class wxPyGridCellEditorPtr(wxGridCellEditorPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellEditor__setCallbackInfo,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellEditor__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def base_SetSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellEditor_base_SetSize,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellEditor_base_SetSize(self, *_args, **_kwargs)
         return val
     def base_Show(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellEditor_base_Show,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellEditor_base_Show(self, *_args, **_kwargs)
         return val
     def base_PaintBackground(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellEditor_base_PaintBackground,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellEditor_base_PaintBackground(self, *_args, **_kwargs)
         return val
     def base_IsAcceptedKey(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellEditor_base_IsAcceptedKey,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellEditor_base_IsAcceptedKey(self, *_args, **_kwargs)
         return val
     def base_StartingKey(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellEditor_base_StartingKey,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellEditor_base_StartingKey(self, *_args, **_kwargs)
         return val
     def base_StartingClick(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellEditor_base_StartingClick,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellEditor_base_StartingClick(self, *_args, **_kwargs)
         return val
     def base_HandleReturn(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellEditor_base_HandleReturn,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellEditor_base_HandleReturn(self, *_args, **_kwargs)
         return val
     def base_Destroy(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellEditor_base_Destroy,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellEditor_base_Destroy(self, *_args, **_kwargs)
         return val
     def base_SetParameters(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellEditor_base_SetParameters,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellEditor_base_SetParameters(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyGridCellEditor instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyGridCellEditor instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyGridCellEditor(wxPyGridCellEditorPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxPyGridCellEditor,_args,_kwargs)
+        self.this = gridc.new_wxPyGridCellEditor(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyGridCellEditor)
         self._setOORInfo(self)
@@ -369,13 +369,13 @@ class wxGridCellTextEditorPtr(wxGridCellEditorPtr):
         self.this = this
         self.thisown = 0
     def GetValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellTextEditor_GetValue,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellTextEditor_GetValue(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridCellTextEditor instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellTextEditor instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellTextEditor(wxGridCellTextEditorPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellTextEditor,_args,_kwargs)
+        self.this = gridc.new_wxGridCellTextEditor(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -387,13 +387,13 @@ class wxGridCellNumberEditorPtr(wxGridCellTextEditorPtr):
         self.this = this
         self.thisown = 0
     def GetValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellNumberEditor_GetValue,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellNumberEditor_GetValue(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridCellNumberEditor instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellNumberEditor instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellNumberEditor(wxGridCellNumberEditorPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellNumberEditor,_args,_kwargs)
+        self.this = gridc.new_wxGridCellNumberEditor(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -405,13 +405,13 @@ class wxGridCellFloatEditorPtr(wxGridCellTextEditorPtr):
         self.this = this
         self.thisown = 0
     def GetValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellFloatEditor_GetValue,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellFloatEditor_GetValue(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridCellFloatEditor instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellFloatEditor instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellFloatEditor(wxGridCellFloatEditorPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellFloatEditor,_args,_kwargs)
+        self.this = gridc.new_wxGridCellFloatEditor(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -423,13 +423,13 @@ class wxGridCellBoolEditorPtr(wxGridCellEditorPtr):
         self.this = this
         self.thisown = 0
     def GetValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellBoolEditor_GetValue,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellBoolEditor_GetValue(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridCellBoolEditor instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellBoolEditor instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellBoolEditor(wxGridCellBoolEditorPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellBoolEditor,_args,_kwargs)
+        self.this = gridc.new_wxGridCellBoolEditor(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -441,13 +441,13 @@ class wxGridCellChoiceEditorPtr(wxGridCellEditorPtr):
         self.this = this
         self.thisown = 0
     def GetValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellChoiceEditor_GetValue,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellChoiceEditor_GetValue(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridCellChoiceEditor instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellChoiceEditor instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellChoiceEditor(wxGridCellChoiceEditorPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellChoiceEditor,_args,_kwargs)
+        self.this = gridc.new_wxGridCellChoiceEditor(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -459,13 +459,13 @@ class wxGridCellEnumEditorPtr(wxGridCellChoiceEditorPtr):
         self.this = this
         self.thisown = 0
     def GetValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellEnumEditor_GetValue,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellEnumEditor_GetValue(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridCellEnumEditor instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellEnumEditor instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellEnumEditor(wxGridCellEnumEditorPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellEnumEditor,_args,_kwargs)
+        self.this = gridc.new_wxGridCellEnumEditor(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -477,13 +477,13 @@ class wxGridCellAutoWrapStringEditorPtr(wxGridCellTextEditorPtr):
         self.this = this
         self.thisown = 0
     def GetValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAutoWrapStringEditor_GetValue,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAutoWrapStringEditor_GetValue(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridCellAutoWrapStringEditor instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellAutoWrapStringEditor instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellAutoWrapStringEditor(wxGridCellAutoWrapStringEditorPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellAutoWrapStringEditor,_args,_kwargs)
+        self.this = gridc.new_wxGridCellAutoWrapStringEditor(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -501,109 +501,109 @@ class wxGridCellAttrPtr :
         self.this = this
         self.thisown = 0
     def _setOORInfo(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr__setOORInfo,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr__setOORInfo(self, *_args, **_kwargs)
         return val
     def Clone(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_Clone,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_Clone(self, *_args, **_kwargs)
         return val
     def MergeWith(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_MergeWith,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_MergeWith(self, *_args, **_kwargs)
         return val
     def IncRef(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_IncRef,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_IncRef(self, *_args, **_kwargs)
         return val
     def DecRef(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_DecRef,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_DecRef(self, *_args, **_kwargs)
         return val
     def SetTextColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_SetTextColour,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_SetTextColour(self, *_args, **_kwargs)
         return val
     def SetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_SetBackgroundColour,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_SetBackgroundColour(self, *_args, **_kwargs)
         return val
     def SetFont(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_SetFont,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_SetFont(self, *_args, **_kwargs)
         return val
     def SetAlignment(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_SetAlignment,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_SetAlignment(self, *_args, **_kwargs)
         return val
     def SetSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_SetSize,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_SetSize(self, *_args, **_kwargs)
         return val
     def SetOverflow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_SetOverflow,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_SetOverflow(self, *_args, **_kwargs)
         return val
     def SetReadOnly(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_SetReadOnly,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_SetReadOnly(self, *_args, **_kwargs)
         return val
     def SetRenderer(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_SetRenderer,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_SetRenderer(self, *_args, **_kwargs)
         return val
     def SetEditor(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_SetEditor,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_SetEditor(self, *_args, **_kwargs)
         return val
     def SetKind(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_SetKind,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_SetKind(self, *_args, **_kwargs)
         return val
     def HasTextColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_HasTextColour,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_HasTextColour(self, *_args, **_kwargs)
         return val
     def HasBackgroundColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_HasBackgroundColour,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_HasBackgroundColour(self, *_args, **_kwargs)
         return val
     def HasFont(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_HasFont,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_HasFont(self, *_args, **_kwargs)
         return val
     def HasAlignment(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_HasAlignment,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_HasAlignment(self, *_args, **_kwargs)
         return val
     def HasRenderer(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_HasRenderer,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_HasRenderer(self, *_args, **_kwargs)
         return val
     def HasEditor(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_HasEditor,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_HasEditor(self, *_args, **_kwargs)
         return val
     def HasReadWriteMode(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_HasReadWriteMode,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_HasReadWriteMode(self, *_args, **_kwargs)
         return val
     def GetTextColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_GetTextColour,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_GetTextColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_GetBackgroundColour,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_GetBackgroundColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetFont(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_GetFont,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_GetFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def GetAlignment(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_GetAlignment,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_GetAlignment(self, *_args, **_kwargs)
         return val
     def GetSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_GetSize,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_GetSize(self, *_args, **_kwargs)
         return val
     def GetOverflow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_GetOverflow,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_GetOverflow(self, *_args, **_kwargs)
         return val
     def GetRenderer(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_GetRenderer,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_GetRenderer(self, *_args, **_kwargs)
         return val
     def GetEditor(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_GetEditor,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_GetEditor(self, *_args, **_kwargs)
         return val
     def IsReadOnly(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_IsReadOnly,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_IsReadOnly(self, *_args, **_kwargs)
         return val
     def SetDefAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttr_SetDefAttr,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttr_SetDefAttr(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridCellAttr instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellAttr instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellAttr(wxGridCellAttrPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellAttr,_args,_kwargs)
+        self.this = gridc.new_wxGridCellAttr(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -615,31 +615,31 @@ class wxGridCellAttrProviderPtr :
         self.this = this
         self.thisown = 0
     def _setOORInfo(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttrProvider__setOORInfo,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttrProvider__setOORInfo(self, *_args, **_kwargs)
         return val
     def GetAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttrProvider_GetAttr,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttrProvider_GetAttr(self, *_args, **_kwargs)
         return val
     def SetAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttrProvider_SetAttr,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttrProvider_SetAttr(self, *_args, **_kwargs)
         return val
     def SetRowAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttrProvider_SetRowAttr,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttrProvider_SetRowAttr(self, *_args, **_kwargs)
         return val
     def SetColAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttrProvider_SetColAttr,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttrProvider_SetColAttr(self, *_args, **_kwargs)
         return val
     def UpdateAttrRows(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttrProvider_UpdateAttrRows,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttrProvider_UpdateAttrRows(self, *_args, **_kwargs)
         return val
     def UpdateAttrCols(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellAttrProvider_UpdateAttrCols,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellAttrProvider_UpdateAttrCols(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridCellAttrProvider instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellAttrProvider instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridCellAttrProvider(wxGridCellAttrProviderPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellAttrProvider,_args,_kwargs)
+        self.this = gridc.new_wxGridCellAttrProvider(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -651,25 +651,25 @@ class wxPyGridCellAttrProviderPtr(wxGridCellAttrProviderPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellAttrProvider__setCallbackInfo,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellAttrProvider__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def base_GetAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellAttrProvider_base_GetAttr,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellAttrProvider_base_GetAttr(self, *_args, **_kwargs)
         return val
     def base_SetAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellAttrProvider_base_SetAttr,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellAttrProvider_base_SetAttr(self, *_args, **_kwargs)
         return val
     def base_SetRowAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellAttrProvider_base_SetRowAttr,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellAttrProvider_base_SetRowAttr(self, *_args, **_kwargs)
         return val
     def base_SetColAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridCellAttrProvider_base_SetColAttr,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridCellAttrProvider_base_SetColAttr(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyGridCellAttrProvider instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyGridCellAttrProvider instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyGridCellAttrProvider(wxPyGridCellAttrProviderPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxPyGridCellAttrProvider,_args,_kwargs)
+        self.this = gridc.new_wxPyGridCellAttrProvider(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyGridCellAttrProvider)
 
@@ -681,112 +681,112 @@ class wxGridTableBasePtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def _setOORInfo(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase__setOORInfo,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase__setOORInfo(self, *_args, **_kwargs)
         return val
     def SetAttrProvider(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_SetAttrProvider,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_SetAttrProvider(self, *_args, **_kwargs)
         return val
     def GetAttrProvider(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_GetAttrProvider,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_GetAttrProvider(self, *_args, **_kwargs)
         return val
     def SetView(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_SetView,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_SetView(self, *_args, **_kwargs)
         return val
     def GetView(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_GetView,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_GetView(self, *_args, **_kwargs)
         return val
     def GetNumberRows(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_GetNumberRows,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_GetNumberRows(self, *_args, **_kwargs)
         return val
     def GetNumberCols(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_GetNumberCols,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_GetNumberCols(self, *_args, **_kwargs)
         return val
     def IsEmptyCell(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_IsEmptyCell,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_IsEmptyCell(self, *_args, **_kwargs)
         return val
     def GetValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_GetValue,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_GetValue(self, *_args, **_kwargs)
         return val
     def SetValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_SetValue,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_SetValue(self, *_args, **_kwargs)
         return val
     def GetTypeName(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_GetTypeName,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_GetTypeName(self, *_args, **_kwargs)
         return val
     def CanGetValueAs(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_CanGetValueAs,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_CanGetValueAs(self, *_args, **_kwargs)
         return val
     def CanSetValueAs(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_CanSetValueAs,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_CanSetValueAs(self, *_args, **_kwargs)
         return val
     def GetValueAsLong(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_GetValueAsLong,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_GetValueAsLong(self, *_args, **_kwargs)
         return val
     def GetValueAsDouble(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_GetValueAsDouble,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_GetValueAsDouble(self, *_args, **_kwargs)
         return val
     def GetValueAsBool(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_GetValueAsBool,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_GetValueAsBool(self, *_args, **_kwargs)
         return val
     def SetValueAsLong(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_SetValueAsLong,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_SetValueAsLong(self, *_args, **_kwargs)
         return val
     def SetValueAsDouble(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_SetValueAsDouble,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_SetValueAsDouble(self, *_args, **_kwargs)
         return val
     def SetValueAsBool(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_SetValueAsBool,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_SetValueAsBool(self, *_args, **_kwargs)
         return val
     def Clear(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_Clear,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_Clear(self, *_args, **_kwargs)
         return val
     def InsertRows(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_InsertRows,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_InsertRows(self, *_args, **_kwargs)
         return val
     def AppendRows(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_AppendRows,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_AppendRows(self, *_args, **_kwargs)
         return val
     def DeleteRows(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_DeleteRows,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_DeleteRows(self, *_args, **_kwargs)
         return val
     def InsertCols(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_InsertCols,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_InsertCols(self, *_args, **_kwargs)
         return val
     def AppendCols(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_AppendCols,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_AppendCols(self, *_args, **_kwargs)
         return val
     def DeleteCols(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_DeleteCols,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_DeleteCols(self, *_args, **_kwargs)
         return val
     def GetRowLabelValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_GetRowLabelValue,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_GetRowLabelValue(self, *_args, **_kwargs)
         return val
     def GetColLabelValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_GetColLabelValue,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_GetColLabelValue(self, *_args, **_kwargs)
         return val
     def SetRowLabelValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_SetRowLabelValue,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_SetRowLabelValue(self, *_args, **_kwargs)
         return val
     def SetColLabelValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_SetColLabelValue,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_SetColLabelValue(self, *_args, **_kwargs)
         return val
     def CanHaveAttributes(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_CanHaveAttributes,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_CanHaveAttributes(self, *_args, **_kwargs)
         return val
     def GetAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_GetAttr,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_GetAttr(self, *_args, **_kwargs)
         return val
     def SetAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_SetAttr,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_SetAttr(self, *_args, **_kwargs)
         return val
     def SetRowAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_SetRowAttr,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_SetRowAttr(self, *_args, **_kwargs)
         return val
     def SetColAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableBase_SetColAttr,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableBase_SetColAttr(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridTableBase instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridTableBase instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridTableBase(wxGridTableBasePtr):
     def __init__(self,this):
         self.this = this
@@ -799,73 +799,73 @@ class wxPyGridTableBasePtr(wxGridTableBasePtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase__setCallbackInfo,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def Destroy(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_Destroy,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_Destroy(self, *_args, **_kwargs)
         return val
     def base_GetTypeName(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_GetTypeName,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_GetTypeName(self, *_args, **_kwargs)
         return val
     def base_CanGetValueAs(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_CanGetValueAs,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_CanGetValueAs(self, *_args, **_kwargs)
         return val
     def base_CanSetValueAs(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_CanSetValueAs,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_CanSetValueAs(self, *_args, **_kwargs)
         return val
     def base_Clear(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_Clear,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_Clear(self, *_args, **_kwargs)
         return val
     def base_InsertRows(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_InsertRows,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_InsertRows(self, *_args, **_kwargs)
         return val
     def base_AppendRows(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_AppendRows,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_AppendRows(self, *_args, **_kwargs)
         return val
     def base_DeleteRows(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_DeleteRows,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_DeleteRows(self, *_args, **_kwargs)
         return val
     def base_InsertCols(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_InsertCols,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_InsertCols(self, *_args, **_kwargs)
         return val
     def base_AppendCols(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_AppendCols,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_AppendCols(self, *_args, **_kwargs)
         return val
     def base_DeleteCols(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_DeleteCols,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_DeleteCols(self, *_args, **_kwargs)
         return val
     def base_GetRowLabelValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_GetRowLabelValue,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_GetRowLabelValue(self, *_args, **_kwargs)
         return val
     def base_GetColLabelValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_GetColLabelValue,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_GetColLabelValue(self, *_args, **_kwargs)
         return val
     def base_SetRowLabelValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_SetRowLabelValue,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_SetRowLabelValue(self, *_args, **_kwargs)
         return val
     def base_SetColLabelValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_SetColLabelValue,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_SetColLabelValue(self, *_args, **_kwargs)
         return val
     def base_CanHaveAttributes(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_CanHaveAttributes,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_CanHaveAttributes(self, *_args, **_kwargs)
         return val
     def base_GetAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_GetAttr,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_GetAttr(self, *_args, **_kwargs)
         return val
     def base_SetAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_SetAttr,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_SetAttr(self, *_args, **_kwargs)
         return val
     def base_SetRowAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_SetRowAttr,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_SetRowAttr(self, *_args, **_kwargs)
         return val
     def base_SetColAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxPyGridTableBase_base_SetColAttr,(self,) + _args, _kwargs)
+        val = gridc.wxPyGridTableBase_base_SetColAttr(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyGridTableBase instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyGridTableBase instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyGridTableBase(wxPyGridTableBasePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxPyGridTableBase,_args,_kwargs)
+        self.this = gridc.new_wxPyGridTableBase(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyGridTableBase)
         self._setOORInfo(self)
@@ -878,10 +878,10 @@ class wxGridStringTablePtr(wxGridTableBasePtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxGridStringTable instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridStringTable instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridStringTable(wxGridStringTablePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridStringTable,_args,_kwargs)
+        self.this = gridc.new_wxGridStringTable(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -899,34 +899,34 @@ class wxGridTableMessagePtr :
             except:
                 pass
     def SetTableObject(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableMessage_SetTableObject,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableMessage_SetTableObject(self, *_args, **_kwargs)
         return val
     def GetTableObject(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableMessage_GetTableObject,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableMessage_GetTableObject(self, *_args, **_kwargs)
         return val
     def SetId(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableMessage_SetId,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableMessage_SetId(self, *_args, **_kwargs)
         return val
     def GetId(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableMessage_GetId,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableMessage_GetId(self, *_args, **_kwargs)
         return val
     def SetCommandInt(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableMessage_SetCommandInt,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableMessage_SetCommandInt(self, *_args, **_kwargs)
         return val
     def GetCommandInt(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableMessage_GetCommandInt,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableMessage_GetCommandInt(self, *_args, **_kwargs)
         return val
     def SetCommandInt2(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableMessage_SetCommandInt2,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableMessage_SetCommandInt2(self, *_args, **_kwargs)
         return val
     def GetCommandInt2(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridTableMessage_GetCommandInt2,(self,) + _args, _kwargs)
+        val = gridc.wxGridTableMessage_GetCommandInt2(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridTableMessage instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridTableMessage instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridTableMessage(wxGridTableMessagePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridTableMessage,_args,_kwargs)
+        self.this = gridc.new_wxGridTableMessage(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -943,28 +943,28 @@ class wxGridCellCoordsPtr :
             except:
                 pass
     def GetRow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellCoords_GetRow,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellCoords_GetRow(self, *_args, **_kwargs)
         return val
     def SetRow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellCoords_SetRow,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellCoords_SetRow(self, *_args, **_kwargs)
         return val
     def GetCol(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellCoords_GetCol,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellCoords_GetCol(self, *_args, **_kwargs)
         return val
     def SetCol(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellCoords_SetCol,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellCoords_SetCol(self, *_args, **_kwargs)
         return val
     def Set(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellCoords_Set,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellCoords_Set(self, *_args, **_kwargs)
         return val
     def asTuple(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellCoords_asTuple,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellCoords_asTuple(self, *_args, **_kwargs)
         return val
     def __cmp__(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridCellCoords___cmp__,(self,) + _args, _kwargs)
+        val = gridc.wxGridCellCoords___cmp__(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridCellCoords instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridCellCoords instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     def __str__(self):                   return str(self.asTuple())
     def __repr__(self):                  return 'wxGridCellCoords'+str(self.asTuple())
@@ -977,7 +977,7 @@ class wxGridCellCoordsPtr :
     
 class wxGridCellCoords(wxGridCellCoordsPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridCellCoords,_args,_kwargs)
+        self.this = gridc.new_wxGridCellCoords(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -991,578 +991,590 @@ class wxGridPtr(wxScrolledWindowPtr):
         self.this = this
         self.thisown = 0
     def CreateGrid(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_CreateGrid,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_CreateGrid(self, *_args, **_kwargs)
         return val
     def SetSelectionMode(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetSelectionMode,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetSelectionMode(self, *_args, **_kwargs)
         return val
     def GetSelectionMode(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetSelectionMode,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetSelectionMode(self, *_args, **_kwargs)
         return val
     def GetNumberRows(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetNumberRows,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetNumberRows(self, *_args, **_kwargs)
         return val
     def GetNumberCols(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetNumberCols,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetNumberCols(self, *_args, **_kwargs)
         return val
     def ProcessTableMessage(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_ProcessTableMessage,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_ProcessTableMessage(self, *_args, **_kwargs)
         return val
     def GetTable(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetTable,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetTable(self, *_args, **_kwargs)
         return val
     def SetTable(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetTable,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetTable(self, *_args, **_kwargs)
         return val
     def ClearGrid(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_ClearGrid,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_ClearGrid(self, *_args, **_kwargs)
         return val
     def InsertRows(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_InsertRows,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_InsertRows(self, *_args, **_kwargs)
         return val
     def AppendRows(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_AppendRows,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_AppendRows(self, *_args, **_kwargs)
         return val
     def DeleteRows(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_DeleteRows,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_DeleteRows(self, *_args, **_kwargs)
         return val
     def InsertCols(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_InsertCols,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_InsertCols(self, *_args, **_kwargs)
         return val
     def AppendCols(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_AppendCols,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_AppendCols(self, *_args, **_kwargs)
         return val
     def DeleteCols(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_DeleteCols,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_DeleteCols(self, *_args, **_kwargs)
         return val
     def DrawCellHighlight(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_DrawCellHighlight,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_DrawCellHighlight(self, *_args, **_kwargs)
         return val
     def DrawTextRectangle(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_DrawTextRectangle,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_DrawTextRectangle(self, *_args, **_kwargs)
         return val
     def GetTextBoxSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetTextBoxSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetTextBoxSize(self, *_args, **_kwargs)
         return val
     def BeginBatch(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_BeginBatch,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_BeginBatch(self, *_args, **_kwargs)
         return val
     def EndBatch(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_EndBatch,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_EndBatch(self, *_args, **_kwargs)
         return val
     def GetBatchCount(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetBatchCount,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetBatchCount(self, *_args, **_kwargs)
         return val
     def ForceRefresh(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_ForceRefresh,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_ForceRefresh(self, *_args, **_kwargs)
         return val
     def Refresh(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_Refresh,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_Refresh(self, *_args, **_kwargs)
         return val
     def IsEditable(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_IsEditable,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_IsEditable(self, *_args, **_kwargs)
         return val
     def EnableEditing(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_EnableEditing,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_EnableEditing(self, *_args, **_kwargs)
         return val
     def EnableCellEditControl(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_EnableCellEditControl,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_EnableCellEditControl(self, *_args, **_kwargs)
         return val
     def DisableCellEditControl(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_DisableCellEditControl,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_DisableCellEditControl(self, *_args, **_kwargs)
         return val
     def CanEnableCellControl(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_CanEnableCellControl,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_CanEnableCellControl(self, *_args, **_kwargs)
         return val
     def IsCellEditControlEnabled(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_IsCellEditControlEnabled,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_IsCellEditControlEnabled(self, *_args, **_kwargs)
         return val
     def IsCellEditControlShown(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_IsCellEditControlShown,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_IsCellEditControlShown(self, *_args, **_kwargs)
         return val
     def IsCurrentCellReadOnly(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_IsCurrentCellReadOnly,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_IsCurrentCellReadOnly(self, *_args, **_kwargs)
         return val
     def ShowCellEditControl(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_ShowCellEditControl,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_ShowCellEditControl(self, *_args, **_kwargs)
         return val
     def HideCellEditControl(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_HideCellEditControl,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_HideCellEditControl(self, *_args, **_kwargs)
         return val
     def SaveEditControlValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SaveEditControlValue,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SaveEditControlValue(self, *_args, **_kwargs)
         return val
     def XYToCell(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_XYToCell,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_XYToCell(self, *_args, **_kwargs)
         if val: val = wxGridCellCoordsPtr(val) ; val.thisown = 1
         return val
     def YToRow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_YToRow,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_YToRow(self, *_args, **_kwargs)
         return val
     def XToCol(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_XToCol,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_XToCol(self, *_args, **_kwargs)
         return val
     def YToEdgeOfRow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_YToEdgeOfRow,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_YToEdgeOfRow(self, *_args, **_kwargs)
         return val
     def XToEdgeOfCol(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_XToEdgeOfCol,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_XToEdgeOfCol(self, *_args, **_kwargs)
         return val
     def CellToRect(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_CellToRect,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_CellToRect(self, *_args, **_kwargs)
         if val: val = wxRectPtr(val) ; val.thisown = 1
         return val
     def GetGridCursorRow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetGridCursorRow,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetGridCursorRow(self, *_args, **_kwargs)
         return val
     def GetGridCursorCol(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetGridCursorCol,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetGridCursorCol(self, *_args, **_kwargs)
         return val
     def IsVisible(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_IsVisible,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_IsVisible(self, *_args, **_kwargs)
         return val
     def MakeCellVisible(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_MakeCellVisible,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_MakeCellVisible(self, *_args, **_kwargs)
         return val
     def SetGridCursor(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetGridCursor,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetGridCursor(self, *_args, **_kwargs)
         return val
     def MoveCursorUp(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_MoveCursorUp,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_MoveCursorUp(self, *_args, **_kwargs)
         return val
     def MoveCursorDown(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_MoveCursorDown,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_MoveCursorDown(self, *_args, **_kwargs)
         return val
     def MoveCursorLeft(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_MoveCursorLeft,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_MoveCursorLeft(self, *_args, **_kwargs)
         return val
     def MoveCursorRight(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_MoveCursorRight,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_MoveCursorRight(self, *_args, **_kwargs)
         return val
     def MovePageDown(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_MovePageDown,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_MovePageDown(self, *_args, **_kwargs)
         return val
     def MovePageUp(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_MovePageUp,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_MovePageUp(self, *_args, **_kwargs)
         return val
     def MoveCursorUpBlock(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_MoveCursorUpBlock,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_MoveCursorUpBlock(self, *_args, **_kwargs)
         return val
     def MoveCursorDownBlock(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_MoveCursorDownBlock,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_MoveCursorDownBlock(self, *_args, **_kwargs)
         return val
     def MoveCursorLeftBlock(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_MoveCursorLeftBlock,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_MoveCursorLeftBlock(self, *_args, **_kwargs)
         return val
     def MoveCursorRightBlock(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_MoveCursorRightBlock,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_MoveCursorRightBlock(self, *_args, **_kwargs)
         return val
     def GetDefaultRowLabelSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetDefaultRowLabelSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetDefaultRowLabelSize(self, *_args, **_kwargs)
         return val
     def GetRowLabelSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetRowLabelSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetRowLabelSize(self, *_args, **_kwargs)
         return val
     def GetDefaultColLabelSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetDefaultColLabelSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetDefaultColLabelSize(self, *_args, **_kwargs)
         return val
     def GetColLabelSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetColLabelSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetColLabelSize(self, *_args, **_kwargs)
         return val
     def GetLabelBackgroundColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetLabelBackgroundColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetLabelBackgroundColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetLabelTextColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetLabelTextColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetLabelTextColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetLabelFont(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetLabelFont,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetLabelFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def GetRowLabelAlignment(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetRowLabelAlignment,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetRowLabelAlignment(self, *_args, **_kwargs)
         return val
     def GetColLabelAlignment(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetColLabelAlignment,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetColLabelAlignment(self, *_args, **_kwargs)
         return val
     def GetColLabelTextOrientation(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetColLabelTextOrientation,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetColLabelTextOrientation(self, *_args, **_kwargs)
         return val
     def GetRowLabelValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetRowLabelValue,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetRowLabelValue(self, *_args, **_kwargs)
         return val
     def GetColLabelValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetColLabelValue,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetColLabelValue(self, *_args, **_kwargs)
         return val
     def GetGridLineColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetGridLineColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetGridLineColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetCellHighlightColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetCellHighlightColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetCellHighlightColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetCellHighlightPenWidth(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetCellHighlightPenWidth,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetCellHighlightPenWidth(self, *_args, **_kwargs)
         return val
     def GetCellHighlightROPenWidth(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetCellHighlightROPenWidth,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetCellHighlightROPenWidth(self, *_args, **_kwargs)
         return val
     def SetRowLabelSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetRowLabelSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetRowLabelSize(self, *_args, **_kwargs)
         return val
     def SetColLabelSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetColLabelSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetColLabelSize(self, *_args, **_kwargs)
         return val
     def SetLabelBackgroundColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetLabelBackgroundColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetLabelBackgroundColour(self, *_args, **_kwargs)
         return val
     def SetLabelTextColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetLabelTextColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetLabelTextColour(self, *_args, **_kwargs)
         return val
     def SetLabelFont(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetLabelFont,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetLabelFont(self, *_args, **_kwargs)
         return val
     def SetRowLabelAlignment(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetRowLabelAlignment,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetRowLabelAlignment(self, *_args, **_kwargs)
         return val
     def SetColLabelAlignment(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetColLabelAlignment,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetColLabelAlignment(self, *_args, **_kwargs)
         return val
     def SetColLabelTextOrientation(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetColLabelTextOrientation,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetColLabelTextOrientation(self, *_args, **_kwargs)
         return val
     def SetRowLabelValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetRowLabelValue,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetRowLabelValue(self, *_args, **_kwargs)
         return val
     def SetColLabelValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetColLabelValue,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetColLabelValue(self, *_args, **_kwargs)
         return val
     def SetGridLineColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetGridLineColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetGridLineColour(self, *_args, **_kwargs)
         return val
     def SetCellHighlightColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetCellHighlightColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetCellHighlightColour(self, *_args, **_kwargs)
         return val
     def SetCellHighlightPenWidth(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetCellHighlightPenWidth,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetCellHighlightPenWidth(self, *_args, **_kwargs)
         return val
     def SetCellHighlightROPenWidth(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetCellHighlightROPenWidth,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetCellHighlightROPenWidth(self, *_args, **_kwargs)
         return val
     def EnableDragRowSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_EnableDragRowSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_EnableDragRowSize(self, *_args, **_kwargs)
         return val
     def DisableDragRowSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_DisableDragRowSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_DisableDragRowSize(self, *_args, **_kwargs)
         return val
     def CanDragRowSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_CanDragRowSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_CanDragRowSize(self, *_args, **_kwargs)
         return val
     def EnableDragColSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_EnableDragColSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_EnableDragColSize(self, *_args, **_kwargs)
         return val
     def DisableDragColSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_DisableDragColSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_DisableDragColSize(self, *_args, **_kwargs)
         return val
     def CanDragColSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_CanDragColSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_CanDragColSize(self, *_args, **_kwargs)
         return val
     def EnableDragGridSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_EnableDragGridSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_EnableDragGridSize(self, *_args, **_kwargs)
         return val
     def DisableDragGridSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_DisableDragGridSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_DisableDragGridSize(self, *_args, **_kwargs)
         return val
     def CanDragGridSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_CanDragGridSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_CanDragGridSize(self, *_args, **_kwargs)
         return val
     def SetAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetAttr,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetAttr(self, *_args, **_kwargs)
         return val
     def SetRowAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetRowAttr,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetRowAttr(self, *_args, **_kwargs)
         return val
     def SetColAttr(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetColAttr,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetColAttr(self, *_args, **_kwargs)
         return val
     def SetColFormatBool(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetColFormatBool,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetColFormatBool(self, *_args, **_kwargs)
         return val
     def SetColFormatNumber(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetColFormatNumber,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetColFormatNumber(self, *_args, **_kwargs)
         return val
     def SetColFormatFloat(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetColFormatFloat,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetColFormatFloat(self, *_args, **_kwargs)
         return val
     def SetColFormatCustom(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetColFormatCustom,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetColFormatCustom(self, *_args, **_kwargs)
         return val
     def EnableGridLines(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_EnableGridLines,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_EnableGridLines(self, *_args, **_kwargs)
         return val
     def GridLinesEnabled(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GridLinesEnabled,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GridLinesEnabled(self, *_args, **_kwargs)
         return val
     def GetDefaultRowSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetDefaultRowSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetDefaultRowSize(self, *_args, **_kwargs)
         return val
     def GetRowSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetRowSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetRowSize(self, *_args, **_kwargs)
         return val
     def GetDefaultColSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetDefaultColSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetDefaultColSize(self, *_args, **_kwargs)
         return val
     def GetColSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetColSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetColSize(self, *_args, **_kwargs)
         return val
     def GetDefaultCellBackgroundColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetDefaultCellBackgroundColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetDefaultCellBackgroundColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetCellBackgroundColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetCellBackgroundColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetCellBackgroundColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetDefaultCellTextColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetDefaultCellTextColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetDefaultCellTextColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetCellTextColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetCellTextColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetCellTextColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetDefaultCellFont(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetDefaultCellFont,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetDefaultCellFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def GetCellFont(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetCellFont,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetCellFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def GetDefaultCellAlignment(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetDefaultCellAlignment,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetDefaultCellAlignment(self, *_args, **_kwargs)
         return val
     def GetCellAlignment(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetCellAlignment,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetCellAlignment(self, *_args, **_kwargs)
         return val
     def GetDefaultCellOverflow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetDefaultCellOverflow,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetDefaultCellOverflow(self, *_args, **_kwargs)
         return val
     def GetCellOverflow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetCellOverflow,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetCellOverflow(self, *_args, **_kwargs)
         return val
     def GetCellSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetCellSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetCellSize(self, *_args, **_kwargs)
         return val
     def SetDefaultRowSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetDefaultRowSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetDefaultRowSize(self, *_args, **_kwargs)
         return val
     def SetRowSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetRowSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetRowSize(self, *_args, **_kwargs)
         return val
     def SetDefaultColSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetDefaultColSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetDefaultColSize(self, *_args, **_kwargs)
         return val
     def SetColSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetColSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetColSize(self, *_args, **_kwargs)
         return val
     def AutoSizeColumn(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_AutoSizeColumn,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_AutoSizeColumn(self, *_args, **_kwargs)
         return val
     def AutoSizeRow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_AutoSizeRow,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_AutoSizeRow(self, *_args, **_kwargs)
         return val
     def AutoSizeColumns(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_AutoSizeColumns,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_AutoSizeColumns(self, *_args, **_kwargs)
         return val
     def AutoSizeRows(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_AutoSizeRows,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_AutoSizeRows(self, *_args, **_kwargs)
         return val
     def AutoSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_AutoSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_AutoSize(self, *_args, **_kwargs)
         return val
     def AutoSizeRowLabelSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_AutoSizeRowLabelSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_AutoSizeRowLabelSize(self, *_args, **_kwargs)
         return val
     def AutoSizeColLabelSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_AutoSizeColLabelSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_AutoSizeColLabelSize(self, *_args, **_kwargs)
         return val
     def SetColMinimalWidth(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetColMinimalWidth,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetColMinimalWidth(self, *_args, **_kwargs)
         return val
     def SetRowMinimalHeight(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetRowMinimalHeight,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetRowMinimalHeight(self, *_args, **_kwargs)
+        return val
+    def SetColMinimalAcceptableWidth(self, *_args, **_kwargs):
+        val = gridc.wxGrid_SetColMinimalAcceptableWidth(self, *_args, **_kwargs)
+        return val
+    def SetRowMinimalAcceptableHeight(self, *_args, **_kwargs):
+        val = gridc.wxGrid_SetRowMinimalAcceptableHeight(self, *_args, **_kwargs)
+        return val
+    def GetColMinimalAcceptableWidth(self, *_args, **_kwargs):
+        val = gridc.wxGrid_GetColMinimalAcceptableWidth(self, *_args, **_kwargs)
+        return val
+    def GetRowMinimalAcceptableHeight(self, *_args, **_kwargs):
+        val = gridc.wxGrid_GetRowMinimalAcceptableHeight(self, *_args, **_kwargs)
         return val
     def SetDefaultCellBackgroundColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetDefaultCellBackgroundColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetDefaultCellBackgroundColour(self, *_args, **_kwargs)
         return val
     def SetCellBackgroundColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetCellBackgroundColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetCellBackgroundColour(self, *_args, **_kwargs)
         return val
     def SetDefaultCellTextColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetDefaultCellTextColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetDefaultCellTextColour(self, *_args, **_kwargs)
         return val
     def SetCellTextColour(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetCellTextColour,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetCellTextColour(self, *_args, **_kwargs)
         return val
     def SetDefaultCellFont(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetDefaultCellFont,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetDefaultCellFont(self, *_args, **_kwargs)
         return val
     def SetCellFont(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetCellFont,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetCellFont(self, *_args, **_kwargs)
         return val
     def SetDefaultCellAlignment(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetDefaultCellAlignment,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetDefaultCellAlignment(self, *_args, **_kwargs)
         return val
     def SetCellAlignment(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetCellAlignment,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetCellAlignment(self, *_args, **_kwargs)
         return val
     def SetDefaultCellOverflow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetDefaultCellOverflow,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetDefaultCellOverflow(self, *_args, **_kwargs)
         return val
     def SetCellOverflow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetCellOverflow,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetCellOverflow(self, *_args, **_kwargs)
         return val
     def SetCellSize(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetCellSize,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetCellSize(self, *_args, **_kwargs)
         return val
     def SetDefaultRenderer(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetDefaultRenderer,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetDefaultRenderer(self, *_args, **_kwargs)
         return val
     def SetCellRenderer(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetCellRenderer,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetCellRenderer(self, *_args, **_kwargs)
         return val
     def GetDefaultRenderer(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetDefaultRenderer,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetDefaultRenderer(self, *_args, **_kwargs)
         return val
     def GetCellRenderer(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetCellRenderer,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetCellRenderer(self, *_args, **_kwargs)
         return val
     def SetDefaultEditor(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetDefaultEditor,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetDefaultEditor(self, *_args, **_kwargs)
         return val
     def SetCellEditor(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetCellEditor,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetCellEditor(self, *_args, **_kwargs)
         return val
     def GetDefaultEditor(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetDefaultEditor,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetDefaultEditor(self, *_args, **_kwargs)
         return val
     def GetCellEditor(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetCellEditor,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetCellEditor(self, *_args, **_kwargs)
         return val
     def GetCellValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetCellValue,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetCellValue(self, *_args, **_kwargs)
         return val
     def SetCellValue(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetCellValue,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetCellValue(self, *_args, **_kwargs)
         return val
     def IsReadOnly(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_IsReadOnly,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_IsReadOnly(self, *_args, **_kwargs)
         return val
     def SetReadOnly(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetReadOnly,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetReadOnly(self, *_args, **_kwargs)
         return val
     def SelectRow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SelectRow,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SelectRow(self, *_args, **_kwargs)
         return val
     def SelectCol(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SelectCol,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SelectCol(self, *_args, **_kwargs)
         return val
     def SelectBlock(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SelectBlock,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SelectBlock(self, *_args, **_kwargs)
         return val
     def SelectAll(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SelectAll,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SelectAll(self, *_args, **_kwargs)
         return val
     def IsSelection(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_IsSelection,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_IsSelection(self, *_args, **_kwargs)
         return val
     def ClearSelection(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_ClearSelection,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_ClearSelection(self, *_args, **_kwargs)
         return val
     def IsInSelection(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_IsInSelection,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_IsInSelection(self, *_args, **_kwargs)
         return val
     def GetSelectedCells(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetSelectedCells,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetSelectedCells(self, *_args, **_kwargs)
         return val
     def GetSelectionBlockTopLeft(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetSelectionBlockTopLeft,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetSelectionBlockTopLeft(self, *_args, **_kwargs)
         return val
     def GetSelectionBlockBottomRight(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetSelectionBlockBottomRight,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetSelectionBlockBottomRight(self, *_args, **_kwargs)
         return val
     def GetSelectedRows(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetSelectedRows,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetSelectedRows(self, *_args, **_kwargs)
         return val
     def GetSelectedCols(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetSelectedCols,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetSelectedCols(self, *_args, **_kwargs)
         return val
     def DeselectRow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_DeselectRow,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_DeselectRow(self, *_args, **_kwargs)
         return val
     def DeselectCol(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_DeselectCol,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_DeselectCol(self, *_args, **_kwargs)
         return val
     def DeselectCell(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_DeselectCell,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_DeselectCell(self, *_args, **_kwargs)
         return val
     def BlockToDeviceRect(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_BlockToDeviceRect,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_BlockToDeviceRect(self, *_args, **_kwargs)
         if val: val = wxRectPtr(val) ; val.thisown = 1
         return val
     def GetSelectionBackground(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetSelectionBackground,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetSelectionBackground(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetSelectionForeground(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetSelectionForeground,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetSelectionForeground(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetSelectionBackground(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetSelectionBackground,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetSelectionBackground(self, *_args, **_kwargs)
         return val
     def SetSelectionForeground(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetSelectionForeground,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetSelectionForeground(self, *_args, **_kwargs)
         return val
     def RegisterDataType(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_RegisterDataType,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_RegisterDataType(self, *_args, **_kwargs)
         return val
     def GetDefaultEditorForCell(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetDefaultEditorForCell,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetDefaultEditorForCell(self, *_args, **_kwargs)
         return val
     def GetDefaultRendererForCell(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetDefaultRendererForCell,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetDefaultRendererForCell(self, *_args, **_kwargs)
         return val
     def GetDefaultEditorForType(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetDefaultEditorForType,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetDefaultEditorForType(self, *_args, **_kwargs)
         return val
     def GetDefaultRendererForType(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetDefaultRendererForType,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetDefaultRendererForType(self, *_args, **_kwargs)
         return val
     def SetMargins(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_SetMargins,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_SetMargins(self, *_args, **_kwargs)
         return val
     def GetGridWindow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetGridWindow,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetGridWindow(self, *_args, **_kwargs)
         return val
     def GetGridRowLabelWindow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetGridRowLabelWindow,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetGridRowLabelWindow(self, *_args, **_kwargs)
         return val
     def GetGridColLabelWindow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetGridColLabelWindow,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetGridColLabelWindow(self, *_args, **_kwargs)
         return val
     def GetGridCornerLabelWindow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGrid_GetGridCornerLabelWindow,(self,) + _args, _kwargs)
+        val = gridc.wxGrid_GetGridCornerLabelWindow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGrid instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGrid instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGrid(wxGridPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGrid,_args,_kwargs)
+        self.this = gridc.new_wxGrid(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -1574,35 +1586,35 @@ class wxGridEventPtr(wxNotifyEventPtr):
         self.this = this
         self.thisown = 0
     def GetRow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridEvent_GetRow,(self,) + _args, _kwargs)
+        val = gridc.wxGridEvent_GetRow(self, *_args, **_kwargs)
         return val
     def GetCol(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridEvent_GetCol,(self,) + _args, _kwargs)
+        val = gridc.wxGridEvent_GetCol(self, *_args, **_kwargs)
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridEvent_GetPosition,(self,) + _args, _kwargs)
+        val = gridc.wxGridEvent_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def Selecting(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridEvent_Selecting,(self,) + _args, _kwargs)
+        val = gridc.wxGridEvent_Selecting(self, *_args, **_kwargs)
         return val
     def ControlDown(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridEvent_ControlDown,(self,) + _args, _kwargs)
+        val = gridc.wxGridEvent_ControlDown(self, *_args, **_kwargs)
         return val
     def MetaDown(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridEvent_MetaDown,(self,) + _args, _kwargs)
+        val = gridc.wxGridEvent_MetaDown(self, *_args, **_kwargs)
         return val
     def ShiftDown(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridEvent_ShiftDown,(self,) + _args, _kwargs)
+        val = gridc.wxGridEvent_ShiftDown(self, *_args, **_kwargs)
         return val
     def AltDown(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridEvent_AltDown,(self,) + _args, _kwargs)
+        val = gridc.wxGridEvent_AltDown(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridEvent(wxGridEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridEvent,_args,_kwargs)
+        self.this = gridc.new_wxGridEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1613,29 +1625,29 @@ class wxGridSizeEventPtr(wxNotifyEventPtr):
         self.this = this
         self.thisown = 0
     def GetRowOrCol(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridSizeEvent_GetRowOrCol,(self,) + _args, _kwargs)
+        val = gridc.wxGridSizeEvent_GetRowOrCol(self, *_args, **_kwargs)
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridSizeEvent_GetPosition,(self,) + _args, _kwargs)
+        val = gridc.wxGridSizeEvent_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def ControlDown(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridSizeEvent_ControlDown,(self,) + _args, _kwargs)
+        val = gridc.wxGridSizeEvent_ControlDown(self, *_args, **_kwargs)
         return val
     def MetaDown(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridSizeEvent_MetaDown,(self,) + _args, _kwargs)
+        val = gridc.wxGridSizeEvent_MetaDown(self, *_args, **_kwargs)
         return val
     def ShiftDown(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridSizeEvent_ShiftDown,(self,) + _args, _kwargs)
+        val = gridc.wxGridSizeEvent_ShiftDown(self, *_args, **_kwargs)
         return val
     def AltDown(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridSizeEvent_AltDown,(self,) + _args, _kwargs)
+        val = gridc.wxGridSizeEvent_AltDown(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridSizeEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridSizeEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridSizeEvent(wxGridSizeEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridSizeEvent,_args,_kwargs)
+        self.this = gridc.new_wxGridSizeEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1646,45 +1658,45 @@ class wxGridRangeSelectEventPtr(wxNotifyEventPtr):
         self.this = this
         self.thisown = 0
     def GetTopLeftCoords(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridRangeSelectEvent_GetTopLeftCoords,(self,) + _args, _kwargs)
+        val = gridc.wxGridRangeSelectEvent_GetTopLeftCoords(self, *_args, **_kwargs)
         if val: val = wxGridCellCoordsPtr(val) ; val.thisown = 1
         return val
     def GetBottomRightCoords(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridRangeSelectEvent_GetBottomRightCoords,(self,) + _args, _kwargs)
+        val = gridc.wxGridRangeSelectEvent_GetBottomRightCoords(self, *_args, **_kwargs)
         if val: val = wxGridCellCoordsPtr(val) ; val.thisown = 1
         return val
     def GetTopRow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridRangeSelectEvent_GetTopRow,(self,) + _args, _kwargs)
+        val = gridc.wxGridRangeSelectEvent_GetTopRow(self, *_args, **_kwargs)
         return val
     def GetBottomRow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridRangeSelectEvent_GetBottomRow,(self,) + _args, _kwargs)
+        val = gridc.wxGridRangeSelectEvent_GetBottomRow(self, *_args, **_kwargs)
         return val
     def GetLeftCol(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridRangeSelectEvent_GetLeftCol,(self,) + _args, _kwargs)
+        val = gridc.wxGridRangeSelectEvent_GetLeftCol(self, *_args, **_kwargs)
         return val
     def GetRightCol(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridRangeSelectEvent_GetRightCol,(self,) + _args, _kwargs)
+        val = gridc.wxGridRangeSelectEvent_GetRightCol(self, *_args, **_kwargs)
         return val
     def Selecting(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridRangeSelectEvent_Selecting,(self,) + _args, _kwargs)
+        val = gridc.wxGridRangeSelectEvent_Selecting(self, *_args, **_kwargs)
         return val
     def ControlDown(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridRangeSelectEvent_ControlDown,(self,) + _args, _kwargs)
+        val = gridc.wxGridRangeSelectEvent_ControlDown(self, *_args, **_kwargs)
         return val
     def MetaDown(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridRangeSelectEvent_MetaDown,(self,) + _args, _kwargs)
+        val = gridc.wxGridRangeSelectEvent_MetaDown(self, *_args, **_kwargs)
         return val
     def ShiftDown(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridRangeSelectEvent_ShiftDown,(self,) + _args, _kwargs)
+        val = gridc.wxGridRangeSelectEvent_ShiftDown(self, *_args, **_kwargs)
         return val
     def AltDown(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridRangeSelectEvent_AltDown,(self,) + _args, _kwargs)
+        val = gridc.wxGridRangeSelectEvent_AltDown(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridRangeSelectEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridRangeSelectEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridRangeSelectEvent(wxGridRangeSelectEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridRangeSelectEvent,_args,_kwargs)
+        self.this = gridc.new_wxGridRangeSelectEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1695,28 +1707,28 @@ class wxGridEditorCreatedEventPtr(wxCommandEventPtr):
         self.this = this
         self.thisown = 0
     def GetRow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridEditorCreatedEvent_GetRow,(self,) + _args, _kwargs)
+        val = gridc.wxGridEditorCreatedEvent_GetRow(self, *_args, **_kwargs)
         return val
     def GetCol(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridEditorCreatedEvent_GetCol,(self,) + _args, _kwargs)
+        val = gridc.wxGridEditorCreatedEvent_GetCol(self, *_args, **_kwargs)
         return val
     def GetControl(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridEditorCreatedEvent_GetControl,(self,) + _args, _kwargs)
+        val = gridc.wxGridEditorCreatedEvent_GetControl(self, *_args, **_kwargs)
         return val
     def SetRow(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridEditorCreatedEvent_SetRow,(self,) + _args, _kwargs)
+        val = gridc.wxGridEditorCreatedEvent_SetRow(self, *_args, **_kwargs)
         return val
     def SetCol(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridEditorCreatedEvent_SetCol,(self,) + _args, _kwargs)
+        val = gridc.wxGridEditorCreatedEvent_SetCol(self, *_args, **_kwargs)
         return val
     def SetControl(self, *_args, **_kwargs):
-        val = apply(gridc.wxGridEditorCreatedEvent_SetControl,(self,) + _args, _kwargs)
+        val = gridc.wxGridEditorCreatedEvent_SetControl(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridEditorCreatedEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridEditorCreatedEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridEditorCreatedEvent(wxGridEditorCreatedEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(gridc.new_wxGridEditorCreatedEvent,_args,_kwargs)
+        self.this = gridc.new_wxGridEditorCreatedEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
diff --git a/wxPython/src/gtk/help.cpp b/wxPython/src/gtk/help.cpp
index c9770753d4..1d71b4f305 100644
--- a/wxPython/src/gtk/help.cpp
+++ b/wxPython/src/gtk/help.cpp
@@ -719,7 +719,7 @@ static PyObject *_wrap_wxHelpProvider_ShowHelp(PyObject *self, PyObject *args, P
     PyObject * _resultobj;
     bool  _result;
     wxHelpProvider * _arg0;
-    wxWindowBase * _arg1;
+    wxWindow * _arg1;
     PyObject * _argo0 = 0;
     PyObject * _argo1 = 0;
     char *_kwnames[] = { "self","window", NULL };
@@ -736,8 +736,8 @@ static PyObject *_wrap_wxHelpProvider_ShowHelp(PyObject *self, PyObject *args, P
     }
     if (_argo1) {
         if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindowBase_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxHelpProvider_ShowHelp. Expected _wxWindowBase_p.");
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxHelpProvider_ShowHelp. Expected _wxWindow_p.");
         return NULL;
         }
     }
@@ -755,7 +755,7 @@ static PyObject *_wrap_wxHelpProvider_ShowHelp(PyObject *self, PyObject *args, P
 static PyObject *_wrap_wxHelpProvider_AddHelp(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxHelpProvider * _arg0;
-    wxWindowBase * _arg1;
+    wxWindow * _arg1;
     wxString * _arg2;
     PyObject * _argo0 = 0;
     PyObject * _argo1 = 0;
@@ -774,8 +774,8 @@ static PyObject *_wrap_wxHelpProvider_AddHelp(PyObject *self, PyObject *args, Py
     }
     if (_argo1) {
         if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindowBase_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxHelpProvider_AddHelp. Expected _wxWindowBase_p.");
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxHelpProvider_AddHelp. Expected _wxWindow_p.");
         return NULL;
         }
     }
diff --git a/wxPython/src/gtk/help.py b/wxPython/src/gtk/help.py
index ac1612ba19..3e4ae411aa 100644
--- a/wxPython/src/gtk/help.py
+++ b/wxPython/src/gtk/help.py
@@ -33,29 +33,29 @@ class wxHelpEventPtr(wxCommandEventPtr):
         self.this = this
         self.thisown = 0
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(helpc.wxHelpEvent_GetPosition,(self,) + _args, _kwargs)
+        val = helpc.wxHelpEvent_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) 
         return val
     def SetPosition(self, *_args, **_kwargs):
-        val = apply(helpc.wxHelpEvent_SetPosition,(self,) + _args, _kwargs)
+        val = helpc.wxHelpEvent_SetPosition(self, *_args, **_kwargs)
         return val
     def GetLink(self, *_args, **_kwargs):
-        val = apply(helpc.wxHelpEvent_GetLink,(self,) + _args, _kwargs)
+        val = helpc.wxHelpEvent_GetLink(self, *_args, **_kwargs)
         return val
     def SetLink(self, *_args, **_kwargs):
-        val = apply(helpc.wxHelpEvent_SetLink,(self,) + _args, _kwargs)
+        val = helpc.wxHelpEvent_SetLink(self, *_args, **_kwargs)
         return val
     def GetTarget(self, *_args, **_kwargs):
-        val = apply(helpc.wxHelpEvent_GetTarget,(self,) + _args, _kwargs)
+        val = helpc.wxHelpEvent_GetTarget(self, *_args, **_kwargs)
         return val
     def SetTarget(self, *_args, **_kwargs):
-        val = apply(helpc.wxHelpEvent_SetTarget,(self,) + _args, _kwargs)
+        val = helpc.wxHelpEvent_SetTarget(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxHelpEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHelpEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHelpEvent(wxHelpEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(helpc.new_wxHelpEvent,_args,_kwargs)
+        self.this = helpc.new_wxHelpEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -72,16 +72,16 @@ class wxContextHelpPtr(wxObjectPtr):
             except:
                 pass
     def BeginContextHelp(self, *_args, **_kwargs):
-        val = apply(helpc.wxContextHelp_BeginContextHelp,(self,) + _args, _kwargs)
+        val = helpc.wxContextHelp_BeginContextHelp(self, *_args, **_kwargs)
         return val
     def EndContextHelp(self, *_args, **_kwargs):
-        val = apply(helpc.wxContextHelp_EndContextHelp,(self,) + _args, _kwargs)
+        val = helpc.wxContextHelp_EndContextHelp(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxContextHelp instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxContextHelp instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxContextHelp(wxContextHelpPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(helpc.new_wxContextHelp,_args,_kwargs)
+        self.this = helpc.new_wxContextHelp(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -92,10 +92,10 @@ class wxContextHelpButtonPtr(wxBitmapButtonPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxContextHelpButton instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxContextHelpButton instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxContextHelpButton(wxContextHelpButtonPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(helpc.new_wxContextHelpButton,_args,_kwargs)
+        self.this = helpc.new_wxContextHelpButton(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -107,22 +107,22 @@ class wxHelpProviderPtr :
         self.this = this
         self.thisown = 0
     def GetHelp(self, *_args, **_kwargs):
-        val = apply(helpc.wxHelpProvider_GetHelp,(self,) + _args, _kwargs)
+        val = helpc.wxHelpProvider_GetHelp(self, *_args, **_kwargs)
         return val
     def ShowHelp(self, *_args, **_kwargs):
-        val = apply(helpc.wxHelpProvider_ShowHelp,(self,) + _args, _kwargs)
+        val = helpc.wxHelpProvider_ShowHelp(self, *_args, **_kwargs)
         return val
     def AddHelp(self, *_args, **_kwargs):
-        val = apply(helpc.wxHelpProvider_AddHelp,(self,) + _args, _kwargs)
+        val = helpc.wxHelpProvider_AddHelp(self, *_args, **_kwargs)
         return val
     def AddHelpById(self, *_args, **_kwargs):
-        val = apply(helpc.wxHelpProvider_AddHelpById,(self,) + _args, _kwargs)
+        val = helpc.wxHelpProvider_AddHelpById(self, *_args, **_kwargs)
         return val
     def Destroy(self, *_args, **_kwargs):
-        val = apply(helpc.wxHelpProvider_Destroy,(self,) + _args, _kwargs)
+        val = helpc.wxHelpProvider_Destroy(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxHelpProvider instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHelpProvider instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHelpProvider(wxHelpProviderPtr):
     def __init__(self,this):
         self.this = this
@@ -135,10 +135,10 @@ class wxSimpleHelpProviderPtr(wxHelpProviderPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxSimpleHelpProvider instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSimpleHelpProvider instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSimpleHelpProvider(wxSimpleHelpProviderPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(helpc.new_wxSimpleHelpProvider,_args,_kwargs)
+        self.this = helpc.new_wxSimpleHelpProvider(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -149,12 +149,12 @@ class wxSimpleHelpProvider(wxSimpleHelpProviderPtr):
 #-------------- FUNCTION WRAPPERS ------------------
 
 def wxHelpProvider_Set(*_args, **_kwargs):
-    val = apply(helpc.wxHelpProvider_Set,_args,_kwargs)
+    val = helpc.wxHelpProvider_Set(*_args,**_kwargs)
     if val: val = wxHelpProviderPtr(val)
     return val
 
 def wxHelpProvider_Get(*_args, **_kwargs):
-    val = apply(helpc.wxHelpProvider_Get,_args,_kwargs)
+    val = helpc.wxHelpProvider_Get(*_args,**_kwargs)
     if val: val = wxHelpProviderPtr(val)
     return val
 
diff --git a/wxPython/src/gtk/html.cpp b/wxPython/src/gtk/html.cpp
index 29faa7e50a..f577cba551 100644
--- a/wxPython/src/gtk/html.cpp
+++ b/wxPython/src/gtk/html.cpp
@@ -1314,7 +1314,7 @@ static void *SwigwxHtmlWinParserTowxObject(void *ptr) {
 static PyObject *_wrap_new_wxHtmlWinParser(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxHtmlWinParser * _result;
-    wxHtmlWindow * _arg0 = (wxHtmlWindow *) NULL;
+    wxPyHtmlWindow * _arg0 = (wxPyHtmlWindow *) NULL;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "wnd", NULL };
     char _ptemp[128];
@@ -1324,8 +1324,8 @@ static PyObject *_wrap_new_wxHtmlWinParser(PyObject *self, PyObject *args, PyObj
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxHtmlWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxHtmlWinParser. Expected _wxHtmlWindow_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyHtmlWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxHtmlWinParser. Expected _wxPyHtmlWindow_p.");
         return NULL;
         }
     }
@@ -1469,7 +1469,7 @@ static PyObject *_wrap_wxHtmlWinParser_GetCharWidth(PyObject *self, PyObject *ar
 #define wxHtmlWinParser_GetWindow(_swigobj)  (_swigobj->GetWindow())
 static PyObject *_wrap_wxHtmlWinParser_GetWindow(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxHtmlWindow * _result;
+    wxPyHtmlWindow * _result;
     wxHtmlWinParser * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
@@ -1486,7 +1486,7 @@ static PyObject *_wrap_wxHtmlWinParser_GetWindow(PyObject *self, PyObject *args,
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (wxHtmlWindow *)wxHtmlWinParser_GetWindow(_arg0);
+    _result = (wxPyHtmlWindow *)wxHtmlWinParser_GetWindow(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3231,11 +3231,12 @@ static PyObject *_wrap_wxHtmlCell_AdjustPagebreak(PyObject *self, PyObject *args
     wxHtmlCell * _arg0;
     int * _arg1;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","pagebreak", NULL };
+    int  temp;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","INOUT", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxHtmlCell_AdjustPagebreak",_kwnames,&_argo0,&_argo1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxHtmlCell_AdjustPagebreak",_kwnames,&_argo0,&_obj1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
@@ -3244,13 +3245,10 @@ static PyObject *_wrap_wxHtmlCell_AdjustPagebreak(PyObject *self, PyObject *args
         return NULL;
         }
     }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_int_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxHtmlCell_AdjustPagebreak. Expected _int_p.");
-        return NULL;
-        }
-    }
+{
+  temp = (int) PyInt_AsLong(_obj1);
+  _arg1 = &temp;
+}
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
     _result = (bool )wxHtmlCell_AdjustPagebreak(_arg0,_arg1);
@@ -3258,6 +3256,11 @@ static PyObject *_wrap_wxHtmlCell_AdjustPagebreak(PyObject *self, PyObject *args
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
 }    _resultobj = Py_BuildValue("i",_result);
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg1));
+    _resultobj = t_output_helper(_resultobj, o);
+}
     return _resultobj;
 }
 
@@ -4465,6 +4468,45 @@ static PyObject *_wrap_wxHtmlWindow_LoadPage(PyObject *self, PyObject *args, PyO
     return _resultobj;
 }
 
+#define wxHtmlWindow_LoadFile(_swigobj,_swigarg0)  (_swigobj->LoadFile(_swigarg0))
+static PyObject *_wrap_wxHtmlWindow_LoadFile(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPyHtmlWindow * _arg0;
+    wxString * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","filename", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxHtmlWindow_LoadFile",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyHtmlWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxHtmlWindow_LoadFile. Expected _wxPyHtmlWindow_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = wxString_in_helper(_obj1);
+    if (_arg1 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxHtmlWindow_LoadFile(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+{
+    if (_obj1)
+        delete _arg1;
+}
+    return _resultobj;
+}
+
 #define wxHtmlWindow_AppendToPage(_swigobj,_swigarg0)  (_swigobj->AppendToPage(_swigarg0))
 static PyObject *_wrap_wxHtmlWindow_AppendToPage(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -6638,6 +6680,7 @@ static PyMethodDef htmlcMethods[] = {
 	 { "wxHtmlWindow_GetOpenedAnchor", (PyCFunction) _wrap_wxHtmlWindow_GetOpenedAnchor, METH_VARARGS | METH_KEYWORDS },
 	 { "wxHtmlWindow_GetOpenedPage", (PyCFunction) _wrap_wxHtmlWindow_GetOpenedPage, METH_VARARGS | METH_KEYWORDS },
 	 { "wxHtmlWindow_AppendToPage", (PyCFunction) _wrap_wxHtmlWindow_AppendToPage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxHtmlWindow_LoadFile", (PyCFunction) _wrap_wxHtmlWindow_LoadFile, METH_VARARGS | METH_KEYWORDS },
 	 { "wxHtmlWindow_LoadPage", (PyCFunction) _wrap_wxHtmlWindow_LoadPage, METH_VARARGS | METH_KEYWORDS },
 	 { "wxHtmlWindow_SetPage", (PyCFunction) _wrap_wxHtmlWindow_SetPage, METH_VARARGS | METH_KEYWORDS },
 	 { "wxHtmlWindow__setCallbackInfo", (PyCFunction) _wrap_wxHtmlWindow__setCallbackInfo, METH_VARARGS | METH_KEYWORDS },
diff --git a/wxPython/src/gtk/html.py b/wxPython/src/gtk/html.py
index 58e15a4d99..347a11e66a 100644
--- a/wxPython/src/gtk/html.py
+++ b/wxPython/src/gtk/html.py
@@ -48,29 +48,29 @@ class wxHtmlLinkInfoPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def GetHref(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlLinkInfo_GetHref,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlLinkInfo_GetHref(self, *_args, **_kwargs)
         return val
     def GetTarget(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlLinkInfo_GetTarget,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlLinkInfo_GetTarget(self, *_args, **_kwargs)
         return val
     def GetEvent(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlLinkInfo_GetEvent,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlLinkInfo_GetEvent(self, *_args, **_kwargs)
         return val
     def GetHtmlCell(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlLinkInfo_GetHtmlCell,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlLinkInfo_GetHtmlCell(self, *_args, **_kwargs)
         if val: val = wxHtmlCellPtr(val) 
         return val
     def SetEvent(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlLinkInfo_SetEvent,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlLinkInfo_SetEvent(self, *_args, **_kwargs)
         return val
     def SetHtmlCell(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlLinkInfo_SetHtmlCell,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlLinkInfo_SetHtmlCell(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxHtmlLinkInfo instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlLinkInfo instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlLinkInfo(wxHtmlLinkInfoPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlc.new_wxHtmlLinkInfo,_args,_kwargs)
+        self.this = htmlc.new_wxHtmlLinkInfo(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -81,31 +81,31 @@ class wxHtmlTagPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def GetName(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlTag_GetName,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlTag_GetName(self, *_args, **_kwargs)
         return val
     def HasParam(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlTag_HasParam,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlTag_HasParam(self, *_args, **_kwargs)
         return val
     def GetParam(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlTag_GetParam,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlTag_GetParam(self, *_args, **_kwargs)
         return val
     def GetAllParams(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlTag_GetAllParams,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlTag_GetAllParams(self, *_args, **_kwargs)
         return val
     def HasEnding(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlTag_HasEnding,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlTag_HasEnding(self, *_args, **_kwargs)
         return val
     def GetBeginPos(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlTag_GetBeginPos,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlTag_GetBeginPos(self, *_args, **_kwargs)
         return val
     def GetEndPos1(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlTag_GetEndPos1,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlTag_GetEndPos1(self, *_args, **_kwargs)
         return val
     def GetEndPos2(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlTag_GetEndPos2,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlTag_GetEndPos2(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxHtmlTag instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlTag instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlTag(wxHtmlTagPtr):
     def __init__(self,this):
         self.this = this
@@ -118,40 +118,40 @@ class wxHtmlParserPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def SetFS(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlParser_SetFS,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlParser_SetFS(self, *_args, **_kwargs)
         return val
     def GetFS(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlParser_GetFS,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlParser_GetFS(self, *_args, **_kwargs)
         return val
     def Parse(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlParser_Parse,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlParser_Parse(self, *_args, **_kwargs)
         return val
     def InitParser(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlParser_InitParser,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlParser_InitParser(self, *_args, **_kwargs)
         return val
     def DoneParser(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlParser_DoneParser,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlParser_DoneParser(self, *_args, **_kwargs)
         return val
     def DoParsing(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlParser_DoParsing,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlParser_DoParsing(self, *_args, **_kwargs)
         return val
     def StopParsing(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlParser_StopParsing,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlParser_StopParsing(self, *_args, **_kwargs)
         return val
     def AddTagHandler(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlParser_AddTagHandler,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlParser_AddTagHandler(self, *_args, **_kwargs)
         return val
     def GetSource(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlParser_GetSource,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlParser_GetSource(self, *_args, **_kwargs)
         return val
     def PushTagHandler(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlParser_PushTagHandler,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlParser_PushTagHandler(self, *_args, **_kwargs)
         return val
     def PopTagHandler(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlParser_PopTagHandler,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlParser_PopTagHandler(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxHtmlParser instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlParser instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlParser(wxHtmlParserPtr):
     def __init__(self,this):
         self.this = this
@@ -164,105 +164,105 @@ class wxHtmlWinParserPtr(wxHtmlParserPtr):
         self.this = this
         self.thisown = 0
     def SetDC(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_SetDC,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_SetDC(self, *_args, **_kwargs)
         return val
     def GetDC(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_GetDC,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_GetDC(self, *_args, **_kwargs)
         return val
     def GetCharHeight(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_GetCharHeight,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_GetCharHeight(self, *_args, **_kwargs)
         return val
     def GetCharWidth(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_GetCharWidth,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_GetCharWidth(self, *_args, **_kwargs)
         return val
     def GetWindow(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_GetWindow,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_GetWindow(self, *_args, **_kwargs)
         return val
     def SetFonts(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_SetFonts,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_SetFonts(self, *_args, **_kwargs)
         return val
     def GetContainer(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_GetContainer,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_GetContainer(self, *_args, **_kwargs)
         if val: val = wxHtmlContainerCellPtr(val) 
         return val
     def OpenContainer(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_OpenContainer,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_OpenContainer(self, *_args, **_kwargs)
         if val: val = wxHtmlContainerCellPtr(val) 
         return val
     def SetContainer(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_SetContainer,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_SetContainer(self, *_args, **_kwargs)
         if val: val = wxHtmlContainerCellPtr(val) 
         return val
     def CloseContainer(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_CloseContainer,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_CloseContainer(self, *_args, **_kwargs)
         if val: val = wxHtmlContainerCellPtr(val) 
         return val
     def GetFontSize(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_GetFontSize,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_GetFontSize(self, *_args, **_kwargs)
         return val
     def SetFontSize(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_SetFontSize,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_SetFontSize(self, *_args, **_kwargs)
         return val
     def GetFontBold(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_GetFontBold,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_GetFontBold(self, *_args, **_kwargs)
         return val
     def SetFontBold(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_SetFontBold,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_SetFontBold(self, *_args, **_kwargs)
         return val
     def GetFontItalic(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_GetFontItalic,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_GetFontItalic(self, *_args, **_kwargs)
         return val
     def SetFontItalic(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_SetFontItalic,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_SetFontItalic(self, *_args, **_kwargs)
         return val
     def GetFontUnderlined(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_GetFontUnderlined,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_GetFontUnderlined(self, *_args, **_kwargs)
         return val
     def SetFontUnderlined(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_SetFontUnderlined,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_SetFontUnderlined(self, *_args, **_kwargs)
         return val
     def GetFontFixed(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_GetFontFixed,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_GetFontFixed(self, *_args, **_kwargs)
         return val
     def SetFontFixed(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_SetFontFixed,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_SetFontFixed(self, *_args, **_kwargs)
         return val
     def GetAlign(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_GetAlign,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_GetAlign(self, *_args, **_kwargs)
         return val
     def SetAlign(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_SetAlign,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_SetAlign(self, *_args, **_kwargs)
         return val
     def GetLinkColor(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_GetLinkColor,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_GetLinkColor(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetLinkColor(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_SetLinkColor,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_SetLinkColor(self, *_args, **_kwargs)
         return val
     def GetActualColor(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_GetActualColor,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_GetActualColor(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetActualColor(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_SetActualColor,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_SetActualColor(self, *_args, **_kwargs)
         return val
     def SetLink(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_SetLink,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_SetLink(self, *_args, **_kwargs)
         return val
     def CreateCurrentFont(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_CreateCurrentFont,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_CreateCurrentFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) 
         return val
     def GetLink(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinParser_GetLink,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinParser_GetLink(self, *_args, **_kwargs)
         if val: val = wxHtmlLinkInfoPtr(val) ; val.thisown = 1
         return val
     def __repr__(self):
-        return "<C wxHtmlWinParser instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlWinParser instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlWinParser(wxHtmlWinParserPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlc.new_wxHtmlWinParser,_args,_kwargs)
+        self.this = htmlc.new_wxHtmlWinParser(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -273,23 +273,23 @@ class wxHtmlTagHandlerPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlTagHandler__setCallbackInfo,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlTagHandler__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def SetParser(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlTagHandler_SetParser,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlTagHandler_SetParser(self, *_args, **_kwargs)
         return val
     def GetParser(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlTagHandler_GetParser,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlTagHandler_GetParser(self, *_args, **_kwargs)
         if val: val = wxHtmlParserPtr(val) 
         return val
     def ParseInner(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlTagHandler_ParseInner,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlTagHandler_ParseInner(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxHtmlTagHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlTagHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlTagHandler(wxHtmlTagHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlc.new_wxHtmlTagHandler,_args,_kwargs)
+        self.this = htmlc.new_wxHtmlTagHandler(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxHtmlTagHandler)
 
@@ -301,23 +301,23 @@ class wxHtmlWinTagHandlerPtr(wxHtmlTagHandlerPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinTagHandler__setCallbackInfo,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinTagHandler__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def SetParser(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinTagHandler_SetParser,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinTagHandler_SetParser(self, *_args, **_kwargs)
         return val
     def GetParser(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinTagHandler_GetParser,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinTagHandler_GetParser(self, *_args, **_kwargs)
         if val: val = wxHtmlWinParserPtr(val) 
         return val
     def ParseInner(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWinTagHandler_ParseInner,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWinTagHandler_ParseInner(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxHtmlWinTagHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlWinTagHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlWinTagHandler(wxHtmlWinTagHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlc.new_wxHtmlWinTagHandler,_args,_kwargs)
+        self.this = htmlc.new_wxHtmlWinTagHandler(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxHtmlWinTagHandler)
 
@@ -329,68 +329,68 @@ class wxHtmlCellPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def GetPosX(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_GetPosX,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_GetPosX(self, *_args, **_kwargs)
         return val
     def GetPosY(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_GetPosY,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_GetPosY(self, *_args, **_kwargs)
         return val
     def GetWidth(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_GetWidth,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_GetWidth(self, *_args, **_kwargs)
         return val
     def GetHeight(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_GetHeight,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_GetHeight(self, *_args, **_kwargs)
         return val
     def GetDescent(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_GetDescent,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_GetDescent(self, *_args, **_kwargs)
         return val
     def GetLink(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_GetLink,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_GetLink(self, *_args, **_kwargs)
         if val: val = wxHtmlLinkInfoPtr(val) 
         return val
     def GetNext(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_GetNext,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_GetNext(self, *_args, **_kwargs)
         if val: val = wxHtmlCellPtr(val) 
         return val
     def GetParent(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_GetParent,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_GetParent(self, *_args, **_kwargs)
         if val: val = wxHtmlContainerCellPtr(val) 
         return val
     def SetLink(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_SetLink,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_SetLink(self, *_args, **_kwargs)
         return val
     def SetNext(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_SetNext,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_SetNext(self, *_args, **_kwargs)
         return val
     def SetParent(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_SetParent,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_SetParent(self, *_args, **_kwargs)
         return val
     def SetPos(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_SetPos,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_SetPos(self, *_args, **_kwargs)
         return val
     def Layout(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_Layout,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_Layout(self, *_args, **_kwargs)
         return val
     def Draw(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_Draw,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_Draw(self, *_args, **_kwargs)
         return val
     def DrawInvisible(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_DrawInvisible,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_DrawInvisible(self, *_args, **_kwargs)
         return val
     def Find(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_Find,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_Find(self, *_args, **_kwargs)
         if val: val = wxHtmlCellPtr(val) 
         return val
     def AdjustPagebreak(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_AdjustPagebreak,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_AdjustPagebreak(self, *_args, **_kwargs)
         return val
     def SetCanLiveOnPagebreak(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlCell_SetCanLiveOnPagebreak,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlCell_SetCanLiveOnPagebreak(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxHtmlCell instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlCell instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlCell(wxHtmlCellPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlc.new_wxHtmlCell,_args,_kwargs)
+        self.this = htmlc.new_wxHtmlCell(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -401,10 +401,10 @@ class wxHtmlWordCellPtr(wxHtmlCellPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxHtmlWordCell instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlWordCell instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlWordCell(wxHtmlWordCellPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlc.new_wxHtmlWordCell,_args,_kwargs)
+        self.this = htmlc.new_wxHtmlWordCell(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -415,60 +415,60 @@ class wxHtmlContainerCellPtr(wxHtmlCellPtr):
         self.this = this
         self.thisown = 0
     def InsertCell(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_InsertCell,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_InsertCell(self, *_args, **_kwargs)
         return val
     def SetAlignHor(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_SetAlignHor,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_SetAlignHor(self, *_args, **_kwargs)
         return val
     def GetAlignHor(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_GetAlignHor,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_GetAlignHor(self, *_args, **_kwargs)
         return val
     def SetAlignVer(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_SetAlignVer,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_SetAlignVer(self, *_args, **_kwargs)
         return val
     def GetAlignVer(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_GetAlignVer,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_GetAlignVer(self, *_args, **_kwargs)
         return val
     def SetIndent(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_SetIndent,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_SetIndent(self, *_args, **_kwargs)
         return val
     def GetIndent(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_GetIndent,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_GetIndent(self, *_args, **_kwargs)
         return val
     def GetIndentUnits(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_GetIndentUnits,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_GetIndentUnits(self, *_args, **_kwargs)
         return val
     def SetAlign(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_SetAlign,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_SetAlign(self, *_args, **_kwargs)
         return val
     def SetWidthFloat(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_SetWidthFloat,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_SetWidthFloat(self, *_args, **_kwargs)
         return val
     def SetWidthFloatFromTag(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_SetWidthFloatFromTag,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_SetWidthFloatFromTag(self, *_args, **_kwargs)
         return val
     def SetMinHeight(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_SetMinHeight,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_SetMinHeight(self, *_args, **_kwargs)
         return val
     def SetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_SetBackgroundColour,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_SetBackgroundColour(self, *_args, **_kwargs)
         return val
     def GetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_GetBackgroundColour,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_GetBackgroundColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetBorder(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_SetBorder,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_SetBorder(self, *_args, **_kwargs)
         return val
     def GetFirstCell(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlContainerCell_GetFirstCell,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlContainerCell_GetFirstCell(self, *_args, **_kwargs)
         if val: val = wxHtmlCellPtr(val) 
         return val
     def __repr__(self):
-        return "<C wxHtmlContainerCell instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlContainerCell instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlContainerCell(wxHtmlContainerCellPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlc.new_wxHtmlContainerCell,_args,_kwargs)
+        self.this = htmlc.new_wxHtmlContainerCell(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -479,10 +479,10 @@ class wxHtmlColourCellPtr(wxHtmlCellPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxHtmlColourCell instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlColourCell instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlColourCell(wxHtmlColourCellPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlc.new_wxHtmlColourCell,_args,_kwargs)
+        self.this = htmlc.new_wxHtmlColourCell(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -493,10 +493,10 @@ class wxHtmlFontCellPtr(wxHtmlCellPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxHtmlFontCell instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlFontCell instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlFontCell(wxHtmlFontCellPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlc.new_wxHtmlFontCell,_args,_kwargs)
+        self.this = htmlc.new_wxHtmlFontCell(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -507,10 +507,10 @@ class wxHtmlWidgetCellPtr(wxHtmlCellPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxHtmlWidgetCell instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlWidgetCell instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlWidgetCell(wxHtmlWidgetCellPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlc.new_wxHtmlWidgetCell,_args,_kwargs)
+        self.this = htmlc.new_wxHtmlWidgetCell(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -521,13 +521,13 @@ class wxHtmlFilterPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlFilter__setCallbackInfo,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlFilter__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxHtmlFilter instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlFilter instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlFilter(wxHtmlFilterPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlc.new_wxHtmlFilter,_args,_kwargs)
+        self.this = htmlc.new_wxHtmlFilter(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxHtmlFilter)
 
@@ -539,99 +539,102 @@ class wxHtmlWindowPtr(wxScrolledWindowPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_Create,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_Create(self, *_args, **_kwargs)
         return val
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow__setCallbackInfo,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def SetPage(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_SetPage,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_SetPage(self, *_args, **_kwargs)
         return val
     def LoadPage(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_LoadPage,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_LoadPage(self, *_args, **_kwargs)
+        return val
+    def LoadFile(self, *_args, **_kwargs):
+        val = htmlc.wxHtmlWindow_LoadFile(self, *_args, **_kwargs)
         return val
     def AppendToPage(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_AppendToPage,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_AppendToPage(self, *_args, **_kwargs)
         return val
     def GetOpenedPage(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_GetOpenedPage,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_GetOpenedPage(self, *_args, **_kwargs)
         return val
     def GetOpenedAnchor(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_GetOpenedAnchor,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_GetOpenedAnchor(self, *_args, **_kwargs)
         return val
     def GetOpenedPageTitle(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_GetOpenedPageTitle,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_GetOpenedPageTitle(self, *_args, **_kwargs)
         return val
     def SetRelatedFrame(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_SetRelatedFrame,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_SetRelatedFrame(self, *_args, **_kwargs)
         return val
     def GetRelatedFrame(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_GetRelatedFrame,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_GetRelatedFrame(self, *_args, **_kwargs)
         return val
     def SetRelatedStatusBar(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_SetRelatedStatusBar,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_SetRelatedStatusBar(self, *_args, **_kwargs)
         return val
     def SetFonts(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_SetFonts,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_SetFonts(self, *_args, **_kwargs)
         return val
     def SetTitle(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_SetTitle,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_SetTitle(self, *_args, **_kwargs)
         return val
     def SetBorders(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_SetBorders,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_SetBorders(self, *_args, **_kwargs)
         return val
     def ReadCustomization(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_ReadCustomization,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_ReadCustomization(self, *_args, **_kwargs)
         return val
     def WriteCustomization(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_WriteCustomization,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_WriteCustomization(self, *_args, **_kwargs)
         return val
     def HistoryBack(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_HistoryBack,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_HistoryBack(self, *_args, **_kwargs)
         return val
     def HistoryForward(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_HistoryForward,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_HistoryForward(self, *_args, **_kwargs)
         return val
     def HistoryCanBack(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_HistoryCanBack,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_HistoryCanBack(self, *_args, **_kwargs)
         return val
     def HistoryCanForward(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_HistoryCanForward,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_HistoryCanForward(self, *_args, **_kwargs)
         return val
     def HistoryClear(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_HistoryClear,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_HistoryClear(self, *_args, **_kwargs)
         return val
     def GetInternalRepresentation(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_GetInternalRepresentation,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_GetInternalRepresentation(self, *_args, **_kwargs)
         if val: val = wxHtmlContainerCellPtr(val) 
         return val
     def GetParser(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_GetParser,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_GetParser(self, *_args, **_kwargs)
         if val: val = wxHtmlWinParserPtr(val) 
         return val
     def ScrollToAnchor(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_ScrollToAnchor,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_ScrollToAnchor(self, *_args, **_kwargs)
         return val
     def HasAnchor(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_HasAnchor,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_HasAnchor(self, *_args, **_kwargs)
         return val
     def base_OnLinkClicked(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_base_OnLinkClicked,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_base_OnLinkClicked(self, *_args, **_kwargs)
         return val
     def base_OnSetTitle(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_base_OnSetTitle,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_base_OnSetTitle(self, *_args, **_kwargs)
         return val
     def base_OnCellMouseHover(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_base_OnCellMouseHover,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_base_OnCellMouseHover(self, *_args, **_kwargs)
         return val
     def base_OnCellClicked(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlWindow_base_OnCellClicked,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlWindow_base_OnCellClicked(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxHtmlWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlWindow(wxHtmlWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlc.new_wxHtmlWindow,_args,_kwargs)
+        self.this = htmlc.new_wxHtmlWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxHtmlWindow)
         self._setOORInfo(self)
@@ -639,7 +642,7 @@ class wxHtmlWindow(wxHtmlWindowPtr):
 
 
 def wxPreHtmlWindow(*_args,**_kwargs):
-    val = wxHtmlWindowPtr(apply(htmlc.new_wxPreHtmlWindow,_args,_kwargs))
+    val = wxHtmlWindowPtr(htmlc.new_wxPreHtmlWindow(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -656,28 +659,28 @@ class wxHtmlDCRendererPtr(wxObjectPtr):
             except:
                 pass
     def SetDC(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlDCRenderer_SetDC,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlDCRenderer_SetDC(self, *_args, **_kwargs)
         return val
     def SetSize(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlDCRenderer_SetSize,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlDCRenderer_SetSize(self, *_args, **_kwargs)
         return val
     def SetHtmlText(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlDCRenderer_SetHtmlText,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlDCRenderer_SetHtmlText(self, *_args, **_kwargs)
         return val
     def SetFonts(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlDCRenderer_SetFonts,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlDCRenderer_SetFonts(self, *_args, **_kwargs)
         return val
     def Render(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlDCRenderer_Render,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlDCRenderer_Render(self, *_args, **_kwargs)
         return val
     def GetTotalHeight(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlDCRenderer_GetTotalHeight,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlDCRenderer_GetTotalHeight(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxHtmlDCRenderer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlDCRenderer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlDCRenderer(wxHtmlDCRendererPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlc.new_wxHtmlDCRenderer,_args,_kwargs)
+        self.this = htmlc.new_wxHtmlDCRenderer(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -688,28 +691,28 @@ class wxHtmlPrintoutPtr(wxPrintoutPtr):
         self.this = this
         self.thisown = 0
     def SetHtmlText(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlPrintout_SetHtmlText,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlPrintout_SetHtmlText(self, *_args, **_kwargs)
         return val
     def SetHtmlFile(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlPrintout_SetHtmlFile,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlPrintout_SetHtmlFile(self, *_args, **_kwargs)
         return val
     def SetHeader(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlPrintout_SetHeader,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlPrintout_SetHeader(self, *_args, **_kwargs)
         return val
     def SetFooter(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlPrintout_SetFooter,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlPrintout_SetFooter(self, *_args, **_kwargs)
         return val
     def SetFonts(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlPrintout_SetFonts,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlPrintout_SetFonts(self, *_args, **_kwargs)
         return val
     def SetMargins(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlPrintout_SetMargins,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlPrintout_SetMargins(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxHtmlPrintout instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlPrintout instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlPrintout(wxHtmlPrintoutPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlc.new_wxHtmlPrintout,_args,_kwargs)
+        self.this = htmlc.new_wxHtmlPrintout(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -726,45 +729,45 @@ class wxHtmlEasyPrintingPtr(wxObjectPtr):
             except:
                 pass
     def PreviewFile(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlEasyPrinting_PreviewFile,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlEasyPrinting_PreviewFile(self, *_args, **_kwargs)
         return val
     def PreviewText(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlEasyPrinting_PreviewText,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlEasyPrinting_PreviewText(self, *_args, **_kwargs)
         return val
     def PrintFile(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlEasyPrinting_PrintFile,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlEasyPrinting_PrintFile(self, *_args, **_kwargs)
         return val
     def PrintText(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlEasyPrinting_PrintText,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlEasyPrinting_PrintText(self, *_args, **_kwargs)
         return val
     def PrinterSetup(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlEasyPrinting_PrinterSetup,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlEasyPrinting_PrinterSetup(self, *_args, **_kwargs)
         return val
     def PageSetup(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlEasyPrinting_PageSetup,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlEasyPrinting_PageSetup(self, *_args, **_kwargs)
         return val
     def SetHeader(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlEasyPrinting_SetHeader,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlEasyPrinting_SetHeader(self, *_args, **_kwargs)
         return val
     def SetFooter(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlEasyPrinting_SetFooter,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlEasyPrinting_SetFooter(self, *_args, **_kwargs)
         return val
     def SetFonts(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlEasyPrinting_SetFonts,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlEasyPrinting_SetFonts(self, *_args, **_kwargs)
         return val
     def GetPrintData(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlEasyPrinting_GetPrintData,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlEasyPrinting_GetPrintData(self, *_args, **_kwargs)
         if val: val = wxPrintDataPtr(val) 
         return val
     def GetPageSetupData(self, *_args, **_kwargs):
-        val = apply(htmlc.wxHtmlEasyPrinting_GetPageSetupData,(self,) + _args, _kwargs)
+        val = htmlc.wxHtmlEasyPrinting_GetPageSetupData(self, *_args, **_kwargs)
         if val: val = wxPageSetupDialogDataPtr(val) 
         return val
     def __repr__(self):
-        return "<C wxHtmlEasyPrinting instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlEasyPrinting instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlEasyPrinting(wxHtmlEasyPrintingPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlc.new_wxHtmlEasyPrinting,_args,_kwargs)
+        self.this = htmlc.new_wxHtmlEasyPrinting(*_args,**_kwargs)
         self.thisown = 1
 
 
diff --git a/wxPython/src/gtk/htmlhelp.py b/wxPython/src/gtk/htmlhelp.py
index 33fdd1e5df..778663be9f 100644
--- a/wxPython/src/gtk/htmlhelp.py
+++ b/wxPython/src/gtk/htmlhelp.py
@@ -47,43 +47,43 @@ class wxHtmlBookRecordPtr :
         self.this = this
         self.thisown = 0
     def GetBookFile(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlBookRecord_GetBookFile,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlBookRecord_GetBookFile(self, *_args, **_kwargs)
         return val
     def GetTitle(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlBookRecord_GetTitle,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlBookRecord_GetTitle(self, *_args, **_kwargs)
         return val
     def GetStart(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlBookRecord_GetStart,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlBookRecord_GetStart(self, *_args, **_kwargs)
         return val
     def GetBasePath(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlBookRecord_GetBasePath,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlBookRecord_GetBasePath(self, *_args, **_kwargs)
         return val
     def SetContentsRange(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlBookRecord_SetContentsRange,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlBookRecord_SetContentsRange(self, *_args, **_kwargs)
         return val
     def GetContentsStart(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlBookRecord_GetContentsStart,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlBookRecord_GetContentsStart(self, *_args, **_kwargs)
         return val
     def GetContentsEnd(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlBookRecord_GetContentsEnd,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlBookRecord_GetContentsEnd(self, *_args, **_kwargs)
         return val
     def SetTitle(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlBookRecord_SetTitle,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlBookRecord_SetTitle(self, *_args, **_kwargs)
         return val
     def SetBasePath(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlBookRecord_SetBasePath,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlBookRecord_SetBasePath(self, *_args, **_kwargs)
         return val
     def SetStart(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlBookRecord_SetStart,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlBookRecord_SetStart(self, *_args, **_kwargs)
         return val
     def GetFullPath(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlBookRecord_GetFullPath,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlBookRecord_GetFullPath(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxHtmlBookRecord instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlBookRecord instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlBookRecord(wxHtmlBookRecordPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlhelpc.new_wxHtmlBookRecord,_args,_kwargs)
+        self.this = htmlhelpc.new_wxHtmlBookRecord(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -94,23 +94,23 @@ class wxHtmlContentsItemPtr :
         self.this = this
         self.thisown = 0
     def GetLevel(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlContentsItem_GetLevel,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlContentsItem_GetLevel(self, *_args, **_kwargs)
         return val
     def GetID(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlContentsItem_GetID,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlContentsItem_GetID(self, *_args, **_kwargs)
         return val
     def GetName(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlContentsItem_GetName,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlContentsItem_GetName(self, *_args, **_kwargs)
         return val
     def GetPage(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlContentsItem_GetPage,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlContentsItem_GetPage(self, *_args, **_kwargs)
         return val
     def GetBook(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlContentsItem_GetBook,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlContentsItem_GetBook(self, *_args, **_kwargs)
         if val: val = wxHtmlBookRecordPtr(val) 
         return val
     def __repr__(self):
-        return "<C wxHtmlContentsItem instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlContentsItem instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlContentsItem(wxHtmlContentsItemPtr):
     def __init__(self,this):
         self.this = this
@@ -123,26 +123,26 @@ class wxHtmlSearchStatusPtr :
         self.this = this
         self.thisown = 0
     def Search(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlSearchStatus_Search,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlSearchStatus_Search(self, *_args, **_kwargs)
         return val
     def IsActive(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlSearchStatus_IsActive,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlSearchStatus_IsActive(self, *_args, **_kwargs)
         return val
     def GetCurIndex(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlSearchStatus_GetCurIndex,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlSearchStatus_GetCurIndex(self, *_args, **_kwargs)
         return val
     def GetMaxIndex(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlSearchStatus_GetMaxIndex,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlSearchStatus_GetMaxIndex(self, *_args, **_kwargs)
         return val
     def GetName(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlSearchStatus_GetName,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlSearchStatus_GetName(self, *_args, **_kwargs)
         return val
     def GetContentsItem(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlSearchStatus_GetContentsItem,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlSearchStatus_GetContentsItem(self, *_args, **_kwargs)
         if val: val = wxHtmlContentsItemPtr(val) 
         return val
     def __repr__(self):
-        return "<C wxHtmlSearchStatus instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlSearchStatus instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlSearchStatus(wxHtmlSearchStatusPtr):
     def __init__(self,this):
         self.this = this
@@ -161,39 +161,39 @@ class wxHtmlHelpDataPtr :
             except:
                 pass
     def SetTempDir(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpData_SetTempDir,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpData_SetTempDir(self, *_args, **_kwargs)
         return val
     def AddBook(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpData_AddBook,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpData_AddBook(self, *_args, **_kwargs)
         return val
     def FindPageByName(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpData_FindPageByName,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpData_FindPageByName(self, *_args, **_kwargs)
         return val
     def FindPageById(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpData_FindPageById,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpData_FindPageById(self, *_args, **_kwargs)
         return val
     def GetBookRecArray(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpData_GetBookRecArray,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpData_GetBookRecArray(self, *_args, **_kwargs)
         return val
     def GetContents(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpData_GetContents,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpData_GetContents(self, *_args, **_kwargs)
         if val: val = wxHtmlContentsItemPtr(val) 
         return val
     def GetContentsCnt(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpData_GetContentsCnt,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpData_GetContentsCnt(self, *_args, **_kwargs)
         return val
     def GetIndex(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpData_GetIndex,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpData_GetIndex(self, *_args, **_kwargs)
         if val: val = wxHtmlContentsItemPtr(val) 
         return val
     def GetIndexCnt(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpData_GetIndexCnt,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpData_GetIndexCnt(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxHtmlHelpData instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlHelpData instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlHelpData(wxHtmlHelpDataPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlhelpc.new_wxHtmlHelpData,_args,_kwargs)
+        self.this = htmlhelpc.new_wxHtmlHelpData(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -204,41 +204,41 @@ class wxHtmlHelpFramePtr(wxFramePtr):
         self.this = this
         self.thisown = 0
     def GetData(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpFrame_GetData,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpFrame_GetData(self, *_args, **_kwargs)
         if val: val = wxHtmlHelpDataPtr(val) 
         return val
     def SetTitleFormat(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpFrame_SetTitleFormat,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpFrame_SetTitleFormat(self, *_args, **_kwargs)
         return val
     def Display(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpFrame_Display,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpFrame_Display(self, *_args, **_kwargs)
         return val
     def DisplayID(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpFrame_DisplayID,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpFrame_DisplayID(self, *_args, **_kwargs)
         return val
     def DisplayContents(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpFrame_DisplayContents,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpFrame_DisplayContents(self, *_args, **_kwargs)
         return val
     def DisplayIndex(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpFrame_DisplayIndex,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpFrame_DisplayIndex(self, *_args, **_kwargs)
         return val
     def KeywordSearch(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpFrame_KeywordSearch,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpFrame_KeywordSearch(self, *_args, **_kwargs)
         return val
     def UseConfig(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpFrame_UseConfig,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpFrame_UseConfig(self, *_args, **_kwargs)
         return val
     def ReadCustomization(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpFrame_ReadCustomization,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpFrame_ReadCustomization(self, *_args, **_kwargs)
         return val
     def WriteCustomization(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpFrame_WriteCustomization,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpFrame_WriteCustomization(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxHtmlHelpFrame instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlHelpFrame instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlHelpFrame(wxHtmlHelpFramePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlhelpc.new_wxHtmlHelpFrame,_args,_kwargs)
+        self.this = htmlhelpc.new_wxHtmlHelpFrame(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -256,47 +256,47 @@ class wxHtmlHelpControllerPtr(wxEvtHandlerPtr):
             except:
                 pass
     def SetTitleFormat(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpController_SetTitleFormat,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpController_SetTitleFormat(self, *_args, **_kwargs)
         return val
     def SetTempDir(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpController_SetTempDir,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpController_SetTempDir(self, *_args, **_kwargs)
         return val
     def AddBook(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpController_AddBook,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpController_AddBook(self, *_args, **_kwargs)
         return val
     def Display(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpController_Display,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpController_Display(self, *_args, **_kwargs)
         return val
     def DisplayID(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpController_DisplayID,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpController_DisplayID(self, *_args, **_kwargs)
         return val
     def DisplayContents(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpController_DisplayContents,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpController_DisplayContents(self, *_args, **_kwargs)
         return val
     def DisplayIndex(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpController_DisplayIndex,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpController_DisplayIndex(self, *_args, **_kwargs)
         return val
     def KeywordSearch(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpController_KeywordSearch,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpController_KeywordSearch(self, *_args, **_kwargs)
         return val
     def UseConfig(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpController_UseConfig,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpController_UseConfig(self, *_args, **_kwargs)
         return val
     def ReadCustomization(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpController_ReadCustomization,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpController_ReadCustomization(self, *_args, **_kwargs)
         return val
     def WriteCustomization(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpController_WriteCustomization,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpController_WriteCustomization(self, *_args, **_kwargs)
         return val
     def GetFrame(self, *_args, **_kwargs):
-        val = apply(htmlhelpc.wxHtmlHelpController_GetFrame,(self,) + _args, _kwargs)
+        val = htmlhelpc.wxHtmlHelpController_GetFrame(self, *_args, **_kwargs)
         if val: val = wxHtmlHelpFramePtr(val) 
         return val
     def __repr__(self):
-        return "<C wxHtmlHelpController instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxHtmlHelpController instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxHtmlHelpController(wxHtmlHelpControllerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(htmlhelpc.new_wxHtmlHelpController,_args,_kwargs)
+        self.this = htmlhelpc.new_wxHtmlHelpController(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
diff --git a/wxPython/src/gtk/image.py b/wxPython/src/gtk/image.py
index c4d1896bd2..1aecd98a17 100644
--- a/wxPython/src/gtk/image.py
+++ b/wxPython/src/gtk/image.py
@@ -13,13 +13,13 @@ class wxImageHistogramPtr :
         self.this = this
         self.thisown = 0
     def FindFirstUnusedColour(self, *_args, **_kwargs):
-        val = apply(imagec.wxImageHistogram_FindFirstUnusedColour,(self,) + _args, _kwargs)
+        val = imagec.wxImageHistogram_FindFirstUnusedColour(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxImageHistogram instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxImageHistogram instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxImageHistogram(wxImageHistogramPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(imagec.new_wxImageHistogram,_args,_kwargs)
+        self.this = imagec.new_wxImageHistogram(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -30,34 +30,34 @@ class wxImageHandlerPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def GetName(self, *_args, **_kwargs):
-        val = apply(imagec.wxImageHandler_GetName,(self,) + _args, _kwargs)
+        val = imagec.wxImageHandler_GetName(self, *_args, **_kwargs)
         return val
     def GetExtension(self, *_args, **_kwargs):
-        val = apply(imagec.wxImageHandler_GetExtension,(self,) + _args, _kwargs)
+        val = imagec.wxImageHandler_GetExtension(self, *_args, **_kwargs)
         return val
     def GetType(self, *_args, **_kwargs):
-        val = apply(imagec.wxImageHandler_GetType,(self,) + _args, _kwargs)
+        val = imagec.wxImageHandler_GetType(self, *_args, **_kwargs)
         return val
     def GetMimeType(self, *_args, **_kwargs):
-        val = apply(imagec.wxImageHandler_GetMimeType,(self,) + _args, _kwargs)
+        val = imagec.wxImageHandler_GetMimeType(self, *_args, **_kwargs)
         return val
     def CanRead(self, *_args, **_kwargs):
-        val = apply(imagec.wxImageHandler_CanRead,(self,) + _args, _kwargs)
+        val = imagec.wxImageHandler_CanRead(self, *_args, **_kwargs)
         return val
     def SetName(self, *_args, **_kwargs):
-        val = apply(imagec.wxImageHandler_SetName,(self,) + _args, _kwargs)
+        val = imagec.wxImageHandler_SetName(self, *_args, **_kwargs)
         return val
     def SetExtension(self, *_args, **_kwargs):
-        val = apply(imagec.wxImageHandler_SetExtension,(self,) + _args, _kwargs)
+        val = imagec.wxImageHandler_SetExtension(self, *_args, **_kwargs)
         return val
     def SetType(self, *_args, **_kwargs):
-        val = apply(imagec.wxImageHandler_SetType,(self,) + _args, _kwargs)
+        val = imagec.wxImageHandler_SetType(self, *_args, **_kwargs)
         return val
     def SetMimeType(self, *_args, **_kwargs):
-        val = apply(imagec.wxImageHandler_SetMimeType,(self,) + _args, _kwargs)
+        val = imagec.wxImageHandler_SetMimeType(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxImageHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxImageHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxImageHandler(wxImageHandlerPtr):
     def __init__(self,this):
         self.this = this
@@ -70,10 +70,10 @@ class wxPNGHandlerPtr(wxImageHandlerPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxPNGHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPNGHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPNGHandler(wxPNGHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(imagec.new_wxPNGHandler,_args,_kwargs)
+        self.this = imagec.new_wxPNGHandler(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -84,10 +84,10 @@ class wxJPEGHandlerPtr(wxImageHandlerPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxJPEGHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxJPEGHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxJPEGHandler(wxJPEGHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(imagec.new_wxJPEGHandler,_args,_kwargs)
+        self.this = imagec.new_wxJPEGHandler(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -98,10 +98,10 @@ class wxBMPHandlerPtr(wxImageHandlerPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxBMPHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxBMPHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxBMPHandler(wxBMPHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(imagec.new_wxBMPHandler,_args,_kwargs)
+        self.this = imagec.new_wxBMPHandler(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -112,10 +112,10 @@ class wxICOHandlerPtr(wxBMPHandlerPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxICOHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxICOHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxICOHandler(wxICOHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(imagec.new_wxICOHandler,_args,_kwargs)
+        self.this = imagec.new_wxICOHandler(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -126,10 +126,10 @@ class wxCURHandlerPtr(wxICOHandlerPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxCURHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxCURHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxCURHandler(wxCURHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(imagec.new_wxCURHandler,_args,_kwargs)
+        self.this = imagec.new_wxCURHandler(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -140,10 +140,10 @@ class wxANIHandlerPtr(wxCURHandlerPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxANIHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxANIHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxANIHandler(wxANIHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(imagec.new_wxANIHandler,_args,_kwargs)
+        self.this = imagec.new_wxANIHandler(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -154,10 +154,10 @@ class wxGIFHandlerPtr(wxImageHandlerPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxGIFHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGIFHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGIFHandler(wxGIFHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(imagec.new_wxGIFHandler,_args,_kwargs)
+        self.this = imagec.new_wxGIFHandler(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -168,10 +168,10 @@ class wxPNMHandlerPtr(wxImageHandlerPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxPNMHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPNMHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPNMHandler(wxPNMHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(imagec.new_wxPNMHandler,_args,_kwargs)
+        self.this = imagec.new_wxPNMHandler(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -182,10 +182,10 @@ class wxPCXHandlerPtr(wxImageHandlerPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxPCXHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPCXHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPCXHandler(wxPCXHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(imagec.new_wxPCXHandler,_args,_kwargs)
+        self.this = imagec.new_wxPCXHandler(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -196,10 +196,10 @@ class wxTIFFHandlerPtr(wxImageHandlerPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxTIFFHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTIFFHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxTIFFHandler(wxTIFFHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(imagec.new_wxTIFFHandler,_args,_kwargs)
+        self.this = imagec.new_wxTIFFHandler(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -216,183 +216,184 @@ class wxImagePtr(wxObjectPtr):
             except:
                 pass
     def Create(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_Create,(self,) + _args, _kwargs)
+        val = imagec.wxImage_Create(self, *_args, **_kwargs)
         return val
     def Destroy(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_Destroy,(self,) + _args, _kwargs)
+        val = imagec.wxImage_Destroy(self, *_args, **_kwargs)
         return val
     def Scale(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_Scale,(self,) + _args, _kwargs)
+        val = imagec.wxImage_Scale(self, *_args, **_kwargs)
         if val: val = wxImagePtr(val) ; val.thisown = 1
         return val
     def ShrinkBy(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_ShrinkBy,(self,) + _args, _kwargs)
+        val = imagec.wxImage_ShrinkBy(self, *_args, **_kwargs)
         if val: val = wxImagePtr(val) ; val.thisown = 1
         return val
     def Rescale(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_Rescale,(self,) + _args, _kwargs)
+        val = imagec.wxImage_Rescale(self, *_args, **_kwargs)
         if val: val = wxImagePtr(val) 
         return val
     def SetRGB(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_SetRGB,(self,) + _args, _kwargs)
+        val = imagec.wxImage_SetRGB(self, *_args, **_kwargs)
         return val
     def GetRed(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetRed,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetRed(self, *_args, **_kwargs)
         return val
     def GetGreen(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetGreen,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetGreen(self, *_args, **_kwargs)
         return val
     def GetBlue(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetBlue,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetBlue(self, *_args, **_kwargs)
         return val
     def SetAlpha(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_SetAlpha,(self,) + _args, _kwargs)
+        val = imagec.wxImage_SetAlpha(self, *_args, **_kwargs)
         return val
     def GetAlpha(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetAlpha,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetAlpha(self, *_args, **_kwargs)
         return val
     def HasAlpha(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_HasAlpha,(self,) + _args, _kwargs)
+        val = imagec.wxImage_HasAlpha(self, *_args, **_kwargs)
         return val
     def FindFirstUnusedColour(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_FindFirstUnusedColour,(self,) + _args, _kwargs)
+        val = imagec.wxImage_FindFirstUnusedColour(self, *_args, **_kwargs)
         return val
     def SetMaskFromImage(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_SetMaskFromImage,(self,) + _args, _kwargs)
+        val = imagec.wxImage_SetMaskFromImage(self, *_args, **_kwargs)
         return val
     def LoadFile(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_LoadFile,(self,) + _args, _kwargs)
+        val = imagec.wxImage_LoadFile(self, *_args, **_kwargs)
         return val
     def LoadMimeFile(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_LoadMimeFile,(self,) + _args, _kwargs)
+        val = imagec.wxImage_LoadMimeFile(self, *_args, **_kwargs)
         return val
     def SaveFile(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_SaveFile,(self,) + _args, _kwargs)
+        val = imagec.wxImage_SaveFile(self, *_args, **_kwargs)
         return val
     def SaveMimeFile(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_SaveMimeFile,(self,) + _args, _kwargs)
+        val = imagec.wxImage_SaveMimeFile(self, *_args, **_kwargs)
         return val
     def LoadStream(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_LoadStream,(self,) + _args, _kwargs)
+        val = imagec.wxImage_LoadStream(self, *_args, **_kwargs)
         return val
     def LoadMimeStream(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_LoadMimeStream,(self,) + _args, _kwargs)
+        val = imagec.wxImage_LoadMimeStream(self, *_args, **_kwargs)
         return val
     def Ok(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_Ok,(self,) + _args, _kwargs)
+        val = imagec.wxImage_Ok(self, *_args, **_kwargs)
         return val
     def GetWidth(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetWidth,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetWidth(self, *_args, **_kwargs)
         return val
     def GetHeight(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetHeight,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetHeight(self, *_args, **_kwargs)
         return val
     def GetSubImage(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetSubImage,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetSubImage(self, *_args, **_kwargs)
         if val: val = wxImagePtr(val) ; val.thisown = 1
         return val
     def Copy(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_Copy,(self,) + _args, _kwargs)
+        val = imagec.wxImage_Copy(self, *_args, **_kwargs)
         if val: val = wxImagePtr(val) ; val.thisown = 1
         return val
     def Paste(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_Paste,(self,) + _args, _kwargs)
+        val = imagec.wxImage_Paste(self, *_args, **_kwargs)
         return val
     def GetData(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetData,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetData(self, *_args, **_kwargs)
         return val
     def SetData(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_SetData,(self,) + _args, _kwargs)
+        val = imagec.wxImage_SetData(self, *_args, **_kwargs)
         return val
     def GetDataBuffer(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetDataBuffer,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetDataBuffer(self, *_args, **_kwargs)
         return val
     def SetDataBuffer(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_SetDataBuffer,(self,) + _args, _kwargs)
+        val = imagec.wxImage_SetDataBuffer(self, *_args, **_kwargs)
         return val
     def GetAlphaData(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetAlphaData,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetAlphaData(self, *_args, **_kwargs)
         return val
     def SetAlphaData(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_SetAlphaData,(self,) + _args, _kwargs)
+        val = imagec.wxImage_SetAlphaData(self, *_args, **_kwargs)
         return val
     def GetAlphaBuffer(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetAlphaBuffer,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetAlphaBuffer(self, *_args, **_kwargs)
         return val
     def SetAlphaBuffer(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_SetAlphaBuffer,(self,) + _args, _kwargs)
+        val = imagec.wxImage_SetAlphaBuffer(self, *_args, **_kwargs)
         return val
     def SetMaskColour(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_SetMaskColour,(self,) + _args, _kwargs)
+        val = imagec.wxImage_SetMaskColour(self, *_args, **_kwargs)
         return val
     def GetMaskRed(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetMaskRed,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetMaskRed(self, *_args, **_kwargs)
         return val
     def GetMaskGreen(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetMaskGreen,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetMaskGreen(self, *_args, **_kwargs)
         return val
     def GetMaskBlue(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetMaskBlue,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetMaskBlue(self, *_args, **_kwargs)
         return val
     def SetMask(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_SetMask,(self,) + _args, _kwargs)
+        val = imagec.wxImage_SetMask(self, *_args, **_kwargs)
         return val
     def HasMask(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_HasMask,(self,) + _args, _kwargs)
+        val = imagec.wxImage_HasMask(self, *_args, **_kwargs)
         return val
     def Rotate(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_Rotate,(self,) + _args, _kwargs)
+        val = imagec.wxImage_Rotate(self, *_args, **_kwargs)
         if val: val = wxImagePtr(val) ; val.thisown = 1
         return val
     def Rotate90(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_Rotate90,(self,) + _args, _kwargs)
+        val = imagec.wxImage_Rotate90(self, *_args, **_kwargs)
         if val: val = wxImagePtr(val) ; val.thisown = 1
         return val
     def Mirror(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_Mirror,(self,) + _args, _kwargs)
+        val = imagec.wxImage_Mirror(self, *_args, **_kwargs)
         if val: val = wxImagePtr(val) ; val.thisown = 1
         return val
     def Replace(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_Replace,(self,) + _args, _kwargs)
+        val = imagec.wxImage_Replace(self, *_args, **_kwargs)
         return val
     def ConvertToMono(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_ConvertToMono,(self,) + _args, _kwargs)
+        val = imagec.wxImage_ConvertToMono(self, *_args, **_kwargs)
         if val: val = wxImagePtr(val) ; val.thisown = 1
         return val
     def SetOption(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_SetOption,(self,) + _args, _kwargs)
+        val = imagec.wxImage_SetOption(self, *_args, **_kwargs)
         return val
     def SetOptionInt(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_SetOptionInt,(self,) + _args, _kwargs)
+        val = imagec.wxImage_SetOptionInt(self, *_args, **_kwargs)
         return val
     def GetOption(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetOption,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetOption(self, *_args, **_kwargs)
         return val
     def GetOptionInt(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_GetOptionInt,(self,) + _args, _kwargs)
+        val = imagec.wxImage_GetOptionInt(self, *_args, **_kwargs)
         return val
     def HasOption(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_HasOption,(self,) + _args, _kwargs)
+        val = imagec.wxImage_HasOption(self, *_args, **_kwargs)
         return val
     def CountColours(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_CountColours,(self,) + _args, _kwargs)
+        val = imagec.wxImage_CountColours(self, *_args, **_kwargs)
         return val
     def ComputeHistogram(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_ComputeHistogram,(self,) + _args, _kwargs)
+        val = imagec.wxImage_ComputeHistogram(self, *_args, **_kwargs)
         return val
     def ConvertToBitmap(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_ConvertToBitmap,(self,) + _args, _kwargs)
+        val = imagec.wxImage_ConvertToBitmap(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) ; val.thisown = 1
         return val
     def ConvertToMonoBitmap(self, *_args, **_kwargs):
-        val = apply(imagec.wxImage_ConvertToMonoBitmap,(self,) + _args, _kwargs)
+        val = imagec.wxImage_ConvertToMonoBitmap(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) ; val.thisown = 1
         return val
     def __repr__(self):
-        return "<C wxImage instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxImage instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.Ok()
 class wxImage(wxImagePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(imagec.new_wxImage,_args,_kwargs)
+        self.this = imagec.new_wxImage(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -403,39 +404,39 @@ class wxImage(wxImagePtr):
 #-------------- FUNCTION WRAPPERS ------------------
 
 def wxEmptyImage(*_args, **_kwargs):
-    val = apply(imagec.wxEmptyImage,_args,_kwargs)
+    val = imagec.wxEmptyImage(*_args,**_kwargs)
     if val: val = wxImagePtr(val); val.thisown = 1
     return val
 
 def wxImageFromMime(*_args, **_kwargs):
-    val = apply(imagec.wxImageFromMime,_args,_kwargs)
+    val = imagec.wxImageFromMime(*_args,**_kwargs)
     if val: val = wxImagePtr(val); val.thisown = 1
     return val
 
 def wxImageFromBitmap(*_args, **_kwargs):
-    val = apply(imagec.wxImageFromBitmap,_args,_kwargs)
+    val = imagec.wxImageFromBitmap(*_args,**_kwargs)
     if val: val = wxImagePtr(val); val.thisown = 1
     return val
 
 def wxImageFromData(*_args, **_kwargs):
-    val = apply(imagec.wxImageFromData,_args,_kwargs)
+    val = imagec.wxImageFromData(*_args,**_kwargs)
     if val: val = wxImagePtr(val); val.thisown = 1
     return val
 
 def wxImageFromStream(*_args, **_kwargs):
-    val = apply(imagec.wxImageFromStream,_args,_kwargs)
+    val = imagec.wxImageFromStream(*_args,**_kwargs)
     if val: val = wxImagePtr(val); val.thisown = 1
     return val
 
 def wxImageFromStreamMime(*_args, **_kwargs):
-    val = apply(imagec.wxImageFromStreamMime,_args,_kwargs)
+    val = imagec.wxImageFromStreamMime(*_args,**_kwargs)
     if val: val = wxImagePtr(val); val.thisown = 1
     return val
 
 wxInitAllImageHandlers = imagec.wxInitAllImageHandlers
 
 def wxBitmapFromImage(*_args, **_kwargs):
-    val = apply(imagec.wxBitmapFromImage,_args,_kwargs)
+    val = imagec.wxBitmapFromImage(*_args,**_kwargs)
     if val: val = wxBitmapPtr(val); val.thisown = 1
     return val
 
diff --git a/wxPython/src/gtk/mdi.py b/wxPython/src/gtk/mdi.py
index 61c6f9d46c..69f586a9d4 100644
--- a/wxPython/src/gtk/mdi.py
+++ b/wxPython/src/gtk/mdi.py
@@ -24,44 +24,44 @@ class wxMDIParentFramePtr(wxFramePtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(mdic.wxMDIParentFrame_Create,(self,) + _args, _kwargs)
+        val = mdic.wxMDIParentFrame_Create(self, *_args, **_kwargs)
         return val
     def ActivateNext(self, *_args, **_kwargs):
-        val = apply(mdic.wxMDIParentFrame_ActivateNext,(self,) + _args, _kwargs)
+        val = mdic.wxMDIParentFrame_ActivateNext(self, *_args, **_kwargs)
         return val
     def ActivatePrevious(self, *_args, **_kwargs):
-        val = apply(mdic.wxMDIParentFrame_ActivatePrevious,(self,) + _args, _kwargs)
+        val = mdic.wxMDIParentFrame_ActivatePrevious(self, *_args, **_kwargs)
         return val
     def ArrangeIcons(self, *_args, **_kwargs):
-        val = apply(mdic.wxMDIParentFrame_ArrangeIcons,(self,) + _args, _kwargs)
+        val = mdic.wxMDIParentFrame_ArrangeIcons(self, *_args, **_kwargs)
         return val
     def Cascade(self, *_args, **_kwargs):
-        val = apply(mdic.wxMDIParentFrame_Cascade,(self,) + _args, _kwargs)
+        val = mdic.wxMDIParentFrame_Cascade(self, *_args, **_kwargs)
         return val
     def GetActiveChild(self, *_args, **_kwargs):
-        val = apply(mdic.wxMDIParentFrame_GetActiveChild,(self,) + _args, _kwargs)
+        val = mdic.wxMDIParentFrame_GetActiveChild(self, *_args, **_kwargs)
         return val
     def GetClientWindow(self, *_args, **_kwargs):
-        val = apply(mdic.wxMDIParentFrame_GetClientWindow,(self,) + _args, _kwargs)
+        val = mdic.wxMDIParentFrame_GetClientWindow(self, *_args, **_kwargs)
         return val
     def GetToolBar(self, *_args, **_kwargs):
-        val = apply(mdic.wxMDIParentFrame_GetToolBar,(self,) + _args, _kwargs)
+        val = mdic.wxMDIParentFrame_GetToolBar(self, *_args, **_kwargs)
         return val
     def Tile(self, *_args, **_kwargs):
-        val = apply(mdic.wxMDIParentFrame_Tile,(self,) + _args, _kwargs)
+        val = mdic.wxMDIParentFrame_Tile(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxMDIParentFrame instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMDIParentFrame instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMDIParentFrame(wxMDIParentFramePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(mdic.new_wxMDIParentFrame,_args,_kwargs)
+        self.this = mdic.new_wxMDIParentFrame(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreMDIParentFrame(*_args,**_kwargs):
-    val = wxMDIParentFramePtr(apply(mdic.new_wxPreMDIParentFrame,_args,_kwargs))
+    val = wxMDIParentFramePtr(mdic.new_wxPreMDIParentFrame(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -72,29 +72,29 @@ class wxMDIChildFramePtr(wxFramePtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(mdic.wxMDIChildFrame_Create,(self,) + _args, _kwargs)
+        val = mdic.wxMDIChildFrame_Create(self, *_args, **_kwargs)
         return val
     def Activate(self, *_args, **_kwargs):
-        val = apply(mdic.wxMDIChildFrame_Activate,(self,) + _args, _kwargs)
+        val = mdic.wxMDIChildFrame_Activate(self, *_args, **_kwargs)
         return val
     def Maximize(self, *_args, **_kwargs):
-        val = apply(mdic.wxMDIChildFrame_Maximize,(self,) + _args, _kwargs)
+        val = mdic.wxMDIChildFrame_Maximize(self, *_args, **_kwargs)
         return val
     def Restore(self, *_args, **_kwargs):
-        val = apply(mdic.wxMDIChildFrame_Restore,(self,) + _args, _kwargs)
+        val = mdic.wxMDIChildFrame_Restore(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxMDIChildFrame instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMDIChildFrame instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMDIChildFrame(wxMDIChildFramePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(mdic.new_wxMDIChildFrame,_args,_kwargs)
+        self.this = mdic.new_wxMDIChildFrame(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreMDIChildFrame(*_args,**_kwargs):
-    val = wxMDIChildFramePtr(apply(mdic.new_wxPreMDIChildFrame,_args,_kwargs))
+    val = wxMDIChildFramePtr(mdic.new_wxPreMDIChildFrame(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -105,20 +105,20 @@ class wxMDIClientWindowPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(mdic.wxMDIClientWindow_Create,(self,) + _args, _kwargs)
+        val = mdic.wxMDIClientWindow_Create(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxMDIClientWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMDIClientWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMDIClientWindow(wxMDIClientWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(mdic.new_wxMDIClientWindow,_args,_kwargs)
+        self.this = mdic.new_wxMDIClientWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreMDIClientWindow(*_args,**_kwargs):
-    val = wxMDIClientWindowPtr(apply(mdic.new_wxPreMDIClientWindow,_args,_kwargs))
+    val = wxMDIClientWindowPtr(mdic.new_wxPreMDIClientWindow(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
diff --git a/wxPython/src/gtk/misc.py b/wxPython/src/gtk/misc.py
index e1f06cc4f9..747c3ff1c2 100644
--- a/wxPython/src/gtk/misc.py
+++ b/wxPython/src/gtk/misc.py
@@ -5,13 +5,13 @@ class wxObjectPtr :
         self.this = this
         self.thisown = 0
     def GetClassName(self, *_args, **_kwargs):
-        val = apply(miscc.wxObject_GetClassName,(self,) + _args, _kwargs)
+        val = miscc.wxObject_GetClassName(self, *_args, **_kwargs)
         return val
     def Destroy(self, *_args, **_kwargs):
-        val = apply(miscc.wxObject_Destroy,(self,) + _args, _kwargs)
+        val = miscc.wxObject_Destroy(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxObject instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxObject instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxObject(wxObjectPtr):
     def __init__(self,this):
         self.this = this
@@ -30,34 +30,34 @@ class wxSizePtr :
             except:
                 pass
     def Set(self, *_args, **_kwargs):
-        val = apply(miscc.wxSize_Set,(self,) + _args, _kwargs)
+        val = miscc.wxSize_Set(self, *_args, **_kwargs)
         return val
     def GetX(self, *_args, **_kwargs):
-        val = apply(miscc.wxSize_GetX,(self,) + _args, _kwargs)
+        val = miscc.wxSize_GetX(self, *_args, **_kwargs)
         return val
     def GetY(self, *_args, **_kwargs):
-        val = apply(miscc.wxSize_GetY,(self,) + _args, _kwargs)
+        val = miscc.wxSize_GetY(self, *_args, **_kwargs)
         return val
     def GetWidth(self, *_args, **_kwargs):
-        val = apply(miscc.wxSize_GetWidth,(self,) + _args, _kwargs)
+        val = miscc.wxSize_GetWidth(self, *_args, **_kwargs)
         return val
     def GetHeight(self, *_args, **_kwargs):
-        val = apply(miscc.wxSize_GetHeight,(self,) + _args, _kwargs)
+        val = miscc.wxSize_GetHeight(self, *_args, **_kwargs)
         return val
     def SetWidth(self, *_args, **_kwargs):
-        val = apply(miscc.wxSize_SetWidth,(self,) + _args, _kwargs)
+        val = miscc.wxSize_SetWidth(self, *_args, **_kwargs)
         return val
     def SetHeight(self, *_args, **_kwargs):
-        val = apply(miscc.wxSize_SetHeight,(self,) + _args, _kwargs)
+        val = miscc.wxSize_SetHeight(self, *_args, **_kwargs)
         return val
     def asTuple(self, *_args, **_kwargs):
-        val = apply(miscc.wxSize_asTuple,(self,) + _args, _kwargs)
+        val = miscc.wxSize_asTuple(self, *_args, **_kwargs)
         return val
     def __eq__(self, *_args, **_kwargs):
-        val = apply(miscc.wxSize___eq__,(self,) + _args, _kwargs)
+        val = miscc.wxSize___eq__(self, *_args, **_kwargs)
         return val
     def __ne__(self, *_args, **_kwargs):
-        val = apply(miscc.wxSize___ne__,(self,) + _args, _kwargs)
+        val = miscc.wxSize___ne__(self, *_args, **_kwargs)
         return val
     def __setattr__(self,name,value):
         if name == "x" :
@@ -84,7 +84,7 @@ class wxSizePtr :
             return miscc.wxSize_height_get(self)
         raise AttributeError,name
     def __repr__(self):
-        return "<C wxSize instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSize instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     def __str__(self):                   return str(self.asTuple())
     def __repr__(self):                  return 'wxSize'+str(self.asTuple())
@@ -101,7 +101,7 @@ class wxSizePtr :
 
 class wxSize(wxSizePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(miscc.new_wxSize,_args,_kwargs)
+        self.this = miscc.new_wxSize(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -118,24 +118,24 @@ class wxRealPointPtr :
             except:
                 pass
     def Set(self, *_args, **_kwargs):
-        val = apply(miscc.wxRealPoint_Set,(self,) + _args, _kwargs)
+        val = miscc.wxRealPoint_Set(self, *_args, **_kwargs)
         return val
     def asTuple(self, *_args, **_kwargs):
-        val = apply(miscc.wxRealPoint_asTuple,(self,) + _args, _kwargs)
+        val = miscc.wxRealPoint_asTuple(self, *_args, **_kwargs)
         return val
     def __add__(self, *_args, **_kwargs):
-        val = apply(miscc.wxRealPoint___add__,(self,) + _args, _kwargs)
+        val = miscc.wxRealPoint___add__(self, *_args, **_kwargs)
         if val: val = wxRealPointPtr(val) ; val.thisown = 1
         return val
     def __sub__(self, *_args, **_kwargs):
-        val = apply(miscc.wxRealPoint___sub__,(self,) + _args, _kwargs)
+        val = miscc.wxRealPoint___sub__(self, *_args, **_kwargs)
         if val: val = wxRealPointPtr(val) ; val.thisown = 1
         return val
     def __eq__(self, *_args, **_kwargs):
-        val = apply(miscc.wxRealPoint___eq__,(self,) + _args, _kwargs)
+        val = miscc.wxRealPoint___eq__(self, *_args, **_kwargs)
         return val
     def __ne__(self, *_args, **_kwargs):
-        val = apply(miscc.wxRealPoint___ne__,(self,) + _args, _kwargs)
+        val = miscc.wxRealPoint___ne__(self, *_args, **_kwargs)
         return val
     def __setattr__(self,name,value):
         if name == "x" :
@@ -152,7 +152,7 @@ class wxRealPointPtr :
             return miscc.wxRealPoint_y_get(self)
         raise AttributeError,name
     def __repr__(self):
-        return "<C wxRealPoint instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxRealPoint instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     def __str__(self):                   return str(self.asTuple())
     def __repr__(self):                  return 'wxRealPoint'+str(self.asTuple())
@@ -169,7 +169,7 @@ class wxRealPointPtr :
 
 class wxRealPoint(wxRealPointPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(miscc.new_wxRealPoint,_args,_kwargs)
+        self.this = miscc.new_wxRealPoint(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -186,24 +186,24 @@ class wxPointPtr :
             except:
                 pass
     def Set(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint_Set,(self,) + _args, _kwargs)
+        val = miscc.wxPoint_Set(self, *_args, **_kwargs)
         return val
     def asTuple(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint_asTuple,(self,) + _args, _kwargs)
+        val = miscc.wxPoint_asTuple(self, *_args, **_kwargs)
         return val
     def __add__(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint___add__,(self,) + _args, _kwargs)
+        val = miscc.wxPoint___add__(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def __sub__(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint___sub__,(self,) + _args, _kwargs)
+        val = miscc.wxPoint___sub__(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def __eq__(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint___eq__,(self,) + _args, _kwargs)
+        val = miscc.wxPoint___eq__(self, *_args, **_kwargs)
         return val
     def __ne__(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint___ne__,(self,) + _args, _kwargs)
+        val = miscc.wxPoint___ne__(self, *_args, **_kwargs)
         return val
     def __setattr__(self,name,value):
         if name == "x" :
@@ -220,7 +220,7 @@ class wxPointPtr :
             return miscc.wxPoint_y_get(self)
         raise AttributeError,name
     def __repr__(self):
-        return "<C wxPoint instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPoint instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     def __str__(self):                   return str(self.asTuple())
     def __repr__(self):                  return 'wxPoint'+str(self.asTuple())
@@ -237,7 +237,7 @@ class wxPointPtr :
 
 class wxPoint(wxPointPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(miscc.new_wxPoint,_args,_kwargs)
+        self.this = miscc.new_wxPoint(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -254,103 +254,103 @@ class wxRectPtr :
             except:
                 pass
     def GetX(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_GetX,(self,) + _args, _kwargs)
+        val = miscc.wxRect_GetX(self, *_args, **_kwargs)
         return val
     def SetX(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_SetX,(self,) + _args, _kwargs)
+        val = miscc.wxRect_SetX(self, *_args, **_kwargs)
         return val
     def GetY(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_GetY,(self,) + _args, _kwargs)
+        val = miscc.wxRect_GetY(self, *_args, **_kwargs)
         return val
     def SetY(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_SetY,(self,) + _args, _kwargs)
+        val = miscc.wxRect_SetY(self, *_args, **_kwargs)
         return val
     def GetWidth(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_GetWidth,(self,) + _args, _kwargs)
+        val = miscc.wxRect_GetWidth(self, *_args, **_kwargs)
         return val
     def SetWidth(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_SetWidth,(self,) + _args, _kwargs)
+        val = miscc.wxRect_SetWidth(self, *_args, **_kwargs)
         return val
     def GetHeight(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_GetHeight,(self,) + _args, _kwargs)
+        val = miscc.wxRect_GetHeight(self, *_args, **_kwargs)
         return val
     def SetHeight(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_SetHeight,(self,) + _args, _kwargs)
+        val = miscc.wxRect_SetHeight(self, *_args, **_kwargs)
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_GetPosition,(self,) + _args, _kwargs)
+        val = miscc.wxRect_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetSize(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_GetSize,(self,) + _args, _kwargs)
+        val = miscc.wxRect_GetSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def SetPosition(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_SetPosition,(self,) + _args, _kwargs)
+        val = miscc.wxRect_SetPosition(self, *_args, **_kwargs)
         return val
     def SetSize(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_SetSize,(self,) + _args, _kwargs)
+        val = miscc.wxRect_SetSize(self, *_args, **_kwargs)
         return val
     def GetLeft(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_GetLeft,(self,) + _args, _kwargs)
+        val = miscc.wxRect_GetLeft(self, *_args, **_kwargs)
         return val
     def GetTop(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_GetTop,(self,) + _args, _kwargs)
+        val = miscc.wxRect_GetTop(self, *_args, **_kwargs)
         return val
     def GetBottom(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_GetBottom,(self,) + _args, _kwargs)
+        val = miscc.wxRect_GetBottom(self, *_args, **_kwargs)
         return val
     def GetRight(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_GetRight,(self,) + _args, _kwargs)
+        val = miscc.wxRect_GetRight(self, *_args, **_kwargs)
         return val
     def SetLeft(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_SetLeft,(self,) + _args, _kwargs)
+        val = miscc.wxRect_SetLeft(self, *_args, **_kwargs)
         return val
     def SetRight(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_SetRight,(self,) + _args, _kwargs)
+        val = miscc.wxRect_SetRight(self, *_args, **_kwargs)
         return val
     def SetTop(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_SetTop,(self,) + _args, _kwargs)
+        val = miscc.wxRect_SetTop(self, *_args, **_kwargs)
         return val
     def SetBottom(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_SetBottom,(self,) + _args, _kwargs)
+        val = miscc.wxRect_SetBottom(self, *_args, **_kwargs)
         return val
     def Deflate(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_Deflate,(self,) + _args, _kwargs)
+        val = miscc.wxRect_Deflate(self, *_args, **_kwargs)
         return val
     def Inflate(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_Inflate,(self,) + _args, _kwargs)
+        val = miscc.wxRect_Inflate(self, *_args, **_kwargs)
         return val
     def InsideXY(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_InsideXY,(self,) + _args, _kwargs)
+        val = miscc.wxRect_InsideXY(self, *_args, **_kwargs)
         return val
     def Inside(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_Inside,(self,) + _args, _kwargs)
+        val = miscc.wxRect_Inside(self, *_args, **_kwargs)
         return val
     def Intersects(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_Intersects,(self,) + _args, _kwargs)
+        val = miscc.wxRect_Intersects(self, *_args, **_kwargs)
         return val
     def OffsetXY(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_OffsetXY,(self,) + _args, _kwargs)
+        val = miscc.wxRect_OffsetXY(self, *_args, **_kwargs)
         return val
     def Offset(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_Offset,(self,) + _args, _kwargs)
+        val = miscc.wxRect_Offset(self, *_args, **_kwargs)
         return val
     def Set(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_Set,(self,) + _args, _kwargs)
+        val = miscc.wxRect_Set(self, *_args, **_kwargs)
         return val
     def asTuple(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect_asTuple,(self,) + _args, _kwargs)
+        val = miscc.wxRect_asTuple(self, *_args, **_kwargs)
         return val
     def __add__(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect___add__,(self,) + _args, _kwargs)
+        val = miscc.wxRect___add__(self, *_args, **_kwargs)
         if val: val = wxRectPtr(val) ; val.thisown = 1
         return val
     def __eq__(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect___eq__,(self,) + _args, _kwargs)
+        val = miscc.wxRect___eq__(self, *_args, **_kwargs)
         return val
     def __ne__(self, *_args, **_kwargs):
-        val = apply(miscc.wxRect___ne__,(self,) + _args, _kwargs)
+        val = miscc.wxRect___ne__(self, *_args, **_kwargs)
         return val
     def __setattr__(self,name,value):
         if name == "x" :
@@ -377,7 +377,7 @@ class wxRectPtr :
             return miscc.wxRect_height_get(self)
         raise AttributeError,name
     def __repr__(self):
-        return "<C wxRect instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxRect instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     def __str__(self):                   return str(self.asTuple())
     def __repr__(self):                  return 'wxRect'+str(self.asTuple())
@@ -433,7 +433,7 @@ class wxRectPtr :
     
 class wxRect(wxRectPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(miscc.new_wxRect,_args,_kwargs)
+        self.this = miscc.new_wxRect(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -444,66 +444,66 @@ class wxPoint2DDoublePtr :
         self.this = this
         self.thisown = 0
     def GetFloor(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble_GetFloor,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble_GetFloor(self, *_args, **_kwargs)
         return val
     def GetRounded(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble_GetRounded,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble_GetRounded(self, *_args, **_kwargs)
         return val
     def GetVectorLength(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble_GetVectorLength,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble_GetVectorLength(self, *_args, **_kwargs)
         return val
     def GetVectorAngle(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble_GetVectorAngle,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble_GetVectorAngle(self, *_args, **_kwargs)
         return val
     def SetVectorLength(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble_SetVectorLength,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble_SetVectorLength(self, *_args, **_kwargs)
         return val
     def SetVectorAngle(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble_SetVectorAngle,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble_SetVectorAngle(self, *_args, **_kwargs)
         return val
     def GetDistance(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble_GetDistance,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble_GetDistance(self, *_args, **_kwargs)
         return val
     def GetDistanceSquare(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble_GetDistanceSquare,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble_GetDistanceSquare(self, *_args, **_kwargs)
         return val
     def GetDotProduct(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble_GetDotProduct,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble_GetDotProduct(self, *_args, **_kwargs)
         return val
     def GetCrossProduct(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble_GetCrossProduct,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble_GetCrossProduct(self, *_args, **_kwargs)
         return val
     def Set(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble_Set,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble_Set(self, *_args, **_kwargs)
         return val
     def __neg__(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble___neg__,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble___neg__(self, *_args, **_kwargs)
         if val: val = wxPoint2DDoublePtr(val) ; val.thisown = 1
         return val
     def __iadd__(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble___iadd__,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble___iadd__(self, *_args, **_kwargs)
         if val: val = wxPoint2DDoublePtr(val) 
         return val
     def __isub__(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble___isub__,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble___isub__(self, *_args, **_kwargs)
         if val: val = wxPoint2DDoublePtr(val) 
         return val
     def __imul__(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble___imul__,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble___imul__(self, *_args, **_kwargs)
         if val: val = wxPoint2DDoublePtr(val) 
         return val
     def __idiv__(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble___idiv__,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble___idiv__(self, *_args, **_kwargs)
         if val: val = wxPoint2DDoublePtr(val) 
         return val
     def __eq__(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble___eq__,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble___eq__(self, *_args, **_kwargs)
         return val
     def __ne__(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble___ne__,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble___ne__(self, *_args, **_kwargs)
         return val
     def asTuple(self, *_args, **_kwargs):
-        val = apply(miscc.wxPoint2DDouble_asTuple,(self,) + _args, _kwargs)
+        val = miscc.wxPoint2DDouble_asTuple(self, *_args, **_kwargs)
         return val
     def __setattr__(self,name,value):
         if name == "m_x" :
@@ -530,7 +530,7 @@ class wxPoint2DDoublePtr :
             return miscc.wxPoint2DDouble_y_get(self)
         raise AttributeError,name
     def __repr__(self):
-        return "<C wxPoint2DDouble instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPoint2DDouble instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     def SetPolarCoordinates(self, angle, length):
         self.SetVectorLength(length)
@@ -554,18 +554,18 @@ class wxPoint2DDoublePtr :
 
 class wxPoint2DDouble(wxPoint2DDoublePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(miscc.new_wxPoint2DDouble,_args,_kwargs)
+        self.this = miscc.new_wxPoint2DDouble(*_args,**_kwargs)
         self.thisown = 1
 
 
 
 def wxPoint2DDoubleCopy(*_args,**_kwargs):
-    val = wxPoint2DDoublePtr(apply(miscc.new_wxPoint2DDoubleCopy,_args,_kwargs))
+    val = wxPoint2DDoublePtr(miscc.new_wxPoint2DDoubleCopy(*_args,**_kwargs))
     val.thisown = 1
     return val
 
 def wxPoint2DDoubleFromPoint(*_args,**_kwargs):
-    val = wxPoint2DDoublePtr(apply(miscc.new_wxPoint2DDoubleFromPoint,_args,_kwargs))
+    val = wxPoint2DDoublePtr(miscc.new_wxPoint2DDoubleFromPoint(*_args,**_kwargs))
     val.thisown = 1
     return val
 
@@ -575,37 +575,37 @@ class wxIndividualLayoutConstraintPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def Above(self, *_args, **_kwargs):
-        val = apply(miscc.wxIndividualLayoutConstraint_Above,(self,) + _args, _kwargs)
+        val = miscc.wxIndividualLayoutConstraint_Above(self, *_args, **_kwargs)
         return val
     def Absolute(self, *_args, **_kwargs):
-        val = apply(miscc.wxIndividualLayoutConstraint_Absolute,(self,) + _args, _kwargs)
+        val = miscc.wxIndividualLayoutConstraint_Absolute(self, *_args, **_kwargs)
         return val
     def AsIs(self, *_args, **_kwargs):
-        val = apply(miscc.wxIndividualLayoutConstraint_AsIs,(self,) + _args, _kwargs)
+        val = miscc.wxIndividualLayoutConstraint_AsIs(self, *_args, **_kwargs)
         return val
     def Below(self, *_args, **_kwargs):
-        val = apply(miscc.wxIndividualLayoutConstraint_Below,(self,) + _args, _kwargs)
+        val = miscc.wxIndividualLayoutConstraint_Below(self, *_args, **_kwargs)
         return val
     def Unconstrained(self, *_args, **_kwargs):
-        val = apply(miscc.wxIndividualLayoutConstraint_Unconstrained,(self,) + _args, _kwargs)
+        val = miscc.wxIndividualLayoutConstraint_Unconstrained(self, *_args, **_kwargs)
         return val
     def LeftOf(self, *_args, **_kwargs):
-        val = apply(miscc.wxIndividualLayoutConstraint_LeftOf,(self,) + _args, _kwargs)
+        val = miscc.wxIndividualLayoutConstraint_LeftOf(self, *_args, **_kwargs)
         return val
     def PercentOf(self, *_args, **_kwargs):
-        val = apply(miscc.wxIndividualLayoutConstraint_PercentOf,(self,) + _args, _kwargs)
+        val = miscc.wxIndividualLayoutConstraint_PercentOf(self, *_args, **_kwargs)
         return val
     def RightOf(self, *_args, **_kwargs):
-        val = apply(miscc.wxIndividualLayoutConstraint_RightOf,(self,) + _args, _kwargs)
+        val = miscc.wxIndividualLayoutConstraint_RightOf(self, *_args, **_kwargs)
         return val
     def SameAs(self, *_args, **_kwargs):
-        val = apply(miscc.wxIndividualLayoutConstraint_SameAs,(self,) + _args, _kwargs)
+        val = miscc.wxIndividualLayoutConstraint_SameAs(self, *_args, **_kwargs)
         return val
     def Set(self, *_args, **_kwargs):
-        val = apply(miscc.wxIndividualLayoutConstraint_Set,(self,) + _args, _kwargs)
+        val = miscc.wxIndividualLayoutConstraint_Set(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxIndividualLayoutConstraint instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxIndividualLayoutConstraint instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxIndividualLayoutConstraint(wxIndividualLayoutConstraintPtr):
     def __init__(self,this):
         self.this = this
@@ -662,10 +662,10 @@ class wxLayoutConstraintsPtr(wxObjectPtr):
             return wxIndividualLayoutConstraintPtr(miscc.wxLayoutConstraints_width_get(self))
         raise AttributeError,name
     def __repr__(self):
-        return "<C wxLayoutConstraints instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxLayoutConstraints instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxLayoutConstraints(wxLayoutConstraintsPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(miscc.new_wxLayoutConstraints,_args,_kwargs)
+        self.this = miscc.new_wxLayoutConstraints(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -682,22 +682,22 @@ class wxAcceleratorEntryPtr :
             except:
                 pass
     def Set(self, *_args, **_kwargs):
-        val = apply(miscc.wxAcceleratorEntry_Set,(self,) + _args, _kwargs)
+        val = miscc.wxAcceleratorEntry_Set(self, *_args, **_kwargs)
         return val
     def GetFlags(self, *_args, **_kwargs):
-        val = apply(miscc.wxAcceleratorEntry_GetFlags,(self,) + _args, _kwargs)
+        val = miscc.wxAcceleratorEntry_GetFlags(self, *_args, **_kwargs)
         return val
     def GetKeyCode(self, *_args, **_kwargs):
-        val = apply(miscc.wxAcceleratorEntry_GetKeyCode,(self,) + _args, _kwargs)
+        val = miscc.wxAcceleratorEntry_GetKeyCode(self, *_args, **_kwargs)
         return val
     def GetCommand(self, *_args, **_kwargs):
-        val = apply(miscc.wxAcceleratorEntry_GetCommand,(self,) + _args, _kwargs)
+        val = miscc.wxAcceleratorEntry_GetCommand(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxAcceleratorEntry instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxAcceleratorEntry instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxAcceleratorEntry(wxAcceleratorEntryPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(miscc.new_wxAcceleratorEntry,_args,_kwargs)
+        self.this = miscc.new_wxAcceleratorEntry(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -714,10 +714,10 @@ class wxAcceleratorTablePtr(wxObjectPtr):
             except:
                 pass
     def __repr__(self):
-        return "<C wxAcceleratorTable instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxAcceleratorTable instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxAcceleratorTable(wxAcceleratorTablePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(miscc.new_wxAcceleratorTable,_args,_kwargs)
+        self.this = miscc.new_wxAcceleratorTable(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -734,10 +734,10 @@ class wxBusyInfoPtr(wxObjectPtr):
             except:
                 pass
     def __repr__(self):
-        return "<C wxBusyInfo instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxBusyInfo instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxBusyInfo(wxBusyInfoPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(miscc.new_wxBusyInfo,_args,_kwargs)
+        self.this = miscc.new_wxBusyInfo(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -806,7 +806,7 @@ wxGetUserHome = miscc.wxGetUserHome
 wxGetProcessId = miscc.wxGetProcessId
 
 def wxGetAccelFromString(*_args, **_kwargs):
-    val = apply(miscc.wxGetAccelFromString,_args,_kwargs)
+    val = miscc.wxGetAccelFromString(*_args,**_kwargs)
     if val: val = wxAcceleratorEntryPtr(val)
     return val
 
diff --git a/wxPython/src/gtk/misc2.cpp b/wxPython/src/gtk/misc2.cpp
index 38f5b9d4e9..c5ca113c0a 100644
--- a/wxPython/src/gtk/misc2.cpp
+++ b/wxPython/src/gtk/misc2.cpp
@@ -4275,6 +4275,7 @@ static PyObject *_wrap_wxPyTimer_SetOwner(PyObject *self, PyObject *args, PyObje
 #define wxPyTimer_Start(_swigobj,_swigarg0,_swigarg1)  (_swigobj->Start(_swigarg0,_swigarg1))
 static PyObject *_wrap_wxPyTimer_Start(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
+    bool  _result;
     wxPyTimer * _arg0;
     int  _arg1 = (int ) -1;
     int  _arg2 = (int ) FALSE;
@@ -4293,12 +4294,11 @@ static PyObject *_wrap_wxPyTimer_Start(PyObject *self, PyObject *args, PyObject
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPyTimer_Start(_arg0,_arg1,_arg2);
+    _result = (bool )wxPyTimer_Start(_arg0,_arg1,_arg2);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
diff --git a/wxPython/src/gtk/misc2.py b/wxPython/src/gtk/misc2.py
index bf1634563b..376b6d6adf 100644
--- a/wxPython/src/gtk/misc2.py
+++ b/wxPython/src/gtk/misc2.py
@@ -64,7 +64,7 @@ class wxSystemSettingsPtr :
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxSystemSettings instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSystemSettings instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSystemSettings(wxSystemSettingsPtr):
     def __init__(self,this):
         self.this = this
@@ -77,19 +77,19 @@ class wxToolTipPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def SetTip(self, *_args, **_kwargs):
-        val = apply(misc2c.wxToolTip_SetTip,(self,) + _args, _kwargs)
+        val = misc2c.wxToolTip_SetTip(self, *_args, **_kwargs)
         return val
     def GetTip(self, *_args, **_kwargs):
-        val = apply(misc2c.wxToolTip_GetTip,(self,) + _args, _kwargs)
+        val = misc2c.wxToolTip_GetTip(self, *_args, **_kwargs)
         return val
     def GetWindow(self, *_args, **_kwargs):
-        val = apply(misc2c.wxToolTip_GetWindow,(self,) + _args, _kwargs)
+        val = misc2c.wxToolTip_GetWindow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxToolTip instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxToolTip instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxToolTip(wxToolTipPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxToolTip,_args,_kwargs)
+        self.this = misc2c.new_wxToolTip(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -106,51 +106,52 @@ class wxCaretPtr :
             except:
                 pass
     def IsOk(self, *_args, **_kwargs):
-        val = apply(misc2c.wxCaret_IsOk,(self,) + _args, _kwargs)
+        val = misc2c.wxCaret_IsOk(self, *_args, **_kwargs)
         return val
     def IsVisible(self, *_args, **_kwargs):
-        val = apply(misc2c.wxCaret_IsVisible,(self,) + _args, _kwargs)
+        val = misc2c.wxCaret_IsVisible(self, *_args, **_kwargs)
         return val
     def GetPositionTuple(self, *_args, **_kwargs):
-        val = apply(misc2c.wxCaret_GetPositionTuple,(self,) + _args, _kwargs)
+        val = misc2c.wxCaret_GetPositionTuple(self, *_args, **_kwargs)
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(misc2c.wxCaret_GetPosition,(self,) + _args, _kwargs)
+        val = misc2c.wxCaret_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetSizeTuple(self, *_args, **_kwargs):
-        val = apply(misc2c.wxCaret_GetSizeTuple,(self,) + _args, _kwargs)
+        val = misc2c.wxCaret_GetSizeTuple(self, *_args, **_kwargs)
         return val
     def GetSize(self, *_args, **_kwargs):
-        val = apply(misc2c.wxCaret_GetSize,(self,) + _args, _kwargs)
+        val = misc2c.wxCaret_GetSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetWindow(self, *_args, **_kwargs):
-        val = apply(misc2c.wxCaret_GetWindow,(self,) + _args, _kwargs)
+        val = misc2c.wxCaret_GetWindow(self, *_args, **_kwargs)
         return val
     def MoveXY(self, *_args, **_kwargs):
-        val = apply(misc2c.wxCaret_MoveXY,(self,) + _args, _kwargs)
+        val = misc2c.wxCaret_MoveXY(self, *_args, **_kwargs)
         return val
     def Move(self, *_args, **_kwargs):
-        val = apply(misc2c.wxCaret_Move,(self,) + _args, _kwargs)
+        val = misc2c.wxCaret_Move(self, *_args, **_kwargs)
         return val
     def SetSizeWH(self, *_args, **_kwargs):
-        val = apply(misc2c.wxCaret_SetSizeWH,(self,) + _args, _kwargs)
+        val = misc2c.wxCaret_SetSizeWH(self, *_args, **_kwargs)
         return val
     def SetSize(self, *_args, **_kwargs):
-        val = apply(misc2c.wxCaret_SetSize,(self,) + _args, _kwargs)
+        val = misc2c.wxCaret_SetSize(self, *_args, **_kwargs)
         return val
     def Show(self, *_args, **_kwargs):
-        val = apply(misc2c.wxCaret_Show,(self,) + _args, _kwargs)
+        val = misc2c.wxCaret_Show(self, *_args, **_kwargs)
         return val
     def Hide(self, *_args, **_kwargs):
-        val = apply(misc2c.wxCaret_Hide,(self,) + _args, _kwargs)
+        val = misc2c.wxCaret_Hide(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxCaret instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxCaret instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.IsOk()
 class wxCaret(wxCaretPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxCaret,_args,_kwargs)
+        self.this = misc2c.new_wxCaret(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -167,10 +168,10 @@ class wxBusyCursorPtr :
             except:
                 pass
     def __repr__(self):
-        return "<C wxBusyCursor instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxBusyCursor instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxBusyCursor(wxBusyCursorPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxBusyCursor,_args,_kwargs)
+        self.this = misc2c.new_wxBusyCursor(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -187,10 +188,10 @@ class wxWindowDisablerPtr :
             except:
                 pass
     def __repr__(self):
-        return "<C wxWindowDisabler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxWindowDisabler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxWindowDisabler(wxWindowDisablerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxWindowDisabler,_args,_kwargs)
+        self.this = misc2c.new_wxWindowDisabler(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -207,10 +208,10 @@ class wxMutexGuiLockerPtr :
             except:
                 pass
     def __repr__(self):
-        return "<C wxMutexGuiLocker instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMutexGuiLocker instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMutexGuiLocker(wxMutexGuiLockerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxMutexGuiLocker,_args,_kwargs)
+        self.this = misc2c.new_wxMutexGuiLocker(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -227,16 +228,16 @@ class wxTipProviderPtr :
             except:
                 pass
     def GetTip(self, *_args, **_kwargs):
-        val = apply(misc2c.wxTipProvider_GetTip,(self,) + _args, _kwargs)
+        val = misc2c.wxTipProvider_GetTip(self, *_args, **_kwargs)
         return val
     def GetCurrentTip(self, *_args, **_kwargs):
-        val = apply(misc2c.wxTipProvider_GetCurrentTip,(self,) + _args, _kwargs)
+        val = misc2c.wxTipProvider_GetCurrentTip(self, *_args, **_kwargs)
         return val
     def PreprocessTip(self, *_args, **_kwargs):
-        val = apply(misc2c.wxTipProvider_PreprocessTip,(self,) + _args, _kwargs)
+        val = misc2c.wxTipProvider_PreprocessTip(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTipProvider instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTipProvider instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxTipProvider(wxTipProviderPtr):
     def __init__(self,this):
         self.this = this
@@ -249,13 +250,13 @@ class wxPyTipProviderPtr(wxTipProviderPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(misc2c.wxPyTipProvider__setCallbackInfo,(self,) + _args, _kwargs)
+        val = misc2c.wxPyTipProvider__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyTipProvider instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyTipProvider instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyTipProvider(wxPyTipProviderPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxPyTipProvider,_args,_kwargs)
+        self.this = misc2c.new_wxPyTipProvider(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyTipProvider)
 
@@ -273,60 +274,60 @@ class wxDragImagePtr(wxObjectPtr):
             except:
                 pass
     def SetBackingBitmap(self, *_args, **_kwargs):
-        val = apply(misc2c.wxDragImage_SetBackingBitmap,(self,) + _args, _kwargs)
+        val = misc2c.wxDragImage_SetBackingBitmap(self, *_args, **_kwargs)
         return val
     def BeginDrag(self, *_args, **_kwargs):
-        val = apply(misc2c.wxDragImage_BeginDrag,(self,) + _args, _kwargs)
+        val = misc2c.wxDragImage_BeginDrag(self, *_args, **_kwargs)
         return val
     def BeginDragBounded(self, *_args, **_kwargs):
-        val = apply(misc2c.wxDragImage_BeginDragBounded,(self,) + _args, _kwargs)
+        val = misc2c.wxDragImage_BeginDragBounded(self, *_args, **_kwargs)
         return val
     def EndDrag(self, *_args, **_kwargs):
-        val = apply(misc2c.wxDragImage_EndDrag,(self,) + _args, _kwargs)
+        val = misc2c.wxDragImage_EndDrag(self, *_args, **_kwargs)
         return val
     def Move(self, *_args, **_kwargs):
-        val = apply(misc2c.wxDragImage_Move,(self,) + _args, _kwargs)
+        val = misc2c.wxDragImage_Move(self, *_args, **_kwargs)
         return val
     def Show(self, *_args, **_kwargs):
-        val = apply(misc2c.wxDragImage_Show,(self,) + _args, _kwargs)
+        val = misc2c.wxDragImage_Show(self, *_args, **_kwargs)
         return val
     def Hide(self, *_args, **_kwargs):
-        val = apply(misc2c.wxDragImage_Hide,(self,) + _args, _kwargs)
+        val = misc2c.wxDragImage_Hide(self, *_args, **_kwargs)
         return val
     def GetImageRect(self, *_args, **_kwargs):
-        val = apply(misc2c.wxDragImage_GetImageRect,(self,) + _args, _kwargs)
+        val = misc2c.wxDragImage_GetImageRect(self, *_args, **_kwargs)
         if val: val = wxRectPtr(val) ; val.thisown = 1
         return val
     def RedrawImage(self, *_args, **_kwargs):
-        val = apply(misc2c.wxDragImage_RedrawImage,(self,) + _args, _kwargs)
+        val = misc2c.wxDragImage_RedrawImage(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxDragImage instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDragImage instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     BeginDrag2 = BeginDragBounded
 class wxDragImage(wxDragImagePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxDragImage,_args,_kwargs)
+        self.this = misc2c.new_wxDragImage(*_args,**_kwargs)
         self.thisown = 1
 
 
 
 def wxDragIcon(*_args,**_kwargs):
-    val = wxDragImagePtr(apply(misc2c.new_wxDragIcon,_args,_kwargs))
+    val = wxDragImagePtr(misc2c.new_wxDragIcon(*_args,**_kwargs))
     val.thisown = 1
     return val
 
 def wxDragString(*_args,**_kwargs):
-    val = wxDragImagePtr(apply(misc2c.new_wxDragString,_args,_kwargs))
+    val = wxDragImagePtr(misc2c.new_wxDragString(*_args,**_kwargs))
     val.thisown = 1
     return val
 
 def wxDragTreeItem(*_args,**_kwargs):
-    val = wxDragImagePtr(apply(misc2c.new_wxDragTreeItem,_args,_kwargs))
+    val = wxDragImagePtr(misc2c.new_wxDragTreeItem(*_args,**_kwargs))
     val.thisown = 1
     return val
 
 def wxDragListItem(*_args,**_kwargs):
-    val = wxDragImagePtr(apply(misc2c.new_wxDragListItem,_args,_kwargs))
+    val = wxDragImagePtr(misc2c.new_wxDragListItem(*_args,**_kwargs))
     val.thisown = 1
     return val
 
@@ -342,28 +343,28 @@ class wxPyTimerPtr(wxObjectPtr):
             except:
                 pass
     def GetInterval(self, *_args, **_kwargs):
-        val = apply(misc2c.wxPyTimer_GetInterval,(self,) + _args, _kwargs)
+        val = misc2c.wxPyTimer_GetInterval(self, *_args, **_kwargs)
         return val
     def IsOneShot(self, *_args, **_kwargs):
-        val = apply(misc2c.wxPyTimer_IsOneShot,(self,) + _args, _kwargs)
+        val = misc2c.wxPyTimer_IsOneShot(self, *_args, **_kwargs)
         return val
     def IsRunning(self, *_args, **_kwargs):
-        val = apply(misc2c.wxPyTimer_IsRunning,(self,) + _args, _kwargs)
+        val = misc2c.wxPyTimer_IsRunning(self, *_args, **_kwargs)
         return val
     def SetOwner(self, *_args, **_kwargs):
-        val = apply(misc2c.wxPyTimer_SetOwner,(self,) + _args, _kwargs)
+        val = misc2c.wxPyTimer_SetOwner(self, *_args, **_kwargs)
         return val
     def Start(self, *_args, **_kwargs):
-        val = apply(misc2c.wxPyTimer_Start,(self,) + _args, _kwargs)
+        val = misc2c.wxPyTimer_Start(self, *_args, **_kwargs)
         return val
     def Stop(self, *_args, **_kwargs):
-        val = apply(misc2c.wxPyTimer_Stop,(self,) + _args, _kwargs)
+        val = misc2c.wxPyTimer_Stop(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyTimer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyTimer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyTimer(wxPyTimerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxPyTimer,_args,_kwargs)
+        self.this = misc2c.new_wxPyTimer(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -380,22 +381,22 @@ class wxStopWatchPtr :
             except:
                 pass
     def Start(self, *_args, **_kwargs):
-        val = apply(misc2c.wxStopWatch_Start,(self,) + _args, _kwargs)
+        val = misc2c.wxStopWatch_Start(self, *_args, **_kwargs)
         return val
     def Pause(self, *_args, **_kwargs):
-        val = apply(misc2c.wxStopWatch_Pause,(self,) + _args, _kwargs)
+        val = misc2c.wxStopWatch_Pause(self, *_args, **_kwargs)
         return val
     def Resume(self, *_args, **_kwargs):
-        val = apply(misc2c.wxStopWatch_Resume,(self,) + _args, _kwargs)
+        val = misc2c.wxStopWatch_Resume(self, *_args, **_kwargs)
         return val
     def Time(self, *_args, **_kwargs):
-        val = apply(misc2c.wxStopWatch_Time,(self,) + _args, _kwargs)
+        val = misc2c.wxStopWatch_Time(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxStopWatch instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxStopWatch instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxStopWatch(wxStopWatchPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxStopWatch,_args,_kwargs)
+        self.this = misc2c.new_wxStopWatch(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -406,19 +407,19 @@ class wxLogPtr :
         self.this = this
         self.thisown = 0
     def Flush(self, *_args, **_kwargs):
-        val = apply(misc2c.wxLog_Flush,(self,) + _args, _kwargs)
+        val = misc2c.wxLog_Flush(self, *_args, **_kwargs)
         return val
     def GetVerbose(self, *_args, **_kwargs):
-        val = apply(misc2c.wxLog_GetVerbose,(self,) + _args, _kwargs)
+        val = misc2c.wxLog_GetVerbose(self, *_args, **_kwargs)
         return val
     def TimeStamp(self, *_args, **_kwargs):
-        val = apply(misc2c.wxLog_TimeStamp,(self,) + _args, _kwargs)
+        val = misc2c.wxLog_TimeStamp(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxLog instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxLog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxLog(wxLogPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxLog,_args,_kwargs)
+        self.this = misc2c.new_wxLog(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -429,10 +430,10 @@ class wxLogStderrPtr(wxLogPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxLogStderr instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxLogStderr instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxLogStderr(wxLogStderrPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxLogStderr,_args,_kwargs)
+        self.this = misc2c.new_wxLogStderr(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -443,10 +444,10 @@ class wxLogTextCtrlPtr(wxLogPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxLogTextCtrl instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxLogTextCtrl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxLogTextCtrl(wxLogTextCtrlPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxLogTextCtrl,_args,_kwargs)
+        self.this = misc2c.new_wxLogTextCtrl(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -457,10 +458,10 @@ class wxLogGuiPtr(wxLogPtr):
         self.this = this
         self.thisown = 0
     def __repr__(self):
-        return "<C wxLogGui instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxLogGui instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxLogGui(wxLogGuiPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxLogGui,_args,_kwargs)
+        self.this = misc2c.new_wxLogGui(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -471,26 +472,26 @@ class wxLogWindowPtr(wxLogPtr):
         self.this = this
         self.thisown = 0
     def Show(self, *_args, **_kwargs):
-        val = apply(misc2c.wxLogWindow_Show,(self,) + _args, _kwargs)
+        val = misc2c.wxLogWindow_Show(self, *_args, **_kwargs)
         return val
     def GetFrame(self, *_args, **_kwargs):
-        val = apply(misc2c.wxLogWindow_GetFrame,(self,) + _args, _kwargs)
+        val = misc2c.wxLogWindow_GetFrame(self, *_args, **_kwargs)
         return val
     def GetOldLog(self, *_args, **_kwargs):
-        val = apply(misc2c.wxLogWindow_GetOldLog,(self,) + _args, _kwargs)
+        val = misc2c.wxLogWindow_GetOldLog(self, *_args, **_kwargs)
         if val: val = wxLogPtr(val) 
         return val
     def IsPassingMessages(self, *_args, **_kwargs):
-        val = apply(misc2c.wxLogWindow_IsPassingMessages,(self,) + _args, _kwargs)
+        val = misc2c.wxLogWindow_IsPassingMessages(self, *_args, **_kwargs)
         return val
     def PassMessages(self, *_args, **_kwargs):
-        val = apply(misc2c.wxLogWindow_PassMessages,(self,) + _args, _kwargs)
+        val = misc2c.wxLogWindow_PassMessages(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxLogWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxLogWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxLogWindow(wxLogWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxLogWindow,_args,_kwargs)
+        self.this = misc2c.new_wxLogWindow(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -501,23 +502,23 @@ class wxLogChainPtr(wxLogPtr):
         self.this = this
         self.thisown = 0
     def SetLog(self, *_args, **_kwargs):
-        val = apply(misc2c.wxLogChain_SetLog,(self,) + _args, _kwargs)
+        val = misc2c.wxLogChain_SetLog(self, *_args, **_kwargs)
         return val
     def PassMessages(self, *_args, **_kwargs):
-        val = apply(misc2c.wxLogChain_PassMessages,(self,) + _args, _kwargs)
+        val = misc2c.wxLogChain_PassMessages(self, *_args, **_kwargs)
         return val
     def IsPassingMessages(self, *_args, **_kwargs):
-        val = apply(misc2c.wxLogChain_IsPassingMessages,(self,) + _args, _kwargs)
+        val = misc2c.wxLogChain_IsPassingMessages(self, *_args, **_kwargs)
         return val
     def GetOldLog(self, *_args, **_kwargs):
-        val = apply(misc2c.wxLogChain_GetOldLog,(self,) + _args, _kwargs)
+        val = misc2c.wxLogChain_GetOldLog(self, *_args, **_kwargs)
         if val: val = wxLogPtr(val) 
         return val
     def __repr__(self):
-        return "<C wxLogChain instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxLogChain instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxLogChain(wxLogChainPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxLogChain,_args,_kwargs)
+        self.this = misc2c.new_wxLogChain(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -534,10 +535,10 @@ class wxLogNullPtr :
             except:
                 pass
     def __repr__(self):
-        return "<C wxLogNull instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxLogNull instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxLogNull(wxLogNullPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxLogNull,_args,_kwargs)
+        self.this = misc2c.new_wxLogNull(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -548,16 +549,16 @@ class wxPyLogPtr(wxLogPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(misc2c.wxPyLog__setCallbackInfo,(self,) + _args, _kwargs)
+        val = misc2c.wxPyLog__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def Destroy(self, *_args, **_kwargs):
-        val = apply(misc2c.wxPyLog_Destroy,(self,) + _args, _kwargs)
+        val = misc2c.wxPyLog_Destroy(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyLog instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyLog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyLog(wxPyLogPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxPyLog,_args,_kwargs)
+        self.this = misc2c.new_wxPyLog(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyLog)
 
@@ -569,10 +570,10 @@ class wxProcessEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def GetPid(self, *_args, **_kwargs):
-        val = apply(misc2c.wxProcessEvent_GetPid,(self,) + _args, _kwargs)
+        val = misc2c.wxProcessEvent_GetPid(self, *_args, **_kwargs)
         return val
     def GetExitCode(self, *_args, **_kwargs):
-        val = apply(misc2c.wxProcessEvent_GetExitCode,(self,) + _args, _kwargs)
+        val = misc2c.wxProcessEvent_GetExitCode(self, *_args, **_kwargs)
         return val
     def __setattr__(self,name,value):
         if name == "m_pid" :
@@ -589,10 +590,10 @@ class wxProcessEventPtr(wxEventPtr):
             return misc2c.wxProcessEvent_m_exitcode_get(self)
         raise AttributeError,name
     def __repr__(self):
-        return "<C wxProcessEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxProcessEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxProcessEvent(wxProcessEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxProcessEvent,_args,_kwargs)
+        self.this = misc2c.new_wxProcessEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -603,50 +604,50 @@ class wxProcessPtr(wxEvtHandlerPtr):
         self.this = this
         self.thisown = 0
     def Destroy(self, *_args, **_kwargs):
-        val = apply(misc2c.wxProcess_Destroy,(self,) + _args, _kwargs)
+        val = misc2c.wxProcess_Destroy(self, *_args, **_kwargs)
         return val
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(misc2c.wxProcess__setCallbackInfo,(self,) + _args, _kwargs)
+        val = misc2c.wxProcess__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def base_OnTerminate(self, *_args, **_kwargs):
-        val = apply(misc2c.wxProcess_base_OnTerminate,(self,) + _args, _kwargs)
+        val = misc2c.wxProcess_base_OnTerminate(self, *_args, **_kwargs)
         return val
     def Redirect(self, *_args, **_kwargs):
-        val = apply(misc2c.wxProcess_Redirect,(self,) + _args, _kwargs)
+        val = misc2c.wxProcess_Redirect(self, *_args, **_kwargs)
         return val
     def IsRedirected(self, *_args, **_kwargs):
-        val = apply(misc2c.wxProcess_IsRedirected,(self,) + _args, _kwargs)
+        val = misc2c.wxProcess_IsRedirected(self, *_args, **_kwargs)
         return val
     def Detach(self, *_args, **_kwargs):
-        val = apply(misc2c.wxProcess_Detach,(self,) + _args, _kwargs)
+        val = misc2c.wxProcess_Detach(self, *_args, **_kwargs)
         return val
     def GetInputStream(self, *_args, **_kwargs):
-        val = apply(misc2c.wxProcess_GetInputStream,(self,) + _args, _kwargs)
+        val = misc2c.wxProcess_GetInputStream(self, *_args, **_kwargs)
         return val
     def GetErrorStream(self, *_args, **_kwargs):
-        val = apply(misc2c.wxProcess_GetErrorStream,(self,) + _args, _kwargs)
+        val = misc2c.wxProcess_GetErrorStream(self, *_args, **_kwargs)
         return val
     def GetOutputStream(self, *_args, **_kwargs):
-        val = apply(misc2c.wxProcess_GetOutputStream,(self,) + _args, _kwargs)
+        val = misc2c.wxProcess_GetOutputStream(self, *_args, **_kwargs)
         if val: val = wxOutputStreamPtr(val) 
         return val
     def CloseOutput(self, *_args, **_kwargs):
-        val = apply(misc2c.wxProcess_CloseOutput,(self,) + _args, _kwargs)
+        val = misc2c.wxProcess_CloseOutput(self, *_args, **_kwargs)
         return val
     def IsInputOpened(self, *_args, **_kwargs):
-        val = apply(misc2c.wxProcess_IsInputOpened,(self,) + _args, _kwargs)
+        val = misc2c.wxProcess_IsInputOpened(self, *_args, **_kwargs)
         return val
     def IsInputAvailable(self, *_args, **_kwargs):
-        val = apply(misc2c.wxProcess_IsInputAvailable,(self,) + _args, _kwargs)
+        val = misc2c.wxProcess_IsInputAvailable(self, *_args, **_kwargs)
         return val
     def IsErrorAvailable(self, *_args, **_kwargs):
-        val = apply(misc2c.wxProcess_IsErrorAvailable,(self,) + _args, _kwargs)
+        val = misc2c.wxProcess_IsErrorAvailable(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxProcess instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxProcess instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxProcess(wxProcessPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxProcess,_args,_kwargs)
+        self.this = misc2c.new_wxProcess(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxProcess)
 
@@ -664,137 +665,138 @@ class wxJoystickPtr(wxObjectPtr):
             except:
                 pass
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetPosition,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetZPosition(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetZPosition,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetZPosition(self, *_args, **_kwargs)
         return val
     def GetButtonState(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetButtonState,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetButtonState(self, *_args, **_kwargs)
         return val
     def GetPOVPosition(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetPOVPosition,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetPOVPosition(self, *_args, **_kwargs)
         return val
     def GetPOVCTSPosition(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetPOVCTSPosition,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetPOVCTSPosition(self, *_args, **_kwargs)
         return val
     def GetRudderPosition(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetRudderPosition,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetRudderPosition(self, *_args, **_kwargs)
         return val
     def GetUPosition(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetUPosition,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetUPosition(self, *_args, **_kwargs)
         return val
     def GetVPosition(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetVPosition,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetVPosition(self, *_args, **_kwargs)
         return val
     def GetMovementThreshold(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetMovementThreshold,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetMovementThreshold(self, *_args, **_kwargs)
         return val
     def SetMovementThreshold(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_SetMovementThreshold,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_SetMovementThreshold(self, *_args, **_kwargs)
         return val
     def IsOk(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_IsOk,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_IsOk(self, *_args, **_kwargs)
         return val
     def GetNumberJoysticks(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetNumberJoysticks,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetNumberJoysticks(self, *_args, **_kwargs)
         return val
     def GetManufacturerId(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetManufacturerId,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetManufacturerId(self, *_args, **_kwargs)
         return val
     def GetProductId(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetProductId,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetProductId(self, *_args, **_kwargs)
         return val
     def GetProductName(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetProductName,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetProductName(self, *_args, **_kwargs)
         return val
     def GetXMin(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetXMin,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetXMin(self, *_args, **_kwargs)
         return val
     def GetYMin(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetYMin,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetYMin(self, *_args, **_kwargs)
         return val
     def GetZMin(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetZMin,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetZMin(self, *_args, **_kwargs)
         return val
     def GetXMax(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetXMax,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetXMax(self, *_args, **_kwargs)
         return val
     def GetYMax(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetYMax,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetYMax(self, *_args, **_kwargs)
         return val
     def GetZMax(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetZMax,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetZMax(self, *_args, **_kwargs)
         return val
     def GetNumberButtons(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetNumberButtons,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetNumberButtons(self, *_args, **_kwargs)
         return val
     def GetNumberAxes(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetNumberAxes,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetNumberAxes(self, *_args, **_kwargs)
         return val
     def GetMaxButtons(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetMaxButtons,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetMaxButtons(self, *_args, **_kwargs)
         return val
     def GetMaxAxes(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetMaxAxes,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetMaxAxes(self, *_args, **_kwargs)
         return val
     def GetPollingMin(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetPollingMin,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetPollingMin(self, *_args, **_kwargs)
         return val
     def GetPollingMax(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetPollingMax,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetPollingMax(self, *_args, **_kwargs)
         return val
     def GetRudderMin(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetRudderMin,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetRudderMin(self, *_args, **_kwargs)
         return val
     def GetRudderMax(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetRudderMax,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetRudderMax(self, *_args, **_kwargs)
         return val
     def GetUMin(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetUMin,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetUMin(self, *_args, **_kwargs)
         return val
     def GetUMax(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetUMax,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetUMax(self, *_args, **_kwargs)
         return val
     def GetVMin(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetVMin,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetVMin(self, *_args, **_kwargs)
         return val
     def GetVMax(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_GetVMax,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_GetVMax(self, *_args, **_kwargs)
         return val
     def HasRudder(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_HasRudder,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_HasRudder(self, *_args, **_kwargs)
         return val
     def HasZ(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_HasZ,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_HasZ(self, *_args, **_kwargs)
         return val
     def HasU(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_HasU,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_HasU(self, *_args, **_kwargs)
         return val
     def HasV(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_HasV,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_HasV(self, *_args, **_kwargs)
         return val
     def HasPOV(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_HasPOV,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_HasPOV(self, *_args, **_kwargs)
         return val
     def HasPOV4Dir(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_HasPOV4Dir,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_HasPOV4Dir(self, *_args, **_kwargs)
         return val
     def HasPOVCTS(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_HasPOVCTS,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_HasPOVCTS(self, *_args, **_kwargs)
         return val
     def SetCapture(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_SetCapture,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_SetCapture(self, *_args, **_kwargs)
         return val
     def ReleaseCapture(self, *_args, **_kwargs):
-        val = apply(misc2c.wxJoystick_ReleaseCapture,(self,) + _args, _kwargs)
+        val = misc2c.wxJoystick_ReleaseCapture(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxJoystick instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxJoystick instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.IsOk()
 class wxJoystick(wxJoystickPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxJoystick,_args,_kwargs)
+        self.this = misc2c.new_wxJoystick(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -811,16 +813,17 @@ class wxWavePtr(wxObjectPtr):
             except:
                 pass
     def IsOk(self, *_args, **_kwargs):
-        val = apply(misc2c.wxWave_IsOk,(self,) + _args, _kwargs)
+        val = misc2c.wxWave_IsOk(self, *_args, **_kwargs)
         return val
     def Play(self, *_args, **_kwargs):
-        val = apply(misc2c.wxWave_Play,(self,) + _args, _kwargs)
+        val = misc2c.wxWave_Play(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxWave instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxWave instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.IsOk()
 class wxWave(wxWavePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxWave,_args,_kwargs)
+        self.this = misc2c.new_wxWave(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -831,57 +834,57 @@ class wxFileTypeInfoPtr :
         self.this = this
         self.thisown = 0
     def IsValid(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileTypeInfo_IsValid,(self,) + _args, _kwargs)
+        val = misc2c.wxFileTypeInfo_IsValid(self, *_args, **_kwargs)
         return val
     def SetIcon(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileTypeInfo_SetIcon,(self,) + _args, _kwargs)
+        val = misc2c.wxFileTypeInfo_SetIcon(self, *_args, **_kwargs)
         return val
     def SetShortDesc(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileTypeInfo_SetShortDesc,(self,) + _args, _kwargs)
+        val = misc2c.wxFileTypeInfo_SetShortDesc(self, *_args, **_kwargs)
         return val
     def GetMimeType(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileTypeInfo_GetMimeType,(self,) + _args, _kwargs)
+        val = misc2c.wxFileTypeInfo_GetMimeType(self, *_args, **_kwargs)
         return val
     def GetOpenCommand(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileTypeInfo_GetOpenCommand,(self,) + _args, _kwargs)
+        val = misc2c.wxFileTypeInfo_GetOpenCommand(self, *_args, **_kwargs)
         return val
     def GetPrintCommand(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileTypeInfo_GetPrintCommand,(self,) + _args, _kwargs)
+        val = misc2c.wxFileTypeInfo_GetPrintCommand(self, *_args, **_kwargs)
         return val
     def GetShortDesc(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileTypeInfo_GetShortDesc,(self,) + _args, _kwargs)
+        val = misc2c.wxFileTypeInfo_GetShortDesc(self, *_args, **_kwargs)
         return val
     def GetDescription(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileTypeInfo_GetDescription,(self,) + _args, _kwargs)
+        val = misc2c.wxFileTypeInfo_GetDescription(self, *_args, **_kwargs)
         return val
     def GetExtensions(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileTypeInfo_GetExtensions,(self,) + _args, _kwargs)
+        val = misc2c.wxFileTypeInfo_GetExtensions(self, *_args, **_kwargs)
         return val
     def GetExtensionsCount(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileTypeInfo_GetExtensionsCount,(self,) + _args, _kwargs)
+        val = misc2c.wxFileTypeInfo_GetExtensionsCount(self, *_args, **_kwargs)
         return val
     def GetIconFile(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileTypeInfo_GetIconFile,(self,) + _args, _kwargs)
+        val = misc2c.wxFileTypeInfo_GetIconFile(self, *_args, **_kwargs)
         return val
     def GetIconIndex(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileTypeInfo_GetIconIndex,(self,) + _args, _kwargs)
+        val = misc2c.wxFileTypeInfo_GetIconIndex(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFileTypeInfo instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFileTypeInfo instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFileTypeInfo(wxFileTypeInfoPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxFileTypeInfo,_args,_kwargs)
+        self.this = misc2c.new_wxFileTypeInfo(*_args,**_kwargs)
         self.thisown = 1
 
 
 
 def wxFileTypeInfoSequence(*_args,**_kwargs):
-    val = wxFileTypeInfoPtr(apply(misc2c.new_wxFileTypeInfoSequence,_args,_kwargs))
+    val = wxFileTypeInfoPtr(misc2c.new_wxFileTypeInfoSequence(*_args,**_kwargs))
     val.thisown = 1
     return val
 
 def wxNullFileTypeInfo(*_args,**_kwargs):
-    val = wxFileTypeInfoPtr(apply(misc2c.new_wxNullFileTypeInfo,_args,_kwargs))
+    val = wxFileTypeInfoPtr(misc2c.new_wxNullFileTypeInfo(*_args,**_kwargs))
     val.thisown = 1
     return val
 
@@ -891,41 +894,41 @@ class wxFileTypePtr :
         self.this = this
         self.thisown = 0
     def GetMimeType(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileType_GetMimeType,(self,) + _args, _kwargs)
+        val = misc2c.wxFileType_GetMimeType(self, *_args, **_kwargs)
         return val
     def GetMimeTypes(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileType_GetMimeTypes,(self,) + _args, _kwargs)
+        val = misc2c.wxFileType_GetMimeTypes(self, *_args, **_kwargs)
         return val
     def GetExtensions(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileType_GetExtensions,(self,) + _args, _kwargs)
+        val = misc2c.wxFileType_GetExtensions(self, *_args, **_kwargs)
         return val
     def GetIcon(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileType_GetIcon,(self,) + _args, _kwargs)
+        val = misc2c.wxFileType_GetIcon(self, *_args, **_kwargs)
         if val: val = wxIconPtr(val) ; val.thisown = 1
         return val
     def GetIconInfo(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileType_GetIconInfo,(self,) + _args, _kwargs)
+        val = misc2c.wxFileType_GetIconInfo(self, *_args, **_kwargs)
         return val
     def GetDescription(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileType_GetDescription,(self,) + _args, _kwargs)
+        val = misc2c.wxFileType_GetDescription(self, *_args, **_kwargs)
         return val
     def GetOpenCommand(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileType_GetOpenCommand,(self,) + _args, _kwargs)
+        val = misc2c.wxFileType_GetOpenCommand(self, *_args, **_kwargs)
         return val
     def GetPrintCommand(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileType_GetPrintCommand,(self,) + _args, _kwargs)
+        val = misc2c.wxFileType_GetPrintCommand(self, *_args, **_kwargs)
         return val
     def GetAllCommands(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileType_GetAllCommands,(self,) + _args, _kwargs)
+        val = misc2c.wxFileType_GetAllCommands(self, *_args, **_kwargs)
         return val
     def SetCommand(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileType_SetCommand,(self,) + _args, _kwargs)
+        val = misc2c.wxFileType_SetCommand(self, *_args, **_kwargs)
         return val
     def SetDefaultIcon(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileType_SetDefaultIcon,(self,) + _args, _kwargs)
+        val = misc2c.wxFileType_SetDefaultIcon(self, *_args, **_kwargs)
         return val
     def Unassociate(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileType_Unassociate,(self,) + _args, _kwargs)
+        val = misc2c.wxFileType_Unassociate(self, *_args, **_kwargs)
         return val
     def __del__(self, delfunc=misc2c.delete_wxFileType):
         if self.thisown == 1:
@@ -934,10 +937,10 @@ class wxFileTypePtr :
             except:
                 pass
     def __repr__(self):
-        return "<C wxFileType instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFileType instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFileType(wxFileTypePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxFileType,_args,_kwargs)
+        self.this = misc2c.new_wxFileType(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -948,37 +951,37 @@ class wxMimeTypesManagerPtr :
         self.this = this
         self.thisown = 0
     def Initialize(self, *_args, **_kwargs):
-        val = apply(misc2c.wxMimeTypesManager_Initialize,(self,) + _args, _kwargs)
+        val = misc2c.wxMimeTypesManager_Initialize(self, *_args, **_kwargs)
         return val
     def ClearData(self, *_args, **_kwargs):
-        val = apply(misc2c.wxMimeTypesManager_ClearData,(self,) + _args, _kwargs)
+        val = misc2c.wxMimeTypesManager_ClearData(self, *_args, **_kwargs)
         return val
     def GetFileTypeFromExtension(self, *_args, **_kwargs):
-        val = apply(misc2c.wxMimeTypesManager_GetFileTypeFromExtension,(self,) + _args, _kwargs)
+        val = misc2c.wxMimeTypesManager_GetFileTypeFromExtension(self, *_args, **_kwargs)
         if val: val = wxFileTypePtr(val) ; val.thisown = 1
         return val
     def GetFileTypeFromMimeType(self, *_args, **_kwargs):
-        val = apply(misc2c.wxMimeTypesManager_GetFileTypeFromMimeType,(self,) + _args, _kwargs)
+        val = misc2c.wxMimeTypesManager_GetFileTypeFromMimeType(self, *_args, **_kwargs)
         if val: val = wxFileTypePtr(val) ; val.thisown = 1
         return val
     def ReadMailcap(self, *_args, **_kwargs):
-        val = apply(misc2c.wxMimeTypesManager_ReadMailcap,(self,) + _args, _kwargs)
+        val = misc2c.wxMimeTypesManager_ReadMailcap(self, *_args, **_kwargs)
         return val
     def ReadMimeTypes(self, *_args, **_kwargs):
-        val = apply(misc2c.wxMimeTypesManager_ReadMimeTypes,(self,) + _args, _kwargs)
+        val = misc2c.wxMimeTypesManager_ReadMimeTypes(self, *_args, **_kwargs)
         return val
     def EnumAllFileTypes(self, *_args, **_kwargs):
-        val = apply(misc2c.wxMimeTypesManager_EnumAllFileTypes,(self,) + _args, _kwargs)
+        val = misc2c.wxMimeTypesManager_EnumAllFileTypes(self, *_args, **_kwargs)
         return val
     def AddFallback(self, *_args, **_kwargs):
-        val = apply(misc2c.wxMimeTypesManager_AddFallback,(self,) + _args, _kwargs)
+        val = misc2c.wxMimeTypesManager_AddFallback(self, *_args, **_kwargs)
         return val
     def Associate(self, *_args, **_kwargs):
-        val = apply(misc2c.wxMimeTypesManager_Associate,(self,) + _args, _kwargs)
+        val = misc2c.wxMimeTypesManager_Associate(self, *_args, **_kwargs)
         if val: val = wxFileTypePtr(val) ; val.thisown = 1
         return val
     def Unassociate(self, *_args, **_kwargs):
-        val = apply(misc2c.wxMimeTypesManager_Unassociate,(self,) + _args, _kwargs)
+        val = misc2c.wxMimeTypesManager_Unassociate(self, *_args, **_kwargs)
         return val
     def __del__(self, delfunc=misc2c.delete_wxMimeTypesManager):
         if self.thisown == 1:
@@ -987,10 +990,10 @@ class wxMimeTypesManagerPtr :
             except:
                 pass
     def __repr__(self):
-        return "<C wxMimeTypesManager instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMimeTypesManager instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMimeTypesManager(wxMimeTypesManagerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxMimeTypesManager,_args,_kwargs)
+        self.this = misc2c.new_wxMimeTypesManager(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1001,13 +1004,13 @@ class wxArtProviderPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(misc2c.wxArtProvider__setCallbackInfo,(self,) + _args, _kwargs)
+        val = misc2c.wxArtProvider__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxArtProvider instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxArtProvider instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxArtProvider(wxArtProviderPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxArtProvider,_args,_kwargs)
+        self.this = misc2c.new_wxArtProvider(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxArtProvider)
 
@@ -1025,46 +1028,46 @@ class wxFileHistoryPtr(wxObjectPtr):
             except:
                 pass
     def AddFileToHistory(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileHistory_AddFileToHistory,(self,) + _args, _kwargs)
+        val = misc2c.wxFileHistory_AddFileToHistory(self, *_args, **_kwargs)
         return val
     def RemoveFileFromHistory(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileHistory_RemoveFileFromHistory,(self,) + _args, _kwargs)
+        val = misc2c.wxFileHistory_RemoveFileFromHistory(self, *_args, **_kwargs)
         return val
     def GetMaxFiles(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileHistory_GetMaxFiles,(self,) + _args, _kwargs)
+        val = misc2c.wxFileHistory_GetMaxFiles(self, *_args, **_kwargs)
         return val
     def UseMenu(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileHistory_UseMenu,(self,) + _args, _kwargs)
+        val = misc2c.wxFileHistory_UseMenu(self, *_args, **_kwargs)
         return val
     def RemoveMenu(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileHistory_RemoveMenu,(self,) + _args, _kwargs)
+        val = misc2c.wxFileHistory_RemoveMenu(self, *_args, **_kwargs)
         return val
     def Load(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileHistory_Load,(self,) + _args, _kwargs)
+        val = misc2c.wxFileHistory_Load(self, *_args, **_kwargs)
         return val
     def Save(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileHistory_Save,(self,) + _args, _kwargs)
+        val = misc2c.wxFileHistory_Save(self, *_args, **_kwargs)
         return val
     def AddFilesToMenu(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileHistory_AddFilesToMenu,(self,) + _args, _kwargs)
+        val = misc2c.wxFileHistory_AddFilesToMenu(self, *_args, **_kwargs)
         return val
     def AddFilesToThisMenu(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileHistory_AddFilesToThisMenu,(self,) + _args, _kwargs)
+        val = misc2c.wxFileHistory_AddFilesToThisMenu(self, *_args, **_kwargs)
         return val
     def GetHistoryFile(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileHistory_GetHistoryFile,(self,) + _args, _kwargs)
+        val = misc2c.wxFileHistory_GetHistoryFile(self, *_args, **_kwargs)
         return val
     def GetCount(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileHistory_GetCount,(self,) + _args, _kwargs)
+        val = misc2c.wxFileHistory_GetCount(self, *_args, **_kwargs)
         return val
     def GetNoHistoryFiles(self, *_args, **_kwargs):
-        val = apply(misc2c.wxFileHistory_GetNoHistoryFiles,(self,) + _args, _kwargs)
+        val = misc2c.wxFileHistory_GetNoHistoryFiles(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFileHistory instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFileHistory instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFileHistory(wxFileHistoryPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxFileHistory,_args,_kwargs)
+        self.this = misc2c.new_wxFileHistory(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1075,54 +1078,54 @@ class wxEffectsPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def GetHighlightColour(self, *_args, **_kwargs):
-        val = apply(misc2c.wxEffects_GetHighlightColour,(self,) + _args, _kwargs)
+        val = misc2c.wxEffects_GetHighlightColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetLightShadow(self, *_args, **_kwargs):
-        val = apply(misc2c.wxEffects_GetLightShadow,(self,) + _args, _kwargs)
+        val = misc2c.wxEffects_GetLightShadow(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetFaceColour(self, *_args, **_kwargs):
-        val = apply(misc2c.wxEffects_GetFaceColour,(self,) + _args, _kwargs)
+        val = misc2c.wxEffects_GetFaceColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetMediumShadow(self, *_args, **_kwargs):
-        val = apply(misc2c.wxEffects_GetMediumShadow,(self,) + _args, _kwargs)
+        val = misc2c.wxEffects_GetMediumShadow(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetDarkShadow(self, *_args, **_kwargs):
-        val = apply(misc2c.wxEffects_GetDarkShadow,(self,) + _args, _kwargs)
+        val = misc2c.wxEffects_GetDarkShadow(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def SetHighlightColour(self, *_args, **_kwargs):
-        val = apply(misc2c.wxEffects_SetHighlightColour,(self,) + _args, _kwargs)
+        val = misc2c.wxEffects_SetHighlightColour(self, *_args, **_kwargs)
         return val
     def SetLightShadow(self, *_args, **_kwargs):
-        val = apply(misc2c.wxEffects_SetLightShadow,(self,) + _args, _kwargs)
+        val = misc2c.wxEffects_SetLightShadow(self, *_args, **_kwargs)
         return val
     def SetFaceColour(self, *_args, **_kwargs):
-        val = apply(misc2c.wxEffects_SetFaceColour,(self,) + _args, _kwargs)
+        val = misc2c.wxEffects_SetFaceColour(self, *_args, **_kwargs)
         return val
     def SetMediumShadow(self, *_args, **_kwargs):
-        val = apply(misc2c.wxEffects_SetMediumShadow,(self,) + _args, _kwargs)
+        val = misc2c.wxEffects_SetMediumShadow(self, *_args, **_kwargs)
         return val
     def SetDarkShadow(self, *_args, **_kwargs):
-        val = apply(misc2c.wxEffects_SetDarkShadow,(self,) + _args, _kwargs)
+        val = misc2c.wxEffects_SetDarkShadow(self, *_args, **_kwargs)
         return val
     def Set(self, *_args, **_kwargs):
-        val = apply(misc2c.wxEffects_Set,(self,) + _args, _kwargs)
+        val = misc2c.wxEffects_Set(self, *_args, **_kwargs)
         return val
     def DrawSunkenEdge(self, *_args, **_kwargs):
-        val = apply(misc2c.wxEffects_DrawSunkenEdge,(self,) + _args, _kwargs)
+        val = misc2c.wxEffects_DrawSunkenEdge(self, *_args, **_kwargs)
         return val
     def TileBitmap(self, *_args, **_kwargs):
-        val = apply(misc2c.wxEffects_TileBitmap,(self,) + _args, _kwargs)
+        val = misc2c.wxEffects_TileBitmap(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxEffects instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxEffects instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxEffects(wxEffectsPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxEffects,_args,_kwargs)
+        self.this = misc2c.new_wxEffects(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1139,22 +1142,22 @@ class wxSingleInstanceCheckerPtr :
             except:
                 pass
     def Create(self, *_args, **_kwargs):
-        val = apply(misc2c.wxSingleInstanceChecker_Create,(self,) + _args, _kwargs)
+        val = misc2c.wxSingleInstanceChecker_Create(self, *_args, **_kwargs)
         return val
     def IsAnotherRunning(self, *_args, **_kwargs):
-        val = apply(misc2c.wxSingleInstanceChecker_IsAnotherRunning,(self,) + _args, _kwargs)
+        val = misc2c.wxSingleInstanceChecker_IsAnotherRunning(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxSingleInstanceChecker instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSingleInstanceChecker instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSingleInstanceChecker(wxSingleInstanceCheckerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(misc2c.new_wxSingleInstanceChecker,_args,_kwargs)
+        self.this = misc2c.new_wxSingleInstanceChecker(*_args,**_kwargs)
         self.thisown = 1
 
 
 
 def wxPreSingleInstanceChecker(*_args,**_kwargs):
-    val = wxSingleInstanceCheckerPtr(apply(misc2c.new_wxPreSingleInstanceChecker,_args,_kwargs))
+    val = wxSingleInstanceCheckerPtr(misc2c.new_wxPreSingleInstanceChecker(*_args,**_kwargs))
     val.thisown = 1
     return val
 
@@ -1192,21 +1195,21 @@ wxGetDisplayDepth = misc2c.wxGetDisplayDepth
 wxDisplaySize = misc2c.wxDisplaySize
 
 def wxGetDisplaySize(*_args, **_kwargs):
-    val = apply(misc2c.wxGetDisplaySize,_args,_kwargs)
+    val = misc2c.wxGetDisplaySize(*_args,**_kwargs)
     if val: val = wxSizePtr(val); val.thisown = 1
     return val
 
 wxDisplaySizeMM = misc2c.wxDisplaySizeMM
 
 def wxGetDisplaySizeMM(*_args, **_kwargs):
-    val = apply(misc2c.wxGetDisplaySizeMM,_args,_kwargs)
+    val = misc2c.wxGetDisplaySizeMM(*_args,**_kwargs)
     if val: val = wxSizePtr(val); val.thisown = 1
     return val
 
 wxClientDisplayRect = misc2c.wxClientDisplayRect
 
 def wxGetClientDisplayRect(*_args, **_kwargs):
-    val = apply(misc2c.wxGetClientDisplayRect,_args,_kwargs)
+    val = misc2c.wxGetClientDisplayRect(*_args,**_kwargs)
     if val: val = wxRectPtr(val); val.thisown = 1
     return val
 
@@ -1215,19 +1218,19 @@ wxSetCursor = misc2c.wxSetCursor
 wxBeginBusyCursor = misc2c.wxBeginBusyCursor
 
 def wxGetActiveWindow(*_args, **_kwargs):
-    val = apply(misc2c.wxGetActiveWindow,_args,_kwargs)
+    val = misc2c.wxGetActiveWindow(*_args,**_kwargs)
     return val
 
 def wxGenericFindWindowAtPoint(*_args, **_kwargs):
-    val = apply(misc2c.wxGenericFindWindowAtPoint,_args,_kwargs)
+    val = misc2c.wxGenericFindWindowAtPoint(*_args,**_kwargs)
     return val
 
 def wxFindWindowAtPoint(*_args, **_kwargs):
-    val = apply(misc2c.wxFindWindowAtPoint,_args,_kwargs)
+    val = misc2c.wxFindWindowAtPoint(*_args,**_kwargs)
     return val
 
 def wxGetTopLevelParent(*_args, **_kwargs):
-    val = apply(misc2c.wxGetTopLevelParent,_args,_kwargs)
+    val = misc2c.wxGetTopLevelParent(*_args,**_kwargs)
     return val
 
 wxCaret_GetBlinkTime = misc2c.wxCaret_GetBlinkTime
@@ -1249,7 +1252,7 @@ wxThread_IsMain = misc2c.wxThread_IsMain
 wxShowTip = misc2c.wxShowTip
 
 def wxCreateFileTipProvider(*_args, **_kwargs):
-    val = apply(misc2c.wxCreateFileTipProvider,_args,_kwargs)
+    val = misc2c.wxCreateFileTipProvider(*_args,**_kwargs)
     if val: val = wxTipProviderPtr(val); val.thisown = 1
     return val
 
@@ -1288,17 +1291,17 @@ wxSafeShowMessage = misc2c.wxSafeShowMessage
 wxExecute = misc2c.wxExecute
 
 def wxWaveData(*_args, **_kwargs):
-    val = apply(misc2c.wxWaveData,_args,_kwargs)
+    val = misc2c.wxWaveData(*_args,**_kwargs)
     if val: val = wxWavePtr(val); val.thisown = 1
     return val
 
 def wxSystemSettings_GetColour(*_args, **_kwargs):
-    val = apply(misc2c.wxSystemSettings_GetColour,_args,_kwargs)
+    val = misc2c.wxSystemSettings_GetColour(*_args,**_kwargs)
     if val: val = wxColourPtr(val); val.thisown = 1
     return val
 
 def wxSystemSettings_GetFont(*_args, **_kwargs):
-    val = apply(misc2c.wxSystemSettings_GetFont,_args,_kwargs)
+    val = misc2c.wxSystemSettings_GetFont(*_args,**_kwargs)
     if val: val = wxFontPtr(val); val.thisown = 1
     return val
 
@@ -1323,12 +1326,12 @@ wxLog_OnLog = misc2c.wxLog_OnLog
 wxLog_FlushActive = misc2c.wxLog_FlushActive
 
 def wxLog_GetActiveTarget(*_args, **_kwargs):
-    val = apply(misc2c.wxLog_GetActiveTarget,_args,_kwargs)
+    val = misc2c.wxLog_GetActiveTarget(*_args,**_kwargs)
     if val: val = wxLogPtr(val)
     return val
 
 def wxLog_SetActiveTarget(*_args, **_kwargs):
-    val = apply(misc2c.wxLog_SetActiveTarget,_args,_kwargs)
+    val = misc2c.wxLog_SetActiveTarget(*_args,**_kwargs)
     if val: val = wxLogPtr(val)
     return val
 
@@ -1367,7 +1370,7 @@ wxProcess_Kill = misc2c.wxProcess_Kill
 wxProcess_Exists = misc2c.wxProcess_Exists
 
 def wxProcess_Open(*_args, **_kwargs):
-    val = apply(misc2c.wxProcess_Open,_args,_kwargs)
+    val = misc2c.wxProcess_Open(*_args,**_kwargs)
     if val: val = wxProcessPtr(val)
     return val
 
@@ -1382,12 +1385,12 @@ wxArtProvider_PopProvider = misc2c.wxArtProvider_PopProvider
 wxArtProvider_RemoveProvider = misc2c.wxArtProvider_RemoveProvider
 
 def wxArtProvider_GetBitmap(*_args, **_kwargs):
-    val = apply(misc2c.wxArtProvider_GetBitmap,_args,_kwargs)
+    val = misc2c.wxArtProvider_GetBitmap(*_args,**_kwargs)
     if val: val = wxBitmapPtr(val); val.thisown = 1
     return val
 
 def wxArtProvider_GetIcon(*_args, **_kwargs):
-    val = apply(misc2c.wxArtProvider_GetIcon,_args,_kwargs)
+    val = misc2c.wxArtProvider_GetIcon(*_args,**_kwargs)
     if val: val = wxIconPtr(val); val.thisown = 1
     return val
 
diff --git a/wxPython/src/gtk/printfw.cpp b/wxPython/src/gtk/printfw.cpp
index de74f530b3..971a557121 100644
--- a/wxPython/src/gtk/printfw.cpp
+++ b/wxPython/src/gtk/printfw.cpp
@@ -64,8 +64,13 @@ extern PyObject *SWIG_newvarlink(void);
     // Put some wx default wxChar* values into wxStrings.
     static const wxChar* wxPrintoutTitleStr = wxT("Printout");
     DECLARE_DEF_STRING(PrintoutTitleStr);
+    static const wxChar* wxPreviewCanvasNameStr = wxT("previewcanvas");
+    DECLARE_DEF_STRING(PreviewCanvasNameStr);
 
     DECLARE_DEF_STRING(FrameNameStr);
+    DECLARE_DEF_STRING(PanelNameStr);
+    DECLARE_DEF_STRING(DialogNameStr);
+
 
 
 static PyObject* t_output_helper(PyObject* target, PyObject* o) {
@@ -151,6 +156,99 @@ IMP_PYCALLBACK_BOOL_INT_pure(wxPyPrintout, wxPrintout, OnPrintPage);
 IMP_PYCALLBACK_BOOL_INT(wxPyPrintout, wxPrintout, HasPage);
 
 
+
+class wxPyPrintPreview : public wxPrintPreview
+{
+    DECLARE_CLASS(wxPyPrintPreview)
+public:
+    wxPyPrintPreview(wxPyPrintout* printout,
+                     wxPyPrintout* printoutForPrinting,
+                     wxPrintData* data=NULL)
+        : wxPrintPreview(printout, printoutForPrinting, data)
+    {}
+
+    DEC_PYCALLBACK_BOOL_INT(SetCurrentPage);
+    DEC_PYCALLBACK_BOOL_WXWINDC(PaintPage);
+    DEC_PYCALLBACK_BOOL_WXWINDC(DrawBlankPage);
+    DEC_PYCALLBACK_BOOL_INT(RenderPage);
+    DEC_PYCALLBACK_VOID_INT(SetZoom);
+    DEC_PYCALLBACK_BOOL_BOOL(Print);
+    DEC_PYCALLBACK_VOID_(DetermineScaling);
+
+    PYPRIVATE;
+};
+
+// Stupid renamed classes...  Fix this in 2.5...
+#if defined(__WXMSW__)
+IMPLEMENT_CLASS( wxPyPrintPreview, wxWindowsPrintPreview );
+#elif defined(__WXMAC__)
+IMPLEMENT_CLASS( wxPyPrintPreview, wxMacPrintPreview );
+#else
+IMPLEMENT_CLASS( wxPyPrintPreview, wxPostScriptPrintPreview );
+#endif
+
+IMP_PYCALLBACK_BOOL_INT    (wxPyPrintPreview, wxPrintPreview, SetCurrentPage);
+IMP_PYCALLBACK_BOOL_WXWINDC(wxPyPrintPreview, wxPrintPreview, PaintPage);
+IMP_PYCALLBACK_BOOL_WXWINDC(wxPyPrintPreview, wxPrintPreview, DrawBlankPage);
+IMP_PYCALLBACK_BOOL_INT    (wxPyPrintPreview, wxPrintPreview, RenderPage);
+IMP_PYCALLBACK_VOID_INT    (wxPyPrintPreview, wxPrintPreview, SetZoom);
+IMP_PYCALLBACK_BOOL_BOOL   (wxPyPrintPreview, wxPrintPreview, Print);
+IMP_PYCALLBACK_VOID_       (wxPyPrintPreview, wxPrintPreview, DetermineScaling);
+
+class wxPyPreviewFrame : public wxPreviewFrame
+{
+    DECLARE_CLASS(wxPyPreviewFrame);
+public:
+    wxPyPreviewFrame(wxPrintPreview* preview, wxFrame* parent,
+                     const wxString& title,
+                     const wxPoint& pos = wxDefaultPosition,
+                     const wxSize&  size = wxDefaultSize,
+                     long style = wxDEFAULT_FRAME_STYLE,
+                     const wxString& name = wxPyFrameNameStr)
+        : wxPreviewFrame(preview, parent, title, pos, size, style, name)
+    {}
+
+    void SetPreviewCanvas(wxWindow* canvas) { m_previewCanvas = canvas; }
+    void SetControlBar(wxPreviewControlBar* bar) { m_controlBar = bar; }
+
+    DEC_PYCALLBACK_VOID_(Initialize);
+    DEC_PYCALLBACK_VOID_(CreateCanvas);
+    DEC_PYCALLBACK_VOID_(CreateControlBar);
+
+    PYPRIVATE;
+};
+
+IMPLEMENT_CLASS(wxPyPreviewFrame, wxPreviewFrame);
+
+IMP_PYCALLBACK_VOID_(wxPyPreviewFrame, wxPreviewFrame, Initialize);
+IMP_PYCALLBACK_VOID_(wxPyPreviewFrame, wxPreviewFrame, CreateCanvas);
+IMP_PYCALLBACK_VOID_(wxPyPreviewFrame, wxPreviewFrame, CreateControlBar);
+
+class wxPyPreviewControlBar : public wxPreviewControlBar
+{
+    DECLARE_CLASS(wxPyPreviewControlBar);
+public:
+    wxPyPreviewControlBar(wxPrintPreview *preview,
+                          long buttons,
+                          wxWindow *parent,
+                          const wxPoint& pos = wxDefaultPosition,
+                          const wxSize& size = wxDefaultSize,
+                          long style = 0,
+                          const wxString& name = wxPyPanelNameStr)
+        : wxPreviewControlBar(preview, buttons, parent, pos, size, style, name)
+    {}
+
+    void SetPrintPreview(wxPrintPreview* preview) { m_printPreview = preview; }
+
+    DEC_PYCALLBACK_VOID_(CreateButtons);
+    DEC_PYCALLBACK_VOID_INT(SetZoomControl);
+
+    PYPRIVATE;
+};
+
+IMPLEMENT_CLASS(wxPyPreviewControlBar, wxPreviewControlBar);
+IMP_PYCALLBACK_VOID_(wxPyPreviewControlBar, wxPreviewControlBar, CreateButtons);
+IMP_PYCALLBACK_VOID_INT(wxPyPreviewControlBar, wxPreviewControlBar, SetZoomControl);
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -1083,11 +1181,10 @@ static PyObject *_wrap_wxPrintData_GetPrinterTranslateY(PyObject *self, PyObject
 #define wxPrintData_GetPrintMode(_swigobj)  (_swigobj->GetPrintMode())
 static PyObject *_wrap_wxPrintData_GetPrintMode(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrintMode * _result;
+    wxPrintMode  _result;
     wxPrintData * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
-    char _ptemp[128];
 
     self = self;
     if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintData_GetPrintMode",_kwnames,&_argo0)) 
@@ -1101,12 +1198,11 @@ static PyObject *_wrap_wxPrintData_GetPrintMode(PyObject *self, PyObject *args,
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = new wxPrintMode (wxPrintData_GetPrintMode(_arg0));
+    _result = (wxPrintMode )wxPrintData_GetPrintMode(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    SWIG_MakePtr(_ptemp, (void *) _result,"_wxPrintMode_p");
-    _resultobj = Py_BuildValue("s",_ptemp);
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
@@ -1485,13 +1581,12 @@ static PyObject *_wrap_wxPrintData_SetPrinterTranslation(PyObject *self, PyObjec
 static PyObject *_wrap_wxPrintData_SetPrintMode(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxPrintData * _arg0;
-    wxPrintMode * _arg1;
+    wxPrintMode  _arg1;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
     char *_kwnames[] = { "self","printMode", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPrintData_SetPrintMode",_kwnames,&_argo0,&_argo1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintData_SetPrintMode",_kwnames,&_argo0,&_arg1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
@@ -1500,16 +1595,9 @@ static PyObject *_wrap_wxPrintData_SetPrintMode(PyObject *self, PyObject *args,
         return NULL;
         }
     }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxPrintMode_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrintData_SetPrintMode. Expected _wxPrintMode_p.");
-        return NULL;
-        }
-    }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintData_SetPrintMode(_arg0,*_arg1);
+    wxPrintData_SetPrintMode(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -2850,151 +2938,139 @@ static PyObject *_wrap_delete_wxPrintDialogData(PyObject *self, PyObject *args,
     return _resultobj;
 }
 
-#define wxPrintDialogData_EnableHelp(_swigobj,_swigarg0)  (_swigobj->EnableHelp(_swigarg0))
-static PyObject *_wrap_wxPrintDialogData_EnableHelp(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_GetFromPage(_swigobj)  (_swigobj->GetFromPage())
+static PyObject *_wrap_wxPrintDialogData_GetFromPage(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
+    int  _result;
     wxPrintDialogData * _arg0;
-    bool  _arg1;
     PyObject * _argo0 = 0;
-    int tempbool1;
-    char *_kwnames[] = { "self","flag", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_EnableHelp",_kwnames,&_argo0,&tempbool1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetFromPage",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_EnableHelp. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetFromPage. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
-    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData_EnableHelp(_arg0,_arg1);
+    _result = (int )wxPrintDialogData_GetFromPage(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxPrintDialogData_EnablePageNumbers(_swigobj,_swigarg0)  (_swigobj->EnablePageNumbers(_swigarg0))
-static PyObject *_wrap_wxPrintDialogData_EnablePageNumbers(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_GetToPage(_swigobj)  (_swigobj->GetToPage())
+static PyObject *_wrap_wxPrintDialogData_GetToPage(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
+    int  _result;
     wxPrintDialogData * _arg0;
-    bool  _arg1;
     PyObject * _argo0 = 0;
-    int tempbool1;
-    char *_kwnames[] = { "self","flag", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_EnablePageNumbers",_kwnames,&_argo0,&tempbool1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetToPage",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_EnablePageNumbers. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetToPage. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
-    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData_EnablePageNumbers(_arg0,_arg1);
+    _result = (int )wxPrintDialogData_GetToPage(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxPrintDialogData_EnablePrintToFile(_swigobj,_swigarg0)  (_swigobj->EnablePrintToFile(_swigarg0))
-static PyObject *_wrap_wxPrintDialogData_EnablePrintToFile(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_GetMinPage(_swigobj)  (_swigobj->GetMinPage())
+static PyObject *_wrap_wxPrintDialogData_GetMinPage(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
+    int  _result;
     wxPrintDialogData * _arg0;
-    bool  _arg1;
     PyObject * _argo0 = 0;
-    int tempbool1;
-    char *_kwnames[] = { "self","flag", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_EnablePrintToFile",_kwnames,&_argo0,&tempbool1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetMinPage",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_EnablePrintToFile. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetMinPage. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
-    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData_EnablePrintToFile(_arg0,_arg1);
+    _result = (int )wxPrintDialogData_GetMinPage(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxPrintDialogData_EnableSelection(_swigobj,_swigarg0)  (_swigobj->EnableSelection(_swigarg0))
-static PyObject *_wrap_wxPrintDialogData_EnableSelection(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_GetMaxPage(_swigobj)  (_swigobj->GetMaxPage())
+static PyObject *_wrap_wxPrintDialogData_GetMaxPage(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
+    int  _result;
     wxPrintDialogData * _arg0;
-    bool  _arg1;
     PyObject * _argo0 = 0;
-    int tempbool1;
-    char *_kwnames[] = { "self","flag", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_EnableSelection",_kwnames,&_argo0,&tempbool1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetMaxPage",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_EnableSelection. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetMaxPage. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
-    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData_EnableSelection(_arg0,_arg1);
+    _result = (int )wxPrintDialogData_GetMaxPage(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxPrintDialogData_GetAllPages(_swigobj)  (_swigobj->GetAllPages())
-static PyObject *_wrap_wxPrintDialogData_GetAllPages(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_GetNoCopies(_swigobj)  (_swigobj->GetNoCopies())
+static PyObject *_wrap_wxPrintDialogData_GetNoCopies(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    bool  _result;
+    int  _result;
     wxPrintDialogData * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetAllPages",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetNoCopies",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetAllPages. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetNoCopies. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxPrintDialogData_GetAllPages(_arg0);
+    _result = (int )wxPrintDialogData_GetNoCopies(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3002,8 +3078,8 @@ static PyObject *_wrap_wxPrintDialogData_GetAllPages(PyObject *self, PyObject *a
     return _resultobj;
 }
 
-#define wxPrintDialogData_GetCollate(_swigobj)  (_swigobj->GetCollate())
-static PyObject *_wrap_wxPrintDialogData_GetCollate(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_GetAllPages(_swigobj)  (_swigobj->GetAllPages())
+static PyObject *_wrap_wxPrintDialogData_GetAllPages(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     bool  _result;
     wxPrintDialogData * _arg0;
@@ -3011,18 +3087,18 @@ static PyObject *_wrap_wxPrintDialogData_GetCollate(PyObject *self, PyObject *ar
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetCollate",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetAllPages",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetCollate. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetAllPages. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxPrintDialogData_GetCollate(_arg0);
+    _result = (bool )wxPrintDialogData_GetAllPages(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3030,27 +3106,27 @@ static PyObject *_wrap_wxPrintDialogData_GetCollate(PyObject *self, PyObject *ar
     return _resultobj;
 }
 
-#define wxPrintDialogData_GetFromPage(_swigobj)  (_swigobj->GetFromPage())
-static PyObject *_wrap_wxPrintDialogData_GetFromPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_GetSelection(_swigobj)  (_swigobj->GetSelection())
+static PyObject *_wrap_wxPrintDialogData_GetSelection(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    int  _result;
+    bool  _result;
     wxPrintDialogData * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetFromPage",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetSelection",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetFromPage. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetSelection. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (int )wxPrintDialogData_GetFromPage(_arg0);
+    _result = (bool )wxPrintDialogData_GetSelection(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3058,27 +3134,27 @@ static PyObject *_wrap_wxPrintDialogData_GetFromPage(PyObject *self, PyObject *a
     return _resultobj;
 }
 
-#define wxPrintDialogData_GetMaxPage(_swigobj)  (_swigobj->GetMaxPage())
-static PyObject *_wrap_wxPrintDialogData_GetMaxPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_GetCollate(_swigobj)  (_swigobj->GetCollate())
+static PyObject *_wrap_wxPrintDialogData_GetCollate(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    int  _result;
+    bool  _result;
     wxPrintDialogData * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetMaxPage",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetCollate",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetMaxPage. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetCollate. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (int )wxPrintDialogData_GetMaxPage(_arg0);
+    _result = (bool )wxPrintDialogData_GetCollate(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3086,27 +3162,27 @@ static PyObject *_wrap_wxPrintDialogData_GetMaxPage(PyObject *self, PyObject *ar
     return _resultobj;
 }
 
-#define wxPrintDialogData_GetMinPage(_swigobj)  (_swigobj->GetMinPage())
-static PyObject *_wrap_wxPrintDialogData_GetMinPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_GetPrintToFile(_swigobj)  (_swigobj->GetPrintToFile())
+static PyObject *_wrap_wxPrintDialogData_GetPrintToFile(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    int  _result;
+    bool  _result;
     wxPrintDialogData * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetMinPage",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetPrintToFile",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetMinPage. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetPrintToFile. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (int )wxPrintDialogData_GetMinPage(_arg0);
+    _result = (bool )wxPrintDialogData_GetPrintToFile(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3114,27 +3190,27 @@ static PyObject *_wrap_wxPrintDialogData_GetMinPage(PyObject *self, PyObject *ar
     return _resultobj;
 }
 
-#define wxPrintDialogData_GetNoCopies(_swigobj)  (_swigobj->GetNoCopies())
-static PyObject *_wrap_wxPrintDialogData_GetNoCopies(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_GetSetupDialog(_swigobj)  (_swigobj->GetSetupDialog())
+static PyObject *_wrap_wxPrintDialogData_GetSetupDialog(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    int  _result;
+    bool  _result;
     wxPrintDialogData * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetNoCopies",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetSetupDialog",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetNoCopies. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetSetupDialog. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (int )wxPrintDialogData_GetNoCopies(_arg0);
+    _result = (bool )wxPrintDialogData_GetSetupDialog(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3142,150 +3218,143 @@ static PyObject *_wrap_wxPrintDialogData_GetNoCopies(PyObject *self, PyObject *a
     return _resultobj;
 }
 
-static wxPrintData * wxPrintDialogData_GetPrintData(wxPrintDialogData *self) {
-            return new wxPrintData(self->GetPrintData());  // force a copy
-        }
-static PyObject *_wrap_wxPrintDialogData_GetPrintData(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_SetFromPage(_swigobj,_swigarg0)  (_swigobj->SetFromPage(_swigarg0))
+static PyObject *_wrap_wxPrintDialogData_SetFromPage(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrintData * _result;
     wxPrintDialogData * _arg0;
+    int  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
-    char _ptemp[128];
+    char *_kwnames[] = { "self","v", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetPrintData",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetFromPage",_kwnames,&_argo0,&_arg1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetPrintData. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetFromPage. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (wxPrintData *)wxPrintDialogData_GetPrintData(_arg0);
+    wxPrintDialogData_SetFromPage(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    if (_result) {
-        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrintData_p");
-        _resultobj = Py_BuildValue("s",_ptemp);
-    } else {
-        Py_INCREF(Py_None);
-        _resultobj = Py_None;
-    }
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
     return _resultobj;
 }
 
-#define wxPrintDialogData_GetPrintToFile(_swigobj)  (_swigobj->GetPrintToFile())
-static PyObject *_wrap_wxPrintDialogData_GetPrintToFile(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_SetToPage(_swigobj,_swigarg0)  (_swigobj->SetToPage(_swigarg0))
+static PyObject *_wrap_wxPrintDialogData_SetToPage(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    bool  _result;
     wxPrintDialogData * _arg0;
+    int  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    char *_kwnames[] = { "self","v", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetPrintToFile",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetToPage",_kwnames,&_argo0,&_arg1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetPrintToFile. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetToPage. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxPrintDialogData_GetPrintToFile(_arg0);
+    wxPrintDialogData_SetToPage(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
     return _resultobj;
 }
 
-#define wxPrintDialogData_GetToPage(_swigobj)  (_swigobj->GetToPage())
-static PyObject *_wrap_wxPrintDialogData_GetToPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_SetMinPage(_swigobj,_swigarg0)  (_swigobj->SetMinPage(_swigarg0))
+static PyObject *_wrap_wxPrintDialogData_SetMinPage(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    int  _result;
     wxPrintDialogData * _arg0;
+    int  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    char *_kwnames[] = { "self","v", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetToPage",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetMinPage",_kwnames,&_argo0,&_arg1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetToPage. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetMinPage. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (int )wxPrintDialogData_GetToPage(_arg0);
+    wxPrintDialogData_SetMinPage(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
     return _resultobj;
 }
 
-#define wxPrintDialogData_Ok(_swigobj)  (_swigobj->Ok())
-static PyObject *_wrap_wxPrintDialogData_Ok(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_SetMaxPage(_swigobj,_swigarg0)  (_swigobj->SetMaxPage(_swigarg0))
+static PyObject *_wrap_wxPrintDialogData_SetMaxPage(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    bool  _result;
     wxPrintDialogData * _arg0;
+    int  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    char *_kwnames[] = { "self","v", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_Ok",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetMaxPage",_kwnames,&_argo0,&_arg1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_Ok. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetMaxPage. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxPrintDialogData_Ok(_arg0);
+    wxPrintDialogData_SetMaxPage(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
     return _resultobj;
 }
 
-#define wxPrintDialogData_SetCollate(_swigobj,_swigarg0)  (_swigobj->SetCollate(_swigarg0))
-static PyObject *_wrap_wxPrintDialogData_SetCollate(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_SetNoCopies(_swigobj,_swigarg0)  (_swigobj->SetNoCopies(_swigarg0))
+static PyObject *_wrap_wxPrintDialogData_SetNoCopies(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxPrintDialogData * _arg0;
-    bool  _arg1;
+    int  _arg1;
     PyObject * _argo0 = 0;
-    int tempbool1;
-    char *_kwnames[] = { "self","flag", NULL };
+    char *_kwnames[] = { "self","v", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetCollate",_kwnames,&_argo0,&tempbool1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetNoCopies",_kwnames,&_argo0,&_arg1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetCollate. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetNoCopies. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
-    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData_SetCollate(_arg0,_arg1);
+    wxPrintDialogData_SetNoCopies(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3294,27 +3363,29 @@ static PyObject *_wrap_wxPrintDialogData_SetCollate(PyObject *self, PyObject *ar
     return _resultobj;
 }
 
-#define wxPrintDialogData_SetFromPage(_swigobj,_swigarg0)  (_swigobj->SetFromPage(_swigarg0))
-static PyObject *_wrap_wxPrintDialogData_SetFromPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_SetAllPages(_swigobj,_swigarg0)  (_swigobj->SetAllPages(_swigarg0))
+static PyObject *_wrap_wxPrintDialogData_SetAllPages(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxPrintDialogData * _arg0;
-    int  _arg1;
+    bool  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self","page", NULL };
+    int tempbool1;
+    char *_kwnames[] = { "self","flag", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetFromPage",_kwnames,&_argo0,&_arg1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetAllPages",_kwnames,&_argo0,&tempbool1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetFromPage. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetAllPages. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
+    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData_SetFromPage(_arg0,_arg1);
+    wxPrintDialogData_SetAllPages(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3323,27 +3394,29 @@ static PyObject *_wrap_wxPrintDialogData_SetFromPage(PyObject *self, PyObject *a
     return _resultobj;
 }
 
-#define wxPrintDialogData_SetMaxPage(_swigobj,_swigarg0)  (_swigobj->SetMaxPage(_swigarg0))
-static PyObject *_wrap_wxPrintDialogData_SetMaxPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_SetSelection(_swigobj,_swigarg0)  (_swigobj->SetSelection(_swigarg0))
+static PyObject *_wrap_wxPrintDialogData_SetSelection(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxPrintDialogData * _arg0;
-    int  _arg1;
+    bool  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self","page", NULL };
+    int tempbool1;
+    char *_kwnames[] = { "self","flag", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetMaxPage",_kwnames,&_argo0,&_arg1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetSelection",_kwnames,&_argo0,&tempbool1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetMaxPage. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetSelection. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
+    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData_SetMaxPage(_arg0,_arg1);
+    wxPrintDialogData_SetSelection(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3352,27 +3425,29 @@ static PyObject *_wrap_wxPrintDialogData_SetMaxPage(PyObject *self, PyObject *ar
     return _resultobj;
 }
 
-#define wxPrintDialogData_SetMinPage(_swigobj,_swigarg0)  (_swigobj->SetMinPage(_swigarg0))
-static PyObject *_wrap_wxPrintDialogData_SetMinPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_SetCollate(_swigobj,_swigarg0)  (_swigobj->SetCollate(_swigarg0))
+static PyObject *_wrap_wxPrintDialogData_SetCollate(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxPrintDialogData * _arg0;
-    int  _arg1;
+    bool  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self","page", NULL };
+    int tempbool1;
+    char *_kwnames[] = { "self","flag", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetMinPage",_kwnames,&_argo0,&_arg1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetCollate",_kwnames,&_argo0,&tempbool1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetMinPage. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetCollate. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
+    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData_SetMinPage(_arg0,_arg1);
+    wxPrintDialogData_SetCollate(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3381,27 +3456,29 @@ static PyObject *_wrap_wxPrintDialogData_SetMinPage(PyObject *self, PyObject *ar
     return _resultobj;
 }
 
-#define wxPrintDialogData_SetNoCopies(_swigobj,_swigarg0)  (_swigobj->SetNoCopies(_swigarg0))
-static PyObject *_wrap_wxPrintDialogData_SetNoCopies(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_SetPrintToFile(_swigobj,_swigarg0)  (_swigobj->SetPrintToFile(_swigarg0))
+static PyObject *_wrap_wxPrintDialogData_SetPrintToFile(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxPrintDialogData * _arg0;
-    int  _arg1;
+    bool  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self","n", NULL };
+    int tempbool1;
+    char *_kwnames[] = { "self","flag", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetNoCopies",_kwnames,&_argo0,&_arg1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetPrintToFile",_kwnames,&_argo0,&tempbool1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetNoCopies. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetPrintToFile. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
+    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData_SetNoCopies(_arg0,_arg1);
+    wxPrintDialogData_SetPrintToFile(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3410,34 +3487,29 @@ static PyObject *_wrap_wxPrintDialogData_SetNoCopies(PyObject *self, PyObject *a
     return _resultobj;
 }
 
-#define wxPrintDialogData_SetPrintData(_swigobj,_swigarg0)  (_swigobj->SetPrintData(_swigarg0))
-static PyObject *_wrap_wxPrintDialogData_SetPrintData(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_SetSetupDialog(_swigobj,_swigarg0)  (_swigobj->SetSetupDialog(_swigarg0))
+static PyObject *_wrap_wxPrintDialogData_SetSetupDialog(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxPrintDialogData * _arg0;
-    wxPrintData * _arg1;
+    bool  _arg1;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","printData", NULL };
+    int tempbool1;
+    char *_kwnames[] = { "self","flag", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPrintDialogData_SetPrintData",_kwnames,&_argo0,&_argo1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetSetupDialog",_kwnames,&_argo0,&tempbool1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetPrintData. Expected _wxPrintDialogData_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxPrintData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrintDialogData_SetPrintData. Expected _wxPrintData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetSetupDialog. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
+    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData_SetPrintData(_arg0,*_arg1);
+    wxPrintDialogData_SetSetupDialog(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3446,8 +3518,8 @@ static PyObject *_wrap_wxPrintDialogData_SetPrintData(PyObject *self, PyObject *
     return _resultobj;
 }
 
-#define wxPrintDialogData_SetPrintToFile(_swigobj,_swigarg0)  (_swigobj->SetPrintToFile(_swigarg0))
-static PyObject *_wrap_wxPrintDialogData_SetPrintToFile(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_EnablePrintToFile(_swigobj,_swigarg0)  (_swigobj->EnablePrintToFile(_swigarg0))
+static PyObject *_wrap_wxPrintDialogData_EnablePrintToFile(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxPrintDialogData * _arg0;
     bool  _arg1;
@@ -3456,19 +3528,19 @@ static PyObject *_wrap_wxPrintDialogData_SetPrintToFile(PyObject *self, PyObject
     char *_kwnames[] = { "self","flag", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetPrintToFile",_kwnames,&_argo0,&tempbool1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_EnablePrintToFile",_kwnames,&_argo0,&tempbool1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetPrintToFile. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_EnablePrintToFile. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
     _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData_SetPrintToFile(_arg0,_arg1);
+    wxPrintDialogData_EnablePrintToFile(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3477,8 +3549,8 @@ static PyObject *_wrap_wxPrintDialogData_SetPrintToFile(PyObject *self, PyObject
     return _resultobj;
 }
 
-#define wxPrintDialogData_SetSetupDialog(_swigobj,_swigarg0)  (_swigobj->SetSetupDialog(_swigarg0))
-static PyObject *_wrap_wxPrintDialogData_SetSetupDialog(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_EnableSelection(_swigobj,_swigarg0)  (_swigobj->EnableSelection(_swigarg0))
+static PyObject *_wrap_wxPrintDialogData_EnableSelection(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxPrintDialogData * _arg0;
     bool  _arg1;
@@ -3487,19 +3559,19 @@ static PyObject *_wrap_wxPrintDialogData_SetSetupDialog(PyObject *self, PyObject
     char *_kwnames[] = { "self","flag", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetSetupDialog",_kwnames,&_argo0,&tempbool1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_EnableSelection",_kwnames,&_argo0,&tempbool1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetSetupDialog. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_EnableSelection. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
     _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData_SetSetupDialog(_arg0,_arg1);
+    wxPrintDialogData_EnableSelection(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3508,27 +3580,29 @@ static PyObject *_wrap_wxPrintDialogData_SetSetupDialog(PyObject *self, PyObject
     return _resultobj;
 }
 
-#define wxPrintDialogData_SetToPage(_swigobj,_swigarg0)  (_swigobj->SetToPage(_swigarg0))
-static PyObject *_wrap_wxPrintDialogData_SetToPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_EnablePageNumbers(_swigobj,_swigarg0)  (_swigobj->EnablePageNumbers(_swigarg0))
+static PyObject *_wrap_wxPrintDialogData_EnablePageNumbers(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxPrintDialogData * _arg0;
-    int  _arg1;
+    bool  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self","page", NULL };
+    int tempbool1;
+    char *_kwnames[] = { "self","flag", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_SetToPage",_kwnames,&_argo0,&_arg1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_EnablePageNumbers",_kwnames,&_argo0,&tempbool1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetToPage. Expected _wxPrintDialogData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_EnablePageNumbers. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
+    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData_SetToPage(_arg0,_arg1);
+    wxPrintDialogData_EnablePageNumbers(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3537,175 +3611,142 @@ static PyObject *_wrap_wxPrintDialogData_SetToPage(PyObject *self, PyObject *arg
     return _resultobj;
 }
 
-static void *SwigwxPrintDialogTowxDialog(void *ptr) {
-    wxPrintDialog *src;
-    wxDialog *dest;
-    src = (wxPrintDialog *) ptr;
-    dest = (wxDialog *) src;
-    return (void *) dest;
-}
-
-static void *SwigwxPrintDialogTowxTopLevelWindow(void *ptr) {
-    wxPrintDialog *src;
-    wxTopLevelWindow *dest;
-    src = (wxPrintDialog *) ptr;
-    dest = (wxTopLevelWindow *) src;
-    return (void *) dest;
-}
-
-static void *SwigwxPrintDialogTowxWindow(void *ptr) {
-    wxPrintDialog *src;
-    wxWindow *dest;
-    src = (wxPrintDialog *) ptr;
-    dest = (wxWindow *) src;
-    return (void *) dest;
-}
+#define wxPrintDialogData_EnableHelp(_swigobj,_swigarg0)  (_swigobj->EnableHelp(_swigarg0))
+static PyObject *_wrap_wxPrintDialogData_EnableHelp(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrintDialogData * _arg0;
+    bool  _arg1;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    char *_kwnames[] = { "self","flag", NULL };
 
-static void *SwigwxPrintDialogTowxEvtHandler(void *ptr) {
-    wxPrintDialog *src;
-    wxEvtHandler *dest;
-    src = (wxPrintDialog *) ptr;
-    dest = (wxEvtHandler *) src;
-    return (void *) dest;
-}
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintDialogData_EnableHelp",_kwnames,&_argo0,&tempbool1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_EnableHelp. Expected _wxPrintDialogData_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintDialogData_EnableHelp(_arg0,_arg1);
 
-static void *SwigwxPrintDialogTowxObject(void *ptr) {
-    wxPrintDialog *src;
-    wxObject *dest;
-    src = (wxPrintDialog *) ptr;
-    dest = (wxObject *) src;
-    return (void *) dest;
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
 }
 
-#define new_wxPrintDialog(_swigarg0,_swigarg1) (new wxPrintDialog(_swigarg0,_swigarg1))
-static PyObject *_wrap_new_wxPrintDialog(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_GetEnablePrintToFile(_swigobj)  (_swigobj->GetEnablePrintToFile())
+static PyObject *_wrap_wxPrintDialogData_GetEnablePrintToFile(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrintDialog * _result;
-    wxWindow * _arg0;
-    wxPrintDialogData * _arg1 = (wxPrintDialogData *) NULL;
+    bool  _result;
+    wxPrintDialogData * _arg0;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "parent","data", NULL };
-    char _ptemp[128];
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O|O:new_wxPrintDialog",_kwnames,&_argo0,&_argo1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetEnablePrintToFile",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxPrintDialog. Expected _wxWindow_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of new_wxPrintDialog. Expected _wxPrintDialogData_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetEnablePrintToFile. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (wxPrintDialog *)new_wxPrintDialog(_arg0,_arg1);
+    _result = (bool )wxPrintDialogData_GetEnablePrintToFile(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    if (_result) {
-        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrintDialog_p");
-        _resultobj = Py_BuildValue("s",_ptemp);
-    } else {
-        Py_INCREF(Py_None);
-        _resultobj = Py_None;
-    }
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxPrintDialog_GetPrintDialogData(_swigobj)  (_swigobj->GetPrintDialogData())
-static PyObject *_wrap_wxPrintDialog_GetPrintDialogData(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_GetEnableSelection(_swigobj)  (_swigobj->GetEnableSelection())
+static PyObject *_wrap_wxPrintDialogData_GetEnableSelection(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrintDialogData * _result;
-    wxPrintDialog * _arg0;
+    bool  _result;
+    wxPrintDialogData * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
-    char _ptemp[128];
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialog_GetPrintDialogData",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetEnableSelection",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialog_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialog_GetPrintDialogData. Expected _wxPrintDialog_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetEnableSelection. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData & _result_ref = wxPrintDialog_GetPrintDialogData(_arg0);
-    _result = (wxPrintDialogData *) &_result_ref;
+    _result = (bool )wxPrintDialogData_GetEnableSelection(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    if (_result) {
-        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrintDialogData_p");
-        _resultobj = Py_BuildValue("s",_ptemp);
-    } else {
-        Py_INCREF(Py_None);
-        _resultobj = Py_None;
-    }
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxPrintDialog_GetPrintDC(_swigobj)  (_swigobj->GetPrintDC())
-static PyObject *_wrap_wxPrintDialog_GetPrintDC(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_GetEnablePageNumbers(_swigobj)  (_swigobj->GetEnablePageNumbers())
+static PyObject *_wrap_wxPrintDialogData_GetEnablePageNumbers(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxDC * _result;
-    wxPrintDialog * _arg0;
+    bool  _result;
+    wxPrintDialogData * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialog_GetPrintDC",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetEnablePageNumbers",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialog_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialog_GetPrintDC. Expected _wxPrintDialog_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetEnablePageNumbers. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (wxDC *)wxPrintDialog_GetPrintDC(_arg0);
+    _result = (bool )wxPrintDialogData_GetEnablePageNumbers(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}{ _resultobj = wxPyMake_wxObject(_result); }
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxPrintDialog_ShowModal(_swigobj)  (_swigobj->ShowModal())
-static PyObject *_wrap_wxPrintDialog_ShowModal(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialogData_GetEnableHelp(_swigobj)  (_swigobj->GetEnableHelp())
+static PyObject *_wrap_wxPrintDialogData_GetEnableHelp(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    int  _result;
-    wxPrintDialog * _arg0;
+    bool  _result;
+    wxPrintDialogData * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialog_ShowModal",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetEnableHelp",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialog_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialog_ShowModal. Expected _wxPrintDialog_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetEnableHelp. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (int )wxPrintDialog_ShowModal(_arg0);
+    _result = (bool )wxPrintDialogData_GetEnableHelp(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3713,110 +3754,1893 @@ static PyObject *_wrap_wxPrintDialog_ShowModal(PyObject *self, PyObject *args, P
     return _resultobj;
 }
 
-static void *SwigwxPyPrintoutTowxObject(void *ptr) {
-    wxPyPrintout *src;
-    wxObject *dest;
-    src = (wxPyPrintout *) ptr;
-    dest = (wxObject *) src;
-    return (void *) dest;
+#define wxPrintDialogData_Ok(_swigobj)  (_swigobj->Ok())
+static PyObject *_wrap_wxPrintDialogData_Ok(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPrintDialogData * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_Ok",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_Ok. Expected _wxPrintDialogData_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxPrintDialogData_Ok(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
 }
 
-#define new_wxPrintout(_swigarg0) (new wxPyPrintout(_swigarg0))
-static PyObject *_wrap_new_wxPrintout(PyObject *self, PyObject *args, PyObject *kwargs) {
+static wxPrintData * wxPrintDialogData_GetPrintData(wxPrintDialogData *self) {
+            return new wxPrintData(self->GetPrintData());  // force a copy
+        }
+static PyObject *_wrap_wxPrintDialogData_GetPrintData(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPyPrintout * _result;
-    wxString * _arg0 = (wxString *) &wxPyPrintoutTitleStr;
-    PyObject * _obj0 = 0;
-    char *_kwnames[] = { "title", NULL };
+    wxPrintData * _result;
+    wxPrintDialogData * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
     char _ptemp[128];
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"|O:new_wxPrintout",_kwnames,&_obj0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialogData_GetPrintData",_kwnames,&_argo0)) 
         return NULL;
-    if (_obj0)
-{
-    _arg0 = wxString_in_helper(_obj0);
-    if (_arg0 == NULL)
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_GetPrintData. Expected _wxPrintDialogData_p.");
         return NULL;
-}
+        }
+    }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (wxPyPrintout *)new_wxPrintout(*_arg0);
+    _result = (wxPrintData *)wxPrintDialogData_GetPrintData(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
 }    if (_result) {
-        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPyPrintout_p");
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrintData_p");
         _resultobj = Py_BuildValue("s",_ptemp);
     } else {
         Py_INCREF(Py_None);
         _resultobj = Py_None;
     }
-{
-    if (_obj0)
-        delete _arg0;
+    return _resultobj;
 }
+
+#define wxPrintDialogData_SetPrintData(_swigobj,_swigarg0)  (_swigobj->SetPrintData(_swigarg0))
+static PyObject *_wrap_wxPrintDialogData_SetPrintData(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrintDialogData * _arg0;
+    wxPrintData * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","printData", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPrintDialogData_SetPrintData",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialogData_SetPrintData. Expected _wxPrintDialogData_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxPrintData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrintDialogData_SetPrintData. Expected _wxPrintData_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintDialogData_SetPrintData(_arg0,*_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
     return _resultobj;
 }
 
-#define wxPrintout__setCallbackInfo(_swigobj,_swigarg0,_swigarg1)  (_swigobj->_setCallbackInfo(_swigarg0,_swigarg1))
-static PyObject *_wrap_wxPrintout__setCallbackInfo(PyObject *self, PyObject *args, PyObject *kwargs) {
+static void *SwigwxPrintDialogTowxDialog(void *ptr) {
+    wxPrintDialog *src;
+    wxDialog *dest;
+    src = (wxPrintDialog *) ptr;
+    dest = (wxDialog *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPrintDialogTowxTopLevelWindow(void *ptr) {
+    wxPrintDialog *src;
+    wxTopLevelWindow *dest;
+    src = (wxPrintDialog *) ptr;
+    dest = (wxTopLevelWindow *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPrintDialogTowxWindow(void *ptr) {
+    wxPrintDialog *src;
+    wxWindow *dest;
+    src = (wxPrintDialog *) ptr;
+    dest = (wxWindow *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPrintDialogTowxEvtHandler(void *ptr) {
+    wxPrintDialog *src;
+    wxEvtHandler *dest;
+    src = (wxPrintDialog *) ptr;
+    dest = (wxEvtHandler *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPrintDialogTowxObject(void *ptr) {
+    wxPrintDialog *src;
+    wxObject *dest;
+    src = (wxPrintDialog *) ptr;
+    dest = (wxObject *) src;
+    return (void *) dest;
+}
+
+#define new_wxPrintDialog(_swigarg0,_swigarg1) (new wxPrintDialog(_swigarg0,_swigarg1))
+static PyObject *_wrap_new_wxPrintDialog(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPyPrintout * _arg0;
-    PyObject * _arg1;
-    PyObject * _arg2;
+    wxPrintDialog * _result;
+    wxWindow * _arg0;
+    wxPrintDialogData * _arg1 = (wxPrintDialogData *) NULL;
     PyObject * _argo0 = 0;
-    PyObject * _obj1 = 0;
-    PyObject * _obj2 = 0;
-    char *_kwnames[] = { "self","self","_class", NULL };
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "parent","data", NULL };
+    char _ptemp[128];
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxPrintout__setCallbackInfo",_kwnames,&_argo0,&_obj1,&_obj2)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O|O:new_wxPrintDialog",_kwnames,&_argo0,&_argo1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout__setCallbackInfo. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxPrintDialog. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxPrintDialogData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of new_wxPrintDialog. Expected _wxPrintDialogData_p.");
         return NULL;
         }
     }
 {
-  _arg1 = _obj1;
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxPrintDialog *)new_wxPrintDialog(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrintDialog_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
 }
+
+#define wxPrintDialog_GetPrintDialogData(_swigobj)  (_swigobj->GetPrintDialogData())
+static PyObject *_wrap_wxPrintDialog_GetPrintDialogData(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrintDialogData * _result;
+    wxPrintDialog * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialog_GetPrintDialogData",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialog_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialog_GetPrintDialogData. Expected _wxPrintDialog_p.");
+        return NULL;
+        }
+    }
 {
-  _arg2 = _obj2;
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintDialogData & _result_ref = wxPrintDialog_GetPrintDialogData(_arg0);
+    _result = (wxPrintDialogData *) &_result_ref;
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrintDialogData_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
 }
+
+#define wxPrintDialog_GetPrintDC(_swigobj)  (_swigobj->GetPrintDC())
+static PyObject *_wrap_wxPrintDialog_GetPrintDC(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxDC * _result;
+    wxPrintDialog * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialog_GetPrintDC",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialog_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialog_GetPrintDC. Expected _wxPrintDialog_p.");
+        return NULL;
+        }
+    }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintout__setCallbackInfo(_arg0,_arg1,_arg2);
+    _result = (wxDC *)wxPrintDialog_GetPrintDC(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
+}{ _resultobj = wxPyMake_wxObject(_result); }
     return _resultobj;
 }
 
-static void  wxPyPrintout_Destroy(wxPyPrintout *self) { delete self; }
-static PyObject *_wrap_wxPrintout_Destroy(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintDialog_ShowModal(_swigobj)  (_swigobj->ShowModal())
+static PyObject *_wrap_wxPrintDialog_ShowModal(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPyPrintout * _arg0;
+    int  _result;
+    wxPrintDialog * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_Destroy",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintDialog_ShowModal",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialog_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintDialog_ShowModal. Expected _wxPrintDialog_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxPrintDialog_ShowModal(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+static void *SwigwxPyPrintoutTowxObject(void *ptr) {
+    wxPyPrintout *src;
+    wxObject *dest;
+    src = (wxPyPrintout *) ptr;
+    dest = (wxObject *) src;
+    return (void *) dest;
+}
+
+#define new_wxPrintout(_swigarg0) (new wxPyPrintout(_swigarg0))
+static PyObject *_wrap_new_wxPrintout(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPrintout * _result;
+    wxString * _arg0 = (wxString *) &wxPyPrintoutTitleStr;
+    PyObject * _obj0 = 0;
+    char *_kwnames[] = { "title", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"|O:new_wxPrintout",_kwnames,&_obj0)) 
+        return NULL;
+    if (_obj0)
+{
+    _arg0 = wxString_in_helper(_obj0);
+    if (_arg0 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxPyPrintout *)new_wxPrintout(*_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPyPrintout_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+{
+    if (_obj0)
+        delete _arg0;
+}
+    return _resultobj;
+}
+
+#define wxPrintout__setCallbackInfo(_swigobj,_swigarg0,_swigarg1)  (_swigobj->_setCallbackInfo(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxPrintout__setCallbackInfo(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPrintout * _arg0;
+    PyObject * _arg1;
+    PyObject * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","self","_class", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxPrintout__setCallbackInfo",_kwnames,&_argo0,&_obj1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout__setCallbackInfo. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+  _arg1 = _obj1;
+}
+{
+  _arg2 = _obj2;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintout__setCallbackInfo(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+static void  wxPyPrintout_Destroy(wxPyPrintout *self) { delete self; }
+static PyObject *_wrap_wxPrintout_Destroy(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPrintout * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_Destroy",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_Destroy. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPyPrintout_Destroy(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxPrintout_GetDC(_swigobj)  (_swigobj->GetDC())
+static PyObject *_wrap_wxPrintout_GetDC(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxDC * _result;
+    wxPyPrintout * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_GetDC",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_GetDC. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxDC *)wxPrintout_GetDC(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{ _resultobj = wxPyMake_wxObject(_result); }
+    return _resultobj;
+}
+
+#define wxPrintout_GetPageSizeMM(_swigobj,_swigarg0,_swigarg1)  (_swigobj->GetPageSizeMM(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxPrintout_GetPageSizeMM(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPrintout * _arg0;
+    int * _arg1;
+    int  temp;
+    int * _arg2;
+    int  temp0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+{
+  _arg1 = &temp;
+}
+{
+  _arg2 = &temp0;
+}
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_GetPageSizeMM",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_GetPageSizeMM. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintout_GetPageSizeMM(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg1));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg2));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+    return _resultobj;
+}
+
+#define wxPrintout_GetPageSizePixels(_swigobj,_swigarg0,_swigarg1)  (_swigobj->GetPageSizePixels(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxPrintout_GetPageSizePixels(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPrintout * _arg0;
+    int * _arg1;
+    int  temp;
+    int * _arg2;
+    int  temp0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+{
+  _arg1 = &temp;
+}
+{
+  _arg2 = &temp0;
+}
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_GetPageSizePixels",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_GetPageSizePixels. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintout_GetPageSizePixels(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg1));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg2));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+    return _resultobj;
+}
+
+#define wxPrintout_GetPPIPrinter(_swigobj,_swigarg0,_swigarg1)  (_swigobj->GetPPIPrinter(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxPrintout_GetPPIPrinter(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPrintout * _arg0;
+    int * _arg1;
+    int  temp;
+    int * _arg2;
+    int  temp0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+{
+  _arg1 = &temp;
+}
+{
+  _arg2 = &temp0;
+}
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_GetPPIPrinter",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_GetPPIPrinter. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintout_GetPPIPrinter(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg1));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg2));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+    return _resultobj;
+}
+
+#define wxPrintout_GetPPIScreen(_swigobj,_swigarg0,_swigarg1)  (_swigobj->GetPPIScreen(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxPrintout_GetPPIScreen(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPrintout * _arg0;
+    int * _arg1;
+    int  temp;
+    int * _arg2;
+    int  temp0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+{
+  _arg1 = &temp;
+}
+{
+  _arg2 = &temp0;
+}
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_GetPPIScreen",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_GetPPIScreen. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintout_GetPPIScreen(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg1));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg2));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+    return _resultobj;
+}
+
+#define wxPrintout_IsPreview(_swigobj)  (_swigobj->IsPreview())
+static PyObject *_wrap_wxPrintout_IsPreview(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPyPrintout * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_IsPreview",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_IsPreview. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxPrintout_IsPreview(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxPrintout_base_OnBeginDocument(_swigobj,_swigarg0,_swigarg1)  (_swigobj->base_OnBeginDocument(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxPrintout_base_OnBeginDocument(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPyPrintout * _arg0;
+    int  _arg1;
+    int  _arg2;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","startPage","endPage", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oii:wxPrintout_base_OnBeginDocument",_kwnames,&_argo0,&_arg1,&_arg2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_base_OnBeginDocument. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxPrintout_base_OnBeginDocument(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxPrintout_base_OnEndDocument(_swigobj)  (_swigobj->base_OnEndDocument())
+static PyObject *_wrap_wxPrintout_base_OnEndDocument(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPrintout * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_base_OnEndDocument",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_base_OnEndDocument. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintout_base_OnEndDocument(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxPrintout_base_OnBeginPrinting(_swigobj)  (_swigobj->base_OnBeginPrinting())
+static PyObject *_wrap_wxPrintout_base_OnBeginPrinting(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPrintout * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_base_OnBeginPrinting",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_base_OnBeginPrinting. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintout_base_OnBeginPrinting(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxPrintout_base_OnEndPrinting(_swigobj)  (_swigobj->base_OnEndPrinting())
+static PyObject *_wrap_wxPrintout_base_OnEndPrinting(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPrintout * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_base_OnEndPrinting",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_base_OnEndPrinting. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintout_base_OnEndPrinting(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxPrintout_base_OnPreparePrinting(_swigobj)  (_swigobj->base_OnPreparePrinting())
+static PyObject *_wrap_wxPrintout_base_OnPreparePrinting(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPrintout * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_base_OnPreparePrinting",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_base_OnPreparePrinting. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintout_base_OnPreparePrinting(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxPrintout_base_GetPageInfo(_swigobj,_swigarg0,_swigarg1,_swigarg2,_swigarg3)  (_swigobj->base_GetPageInfo(_swigarg0,_swigarg1,_swigarg2,_swigarg3))
+static PyObject *_wrap_wxPrintout_base_GetPageInfo(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPrintout * _arg0;
+    int * _arg1;
+    int  temp;
+    int * _arg2;
+    int  temp0;
+    int * _arg3;
+    int  temp1;
+    int * _arg4;
+    int  temp2;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+{
+  _arg1 = &temp;
+}
+{
+  _arg2 = &temp0;
+}
+{
+  _arg3 = &temp1;
+}
+{
+  _arg4 = &temp2;
+}
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_base_GetPageInfo",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_base_GetPageInfo. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintout_base_GetPageInfo(_arg0,_arg1,_arg2,_arg3,_arg4);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg1));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg2));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg3));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+{
+    PyObject *o;
+    o = PyInt_FromLong((long) (*_arg4));
+    _resultobj = t_output_helper(_resultobj, o);
+}
+    return _resultobj;
+}
+
+#define wxPrintout_base_HasPage(_swigobj,_swigarg0)  (_swigobj->base_HasPage(_swigarg0))
+static PyObject *_wrap_wxPrintout_base_HasPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPyPrintout * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","page", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintout_base_HasPage",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_base_HasPage. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxPrintout_base_HasPage(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+static void *SwigwxPrinterTowxObject(void *ptr) {
+    wxPrinter *src;
+    wxObject *dest;
+    src = (wxPrinter *) ptr;
+    dest = (wxObject *) src;
+    return (void *) dest;
+}
+
+#define new_wxPrinter(_swigarg0) (new wxPrinter(_swigarg0))
+static PyObject *_wrap_new_wxPrinter(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrinter * _result;
+    wxPrintDialogData * _arg0 = (wxPrintDialogData *) NULL;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "data", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"|O:new_wxPrinter",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxPrinter. Expected _wxPrintDialogData_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxPrinter *)new_wxPrinter(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrinter_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
+#define delete_wxPrinter(_swigobj) (delete _swigobj)
+static PyObject *_wrap_delete_wxPrinter(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrinter * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:delete_wxPrinter",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrinter_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of delete_wxPrinter. Expected _wxPrinter_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    delete_wxPrinter(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxPrinter_CreateAbortWindow(_swigobj,_swigarg0,_swigarg1)  (_swigobj->CreateAbortWindow(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxPrinter_CreateAbortWindow(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrinter * _arg0;
+    wxWindow * _arg1;
+    wxPyPrintout * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","parent","printout", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxPrinter_CreateAbortWindow",_kwnames,&_argo0,&_argo1,&_argo2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrinter_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrinter_CreateAbortWindow. Expected _wxPrinter_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrinter_CreateAbortWindow. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (_argo2 == Py_None) { _arg2 = NULL; }
+        else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxPrinter_CreateAbortWindow. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrinter_CreateAbortWindow(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxPrinter_GetPrintDialogData(_swigobj)  (_swigobj->GetPrintDialogData())
+static PyObject *_wrap_wxPrinter_GetPrintDialogData(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrintDialogData * _result;
+    wxPrinter * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrinter_GetPrintDialogData",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrinter_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrinter_GetPrintDialogData. Expected _wxPrinter_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintDialogData & _result_ref = wxPrinter_GetPrintDialogData(_arg0);
+    _result = (wxPrintDialogData *) &_result_ref;
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrintDialogData_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
+#define wxPrinter_Print(_swigobj,_swigarg0,_swigarg1,_swigarg2)  (_swigobj->Print(_swigarg0,_swigarg1,_swigarg2))
+static PyObject *_wrap_wxPrinter_Print(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPrinter * _arg0;
+    wxWindow * _arg1;
+    wxPyPrintout * _arg2;
+    int  _arg3 = (int ) TRUE;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","parent","printout","prompt", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO|i:wxPrinter_Print",_kwnames,&_argo0,&_argo1,&_argo2,&_arg3)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrinter_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrinter_Print. Expected _wxPrinter_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrinter_Print. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (_argo2 == Py_None) { _arg2 = NULL; }
+        else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxPrinter_Print. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxPrinter_Print(_arg0,_arg1,_arg2,_arg3);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxPrinter_PrintDialog(_swigobj,_swigarg0)  (_swigobj->PrintDialog(_swigarg0))
+static PyObject *_wrap_wxPrinter_PrintDialog(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxDC * _result;
+    wxPrinter * _arg0;
+    wxWindow * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","parent", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPrinter_PrintDialog",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrinter_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrinter_PrintDialog. Expected _wxPrinter_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrinter_PrintDialog. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxDC *)wxPrinter_PrintDialog(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{ _resultobj = wxPyMake_wxObject(_result); }
+    return _resultobj;
+}
+
+#define wxPrinter_ReportError(_swigobj,_swigarg0,_swigarg1,_swigarg2)  (_swigobj->ReportError(_swigarg0,_swigarg1,_swigarg2))
+static PyObject *_wrap_wxPrinter_ReportError(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrinter * _arg0;
+    wxWindow * _arg1;
+    wxPyPrintout * _arg2;
+    wxString * _arg3;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    PyObject * _argo2 = 0;
+    PyObject * _obj3 = 0;
+    char *_kwnames[] = { "self","parent","printout","message", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOOO:wxPrinter_ReportError",_kwnames,&_argo0,&_argo1,&_argo2,&_obj3)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrinter_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrinter_ReportError. Expected _wxPrinter_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrinter_ReportError. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (_argo2 == Py_None) { _arg2 = NULL; }
+        else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxPrinter_ReportError. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    _arg3 = wxString_in_helper(_obj3);
+    if (_arg3 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrinter_ReportError(_arg0,_arg1,_arg2,*_arg3);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+{
+    if (_obj3)
+        delete _arg3;
+}
+    return _resultobj;
+}
+
+#define wxPrinter_Setup(_swigobj,_swigarg0)  (_swigobj->Setup(_swigarg0))
+static PyObject *_wrap_wxPrinter_Setup(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPrinter * _arg0;
+    wxWindow * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","parent", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPrinter_Setup",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrinter_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrinter_Setup. Expected _wxPrinter_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrinter_Setup. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxPrinter_Setup(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxPrinter_GetAbort(_swigobj)  (_swigobj->GetAbort())
+static PyObject *_wrap_wxPrinter_GetAbort(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPrinter * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrinter_GetAbort",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrinter_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrinter_GetAbort. Expected _wxPrinter_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxPrinter_GetAbort(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+static PyObject *_wrap_wxPrinter_GetLastError(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrinterError  _result;
+    char *_kwnames[] = {  NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,":wxPrinter_GetLastError",_kwnames)) 
+        return NULL;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxPrinterError )wxPrinter::GetLastError();
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+static void *SwigwxPrintAbortDialogTowxDialog(void *ptr) {
+    wxPrintAbortDialog *src;
+    wxDialog *dest;
+    src = (wxPrintAbortDialog *) ptr;
+    dest = (wxDialog *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPrintAbortDialogTowxTopLevelWindow(void *ptr) {
+    wxPrintAbortDialog *src;
+    wxTopLevelWindow *dest;
+    src = (wxPrintAbortDialog *) ptr;
+    dest = (wxTopLevelWindow *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPrintAbortDialogTowxWindow(void *ptr) {
+    wxPrintAbortDialog *src;
+    wxWindow *dest;
+    src = (wxPrintAbortDialog *) ptr;
+    dest = (wxWindow *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPrintAbortDialogTowxEvtHandler(void *ptr) {
+    wxPrintAbortDialog *src;
+    wxEvtHandler *dest;
+    src = (wxPrintAbortDialog *) ptr;
+    dest = (wxEvtHandler *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPrintAbortDialogTowxObject(void *ptr) {
+    wxPrintAbortDialog *src;
+    wxObject *dest;
+    src = (wxPrintAbortDialog *) ptr;
+    dest = (wxObject *) src;
+    return (void *) dest;
+}
+
+#define new_wxPrintAbortDialog(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5) (new wxPrintAbortDialog(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5))
+static PyObject *_wrap_new_wxPrintAbortDialog(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrintAbortDialog * _result;
+    wxWindow * _arg0;
+    wxString * _arg1;
+    wxPoint * _arg2 = (wxPoint *) &wxDefaultPosition;
+    wxSize * _arg3 = (wxSize *) &wxDefaultSize;
+    long  _arg4 = (long ) 0;
+    wxString * _arg5 = (wxString *) &wxPyDialogNameStr;
+    PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
+    wxPoint  temp;
+    PyObject * _obj2 = 0;
+    wxSize  temp0;
+    PyObject * _obj3 = 0;
+    PyObject * _obj5 = 0;
+    char *_kwnames[] = { "parent","title","pos","size","style","name", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|OOlO:new_wxPrintAbortDialog",_kwnames,&_argo0,&_obj1,&_obj2,&_obj3,&_arg4,&_obj5)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxPrintAbortDialog. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+{
+    _arg1 = wxString_in_helper(_obj1);
+    if (_arg1 == NULL)
+        return NULL;
+}
+    if (_obj2)
+{
+    _arg2 = &temp;
+    if (! wxPoint_helper(_obj2, &_arg2))
+        return NULL;
+}
+    if (_obj3)
+{
+    _arg3 = &temp0;
+    if (! wxSize_helper(_obj3, &_arg3))
+        return NULL;
+}
+    if (_obj5)
+{
+    _arg5 = wxString_in_helper(_obj5);
+    if (_arg5 == NULL)
+        return NULL;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxPrintAbortDialog *)new_wxPrintAbortDialog(_arg0,*_arg1,*_arg2,*_arg3,_arg4,*_arg5);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrintAbortDialog_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+{
+    if (_obj1)
+        delete _arg1;
+}
+{
+    if (_obj5)
+        delete _arg5;
+}
+    return _resultobj;
+}
+
+static void *SwigwxPrintPreviewTowxObject(void *ptr) {
+    wxPrintPreview *src;
+    wxObject *dest;
+    src = (wxPrintPreview *) ptr;
+    dest = (wxObject *) src;
+    return (void *) dest;
+}
+
+#define new_wxPrintPreview(_swigarg0,_swigarg1,_swigarg2) (new wxPrintPreview(_swigarg0,_swigarg1,_swigarg2))
+static PyObject *_wrap_new_wxPrintPreview(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrintPreview * _result;
+    wxPyPrintout * _arg0;
+    wxPyPrintout * _arg1;
+    wxPrintData * _arg2 = (wxPrintData *) NULL;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "printout","printoutForPrinting","data", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|O:new_wxPrintPreview",_kwnames,&_argo0,&_argo1,&_argo2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxPrintPreview. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of new_wxPrintPreview. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (_argo2 == Py_None) { _arg2 = NULL; }
+        else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxPrintData_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of new_wxPrintPreview. Expected _wxPrintData_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxPrintPreview *)new_wxPrintPreview(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrintPreview_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
+#define wxPrintPreview_SetCurrentPage(_swigobj,_swigarg0)  (_swigobj->SetCurrentPage(_swigarg0))
+static PyObject *_wrap_wxPrintPreview_SetCurrentPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPrintPreview * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","pageNum", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintPreview_SetCurrentPage",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_SetCurrentPage. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxPrintPreview_SetCurrentPage(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxPrintPreview_GetCurrentPage(_swigobj)  (_swigobj->GetCurrentPage())
+static PyObject *_wrap_wxPrintPreview_GetCurrentPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    int  _result;
+    wxPrintPreview * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetCurrentPage",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetCurrentPage. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (int )wxPrintPreview_GetCurrentPage(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxPrintPreview_SetPrintout(_swigobj,_swigarg0)  (_swigobj->SetPrintout(_swigarg0))
+static PyObject *_wrap_wxPrintPreview_SetPrintout(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrintPreview * _arg0;
+    wxPyPrintout * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","printout", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPrintPreview_SetPrintout",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_SetPrintout. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxPyPrintout_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrintPreview_SetPrintout. Expected _wxPyPrintout_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintPreview_SetPrintout(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxPrintPreview_GetPrintout(_swigobj)  (_swigobj->GetPrintout())
+static PyObject *_wrap_wxPrintPreview_GetPrintout(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPrintout * _result;
+    wxPrintPreview * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetPrintout",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetPrintout. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxPyPrintout *)wxPrintPreview_GetPrintout(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{ _resultobj = wxPyMake_wxObject(_result); }
+    return _resultobj;
+}
+
+#define wxPrintPreview_GetPrintoutForPrinting(_swigobj)  (_swigobj->GetPrintoutForPrinting())
+static PyObject *_wrap_wxPrintPreview_GetPrintoutForPrinting(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPrintout * _result;
+    wxPrintPreview * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetPrintoutForPrinting",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetPrintoutForPrinting. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxPyPrintout *)wxPrintPreview_GetPrintoutForPrinting(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{ _resultobj = wxPyMake_wxObject(_result); }
+    return _resultobj;
+}
+
+#define wxPrintPreview_SetFrame(_swigobj,_swigarg0)  (_swigobj->SetFrame(_swigarg0))
+static PyObject *_wrap_wxPrintPreview_SetFrame(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrintPreview * _arg0;
+    wxFrame * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","frame", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPrintPreview_SetFrame",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_SetFrame. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxFrame_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrintPreview_SetFrame. Expected _wxFrame_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintPreview_SetFrame(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxPrintPreview_SetCanvas(_swigobj,_swigarg0)  (_swigobj->SetCanvas(_swigarg0))
+static PyObject *_wrap_wxPrintPreview_SetCanvas(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrintPreview * _arg0;
+    wxWindow * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","canvas", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPrintPreview_SetCanvas",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_SetCanvas. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrintPreview_SetCanvas. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintPreview_SetCanvas(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxPrintPreview_GetFrame(_swigobj)  (_swigobj->GetFrame())
+static PyObject *_wrap_wxPrintPreview_GetFrame(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxFrame * _result;
+    wxPrintPreview * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetFrame",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetFrame. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxFrame *)wxPrintPreview_GetFrame(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{ _resultobj = wxPyMake_wxObject(_result); }
+    return _resultobj;
+}
+
+#define wxPrintPreview_GetCanvas(_swigobj)  (_swigobj->GetCanvas())
+static PyObject *_wrap_wxPrintPreview_GetCanvas(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxWindow * _result;
+    wxPrintPreview * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetCanvas",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetCanvas. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxWindow *)wxPrintPreview_GetCanvas(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}{ _resultobj = wxPyMake_wxObject(_result); }
+    return _resultobj;
+}
+
+#define wxPrintPreview_PaintPage(_swigobj,_swigarg0,_swigarg1)  (_swigobj->PaintPage(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxPrintPreview_PaintPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPrintPreview * _arg0;
+    wxWindow * _arg1;
+    wxDC * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","canvas","dc", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxPrintPreview_PaintPage",_kwnames,&_argo0,&_argo1,&_argo2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_PaintPage. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrintPreview_PaintPage. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxDC_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxPrintPreview_PaintPage. Expected _wxDC_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxPrintPreview_PaintPage(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxPrintPreview_DrawBlankPage(_swigobj,_swigarg0,_swigarg1)  (_swigobj->DrawBlankPage(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxPrintPreview_DrawBlankPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPrintPreview * _arg0;
+    wxWindow * _arg1;
+    wxDC * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","canvas","dc", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxPrintPreview_DrawBlankPage",_kwnames,&_argo0,&_argo1,&_argo2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_DrawBlankPage. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrintPreview_DrawBlankPage. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxDC_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxPrintPreview_DrawBlankPage. Expected _wxDC_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxPrintPreview_DrawBlankPage(_arg0,_arg1,*_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxPrintPreview_RenderPage(_swigobj,_swigarg0)  (_swigobj->RenderPage(_swigarg0))
+static PyObject *_wrap_wxPrintPreview_RenderPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxPrintPreview * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","pageNum", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintPreview_RenderPage",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_RenderPage. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxPrintPreview_RenderPage(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
+#define wxPrintPreview_GetPrintDialogData(_swigobj)  (_swigobj->GetPrintDialogData())
+static PyObject *_wrap_wxPrintPreview_GetPrintDialogData(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrintDialogData * _result;
+    wxPrintPreview * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetPrintDialogData",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetPrintDialogData. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPrintDialogData & _result_ref = wxPrintPreview_GetPrintDialogData(_arg0);
+    _result = (wxPrintDialogData *) &_result_ref;
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrintDialogData_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+    return _resultobj;
+}
+
+#define wxPrintPreview_SetZoom(_swigobj,_swigarg0)  (_swigobj->SetZoom(_swigarg0))
+static PyObject *_wrap_wxPrintPreview_SetZoom(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPrintPreview * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","percent", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintPreview_SetZoom",_kwnames,&_argo0,&_arg1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_Destroy. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_SetZoom. Expected _wxPrintPreview_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPyPrintout_Destroy(_arg0);
+    wxPrintPreview_SetZoom(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3825,247 +5649,173 @@ static PyObject *_wrap_wxPrintout_Destroy(PyObject *self, PyObject *args, PyObje
     return _resultobj;
 }
 
-#define wxPrintout_GetDC(_swigobj)  (_swigobj->GetDC())
-static PyObject *_wrap_wxPrintout_GetDC(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintPreview_GetZoom(_swigobj)  (_swigobj->GetZoom())
+static PyObject *_wrap_wxPrintPreview_GetZoom(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxDC * _result;
-    wxPyPrintout * _arg0;
+    int  _result;
+    wxPrintPreview * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_GetDC",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetZoom",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_GetDC. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetZoom. Expected _wxPrintPreview_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (wxDC *)wxPrintout_GetDC(_arg0);
+    _result = (int )wxPrintPreview_GetZoom(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}{ _resultobj = wxPyMake_wxObject(_result); }
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxPrintout_GetPageSizeMM(_swigobj,_swigarg0,_swigarg1)  (_swigobj->GetPageSizeMM(_swigarg0,_swigarg1))
-static PyObject *_wrap_wxPrintout_GetPageSizeMM(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintPreview_GetMaxPage(_swigobj)  (_swigobj->GetMaxPage())
+static PyObject *_wrap_wxPrintPreview_GetMaxPage(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPyPrintout * _arg0;
-    int * _arg1;
-    int  temp;
-    int * _arg2;
-    int  temp0;
+    int  _result;
+    wxPrintPreview * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-{
-  _arg1 = &temp;
-}
-{
-  _arg2 = &temp0;
-}
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_GetPageSizeMM",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetMaxPage",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_GetPageSizeMM. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetMaxPage. Expected _wxPrintPreview_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintout_GetPageSizeMM(_arg0,_arg1,_arg2);
+    _result = (int )wxPrintPreview_GetMaxPage(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-{
-    PyObject *o;
-    o = PyInt_FromLong((long) (*_arg1));
-    _resultobj = t_output_helper(_resultobj, o);
-}
-{
-    PyObject *o;
-    o = PyInt_FromLong((long) (*_arg2));
-    _resultobj = t_output_helper(_resultobj, o);
-}
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxPrintout_GetPageSizePixels(_swigobj,_swigarg0,_swigarg1)  (_swigobj->GetPageSizePixels(_swigarg0,_swigarg1))
-static PyObject *_wrap_wxPrintout_GetPageSizePixels(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintPreview_GetMinPage(_swigobj)  (_swigobj->GetMinPage())
+static PyObject *_wrap_wxPrintPreview_GetMinPage(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPyPrintout * _arg0;
-    int * _arg1;
-    int  temp;
-    int * _arg2;
-    int  temp0;
+    int  _result;
+    wxPrintPreview * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-{
-  _arg1 = &temp;
-}
-{
-  _arg2 = &temp0;
-}
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_GetPageSizePixels",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetMinPage",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_GetPageSizePixels. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetMinPage. Expected _wxPrintPreview_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintout_GetPageSizePixels(_arg0,_arg1,_arg2);
+    _result = (int )wxPrintPreview_GetMinPage(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-{
-    PyObject *o;
-    o = PyInt_FromLong((long) (*_arg1));
-    _resultobj = t_output_helper(_resultobj, o);
-}
-{
-    PyObject *o;
-    o = PyInt_FromLong((long) (*_arg2));
-    _resultobj = t_output_helper(_resultobj, o);
-}
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxPrintout_GetPPIPrinter(_swigobj,_swigarg0,_swigarg1)  (_swigobj->GetPPIPrinter(_swigarg0,_swigarg1))
-static PyObject *_wrap_wxPrintout_GetPPIPrinter(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintPreview_Ok(_swigobj)  (_swigobj->Ok())
+static PyObject *_wrap_wxPrintPreview_Ok(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPyPrintout * _arg0;
-    int * _arg1;
-    int  temp;
-    int * _arg2;
-    int  temp0;
+    bool  _result;
+    wxPrintPreview * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-{
-  _arg1 = &temp;
-}
-{
-  _arg2 = &temp0;
-}
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_GetPPIPrinter",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_Ok",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_GetPPIPrinter. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_Ok. Expected _wxPrintPreview_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintout_GetPPIPrinter(_arg0,_arg1,_arg2);
+    _result = (bool )wxPrintPreview_Ok(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-{
-    PyObject *o;
-    o = PyInt_FromLong((long) (*_arg1));
-    _resultobj = t_output_helper(_resultobj, o);
-}
-{
-    PyObject *o;
-    o = PyInt_FromLong((long) (*_arg2));
-    _resultobj = t_output_helper(_resultobj, o);
-}
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxPrintout_GetPPIScreen(_swigobj,_swigarg0,_swigarg1)  (_swigobj->GetPPIScreen(_swigarg0,_swigarg1))
-static PyObject *_wrap_wxPrintout_GetPPIScreen(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintPreview_SetOk(_swigobj,_swigarg0)  (_swigobj->SetOk(_swigarg0))
+static PyObject *_wrap_wxPrintPreview_SetOk(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPyPrintout * _arg0;
-    int * _arg1;
-    int  temp;
-    int * _arg2;
-    int  temp0;
+    wxPrintPreview * _arg0;
+    bool  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    int tempbool1;
+    char *_kwnames[] = { "self","ok", NULL };
 
     self = self;
-{
-  _arg1 = &temp;
-}
-{
-  _arg2 = &temp0;
-}
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_GetPPIScreen",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintPreview_SetOk",_kwnames,&_argo0,&tempbool1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_GetPPIScreen. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_SetOk. Expected _wxPrintPreview_p.");
         return NULL;
         }
     }
+    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintout_GetPPIScreen(_arg0,_arg1,_arg2);
+    wxPrintPreview_SetOk(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
 }    Py_INCREF(Py_None);
     _resultobj = Py_None;
-{
-    PyObject *o;
-    o = PyInt_FromLong((long) (*_arg1));
-    _resultobj = t_output_helper(_resultobj, o);
-}
-{
-    PyObject *o;
-    o = PyInt_FromLong((long) (*_arg2));
-    _resultobj = t_output_helper(_resultobj, o);
-}
     return _resultobj;
 }
 
-#define wxPrintout_IsPreview(_swigobj)  (_swigobj->IsPreview())
-static PyObject *_wrap_wxPrintout_IsPreview(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintPreview_Print(_swigobj,_swigarg0)  (_swigobj->Print(_swigarg0))
+static PyObject *_wrap_wxPrintPreview_Print(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     bool  _result;
-    wxPyPrintout * _arg0;
+    wxPrintPreview * _arg0;
+    bool  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    int tempbool1;
+    char *_kwnames[] = { "self","interactive", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_IsPreview",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintPreview_Print",_kwnames,&_argo0,&tempbool1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_IsPreview. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_Print. Expected _wxPrintPreview_p.");
         return NULL;
         }
     }
+    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxPrintout_IsPreview(_arg0);
+    _result = (bool )wxPrintPreview_Print(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -4073,84 +5823,180 @@ static PyObject *_wrap_wxPrintout_IsPreview(PyObject *self, PyObject *args, PyOb
     return _resultobj;
 }
 
-#define wxPrintout_base_OnBeginDocument(_swigobj,_swigarg0,_swigarg1)  (_swigobj->base_OnBeginDocument(_swigarg0,_swigarg1))
-static PyObject *_wrap_wxPrintout_base_OnBeginDocument(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPrintPreview_DetermineScaling(_swigobj)  (_swigobj->DetermineScaling())
+static PyObject *_wrap_wxPrintPreview_DetermineScaling(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    bool  _result;
-    wxPyPrintout * _arg0;
-    int  _arg1;
-    int  _arg2;
+    wxPrintPreview * _arg0;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self","startPage","endPage", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oii:wxPrintout_base_OnBeginDocument",_kwnames,&_argo0,&_arg1,&_arg2)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_DetermineScaling",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_base_OnBeginDocument. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_DetermineScaling. Expected _wxPrintPreview_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxPrintout_base_OnBeginDocument(_arg0,_arg1,_arg2);
+    wxPrintPreview_DetermineScaling(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
     return _resultobj;
 }
 
-#define wxPrintout_base_OnEndDocument(_swigobj)  (_swigobj->base_OnEndDocument())
-static PyObject *_wrap_wxPrintout_base_OnEndDocument(PyObject *self, PyObject *args, PyObject *kwargs) {
+static void *SwigwxPreviewFrameTowxFrame(void *ptr) {
+    wxPreviewFrame *src;
+    wxFrame *dest;
+    src = (wxPreviewFrame *) ptr;
+    dest = (wxFrame *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPreviewFrameTowxTopLevelWindow(void *ptr) {
+    wxPreviewFrame *src;
+    wxTopLevelWindow *dest;
+    src = (wxPreviewFrame *) ptr;
+    dest = (wxTopLevelWindow *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPreviewFrameTowxWindow(void *ptr) {
+    wxPreviewFrame *src;
+    wxWindow *dest;
+    src = (wxPreviewFrame *) ptr;
+    dest = (wxWindow *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPreviewFrameTowxEvtHandler(void *ptr) {
+    wxPreviewFrame *src;
+    wxEvtHandler *dest;
+    src = (wxPreviewFrame *) ptr;
+    dest = (wxEvtHandler *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPreviewFrameTowxObject(void *ptr) {
+    wxPreviewFrame *src;
+    wxObject *dest;
+    src = (wxPreviewFrame *) ptr;
+    dest = (wxObject *) src;
+    return (void *) dest;
+}
+
+#define new_wxPreviewFrame(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6) (new wxPreviewFrame(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6))
+static PyObject *_wrap_new_wxPreviewFrame(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPyPrintout * _arg0;
+    wxPreviewFrame * _result;
+    wxPrintPreview * _arg0;
+    wxFrame * _arg1;
+    wxString * _arg2;
+    wxPoint * _arg3 = (wxPoint *) &wxDefaultPosition;
+    wxSize * _arg4 = (wxSize *) &wxDefaultSize;
+    long  _arg5 = (long ) wxDEFAULT_FRAME_STYLE;
+    wxString * _arg6 = (wxString *) &wxPyFrameNameStr;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    PyObject * _argo1 = 0;
+    PyObject * _obj2 = 0;
+    wxPoint  temp;
+    PyObject * _obj3 = 0;
+    wxSize  temp0;
+    PyObject * _obj4 = 0;
+    PyObject * _obj6 = 0;
+    char *_kwnames[] = { "preview","parent","title","pos","size","style","name", NULL };
+    char _ptemp[128];
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_base_OnEndDocument",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO|OOlO:new_wxPreviewFrame",_kwnames,&_argo0,&_argo1,&_obj2,&_obj3,&_obj4,&_arg5,&_obj6)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_base_OnEndDocument. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxPreviewFrame. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxFrame_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of new_wxPreviewFrame. Expected _wxFrame_p.");
         return NULL;
         }
     }
+{
+    _arg2 = wxString_in_helper(_obj2);
+    if (_arg2 == NULL)
+        return NULL;
+}
+    if (_obj3)
+{
+    _arg3 = &temp;
+    if (! wxPoint_helper(_obj3, &_arg3))
+        return NULL;
+}
+    if (_obj4)
+{
+    _arg4 = &temp0;
+    if (! wxSize_helper(_obj4, &_arg4))
+        return NULL;
+}
+    if (_obj6)
+{
+    _arg6 = wxString_in_helper(_obj6);
+    if (_arg6 == NULL)
+        return NULL;
+}
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintout_base_OnEndDocument(_arg0);
+    _result = (wxPreviewFrame *)new_wxPreviewFrame(_arg0,_arg1,*_arg2,*_arg3,*_arg4,_arg5,*_arg6);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPreviewFrame_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+{
+    if (_obj2)
+        delete _arg2;
+}
+{
+    if (_obj6)
+        delete _arg6;
+}
     return _resultobj;
 }
 
-#define wxPrintout_base_OnBeginPrinting(_swigobj)  (_swigobj->base_OnBeginPrinting())
-static PyObject *_wrap_wxPrintout_base_OnBeginPrinting(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPreviewFrame_Initialize(_swigobj)  (_swigobj->Initialize())
+static PyObject *_wrap_wxPreviewFrame_Initialize(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPyPrintout * _arg0;
+    wxPreviewFrame * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_base_OnBeginPrinting",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPreviewFrame_Initialize",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_base_OnBeginPrinting. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPreviewFrame_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPreviewFrame_Initialize. Expected _wxPreviewFrame_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintout_base_OnBeginPrinting(_arg0);
+    wxPreviewFrame_Initialize(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -4159,26 +6005,26 @@ static PyObject *_wrap_wxPrintout_base_OnBeginPrinting(PyObject *self, PyObject
     return _resultobj;
 }
 
-#define wxPrintout_base_OnEndPrinting(_swigobj)  (_swigobj->base_OnEndPrinting())
-static PyObject *_wrap_wxPrintout_base_OnEndPrinting(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPreviewFrame_CreateControlBar(_swigobj)  (_swigobj->CreateControlBar())
+static PyObject *_wrap_wxPreviewFrame_CreateControlBar(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPyPrintout * _arg0;
+    wxPreviewFrame * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_base_OnEndPrinting",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPreviewFrame_CreateControlBar",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_base_OnEndPrinting. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPreviewFrame_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPreviewFrame_CreateControlBar. Expected _wxPreviewFrame_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintout_base_OnEndPrinting(_arg0);
+    wxPreviewFrame_CreateControlBar(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -4187,26 +6033,26 @@ static PyObject *_wrap_wxPrintout_base_OnEndPrinting(PyObject *self, PyObject *a
     return _resultobj;
 }
 
-#define wxPrintout_base_OnPreparePrinting(_swigobj)  (_swigobj->base_OnPreparePrinting())
-static PyObject *_wrap_wxPrintout_base_OnPreparePrinting(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPreviewFrame_CreateCanvas(_swigobj)  (_swigobj->CreateCanvas())
+static PyObject *_wrap_wxPreviewFrame_CreateCanvas(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPyPrintout * _arg0;
+    wxPreviewFrame * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_base_OnPreparePrinting",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPreviewFrame_CreateCanvas",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_base_OnPreparePrinting. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPreviewFrame_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPreviewFrame_CreateCanvas. Expected _wxPreviewFrame_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintout_base_OnPreparePrinting(_arg0);
+    wxPreviewFrame_CreateCanvas(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -4215,212 +6061,278 @@ static PyObject *_wrap_wxPrintout_base_OnPreparePrinting(PyObject *self, PyObjec
     return _resultobj;
 }
 
-#define wxPrintout_base_GetPageInfo(_swigobj,_swigarg0,_swigarg1,_swigarg2,_swigarg3)  (_swigobj->base_GetPageInfo(_swigarg0,_swigarg1,_swigarg2,_swigarg3))
-static PyObject *_wrap_wxPrintout_base_GetPageInfo(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxPyPrintout * _arg0;
-    int * _arg1;
-    int  temp;
-    int * _arg2;
-    int  temp0;
-    int * _arg3;
-    int  temp1;
-    int * _arg4;
-    int  temp2;
-    PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+static void *SwigwxPreviewCanvasTowxScrolledWindow(void *ptr) {
+    wxPreviewCanvas *src;
+    wxScrolledWindow *dest;
+    src = (wxPreviewCanvas *) ptr;
+    dest = (wxScrolledWindow *) src;
+    return (void *) dest;
+}
 
-    self = self;
-{
-  _arg1 = &temp;
+static void *SwigwxPreviewCanvasTowxPanel(void *ptr) {
+    wxPreviewCanvas *src;
+    wxPanel *dest;
+    src = (wxPreviewCanvas *) ptr;
+    dest = (wxPanel *) src;
+    return (void *) dest;
 }
-{
-  _arg2 = &temp0;
+
+static void *SwigwxPreviewCanvasTowxWindow(void *ptr) {
+    wxPreviewCanvas *src;
+    wxWindow *dest;
+    src = (wxPreviewCanvas *) ptr;
+    dest = (wxWindow *) src;
+    return (void *) dest;
 }
-{
-  _arg3 = &temp1;
+
+static void *SwigwxPreviewCanvasTowxEvtHandler(void *ptr) {
+    wxPreviewCanvas *src;
+    wxEvtHandler *dest;
+    src = (wxPreviewCanvas *) ptr;
+    dest = (wxEvtHandler *) src;
+    return (void *) dest;
 }
-{
-  _arg4 = &temp2;
+
+static void *SwigwxPreviewCanvasTowxObject(void *ptr) {
+    wxPreviewCanvas *src;
+    wxObject *dest;
+    src = (wxPreviewCanvas *) ptr;
+    dest = (wxObject *) src;
+    return (void *) dest;
 }
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintout_base_GetPageInfo",_kwnames,&_argo0)) 
+
+#define new_wxPreviewCanvas(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5) (new wxPreviewCanvas(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5))
+static PyObject *_wrap_new_wxPreviewCanvas(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPreviewCanvas * _result;
+    wxPrintPreview * _arg0;
+    wxWindow * _arg1;
+    wxPoint * _arg2 = (wxPoint *) &wxDefaultPosition;
+    wxSize * _arg3 = (wxSize *) &wxDefaultSize;
+    long  _arg4 = (long ) 0;
+    wxString * _arg5 = (wxString *) &wxPyPreviewCanvasNameStr;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    wxPoint  temp;
+    PyObject * _obj2 = 0;
+    wxSize  temp0;
+    PyObject * _obj3 = 0;
+    PyObject * _obj5 = 0;
+    char *_kwnames[] = { "preview","parent","pos","size","style","name", NULL };
+    char _ptemp[128];
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|OOlO:new_wxPreviewCanvas",_kwnames,&_argo0,&_argo1,&_obj2,&_obj3,&_arg4,&_obj5)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_base_GetPageInfo. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxPreviewCanvas. Expected _wxPrintPreview_p.");
         return NULL;
         }
     }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of new_wxPreviewCanvas. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+    if (_obj2)
 {
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintout_base_GetPageInfo(_arg0,_arg1,_arg2,_arg3,_arg4);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-{
-    PyObject *o;
-    o = PyInt_FromLong((long) (*_arg1));
-    _resultobj = t_output_helper(_resultobj, o);
+    _arg2 = &temp;
+    if (! wxPoint_helper(_obj2, &_arg2))
+        return NULL;
 }
+    if (_obj3)
 {
-    PyObject *o;
-    o = PyInt_FromLong((long) (*_arg2));
-    _resultobj = t_output_helper(_resultobj, o);
+    _arg3 = &temp0;
+    if (! wxSize_helper(_obj3, &_arg3))
+        return NULL;
 }
+    if (_obj5)
 {
-    PyObject *o;
-    o = PyInt_FromLong((long) (*_arg3));
-    _resultobj = t_output_helper(_resultobj, o);
+    _arg5 = wxString_in_helper(_obj5);
+    if (_arg5 == NULL)
+        return NULL;
 }
 {
-    PyObject *o;
-    o = PyInt_FromLong((long) (*_arg4));
-    _resultobj = t_output_helper(_resultobj, o);
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (wxPreviewCanvas *)new_wxPreviewCanvas(_arg0,_arg1,*_arg2,*_arg3,_arg4,*_arg5);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPreviewCanvas_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+{
+    if (_obj5)
+        delete _arg5;
 }
     return _resultobj;
 }
 
-#define wxPrintout_base_HasPage(_swigobj,_swigarg0)  (_swigobj->base_HasPage(_swigarg0))
-static PyObject *_wrap_wxPrintout_base_HasPage(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    bool  _result;
-    wxPyPrintout * _arg0;
-    int  _arg1;
-    PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self","page", NULL };
+static void *SwigwxPreviewControlBarTowxPanel(void *ptr) {
+    wxPreviewControlBar *src;
+    wxPanel *dest;
+    src = (wxPreviewControlBar *) ptr;
+    dest = (wxPanel *) src;
+    return (void *) dest;
+}
 
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintout_base_HasPage",_kwnames,&_argo0,&_arg1)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintout_base_HasPage. Expected _wxPyPrintout_p.");
-        return NULL;
-        }
-    }
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxPrintout_base_HasPage(_arg0,_arg1);
+static void *SwigwxPreviewControlBarTowxWindow(void *ptr) {
+    wxPreviewControlBar *src;
+    wxWindow *dest;
+    src = (wxPreviewControlBar *) ptr;
+    dest = (wxWindow *) src;
+    return (void *) dest;
+}
 
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
+static void *SwigwxPreviewControlBarTowxEvtHandler(void *ptr) {
+    wxPreviewControlBar *src;
+    wxEvtHandler *dest;
+    src = (wxPreviewControlBar *) ptr;
+    dest = (wxEvtHandler *) src;
+    return (void *) dest;
 }
 
-static void *SwigwxPrinterTowxObject(void *ptr) {
-    wxPrinter *src;
+static void *SwigwxPreviewControlBarTowxObject(void *ptr) {
+    wxPreviewControlBar *src;
     wxObject *dest;
-    src = (wxPrinter *) ptr;
+    src = (wxPreviewControlBar *) ptr;
     dest = (wxObject *) src;
     return (void *) dest;
 }
 
-#define new_wxPrinter(_swigarg0) (new wxPrinter(_swigarg0))
-static PyObject *_wrap_new_wxPrinter(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define new_wxPreviewControlBar(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6) (new wxPreviewControlBar(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6))
+static PyObject *_wrap_new_wxPreviewControlBar(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrinter * _result;
-    wxPrintDialogData * _arg0 = (wxPrintDialogData *) NULL;
+    wxPreviewControlBar * _result;
+    wxPrintPreview * _arg0;
+    long  _arg1;
+    wxWindow * _arg2;
+    wxPoint * _arg3 = (wxPoint *) &wxDefaultPosition;
+    wxSize * _arg4 = (wxSize *) &wxDefaultSize;
+    long  _arg5 = (long ) 0;
+    wxString * _arg6 = (wxString *) &wxPyPanelNameStr;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "data", NULL };
+    PyObject * _argo2 = 0;
+    wxPoint  temp;
+    PyObject * _obj3 = 0;
+    wxSize  temp0;
+    PyObject * _obj4 = 0;
+    PyObject * _obj6 = 0;
+    char *_kwnames[] = { "preview","buttons","parent","pos","size","style","name", NULL };
     char _ptemp[128];
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"|O:new_wxPrinter",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OlO|OOlO:new_wxPreviewControlBar",_kwnames,&_argo0,&_arg1,&_argo2,&_obj3,&_obj4,&_arg5,&_obj6)) 
         return NULL;
     if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintDialogData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxPrinter. Expected _wxPrintDialogData_p.");
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxPreviewControlBar. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (_argo2 == Py_None) { _arg2 = NULL; }
+        else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of new_wxPreviewControlBar. Expected _wxWindow_p.");
         return NULL;
         }
     }
+    if (_obj3)
+{
+    _arg3 = &temp;
+    if (! wxPoint_helper(_obj3, &_arg3))
+        return NULL;
+}
+    if (_obj4)
+{
+    _arg4 = &temp0;
+    if (! wxSize_helper(_obj4, &_arg4))
+        return NULL;
+}
+    if (_obj6)
+{
+    _arg6 = wxString_in_helper(_obj6);
+    if (_arg6 == NULL)
+        return NULL;
+}
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (wxPrinter *)new_wxPrinter(_arg0);
+    _result = (wxPreviewControlBar *)new_wxPreviewControlBar(_arg0,_arg1,_arg2,*_arg3,*_arg4,_arg5,*_arg6);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
 }    if (_result) {
-        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrinter_p");
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPreviewControlBar_p");
         _resultobj = Py_BuildValue("s",_ptemp);
     } else {
         Py_INCREF(Py_None);
         _resultobj = Py_None;
     }
+{
+    if (_obj6)
+        delete _arg6;
+}
     return _resultobj;
 }
 
-#define delete_wxPrinter(_swigobj) (delete _swigobj)
-static PyObject *_wrap_delete_wxPrinter(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPreviewControlBar_GetZoomControl(_swigobj)  (_swigobj->GetZoomControl())
+static PyObject *_wrap_wxPreviewControlBar_GetZoomControl(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrinter * _arg0;
+    int  _result;
+    wxPreviewControlBar * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:delete_wxPrinter",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPreviewControlBar_GetZoomControl",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrinter_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of delete_wxPrinter. Expected _wxPrinter_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPreviewControlBar_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPreviewControlBar_GetZoomControl. Expected _wxPreviewControlBar_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    delete_wxPrinter(_arg0);
+    _result = (int )wxPreviewControlBar_GetZoomControl(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxPrinter_CreateAbortWindow(_swigobj,_swigarg0,_swigarg1)  (_swigobj->CreateAbortWindow(_swigarg0,_swigarg1))
-static PyObject *_wrap_wxPrinter_CreateAbortWindow(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPreviewControlBar_SetZoomControl(_swigobj,_swigarg0)  (_swigobj->SetZoomControl(_swigarg0))
+static PyObject *_wrap_wxPreviewControlBar_SetZoomControl(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrinter * _arg0;
-    wxWindow * _arg1;
-    wxPyPrintout * _arg2;
+    wxPreviewControlBar * _arg0;
+    int  _arg1;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    PyObject * _argo2 = 0;
-    char *_kwnames[] = { "self","parent","printout", NULL };
+    char *_kwnames[] = { "self","zoom", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxPrinter_CreateAbortWindow",_kwnames,&_argo0,&_argo1,&_argo2)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPreviewControlBar_SetZoomControl",_kwnames,&_argo0,&_arg1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrinter_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrinter_CreateAbortWindow. Expected _wxPrinter_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrinter_CreateAbortWindow. Expected _wxWindow_p.");
-        return NULL;
-        }
-    }
-    if (_argo2) {
-        if (_argo2 == Py_None) { _arg2 = NULL; }
-        else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxPrinter_CreateAbortWindow. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPreviewControlBar_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPreviewControlBar_SetZoomControl. Expected _wxPreviewControlBar_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrinter_CreateAbortWindow(_arg0,_arg1,_arg2);
+    wxPreviewControlBar_SetZoomControl(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -4429,34 +6341,33 @@ static PyObject *_wrap_wxPrinter_CreateAbortWindow(PyObject *self, PyObject *arg
     return _resultobj;
 }
 
-#define wxPrinter_GetPrintDialogData(_swigobj)  (_swigobj->GetPrintDialogData())
-static PyObject *_wrap_wxPrinter_GetPrintDialogData(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPreviewControlBar_GetPrintPreview(_swigobj)  (_swigobj->GetPrintPreview())
+static PyObject *_wrap_wxPreviewControlBar_GetPrintPreview(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrintDialogData * _result;
-    wxPrinter * _arg0;
+    wxPrintPreview * _result;
+    wxPreviewControlBar * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
     char _ptemp[128];
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrinter_GetPrintDialogData",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPreviewControlBar_GetPrintPreview",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrinter_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrinter_GetPrintDialogData. Expected _wxPrinter_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPreviewControlBar_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPreviewControlBar_GetPrintPreview. Expected _wxPreviewControlBar_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData & _result_ref = wxPrinter_GetPrintDialogData(_arg0);
-    _result = (wxPrintDialogData *) &_result_ref;
+    _result = (wxPrintPreview *)wxPreviewControlBar_GetPrintPreview(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
 }    if (_result) {
-        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrintDialogData_p");
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrintPreview_p");
         _resultobj = Py_BuildValue("s",_ptemp);
     } else {
         Py_INCREF(Py_None);
@@ -4465,196 +6376,166 @@ static PyObject *_wrap_wxPrinter_GetPrintDialogData(PyObject *self, PyObject *ar
     return _resultobj;
 }
 
-#define wxPrinter_Print(_swigobj,_swigarg0,_swigarg1,_swigarg2)  (_swigobj->Print(_swigarg0,_swigarg1,_swigarg2))
-static PyObject *_wrap_wxPrinter_Print(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPreviewControlBar_OnNext(_swigobj)  (_swigobj->OnNext())
+static PyObject *_wrap_wxPreviewControlBar_OnNext(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    bool  _result;
-    wxPrinter * _arg0;
-    wxWindow * _arg1;
-    wxPyPrintout * _arg2;
-    int  _arg3 = (int ) TRUE;
+    wxPreviewControlBar * _arg0;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    PyObject * _argo2 = 0;
-    char *_kwnames[] = { "self","parent","printout","prompt", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO|i:wxPrinter_Print",_kwnames,&_argo0,&_argo1,&_argo2,&_arg3)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPreviewControlBar_OnNext",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrinter_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrinter_Print. Expected _wxPrinter_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrinter_Print. Expected _wxWindow_p.");
-        return NULL;
-        }
-    }
-    if (_argo2) {
-        if (_argo2 == Py_None) { _arg2 = NULL; }
-        else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxPrinter_Print. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPreviewControlBar_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPreviewControlBar_OnNext. Expected _wxPreviewControlBar_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxPrinter_Print(_arg0,_arg1,_arg2,_arg3);
+    wxPreviewControlBar_OnNext(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
     return _resultobj;
 }
 
-#define wxPrinter_PrintDialog(_swigobj,_swigarg0)  (_swigobj->PrintDialog(_swigarg0))
-static PyObject *_wrap_wxPrinter_PrintDialog(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPreviewControlBar_OnPrevious(_swigobj)  (_swigobj->OnPrevious())
+static PyObject *_wrap_wxPreviewControlBar_OnPrevious(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxDC * _result;
-    wxPrinter * _arg0;
-    wxWindow * _arg1;
+    wxPreviewControlBar * _arg0;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","parent", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPrinter_PrintDialog",_kwnames,&_argo0,&_argo1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPreviewControlBar_OnPrevious",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrinter_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrinter_PrintDialog. Expected _wxPrinter_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrinter_PrintDialog. Expected _wxWindow_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPreviewControlBar_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPreviewControlBar_OnPrevious. Expected _wxPreviewControlBar_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (wxDC *)wxPrinter_PrintDialog(_arg0,_arg1);
+    wxPreviewControlBar_OnPrevious(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}{ _resultobj = wxPyMake_wxObject(_result); }
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
     return _resultobj;
 }
 
-#define wxPrinter_ReportError(_swigobj,_swigarg0,_swigarg1,_swigarg2)  (_swigobj->ReportError(_swigarg0,_swigarg1,_swigarg2))
-static PyObject *_wrap_wxPrinter_ReportError(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPreviewControlBar_OnFirst(_swigobj)  (_swigobj->OnFirst())
+static PyObject *_wrap_wxPreviewControlBar_OnFirst(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrinter * _arg0;
-    wxWindow * _arg1;
-    wxPyPrintout * _arg2;
-    wxString * _arg3;
+    wxPreviewControlBar * _arg0;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    PyObject * _argo2 = 0;
-    PyObject * _obj3 = 0;
-    char *_kwnames[] = { "self","parent","printout","message", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOOO:wxPrinter_ReportError",_kwnames,&_argo0,&_argo1,&_argo2,&_obj3)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPreviewControlBar_OnFirst",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrinter_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrinter_ReportError. Expected _wxPrinter_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPreviewControlBar_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPreviewControlBar_OnFirst. Expected _wxPreviewControlBar_p.");
         return NULL;
         }
     }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrinter_ReportError. Expected _wxWindow_p.");
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPreviewControlBar_OnFirst(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxPreviewControlBar_OnLast(_swigobj)  (_swigobj->OnLast())
+static PyObject *_wrap_wxPreviewControlBar_OnLast(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPreviewControlBar * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPreviewControlBar_OnLast",_kwnames,&_argo0)) 
         return NULL;
-        }
-    }
-    if (_argo2) {
-        if (_argo2 == Py_None) { _arg2 = NULL; }
-        else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxPrinter_ReportError. Expected _wxPyPrintout_p.");
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPreviewControlBar_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPreviewControlBar_OnLast. Expected _wxPreviewControlBar_p.");
         return NULL;
         }
     }
-{
-    _arg3 = wxString_in_helper(_obj3);
-    if (_arg3 == NULL)
-        return NULL;
-}
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrinter_ReportError(_arg0,_arg1,_arg2,*_arg3);
+    wxPreviewControlBar_OnLast(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
 }    Py_INCREF(Py_None);
     _resultobj = Py_None;
-{
-    if (_obj3)
-        delete _arg3;
-}
     return _resultobj;
 }
 
-#define wxPrinter_Setup(_swigobj,_swigarg0)  (_swigobj->Setup(_swigarg0))
-static PyObject *_wrap_wxPrinter_Setup(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPreviewControlBar_OnGoto(_swigobj)  (_swigobj->OnGoto())
+static PyObject *_wrap_wxPreviewControlBar_OnGoto(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    bool  _result;
-    wxPrinter * _arg0;
-    wxWindow * _arg1;
+    wxPreviewControlBar * _arg0;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","parent", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPrinter_Setup",_kwnames,&_argo0,&_argo1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPreviewControlBar_OnGoto",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrinter_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrinter_Setup. Expected _wxPrinter_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrinter_Setup. Expected _wxWindow_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPreviewControlBar_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPreviewControlBar_OnGoto. Expected _wxPreviewControlBar_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxPrinter_Setup(_arg0,_arg1);
+    wxPreviewControlBar_OnGoto(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
     return _resultobj;
 }
 
-static void *SwigwxPrintPreviewTowxObject(void *ptr) {
-    wxPrintPreview *src;
+static void *SwigwxPyPrintPreviewTowxPrintPreview(void *ptr) {
+    wxPyPrintPreview *src;
+    wxPrintPreview *dest;
+    src = (wxPyPrintPreview *) ptr;
+    dest = (wxPrintPreview *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPyPrintPreviewTowxObject(void *ptr) {
+    wxPyPrintPreview *src;
     wxObject *dest;
-    src = (wxPrintPreview *) ptr;
+    src = (wxPyPrintPreview *) ptr;
     dest = (wxObject *) src;
     return (void *) dest;
 }
 
-#define new_wxPrintPreview(_swigarg0,_swigarg1,_swigarg2) (new wxPrintPreview(_swigarg0,_swigarg1,_swigarg2))
-static PyObject *_wrap_new_wxPrintPreview(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define new_wxPyPrintPreview(_swigarg0,_swigarg1,_swigarg2) (new wxPyPrintPreview(_swigarg0,_swigarg1,_swigarg2))
+static PyObject *_wrap_new_wxPyPrintPreview(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrintPreview * _result;
+    wxPyPrintPreview * _result;
     wxPyPrintout * _arg0;
     wxPyPrintout * _arg1;
     wxPrintData * _arg2 = (wxPrintData *) NULL;
@@ -4665,37 +6546,37 @@ static PyObject *_wrap_new_wxPrintPreview(PyObject *self, PyObject *args, PyObje
     char _ptemp[128];
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|O:new_wxPrintPreview",_kwnames,&_argo0,&_argo1,&_argo2)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|O:new_wxPyPrintPreview",_kwnames,&_argo0,&_argo1,&_argo2)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxPrintPreview. Expected _wxPyPrintout_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxPyPrintPreview. Expected _wxPyPrintout_p.");
         return NULL;
         }
     }
     if (_argo1) {
         if (_argo1 == Py_None) { _arg1 = NULL; }
         else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of new_wxPrintPreview. Expected _wxPyPrintout_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of new_wxPyPrintPreview. Expected _wxPyPrintout_p.");
         return NULL;
         }
     }
     if (_argo2) {
         if (_argo2 == Py_None) { _arg2 = NULL; }
         else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxPrintData_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of new_wxPrintPreview. Expected _wxPrintData_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of new_wxPyPrintPreview. Expected _wxPrintData_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (wxPrintPreview *)new_wxPrintPreview(_arg0,_arg1,_arg2);
+    _result = (wxPyPrintPreview *)new_wxPyPrintPreview(_arg0,_arg1,_arg2);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
 }    if (_result) {
-        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrintPreview_p");
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPyPrintPreview_p");
         _resultobj = Py_BuildValue("s",_ptemp);
     } else {
         Py_INCREF(Py_None);
@@ -4704,111 +6585,111 @@ static PyObject *_wrap_new_wxPrintPreview(PyObject *self, PyObject *args, PyObje
     return _resultobj;
 }
 
-#define wxPrintPreview_GetCanvas(_swigobj)  (_swigobj->GetCanvas())
-static PyObject *_wrap_wxPrintPreview_GetCanvas(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxWindow * _result;
-    wxPrintPreview * _arg0;
-    PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetCanvas",_kwnames,&_argo0)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetCanvas. Expected _wxPrintPreview_p.");
-        return NULL;
-        }
-    }
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (wxWindow *)wxPrintPreview_GetCanvas(_arg0);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}{ _resultobj = wxPyMake_wxObject(_result); }
-    return _resultobj;
-}
-
-#define wxPrintPreview_GetCurrentPage(_swigobj)  (_swigobj->GetCurrentPage())
-static PyObject *_wrap_wxPrintPreview_GetCurrentPage(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    int  _result;
-    wxPrintPreview * _arg0;
+#define wxPyPrintPreview__setCallbackInfo(_swigobj,_swigarg0,_swigarg1)  (_swigobj->_setCallbackInfo(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxPyPrintPreview__setCallbackInfo(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPrintPreview * _arg0;
+    PyObject * _arg1;
+    PyObject * _arg2;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    PyObject * _obj1 = 0;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","self","_class", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetCurrentPage",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxPyPrintPreview__setCallbackInfo",_kwnames,&_argo0,&_obj1,&_obj2)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetCurrentPage. Expected _wxPrintPreview_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPrintPreview__setCallbackInfo. Expected _wxPyPrintPreview_p.");
         return NULL;
         }
     }
+{
+  _arg1 = _obj1;
+}
+{
+  _arg2 = _obj2;
+}
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (int )wxPrintPreview_GetCurrentPage(_arg0);
+    wxPyPrintPreview__setCallbackInfo(_arg0,_arg1,_arg2);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
     return _resultobj;
 }
 
-#define wxPrintPreview_GetFrame(_swigobj)  (_swigobj->GetFrame())
-static PyObject *_wrap_wxPrintPreview_GetFrame(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPyPrintPreview_base_SetCurrentPage(_swigobj,_swigarg0)  (_swigobj->base_SetCurrentPage(_swigarg0))
+static PyObject *_wrap_wxPyPrintPreview_base_SetCurrentPage(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxFrame * _result;
-    wxPrintPreview * _arg0;
+    bool  _result;
+    wxPyPrintPreview * _arg0;
+    int  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    char *_kwnames[] = { "self","pageNum", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetFrame",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPyPrintPreview_base_SetCurrentPage",_kwnames,&_argo0,&_arg1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetFrame. Expected _wxPrintPreview_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPrintPreview_base_SetCurrentPage. Expected _wxPyPrintPreview_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (wxFrame *)wxPrintPreview_GetFrame(_arg0);
+    _result = (bool )wxPyPrintPreview_base_SetCurrentPage(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}{ _resultobj = wxPyMake_wxObject(_result); }
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxPrintPreview_GetMaxPage(_swigobj)  (_swigobj->GetMaxPage())
-static PyObject *_wrap_wxPrintPreview_GetMaxPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPyPrintPreview_base_PaintPage(_swigobj,_swigarg0,_swigarg1)  (_swigobj->base_PaintPage(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxPyPrintPreview_base_PaintPage(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    int  _result;
-    wxPrintPreview * _arg0;
+    bool  _result;
+    wxPyPrintPreview * _arg0;
+    wxWindow * _arg1;
+    wxDC * _arg2;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    PyObject * _argo1 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","canvas","dc", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetMaxPage",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxPyPrintPreview_base_PaintPage",_kwnames,&_argo0,&_argo1,&_argo2)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetMaxPage. Expected _wxPrintPreview_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPrintPreview_base_PaintPage. Expected _wxPyPrintPreview_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPyPrintPreview_base_PaintPage. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxDC_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxPyPrintPreview_base_PaintPage. Expected _wxDC_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (int )wxPrintPreview_GetMaxPage(_arg0);
+    _result = (bool )wxPyPrintPreview_base_PaintPage(_arg0,_arg1,*_arg2);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -4816,27 +6697,44 @@ static PyObject *_wrap_wxPrintPreview_GetMaxPage(PyObject *self, PyObject *args,
     return _resultobj;
 }
 
-#define wxPrintPreview_GetMinPage(_swigobj)  (_swigobj->GetMinPage())
-static PyObject *_wrap_wxPrintPreview_GetMinPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPyPrintPreview_base_DrawBlankPage(_swigobj,_swigarg0,_swigarg1)  (_swigobj->base_DrawBlankPage(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxPyPrintPreview_base_DrawBlankPage(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    int  _result;
-    wxPrintPreview * _arg0;
+    bool  _result;
+    wxPyPrintPreview * _arg0;
+    wxWindow * _arg1;
+    wxDC * _arg2;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    PyObject * _argo1 = 0;
+    PyObject * _argo2 = 0;
+    char *_kwnames[] = { "self","canvas","dc", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetMinPage",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxPyPrintPreview_base_DrawBlankPage",_kwnames,&_argo0,&_argo1,&_argo2)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetMinPage. Expected _wxPrintPreview_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPrintPreview_base_DrawBlankPage. Expected _wxPyPrintPreview_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPyPrintPreview_base_DrawBlankPage. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+    if (_argo2) {
+        if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxDC_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxPyPrintPreview_base_DrawBlankPage. Expected _wxDC_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (int )wxPrintPreview_GetMinPage(_arg0);
+    _result = (bool )wxPyPrintPreview_base_DrawBlankPage(_arg0,_arg1,*_arg2);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -4844,214 +6742,324 @@ static PyObject *_wrap_wxPrintPreview_GetMinPage(PyObject *self, PyObject *args,
     return _resultobj;
 }
 
-#define wxPrintPreview_GetPrintDialogData(_swigobj)  (_swigobj->GetPrintDialogData())
-static PyObject *_wrap_wxPrintPreview_GetPrintDialogData(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPyPrintPreview_base_RenderPage(_swigobj,_swigarg0)  (_swigobj->base_RenderPage(_swigarg0))
+static PyObject *_wrap_wxPyPrintPreview_base_RenderPage(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrintDialogData * _result;
-    wxPrintPreview * _arg0;
+    bool  _result;
+    wxPyPrintPreview * _arg0;
+    int  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
-    char _ptemp[128];
+    char *_kwnames[] = { "self","pageNum", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetPrintDialogData",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPyPrintPreview_base_RenderPage",_kwnames,&_argo0,&_arg1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetPrintDialogData. Expected _wxPrintPreview_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPrintPreview_base_RenderPage. Expected _wxPyPrintPreview_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintDialogData & _result_ref = wxPrintPreview_GetPrintDialogData(_arg0);
-    _result = (wxPrintDialogData *) &_result_ref;
+    _result = (bool )wxPyPrintPreview_base_RenderPage(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    if (_result) {
-        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPrintDialogData_p");
-        _resultobj = Py_BuildValue("s",_ptemp);
-    } else {
-        Py_INCREF(Py_None);
-        _resultobj = Py_None;
-    }
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxPrintPreview_GetPrintout(_swigobj)  (_swigobj->GetPrintout())
-static PyObject *_wrap_wxPrintPreview_GetPrintout(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPyPrintPreview_base_SetZoom(_swigobj,_swigarg0)  (_swigobj->base_SetZoom(_swigarg0))
+static PyObject *_wrap_wxPyPrintPreview_base_SetZoom(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPyPrintout * _result;
-    wxPrintPreview * _arg0;
+    wxPyPrintPreview * _arg0;
+    int  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    char *_kwnames[] = { "self","percent", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetPrintout",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPyPrintPreview_base_SetZoom",_kwnames,&_argo0,&_arg1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetPrintout. Expected _wxPrintPreview_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPrintPreview_base_SetZoom. Expected _wxPyPrintPreview_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (wxPyPrintout *)wxPrintPreview_GetPrintout(_arg0);
+    wxPyPrintPreview_base_SetZoom(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}{ _resultobj = wxPyMake_wxObject(_result); }
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
     return _resultobj;
 }
 
-#define wxPrintPreview_GetPrintoutForPrinting(_swigobj)  (_swigobj->GetPrintoutForPrinting())
-static PyObject *_wrap_wxPrintPreview_GetPrintoutForPrinting(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPyPrintPreview_base_Print(_swigobj,_swigarg0)  (_swigobj->base_Print(_swigarg0))
+static PyObject *_wrap_wxPyPrintPreview_base_Print(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPyPrintout * _result;
-    wxPrintPreview * _arg0;
+    bool  _result;
+    wxPyPrintPreview * _arg0;
+    bool  _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    int tempbool1;
+    char *_kwnames[] = { "self","interactive", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetPrintoutForPrinting",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPyPrintPreview_base_Print",_kwnames,&_argo0,&tempbool1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetPrintoutForPrinting. Expected _wxPrintPreview_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPrintPreview_base_Print. Expected _wxPyPrintPreview_p.");
         return NULL;
         }
     }
+    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (wxPyPrintout *)wxPrintPreview_GetPrintoutForPrinting(_arg0);
+    _result = (bool )wxPyPrintPreview_base_Print(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}{ _resultobj = wxPyMake_wxObject(_result); }
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-#define wxPrintPreview_GetZoom(_swigobj)  (_swigobj->GetZoom())
-static PyObject *_wrap_wxPrintPreview_GetZoom(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPyPrintPreview_base_DetermineScaling(_swigobj)  (_swigobj->base_DetermineScaling())
+static PyObject *_wrap_wxPyPrintPreview_base_DetermineScaling(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    int  _result;
-    wxPrintPreview * _arg0;
+    wxPyPrintPreview * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_GetZoom",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPyPrintPreview_base_DetermineScaling",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_GetZoom. Expected _wxPrintPreview_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPrintPreview_base_DetermineScaling. Expected _wxPyPrintPreview_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (int )wxPrintPreview_GetZoom(_arg0);
+    wxPyPrintPreview_base_DetermineScaling(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
     return _resultobj;
 }
 
-#define wxPrintPreview_Ok(_swigobj)  (_swigobj->Ok())
-static PyObject *_wrap_wxPrintPreview_Ok(PyObject *self, PyObject *args, PyObject *kwargs) {
+static void *SwigwxPyPreviewFrameTowxPreviewFrame(void *ptr) {
+    wxPyPreviewFrame *src;
+    wxPreviewFrame *dest;
+    src = (wxPyPreviewFrame *) ptr;
+    dest = (wxPreviewFrame *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPyPreviewFrameTowxFrame(void *ptr) {
+    wxPyPreviewFrame *src;
+    wxFrame *dest;
+    src = (wxPyPreviewFrame *) ptr;
+    dest = (wxFrame *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPyPreviewFrameTowxTopLevelWindow(void *ptr) {
+    wxPyPreviewFrame *src;
+    wxTopLevelWindow *dest;
+    src = (wxPyPreviewFrame *) ptr;
+    dest = (wxTopLevelWindow *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPyPreviewFrameTowxWindow(void *ptr) {
+    wxPyPreviewFrame *src;
+    wxWindow *dest;
+    src = (wxPyPreviewFrame *) ptr;
+    dest = (wxWindow *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPyPreviewFrameTowxEvtHandler(void *ptr) {
+    wxPyPreviewFrame *src;
+    wxEvtHandler *dest;
+    src = (wxPyPreviewFrame *) ptr;
+    dest = (wxEvtHandler *) src;
+    return (void *) dest;
+}
+
+static void *SwigwxPyPreviewFrameTowxObject(void *ptr) {
+    wxPyPreviewFrame *src;
+    wxObject *dest;
+    src = (wxPyPreviewFrame *) ptr;
+    dest = (wxObject *) src;
+    return (void *) dest;
+}
+
+#define new_wxPyPreviewFrame(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6) (new wxPyPreviewFrame(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6))
+static PyObject *_wrap_new_wxPyPreviewFrame(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    bool  _result;
+    wxPyPreviewFrame * _result;
     wxPrintPreview * _arg0;
+    wxFrame * _arg1;
+    wxString * _arg2;
+    wxPoint * _arg3 = (wxPoint *) &wxDefaultPosition;
+    wxSize * _arg4 = (wxSize *) &wxDefaultSize;
+    long  _arg5 = (long ) wxDEFAULT_FRAME_STYLE;
+    wxString * _arg6 = (wxString *) &wxPyFrameNameStr;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
+    PyObject * _argo1 = 0;
+    PyObject * _obj2 = 0;
+    wxPoint  temp;
+    PyObject * _obj3 = 0;
+    wxSize  temp0;
+    PyObject * _obj4 = 0;
+    PyObject * _obj6 = 0;
+    char *_kwnames[] = { "preview","parent","title","pos","size","style","name", NULL };
+    char _ptemp[128];
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPrintPreview_Ok",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO|OOlO:new_wxPyPreviewFrame",_kwnames,&_argo0,&_argo1,&_obj2,&_obj3,&_obj4,&_arg5,&_obj6)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_Ok. Expected _wxPrintPreview_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxPyPreviewFrame. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxFrame_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of new_wxPyPreviewFrame. Expected _wxFrame_p.");
         return NULL;
         }
     }
+{
+    _arg2 = wxString_in_helper(_obj2);
+    if (_arg2 == NULL)
+        return NULL;
+}
+    if (_obj3)
+{
+    _arg3 = &temp;
+    if (! wxPoint_helper(_obj3, &_arg3))
+        return NULL;
+}
+    if (_obj4)
+{
+    _arg4 = &temp0;
+    if (! wxSize_helper(_obj4, &_arg4))
+        return NULL;
+}
+    if (_obj6)
+{
+    _arg6 = wxString_in_helper(_obj6);
+    if (_arg6 == NULL)
+        return NULL;
+}
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxPrintPreview_Ok(_arg0);
+    _result = (wxPyPreviewFrame *)new_wxPyPreviewFrame(_arg0,_arg1,*_arg2,*_arg3,*_arg4,_arg5,*_arg6);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
+}    if (_result) {
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPyPreviewFrame_p");
+        _resultobj = Py_BuildValue("s",_ptemp);
+    } else {
+        Py_INCREF(Py_None);
+        _resultobj = Py_None;
+    }
+{
+    if (_obj2)
+        delete _arg2;
+}
+{
+    if (_obj6)
+        delete _arg6;
+}
     return _resultobj;
 }
 
-#define wxPrintPreview_Print(_swigobj,_swigarg0)  (_swigobj->Print(_swigarg0))
-static PyObject *_wrap_wxPrintPreview_Print(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPyPreviewFrame__setCallbackInfo(_swigobj,_swigarg0,_swigarg1)  (_swigobj->_setCallbackInfo(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxPyPreviewFrame__setCallbackInfo(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    bool  _result;
-    wxPrintPreview * _arg0;
-    bool  _arg1;
+    wxPyPreviewFrame * _arg0;
+    PyObject * _arg1;
+    PyObject * _arg2;
     PyObject * _argo0 = 0;
-    int tempbool1;
-    char *_kwnames[] = { "self","prompt", NULL };
+    PyObject * _obj1 = 0;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","self","_class", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintPreview_Print",_kwnames,&_argo0,&tempbool1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxPyPreviewFrame__setCallbackInfo",_kwnames,&_argo0,&_obj1,&_obj2)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_Print. Expected _wxPrintPreview_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPreviewFrame_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPreviewFrame__setCallbackInfo. Expected _wxPyPreviewFrame_p.");
         return NULL;
         }
     }
-    _arg1 = (bool ) tempbool1;
+{
+  _arg1 = _obj1;
+}
+{
+  _arg2 = _obj2;
+}
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxPrintPreview_Print(_arg0,_arg1);
+    wxPyPreviewFrame__setCallbackInfo(_arg0,_arg1,_arg2);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
     return _resultobj;
 }
 
-#define wxPrintPreview_SetCanvas(_swigobj,_swigarg0)  (_swigobj->SetCanvas(_swigarg0))
-static PyObject *_wrap_wxPrintPreview_SetCanvas(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPyPreviewFrame_SetPreviewCanvas(_swigobj,_swigarg0)  (_swigobj->SetPreviewCanvas(_swigarg0))
+static PyObject *_wrap_wxPyPreviewFrame_SetPreviewCanvas(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrintPreview * _arg0;
+    wxPyPreviewFrame * _arg0;
     wxWindow * _arg1;
     PyObject * _argo0 = 0;
     PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","window", NULL };
+    char *_kwnames[] = { "self","canvas", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPrintPreview_SetCanvas",_kwnames,&_argo0,&_argo1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPyPreviewFrame_SetPreviewCanvas",_kwnames,&_argo0,&_argo1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_SetCanvas. Expected _wxPrintPreview_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPreviewFrame_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPreviewFrame_SetPreviewCanvas. Expected _wxPyPreviewFrame_p.");
         return NULL;
         }
     }
     if (_argo1) {
         if (_argo1 == Py_None) { _arg1 = NULL; }
         else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrintPreview_SetCanvas. Expected _wxWindow_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPyPreviewFrame_SetPreviewCanvas. Expected _wxWindow_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintPreview_SetCanvas(_arg0,_arg1);
+    wxPyPreviewFrame_SetPreviewCanvas(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -5060,27 +7068,35 @@ static PyObject *_wrap_wxPrintPreview_SetCanvas(PyObject *self, PyObject *args,
     return _resultobj;
 }
 
-#define wxPrintPreview_SetCurrentPage(_swigobj,_swigarg0)  (_swigobj->SetCurrentPage(_swigarg0))
-static PyObject *_wrap_wxPrintPreview_SetCurrentPage(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPyPreviewFrame_SetControlBar(_swigobj,_swigarg0)  (_swigobj->SetControlBar(_swigarg0))
+static PyObject *_wrap_wxPyPreviewFrame_SetControlBar(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrintPreview * _arg0;
-    int  _arg1;
+    wxPyPreviewFrame * _arg0;
+    wxPreviewControlBar * _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self","pageNum", NULL };
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","bar", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintPreview_SetCurrentPage",_kwnames,&_argo0,&_arg1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPyPreviewFrame_SetControlBar",_kwnames,&_argo0,&_argo1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_SetCurrentPage. Expected _wxPrintPreview_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPreviewFrame_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPreviewFrame_SetControlBar. Expected _wxPyPreviewFrame_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxPreviewControlBar_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPyPreviewFrame_SetControlBar. Expected _wxPreviewControlBar_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintPreview_SetCurrentPage(_arg0,_arg1);
+    wxPyPreviewFrame_SetControlBar(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -5089,35 +7105,26 @@ static PyObject *_wrap_wxPrintPreview_SetCurrentPage(PyObject *self, PyObject *a
     return _resultobj;
 }
 
-#define wxPrintPreview_SetFrame(_swigobj,_swigarg0)  (_swigobj->SetFrame(_swigarg0))
-static PyObject *_wrap_wxPrintPreview_SetFrame(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPyPreviewFrame_base_Initialize(_swigobj)  (_swigobj->base_Initialize())
+static PyObject *_wrap_wxPyPreviewFrame_base_Initialize(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrintPreview * _arg0;
-    wxFrame * _arg1;
+    wxPyPreviewFrame * _arg0;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","frame", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPrintPreview_SetFrame",_kwnames,&_argo0,&_argo1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPyPreviewFrame_base_Initialize",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_SetFrame. Expected _wxPrintPreview_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxFrame_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrintPreview_SetFrame. Expected _wxFrame_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPreviewFrame_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPreviewFrame_base_Initialize. Expected _wxPyPreviewFrame_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintPreview_SetFrame(_arg0,_arg1);
+    wxPyPreviewFrame_base_Initialize(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -5126,35 +7133,26 @@ static PyObject *_wrap_wxPrintPreview_SetFrame(PyObject *self, PyObject *args, P
     return _resultobj;
 }
 
-#define wxPrintPreview_SetPrintout(_swigobj,_swigarg0)  (_swigobj->SetPrintout(_swigarg0))
-static PyObject *_wrap_wxPrintPreview_SetPrintout(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPyPreviewFrame_base_CreateCanvas(_swigobj)  (_swigobj->base_CreateCanvas())
+static PyObject *_wrap_wxPyPreviewFrame_base_CreateCanvas(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrintPreview * _arg0;
-    wxPyPrintout * _arg1;
+    wxPyPreviewFrame * _arg0;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","printout", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPrintPreview_SetPrintout",_kwnames,&_argo0,&_argo1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPyPreviewFrame_base_CreateCanvas",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_SetPrintout. Expected _wxPrintPreview_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxPyPrintout_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPrintPreview_SetPrintout. Expected _wxPyPrintout_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPreviewFrame_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPreviewFrame_base_CreateCanvas. Expected _wxPyPreviewFrame_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintPreview_SetPrintout(_arg0,_arg1);
+    wxPyPreviewFrame_base_CreateCanvas(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -5163,27 +7161,26 @@ static PyObject *_wrap_wxPrintPreview_SetPrintout(PyObject *self, PyObject *args
     return _resultobj;
 }
 
-#define wxPrintPreview_SetZoom(_swigobj,_swigarg0)  (_swigobj->SetZoom(_swigarg0))
-static PyObject *_wrap_wxPrintPreview_SetZoom(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPyPreviewFrame_base_CreateControlBar(_swigobj)  (_swigobj->base_CreateControlBar())
+static PyObject *_wrap_wxPyPreviewFrame_base_CreateControlBar(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPrintPreview * _arg0;
-    int  _arg1;
+    wxPyPreviewFrame * _arg0;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self","percent", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPrintPreview_SetZoom",_kwnames,&_argo0,&_arg1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPyPreviewFrame_base_CreateControlBar",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPrintPreview_SetZoom. Expected _wxPrintPreview_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPreviewFrame_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPreviewFrame_base_CreateControlBar. Expected _wxPyPreviewFrame_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPrintPreview_SetZoom(_arg0,_arg1);
+    wxPyPreviewFrame_base_CreateControlBar(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -5192,90 +7189,84 @@ static PyObject *_wrap_wxPrintPreview_SetZoom(PyObject *self, PyObject *args, Py
     return _resultobj;
 }
 
-static void *SwigwxPreviewFrameTowxFrame(void *ptr) {
-    wxPreviewFrame *src;
-    wxFrame *dest;
-    src = (wxPreviewFrame *) ptr;
-    dest = (wxFrame *) src;
+static void *SwigwxPyPreviewControlBarTowxPreviewControlBar(void *ptr) {
+    wxPyPreviewControlBar *src;
+    wxPreviewControlBar *dest;
+    src = (wxPyPreviewControlBar *) ptr;
+    dest = (wxPreviewControlBar *) src;
     return (void *) dest;
 }
 
-static void *SwigwxPreviewFrameTowxTopLevelWindow(void *ptr) {
-    wxPreviewFrame *src;
-    wxTopLevelWindow *dest;
-    src = (wxPreviewFrame *) ptr;
-    dest = (wxTopLevelWindow *) src;
+static void *SwigwxPyPreviewControlBarTowxPanel(void *ptr) {
+    wxPyPreviewControlBar *src;
+    wxPanel *dest;
+    src = (wxPyPreviewControlBar *) ptr;
+    dest = (wxPanel *) src;
     return (void *) dest;
 }
 
-static void *SwigwxPreviewFrameTowxWindow(void *ptr) {
-    wxPreviewFrame *src;
+static void *SwigwxPyPreviewControlBarTowxWindow(void *ptr) {
+    wxPyPreviewControlBar *src;
     wxWindow *dest;
-    src = (wxPreviewFrame *) ptr;
+    src = (wxPyPreviewControlBar *) ptr;
     dest = (wxWindow *) src;
     return (void *) dest;
 }
 
-static void *SwigwxPreviewFrameTowxEvtHandler(void *ptr) {
-    wxPreviewFrame *src;
+static void *SwigwxPyPreviewControlBarTowxEvtHandler(void *ptr) {
+    wxPyPreviewControlBar *src;
     wxEvtHandler *dest;
-    src = (wxPreviewFrame *) ptr;
+    src = (wxPyPreviewControlBar *) ptr;
     dest = (wxEvtHandler *) src;
     return (void *) dest;
 }
 
-static void *SwigwxPreviewFrameTowxObject(void *ptr) {
-    wxPreviewFrame *src;
+static void *SwigwxPyPreviewControlBarTowxObject(void *ptr) {
+    wxPyPreviewControlBar *src;
     wxObject *dest;
-    src = (wxPreviewFrame *) ptr;
+    src = (wxPyPreviewControlBar *) ptr;
     dest = (wxObject *) src;
     return (void *) dest;
 }
 
-#define new_wxPreviewFrame(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6) (new wxPreviewFrame(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6))
-static PyObject *_wrap_new_wxPreviewFrame(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define new_wxPyPreviewControlBar(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6) (new wxPyPreviewControlBar(_swigarg0,_swigarg1,_swigarg2,_swigarg3,_swigarg4,_swigarg5,_swigarg6))
+static PyObject *_wrap_new_wxPyPreviewControlBar(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPreviewFrame * _result;
+    wxPyPreviewControlBar * _result;
     wxPrintPreview * _arg0;
-    wxFrame * _arg1;
-    wxString * _arg2;
+    long  _arg1;
+    wxWindow * _arg2;
     wxPoint * _arg3 = (wxPoint *) &wxDefaultPosition;
     wxSize * _arg4 = (wxSize *) &wxDefaultSize;
-    long  _arg5 = (long ) wxDEFAULT_FRAME_STYLE;
-    wxString * _arg6 = (wxString *) &wxPyFrameNameStr;
+    long  _arg5 = (long ) 0;
+    wxString * _arg6 = (wxString *) &wxPyPanelNameStr;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    PyObject * _obj2 = 0;
+    PyObject * _argo2 = 0;
     wxPoint  temp;
     PyObject * _obj3 = 0;
     wxSize  temp0;
     PyObject * _obj4 = 0;
     PyObject * _obj6 = 0;
-    char *_kwnames[] = { "preview","parent","title","pos","size","style","name", NULL };
+    char *_kwnames[] = { "preview","buttons","parent","pos","size","style","name", NULL };
     char _ptemp[128];
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO|OOlO:new_wxPreviewFrame",_kwnames,&_argo0,&_argo1,&_obj2,&_obj3,&_obj4,&_arg5,&_obj6)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OlO|OOlO:new_wxPyPreviewControlBar",_kwnames,&_argo0,&_arg1,&_argo2,&_obj3,&_obj4,&_arg5,&_obj6)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPrintPreview_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxPreviewFrame. Expected _wxPrintPreview_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of new_wxPyPreviewControlBar. Expected _wxPrintPreview_p.");
         return NULL;
         }
     }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxFrame_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of new_wxPreviewFrame. Expected _wxFrame_p.");
+    if (_argo2) {
+        if (_argo2 == Py_None) { _arg2 = NULL; }
+        else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of new_wxPyPreviewControlBar. Expected _wxWindow_p.");
         return NULL;
         }
     }
-{
-    _arg2 = wxString_in_helper(_obj2);
-    if (_arg2 == NULL)
-        return NULL;
-}
     if (_obj3)
 {
     _arg3 = &temp;
@@ -5296,21 +7287,17 @@ static PyObject *_wrap_new_wxPreviewFrame(PyObject *self, PyObject *args, PyObje
 }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (wxPreviewFrame *)new_wxPreviewFrame(_arg0,_arg1,*_arg2,*_arg3,*_arg4,_arg5,*_arg6);
+    _result = (wxPyPreviewControlBar *)new_wxPyPreviewControlBar(_arg0,_arg1,_arg2,*_arg3,*_arg4,_arg5,*_arg6);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
 }    if (_result) {
-        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPreviewFrame_p");
+        SWIG_MakePtr(_ptemp, (char *) _result,"_wxPyPreviewControlBar_p");
         _resultobj = Py_BuildValue("s",_ptemp);
     } else {
         Py_INCREF(Py_None);
         _resultobj = Py_None;
     }
-{
-    if (_obj2)
-        delete _arg2;
-}
 {
     if (_obj6)
         delete _arg6;
@@ -5318,26 +7305,130 @@ static PyObject *_wrap_new_wxPreviewFrame(PyObject *self, PyObject *args, PyObje
     return _resultobj;
 }
 
-#define wxPreviewFrame_Initialize(_swigobj)  (_swigobj->Initialize())
-static PyObject *_wrap_wxPreviewFrame_Initialize(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxPyPreviewControlBar__setCallbackInfo(_swigobj,_swigarg0,_swigarg1)  (_swigobj->_setCallbackInfo(_swigarg0,_swigarg1))
+static PyObject *_wrap_wxPyPreviewControlBar__setCallbackInfo(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    wxPreviewFrame * _arg0;
+    wxPyPreviewControlBar * _arg0;
+    PyObject * _arg1;
+    PyObject * _arg2;
+    PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","self","_class", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxPyPreviewControlBar__setCallbackInfo",_kwnames,&_argo0,&_obj1,&_obj2)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPreviewControlBar_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPreviewControlBar__setCallbackInfo. Expected _wxPyPreviewControlBar_p.");
+        return NULL;
+        }
+    }
+{
+  _arg1 = _obj1;
+}
+{
+  _arg2 = _obj2;
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPyPreviewControlBar__setCallbackInfo(_arg0,_arg1,_arg2);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxPyPreviewControlBar_SetPrintPreview(_swigobj,_swigarg0)  (_swigobj->SetPrintPreview(_swigarg0))
+static PyObject *_wrap_wxPyPreviewControlBar_SetPrintPreview(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPreviewControlBar * _arg0;
+    wxPrintPreview * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","preview", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPyPreviewControlBar_SetPrintPreview",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPreviewControlBar_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPreviewControlBar_SetPrintPreview. Expected _wxPyPreviewControlBar_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxPrintPreview_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxPyPreviewControlBar_SetPrintPreview. Expected _wxPrintPreview_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPyPreviewControlBar_SetPrintPreview(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxPyPreviewControlBar_base_CreateButtons(_swigobj)  (_swigobj->base_CreateButtons())
+static PyObject *_wrap_wxPyPreviewControlBar_base_CreateButtons(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPreviewControlBar * _arg0;
     PyObject * _argo0 = 0;
     char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPreviewFrame_Initialize",_kwnames,&_argo0)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPyPreviewControlBar_base_CreateButtons",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPreviewFrame_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPreviewFrame_Initialize. Expected _wxPreviewFrame_p.");
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPreviewControlBar_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPreviewControlBar_base_CreateButtons. Expected _wxPyPreviewControlBar_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxPreviewFrame_Initialize(_arg0);
+    wxPyPreviewControlBar_base_CreateButtons(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxPyPreviewControlBar_base_SetZoomControl(_swigobj,_swigarg0)  (_swigobj->base_SetZoomControl(_swigarg0))
+static PyObject *_wrap_wxPyPreviewControlBar_base_SetZoomControl(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxPyPreviewControlBar * _arg0;
+    int  _arg1;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self","zoom", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxPyPreviewControlBar_base_SetZoomControl",_kwnames,&_argo0,&_arg1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyPreviewControlBar_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyPreviewControlBar_base_SetZoomControl. Expected _wxPyPreviewControlBar_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxPyPreviewControlBar_base_SetZoomControl(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -5347,25 +7438,66 @@ static PyObject *_wrap_wxPreviewFrame_Initialize(PyObject *self, PyObject *args,
 }
 
 static PyMethodDef printfwcMethods[] = {
+	 { "wxPyPreviewControlBar_base_SetZoomControl", (PyCFunction) _wrap_wxPyPreviewControlBar_base_SetZoomControl, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPreviewControlBar_base_CreateButtons", (PyCFunction) _wrap_wxPyPreviewControlBar_base_CreateButtons, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPreviewControlBar_SetPrintPreview", (PyCFunction) _wrap_wxPyPreviewControlBar_SetPrintPreview, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPreviewControlBar__setCallbackInfo", (PyCFunction) _wrap_wxPyPreviewControlBar__setCallbackInfo, METH_VARARGS | METH_KEYWORDS },
+	 { "new_wxPyPreviewControlBar", (PyCFunction) _wrap_new_wxPyPreviewControlBar, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPreviewFrame_base_CreateControlBar", (PyCFunction) _wrap_wxPyPreviewFrame_base_CreateControlBar, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPreviewFrame_base_CreateCanvas", (PyCFunction) _wrap_wxPyPreviewFrame_base_CreateCanvas, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPreviewFrame_base_Initialize", (PyCFunction) _wrap_wxPyPreviewFrame_base_Initialize, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPreviewFrame_SetControlBar", (PyCFunction) _wrap_wxPyPreviewFrame_SetControlBar, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPreviewFrame_SetPreviewCanvas", (PyCFunction) _wrap_wxPyPreviewFrame_SetPreviewCanvas, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPreviewFrame__setCallbackInfo", (PyCFunction) _wrap_wxPyPreviewFrame__setCallbackInfo, METH_VARARGS | METH_KEYWORDS },
+	 { "new_wxPyPreviewFrame", (PyCFunction) _wrap_new_wxPyPreviewFrame, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPrintPreview_base_DetermineScaling", (PyCFunction) _wrap_wxPyPrintPreview_base_DetermineScaling, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPrintPreview_base_Print", (PyCFunction) _wrap_wxPyPrintPreview_base_Print, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPrintPreview_base_SetZoom", (PyCFunction) _wrap_wxPyPrintPreview_base_SetZoom, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPrintPreview_base_RenderPage", (PyCFunction) _wrap_wxPyPrintPreview_base_RenderPage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPrintPreview_base_DrawBlankPage", (PyCFunction) _wrap_wxPyPrintPreview_base_DrawBlankPage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPrintPreview_base_PaintPage", (PyCFunction) _wrap_wxPyPrintPreview_base_PaintPage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPrintPreview_base_SetCurrentPage", (PyCFunction) _wrap_wxPyPrintPreview_base_SetCurrentPage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPyPrintPreview__setCallbackInfo", (PyCFunction) _wrap_wxPyPrintPreview__setCallbackInfo, METH_VARARGS | METH_KEYWORDS },
+	 { "new_wxPyPrintPreview", (PyCFunction) _wrap_new_wxPyPrintPreview, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPreviewControlBar_OnGoto", (PyCFunction) _wrap_wxPreviewControlBar_OnGoto, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPreviewControlBar_OnLast", (PyCFunction) _wrap_wxPreviewControlBar_OnLast, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPreviewControlBar_OnFirst", (PyCFunction) _wrap_wxPreviewControlBar_OnFirst, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPreviewControlBar_OnPrevious", (PyCFunction) _wrap_wxPreviewControlBar_OnPrevious, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPreviewControlBar_OnNext", (PyCFunction) _wrap_wxPreviewControlBar_OnNext, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPreviewControlBar_GetPrintPreview", (PyCFunction) _wrap_wxPreviewControlBar_GetPrintPreview, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPreviewControlBar_SetZoomControl", (PyCFunction) _wrap_wxPreviewControlBar_SetZoomControl, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPreviewControlBar_GetZoomControl", (PyCFunction) _wrap_wxPreviewControlBar_GetZoomControl, METH_VARARGS | METH_KEYWORDS },
+	 { "new_wxPreviewControlBar", (PyCFunction) _wrap_new_wxPreviewControlBar, METH_VARARGS | METH_KEYWORDS },
+	 { "new_wxPreviewCanvas", (PyCFunction) _wrap_new_wxPreviewCanvas, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPreviewFrame_CreateCanvas", (PyCFunction) _wrap_wxPreviewFrame_CreateCanvas, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPreviewFrame_CreateControlBar", (PyCFunction) _wrap_wxPreviewFrame_CreateControlBar, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPreviewFrame_Initialize", (PyCFunction) _wrap_wxPreviewFrame_Initialize, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxPreviewFrame", (PyCFunction) _wrap_new_wxPreviewFrame, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintPreview_SetZoom", (PyCFunction) _wrap_wxPrintPreview_SetZoom, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintPreview_SetPrintout", (PyCFunction) _wrap_wxPrintPreview_SetPrintout, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintPreview_SetFrame", (PyCFunction) _wrap_wxPrintPreview_SetFrame, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintPreview_SetCurrentPage", (PyCFunction) _wrap_wxPrintPreview_SetCurrentPage, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintPreview_SetCanvas", (PyCFunction) _wrap_wxPrintPreview_SetCanvas, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintPreview_DetermineScaling", (PyCFunction) _wrap_wxPrintPreview_DetermineScaling, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintPreview_Print", (PyCFunction) _wrap_wxPrintPreview_Print, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintPreview_SetOk", (PyCFunction) _wrap_wxPrintPreview_SetOk, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintPreview_Ok", (PyCFunction) _wrap_wxPrintPreview_Ok, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintPreview_GetZoom", (PyCFunction) _wrap_wxPrintPreview_GetZoom, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintPreview_GetPrintoutForPrinting", (PyCFunction) _wrap_wxPrintPreview_GetPrintoutForPrinting, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintPreview_GetPrintout", (PyCFunction) _wrap_wxPrintPreview_GetPrintout, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintPreview_GetPrintDialogData", (PyCFunction) _wrap_wxPrintPreview_GetPrintDialogData, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintPreview_GetMinPage", (PyCFunction) _wrap_wxPrintPreview_GetMinPage, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintPreview_GetMaxPage", (PyCFunction) _wrap_wxPrintPreview_GetMaxPage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintPreview_GetZoom", (PyCFunction) _wrap_wxPrintPreview_GetZoom, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintPreview_SetZoom", (PyCFunction) _wrap_wxPrintPreview_SetZoom, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintPreview_GetPrintDialogData", (PyCFunction) _wrap_wxPrintPreview_GetPrintDialogData, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintPreview_RenderPage", (PyCFunction) _wrap_wxPrintPreview_RenderPage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintPreview_DrawBlankPage", (PyCFunction) _wrap_wxPrintPreview_DrawBlankPage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintPreview_PaintPage", (PyCFunction) _wrap_wxPrintPreview_PaintPage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintPreview_GetCanvas", (PyCFunction) _wrap_wxPrintPreview_GetCanvas, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintPreview_GetFrame", (PyCFunction) _wrap_wxPrintPreview_GetFrame, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintPreview_SetCanvas", (PyCFunction) _wrap_wxPrintPreview_SetCanvas, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintPreview_SetFrame", (PyCFunction) _wrap_wxPrintPreview_SetFrame, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintPreview_GetPrintoutForPrinting", (PyCFunction) _wrap_wxPrintPreview_GetPrintoutForPrinting, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintPreview_GetPrintout", (PyCFunction) _wrap_wxPrintPreview_GetPrintout, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintPreview_SetPrintout", (PyCFunction) _wrap_wxPrintPreview_SetPrintout, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintPreview_GetCurrentPage", (PyCFunction) _wrap_wxPrintPreview_GetCurrentPage, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintPreview_GetCanvas", (PyCFunction) _wrap_wxPrintPreview_GetCanvas, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintPreview_SetCurrentPage", (PyCFunction) _wrap_wxPrintPreview_SetCurrentPage, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxPrintPreview", (PyCFunction) _wrap_new_wxPrintPreview, METH_VARARGS | METH_KEYWORDS },
+	 { "new_wxPrintAbortDialog", (PyCFunction) _wrap_new_wxPrintAbortDialog, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrinter_GetLastError", (PyCFunction) _wrap_wxPrinter_GetLastError, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrinter_GetAbort", (PyCFunction) _wrap_wxPrinter_GetAbort, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrinter_Setup", (PyCFunction) _wrap_wxPrinter_Setup, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrinter_ReportError", (PyCFunction) _wrap_wxPrinter_ReportError, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrinter_PrintDialog", (PyCFunction) _wrap_wxPrinter_PrintDialog, METH_VARARGS | METH_KEYWORDS },
@@ -5394,29 +7526,37 @@ static PyMethodDef printfwcMethods[] = {
 	 { "wxPrintDialog_GetPrintDC", (PyCFunction) _wrap_wxPrintDialog_GetPrintDC, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintDialog_GetPrintDialogData", (PyCFunction) _wrap_wxPrintDialog_GetPrintDialogData, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxPrintDialog", (PyCFunction) _wrap_new_wxPrintDialog, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintDialogData_SetToPage", (PyCFunction) _wrap_wxPrintDialogData_SetToPage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_SetPrintData", (PyCFunction) _wrap_wxPrintDialogData_SetPrintData, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_GetPrintData", (PyCFunction) _wrap_wxPrintDialogData_GetPrintData, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_Ok", (PyCFunction) _wrap_wxPrintDialogData_Ok, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_GetEnableHelp", (PyCFunction) _wrap_wxPrintDialogData_GetEnableHelp, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_GetEnablePageNumbers", (PyCFunction) _wrap_wxPrintDialogData_GetEnablePageNumbers, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_GetEnableSelection", (PyCFunction) _wrap_wxPrintDialogData_GetEnableSelection, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_GetEnablePrintToFile", (PyCFunction) _wrap_wxPrintDialogData_GetEnablePrintToFile, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_EnableHelp", (PyCFunction) _wrap_wxPrintDialogData_EnableHelp, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_EnablePageNumbers", (PyCFunction) _wrap_wxPrintDialogData_EnablePageNumbers, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_EnableSelection", (PyCFunction) _wrap_wxPrintDialogData_EnableSelection, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_EnablePrintToFile", (PyCFunction) _wrap_wxPrintDialogData_EnablePrintToFile, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintDialogData_SetSetupDialog", (PyCFunction) _wrap_wxPrintDialogData_SetSetupDialog, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintDialogData_SetPrintToFile", (PyCFunction) _wrap_wxPrintDialogData_SetPrintToFile, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintDialogData_SetPrintData", (PyCFunction) _wrap_wxPrintDialogData_SetPrintData, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_SetCollate", (PyCFunction) _wrap_wxPrintDialogData_SetCollate, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_SetSelection", (PyCFunction) _wrap_wxPrintDialogData_SetSelection, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_SetAllPages", (PyCFunction) _wrap_wxPrintDialogData_SetAllPages, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintDialogData_SetNoCopies", (PyCFunction) _wrap_wxPrintDialogData_SetNoCopies, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintDialogData_SetMinPage", (PyCFunction) _wrap_wxPrintDialogData_SetMinPage, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintDialogData_SetMaxPage", (PyCFunction) _wrap_wxPrintDialogData_SetMaxPage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_SetMinPage", (PyCFunction) _wrap_wxPrintDialogData_SetMinPage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_SetToPage", (PyCFunction) _wrap_wxPrintDialogData_SetToPage, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintDialogData_SetFromPage", (PyCFunction) _wrap_wxPrintDialogData_SetFromPage, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintDialogData_SetCollate", (PyCFunction) _wrap_wxPrintDialogData_SetCollate, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintDialogData_Ok", (PyCFunction) _wrap_wxPrintDialogData_Ok, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintDialogData_GetToPage", (PyCFunction) _wrap_wxPrintDialogData_GetToPage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_GetSetupDialog", (PyCFunction) _wrap_wxPrintDialogData_GetSetupDialog, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintDialogData_GetPrintToFile", (PyCFunction) _wrap_wxPrintDialogData_GetPrintToFile, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintDialogData_GetPrintData", (PyCFunction) _wrap_wxPrintDialogData_GetPrintData, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_GetCollate", (PyCFunction) _wrap_wxPrintDialogData_GetCollate, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_GetSelection", (PyCFunction) _wrap_wxPrintDialogData_GetSelection, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_GetAllPages", (PyCFunction) _wrap_wxPrintDialogData_GetAllPages, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintDialogData_GetNoCopies", (PyCFunction) _wrap_wxPrintDialogData_GetNoCopies, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintDialogData_GetMinPage", (PyCFunction) _wrap_wxPrintDialogData_GetMinPage, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintDialogData_GetMaxPage", (PyCFunction) _wrap_wxPrintDialogData_GetMaxPage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_GetMinPage", (PyCFunction) _wrap_wxPrintDialogData_GetMinPage, METH_VARARGS | METH_KEYWORDS },
+	 { "wxPrintDialogData_GetToPage", (PyCFunction) _wrap_wxPrintDialogData_GetToPage, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPrintDialogData_GetFromPage", (PyCFunction) _wrap_wxPrintDialogData_GetFromPage, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintDialogData_GetCollate", (PyCFunction) _wrap_wxPrintDialogData_GetCollate, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintDialogData_GetAllPages", (PyCFunction) _wrap_wxPrintDialogData_GetAllPages, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintDialogData_EnableSelection", (PyCFunction) _wrap_wxPrintDialogData_EnableSelection, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintDialogData_EnablePrintToFile", (PyCFunction) _wrap_wxPrintDialogData_EnablePrintToFile, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintDialogData_EnablePageNumbers", (PyCFunction) _wrap_wxPrintDialogData_EnablePageNumbers, METH_VARARGS | METH_KEYWORDS },
-	 { "wxPrintDialogData_EnableHelp", (PyCFunction) _wrap_wxPrintDialogData_EnableHelp, METH_VARARGS | METH_KEYWORDS },
 	 { "delete_wxPrintDialogData", (PyCFunction) _wrap_delete_wxPrintDialogData, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxPrintDialogData", (PyCFunction) _wrap_new_wxPrintDialogData, METH_VARARGS | METH_KEYWORDS },
 	 { "wxPageSetupDialog_ShowModal", (PyCFunction) _wrap_wxPageSetupDialog_ShowModal, METH_VARARGS | METH_KEYWORDS },
@@ -5524,6 +7664,7 @@ static struct { char *n1; char *n2; void *(*pcnv)(void *); } _swig_mapping[] = {
     { "_long","_unsigned_long",0},
     { "_long","_signed_long",0},
     { "_wxDC","_wxPostScriptDC",SwigwxPostScriptDCTowxDC},
+    { "_wxPrintPreview","_wxPyPrintPreview",SwigwxPyPrintPreviewTowxPrintPreview},
     { "_size_t","_wxCoord",0},
     { "_size_t","_wxPrintQuality",0},
     { "_size_t","_time_t",0},
@@ -5531,7 +7672,12 @@ static struct { char *n1; char *n2; void *(*pcnv)(void *); } _swig_mapping[] = {
     { "_size_t","_int",0},
     { "_size_t","_wxWindowID",0},
     { "_size_t","_uint",0},
+    { "_wxPanel","_wxPyPreviewControlBar",SwigwxPyPreviewControlBarTowxPanel},
+    { "_wxPanel","_wxPreviewControlBar",SwigwxPreviewControlBarTowxPanel},
+    { "_wxPanel","_wxPreviewCanvas",SwigwxPreviewCanvasTowxPanel},
+    { "_wxTopLevelWindow","_wxPyPreviewFrame",SwigwxPyPreviewFrameTowxTopLevelWindow},
     { "_wxTopLevelWindow","_wxPreviewFrame",SwigwxPreviewFrameTowxTopLevelWindow},
+    { "_wxTopLevelWindow","_wxPrintAbortDialog",SwigwxPrintAbortDialogTowxTopLevelWindow},
     { "_wxTopLevelWindow","_wxPrintDialog",SwigwxPrintDialogTowxTopLevelWindow},
     { "_wxTopLevelWindow","_wxPageSetupDialog",SwigwxPageSetupDialogTowxTopLevelWindow},
     { "_uint","_wxCoord",0},
@@ -5549,6 +7695,7 @@ static struct { char *n1; char *n2; void *(*pcnv)(void *); } _swig_mapping[] = {
     { "_EBool","_signed_int",0},
     { "_EBool","_int",0},
     { "_EBool","_wxWindowID",0},
+    { "_wxPreviewControlBar","_wxPyPreviewControlBar",SwigwxPyPreviewControlBarTowxPreviewControlBar},
     { "_unsigned_long","_long",0},
     { "_wxNativeFontInfo","_struct_wxNativeFontInfo",0},
     { "_signed_int","_wxCoord",0},
@@ -5561,8 +7708,14 @@ static struct { char *n1; char *n2; void *(*pcnv)(void *); } _swig_mapping[] = {
     { "_WXTYPE","_unsigned_short",0},
     { "_unsigned_short","_WXTYPE",0},
     { "_unsigned_short","_short",0},
+    { "_wxObject","_wxPyPreviewControlBar",SwigwxPyPreviewControlBarTowxObject},
+    { "_wxObject","_wxPyPreviewFrame",SwigwxPyPreviewFrameTowxObject},
+    { "_wxObject","_wxPyPrintPreview",SwigwxPyPrintPreviewTowxObject},
+    { "_wxObject","_wxPreviewControlBar",SwigwxPreviewControlBarTowxObject},
+    { "_wxObject","_wxPreviewCanvas",SwigwxPreviewCanvasTowxObject},
     { "_wxObject","_wxPreviewFrame",SwigwxPreviewFrameTowxObject},
     { "_wxObject","_wxPrintPreview",SwigwxPrintPreviewTowxObject},
+    { "_wxObject","_wxPrintAbortDialog",SwigwxPrintAbortDialogTowxObject},
     { "_wxObject","_wxPrinter",SwigwxPrinterTowxObject},
     { "_wxObject","_wxPyPrintout",SwigwxPyPrintoutTowxObject},
     { "_wxObject","_wxPrintDialog",SwigwxPrintDialogTowxObject},
@@ -5573,6 +7726,7 @@ static struct { char *n1; char *n2; void *(*pcnv)(void *); } _swig_mapping[] = {
     { "_wxObject","_wxPrintData",SwigwxPrintDataTowxObject},
     { "_signed_short","_WXTYPE",0},
     { "_signed_short","_short",0},
+    { "_wxScrolledWindow","_wxPreviewCanvas",SwigwxPreviewCanvasTowxScrolledWindow},
     { "_unsigned_char","_byte",0},
     { "_unsigned_int","_wxCoord",0},
     { "_unsigned_int","_wxPrintQuality",0},
@@ -5581,11 +7735,13 @@ static struct { char *n1; char *n2; void *(*pcnv)(void *); } _swig_mapping[] = {
     { "_unsigned_int","_uint",0},
     { "_unsigned_int","_wxWindowID",0},
     { "_unsigned_int","_int",0},
+    { "_wxDialog","_wxPrintAbortDialog",SwigwxPrintAbortDialogTowxDialog},
     { "_wxDialog","_wxPrintDialog",SwigwxPrintDialogTowxDialog},
     { "_wxDialog","_wxPageSetupDialog",SwigwxPageSetupDialogTowxDialog},
     { "_short","_WXTYPE",0},
     { "_short","_unsigned_short",0},
     { "_short","_signed_short",0},
+    { "_wxFrame","_wxPyPreviewFrame",SwigwxPyPreviewFrameTowxFrame},
     { "_wxFrame","_wxPreviewFrame",SwigwxPreviewFrameTowxFrame},
     { "_wxWindowID","_wxCoord",0},
     { "_wxWindowID","_wxPrintQuality",0},
@@ -5621,10 +7777,21 @@ static struct { char *n1; char *n2; void *(*pcnv)(void *); } _swig_mapping[] = {
     { "_wxCoord","_size_t",0},
     { "_wxCoord","_time_t",0},
     { "_wxCoord","_wxPrintQuality",0},
+    { "_wxPreviewFrame","_wxPyPreviewFrame",SwigwxPyPreviewFrameTowxPreviewFrame},
+    { "_wxEvtHandler","_wxPyPreviewControlBar",SwigwxPyPreviewControlBarTowxEvtHandler},
+    { "_wxEvtHandler","_wxPyPreviewFrame",SwigwxPyPreviewFrameTowxEvtHandler},
+    { "_wxEvtHandler","_wxPreviewControlBar",SwigwxPreviewControlBarTowxEvtHandler},
+    { "_wxEvtHandler","_wxPreviewCanvas",SwigwxPreviewCanvasTowxEvtHandler},
     { "_wxEvtHandler","_wxPreviewFrame",SwigwxPreviewFrameTowxEvtHandler},
+    { "_wxEvtHandler","_wxPrintAbortDialog",SwigwxPrintAbortDialogTowxEvtHandler},
     { "_wxEvtHandler","_wxPrintDialog",SwigwxPrintDialogTowxEvtHandler},
     { "_wxEvtHandler","_wxPageSetupDialog",SwigwxPageSetupDialogTowxEvtHandler},
+    { "_wxWindow","_wxPyPreviewControlBar",SwigwxPyPreviewControlBarTowxWindow},
+    { "_wxWindow","_wxPyPreviewFrame",SwigwxPyPreviewFrameTowxWindow},
+    { "_wxWindow","_wxPreviewControlBar",SwigwxPreviewControlBarTowxWindow},
+    { "_wxWindow","_wxPreviewCanvas",SwigwxPreviewCanvasTowxWindow},
     { "_wxWindow","_wxPreviewFrame",SwigwxPreviewFrameTowxWindow},
+    { "_wxWindow","_wxPrintAbortDialog",SwigwxPrintAbortDialogTowxWindow},
     { "_wxWindow","_wxPrintDialog",SwigwxPrintDialogTowxWindow},
     { "_wxWindow","_wxPageSetupDialog",SwigwxPageSetupDialogTowxWindow},
 {0,0,0}};
@@ -5638,6 +7805,29 @@ SWIGEXPORT(void) initprintfwc() {
 	 SWIG_globals = SWIG_newvarlink();
 	 m = Py_InitModule("printfwc", printfwcMethods);
 	 d = PyModule_GetDict(m);
+	 PyDict_SetItemString(d,"wxPRINT_MODE_NONE", PyInt_FromLong((long) wxPRINT_MODE_NONE));
+	 PyDict_SetItemString(d,"wxPRINT_MODE_PREVIEW", PyInt_FromLong((long) wxPRINT_MODE_PREVIEW));
+	 PyDict_SetItemString(d,"wxPRINT_MODE_FILE", PyInt_FromLong((long) wxPRINT_MODE_FILE));
+	 PyDict_SetItemString(d,"wxPRINT_MODE_PRINTER", PyInt_FromLong((long) wxPRINT_MODE_PRINTER));
+	 PyDict_SetItemString(d,"wxPRINTER_NO_ERROR", PyInt_FromLong((long) wxPRINTER_NO_ERROR));
+	 PyDict_SetItemString(d,"wxPRINTER_CANCELLED", PyInt_FromLong((long) wxPRINTER_CANCELLED));
+	 PyDict_SetItemString(d,"wxPRINTER_ERROR", PyInt_FromLong((long) wxPRINTER_ERROR));
+	 PyDict_SetItemString(d,"wxPREVIEW_PRINT", PyInt_FromLong((long) wxPREVIEW_PRINT));
+	 PyDict_SetItemString(d,"wxPREVIEW_PREVIOUS", PyInt_FromLong((long) wxPREVIEW_PREVIOUS));
+	 PyDict_SetItemString(d,"wxPREVIEW_NEXT", PyInt_FromLong((long) wxPREVIEW_NEXT));
+	 PyDict_SetItemString(d,"wxPREVIEW_ZOOM", PyInt_FromLong((long) wxPREVIEW_ZOOM));
+	 PyDict_SetItemString(d,"wxPREVIEW_FIRST", PyInt_FromLong((long) wxPREVIEW_FIRST));
+	 PyDict_SetItemString(d,"wxPREVIEW_LAST", PyInt_FromLong((long) wxPREVIEW_LAST));
+	 PyDict_SetItemString(d,"wxPREVIEW_GOTO", PyInt_FromLong((long) wxPREVIEW_GOTO));
+	 PyDict_SetItemString(d,"wxPREVIEW_DEFAULT", PyInt_FromLong((long) wxPREVIEW_DEFAULT));
+	 PyDict_SetItemString(d,"wxID_PREVIEW_CLOSE", PyInt_FromLong((long) wxID_PREVIEW_CLOSE));
+	 PyDict_SetItemString(d,"wxID_PREVIEW_NEXT", PyInt_FromLong((long) wxID_PREVIEW_NEXT));
+	 PyDict_SetItemString(d,"wxID_PREVIEW_PREVIOUS", PyInt_FromLong((long) wxID_PREVIEW_PREVIOUS));
+	 PyDict_SetItemString(d,"wxID_PREVIEW_PRINT", PyInt_FromLong((long) wxID_PREVIEW_PRINT));
+	 PyDict_SetItemString(d,"wxID_PREVIEW_ZOOM", PyInt_FromLong((long) wxID_PREVIEW_ZOOM));
+	 PyDict_SetItemString(d,"wxID_PREVIEW_FIRST", PyInt_FromLong((long) wxID_PREVIEW_FIRST));
+	 PyDict_SetItemString(d,"wxID_PREVIEW_LAST", PyInt_FromLong((long) wxID_PREVIEW_LAST));
+	 PyDict_SetItemString(d,"wxID_PREVIEW_GOTO", PyInt_FromLong((long) wxID_PREVIEW_GOTO));
 
     wxPyPtrTypeMap_Add("wxPrintout", "wxPyPrintout");
 {
diff --git a/wxPython/src/gtk/printfw.py b/wxPython/src/gtk/printfw.py
index b9bbff1719..300a517a9e 100644
--- a/wxPython/src/gtk/printfw.py
+++ b/wxPython/src/gtk/printfw.py
@@ -32,134 +32,135 @@ class wxPrintDataPtr(wxObjectPtr):
             except:
                 pass
     def GetNoCopies(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetNoCopies,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetNoCopies(self, *_args, **_kwargs)
         return val
     def GetCollate(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetCollate,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetCollate(self, *_args, **_kwargs)
         return val
     def GetOrientation(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetOrientation,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetOrientation(self, *_args, **_kwargs)
         return val
     def Ok(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_Ok,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_Ok(self, *_args, **_kwargs)
         return val
     def GetPrinterName(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetPrinterName,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetPrinterName(self, *_args, **_kwargs)
         return val
     def GetColour(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetColour,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetColour(self, *_args, **_kwargs)
         return val
     def GetDuplex(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetDuplex,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetDuplex(self, *_args, **_kwargs)
         return val
     def GetPaperId(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetPaperId,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetPaperId(self, *_args, **_kwargs)
         return val
     def GetPaperSize(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetPaperSize,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetPaperSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) 
         return val
     def GetQuality(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetQuality,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetQuality(self, *_args, **_kwargs)
         return val
     def SetNoCopies(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetNoCopies,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetNoCopies(self, *_args, **_kwargs)
         return val
     def SetCollate(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetCollate,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetCollate(self, *_args, **_kwargs)
         return val
     def SetOrientation(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetOrientation,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetOrientation(self, *_args, **_kwargs)
         return val
     def SetPrinterName(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetPrinterName,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetPrinterName(self, *_args, **_kwargs)
         return val
     def SetColour(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetColour,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetColour(self, *_args, **_kwargs)
         return val
     def SetDuplex(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetDuplex,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetDuplex(self, *_args, **_kwargs)
         return val
     def SetPaperId(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetPaperId,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetPaperId(self, *_args, **_kwargs)
         return val
     def SetPaperSize(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetPaperSize,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetPaperSize(self, *_args, **_kwargs)
         return val
     def SetQuality(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetQuality,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetQuality(self, *_args, **_kwargs)
         return val
     def GetPrinterCommand(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetPrinterCommand,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetPrinterCommand(self, *_args, **_kwargs)
         return val
     def GetPrinterOptions(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetPrinterOptions,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetPrinterOptions(self, *_args, **_kwargs)
         return val
     def GetPreviewCommand(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetPreviewCommand,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetPreviewCommand(self, *_args, **_kwargs)
         return val
     def GetFilename(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetFilename,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetFilename(self, *_args, **_kwargs)
         return val
     def GetFontMetricPath(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetFontMetricPath,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetFontMetricPath(self, *_args, **_kwargs)
         return val
     def GetPrinterScaleX(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetPrinterScaleX,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetPrinterScaleX(self, *_args, **_kwargs)
         return val
     def GetPrinterScaleY(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetPrinterScaleY,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetPrinterScaleY(self, *_args, **_kwargs)
         return val
     def GetPrinterTranslateX(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetPrinterTranslateX,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetPrinterTranslateX(self, *_args, **_kwargs)
         return val
     def GetPrinterTranslateY(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetPrinterTranslateY,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetPrinterTranslateY(self, *_args, **_kwargs)
         return val
     def GetPrintMode(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_GetPrintMode,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_GetPrintMode(self, *_args, **_kwargs)
         return val
     def SetPrinterCommand(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetPrinterCommand,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetPrinterCommand(self, *_args, **_kwargs)
         return val
     def SetPrinterOptions(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetPrinterOptions,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetPrinterOptions(self, *_args, **_kwargs)
         return val
     def SetPreviewCommand(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetPreviewCommand,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetPreviewCommand(self, *_args, **_kwargs)
         return val
     def SetFilename(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetFilename,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetFilename(self, *_args, **_kwargs)
         return val
     def SetFontMetricPath(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetFontMetricPath,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetFontMetricPath(self, *_args, **_kwargs)
         return val
     def SetPrinterScaleX(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetPrinterScaleX,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetPrinterScaleX(self, *_args, **_kwargs)
         return val
     def SetPrinterScaleY(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetPrinterScaleY,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetPrinterScaleY(self, *_args, **_kwargs)
         return val
     def SetPrinterScaling(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetPrinterScaling,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetPrinterScaling(self, *_args, **_kwargs)
         return val
     def SetPrinterTranslateX(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetPrinterTranslateX,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetPrinterTranslateX(self, *_args, **_kwargs)
         return val
     def SetPrinterTranslateY(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetPrinterTranslateY,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetPrinterTranslateY(self, *_args, **_kwargs)
         return val
     def SetPrinterTranslation(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetPrinterTranslation,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetPrinterTranslation(self, *_args, **_kwargs)
         return val
     def SetPrintMode(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintData_SetPrintMode,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintData_SetPrintMode(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPrintData instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPrintData instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.Ok()
 class wxPrintData(wxPrintDataPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(printfwc.new_wxPrintData,_args,_kwargs)
+        self.this = printfwc.new_wxPrintData(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -170,17 +171,17 @@ class wxPostScriptDCPtr(wxDCPtr):
         self.this = this
         self.thisown = 0
     def GetPrintData(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPostScriptDC_GetPrintData,(self,) + _args, _kwargs)
+        val = printfwc.wxPostScriptDC_GetPrintData(self, *_args, **_kwargs)
         if val: val = wxPrintDataPtr(val) 
         return val
     def SetPrintData(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPostScriptDC_SetPrintData,(self,) + _args, _kwargs)
+        val = printfwc.wxPostScriptDC_SetPrintData(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPostScriptDC instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPostScriptDC instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPostScriptDC(wxPostScriptDCPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(printfwc.new_wxPostScriptDC,_args,_kwargs)
+        self.this = printfwc.new_wxPostScriptDC(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -197,103 +198,104 @@ class wxPageSetupDialogDataPtr(wxObjectPtr):
             except:
                 pass
     def EnableHelp(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_EnableHelp,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_EnableHelp(self, *_args, **_kwargs)
         return val
     def EnableMargins(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_EnableMargins,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_EnableMargins(self, *_args, **_kwargs)
         return val
     def EnableOrientation(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_EnableOrientation,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_EnableOrientation(self, *_args, **_kwargs)
         return val
     def EnablePaper(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_EnablePaper,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_EnablePaper(self, *_args, **_kwargs)
         return val
     def EnablePrinter(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_EnablePrinter,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_EnablePrinter(self, *_args, **_kwargs)
         return val
     def GetDefaultMinMargins(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_GetDefaultMinMargins,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_GetDefaultMinMargins(self, *_args, **_kwargs)
         return val
     def GetEnableMargins(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_GetEnableMargins,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_GetEnableMargins(self, *_args, **_kwargs)
         return val
     def GetEnableOrientation(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_GetEnableOrientation,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_GetEnableOrientation(self, *_args, **_kwargs)
         return val
     def GetEnablePaper(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_GetEnablePaper,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_GetEnablePaper(self, *_args, **_kwargs)
         return val
     def GetEnablePrinter(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_GetEnablePrinter,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_GetEnablePrinter(self, *_args, **_kwargs)
         return val
     def GetEnableHelp(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_GetEnableHelp,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_GetEnableHelp(self, *_args, **_kwargs)
         return val
     def GetDefaultInfo(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_GetDefaultInfo,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_GetDefaultInfo(self, *_args, **_kwargs)
         return val
     def GetMarginTopLeft(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_GetMarginTopLeft,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_GetMarginTopLeft(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetMarginBottomRight(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_GetMarginBottomRight,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_GetMarginBottomRight(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetMinMarginTopLeft(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_GetMinMarginTopLeft,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_GetMinMarginTopLeft(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetMinMarginBottomRight(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_GetMinMarginBottomRight,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_GetMinMarginBottomRight(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetPaperId(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_GetPaperId,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_GetPaperId(self, *_args, **_kwargs)
         return val
     def GetPaperSize(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_GetPaperSize,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_GetPaperSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetPrintData(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_GetPrintData,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_GetPrintData(self, *_args, **_kwargs)
         if val: val = wxPrintDataPtr(val) ; val.thisown = 1
         return val
     def Ok(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_Ok,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_Ok(self, *_args, **_kwargs)
         return val
     def SetDefaultInfo(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_SetDefaultInfo,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_SetDefaultInfo(self, *_args, **_kwargs)
         return val
     def SetDefaultMinMargins(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_SetDefaultMinMargins,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_SetDefaultMinMargins(self, *_args, **_kwargs)
         return val
     def SetMarginTopLeft(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_SetMarginTopLeft,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_SetMarginTopLeft(self, *_args, **_kwargs)
         return val
     def SetMarginBottomRight(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_SetMarginBottomRight,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_SetMarginBottomRight(self, *_args, **_kwargs)
         return val
     def SetMinMarginTopLeft(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_SetMinMarginTopLeft,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_SetMinMarginTopLeft(self, *_args, **_kwargs)
         return val
     def SetMinMarginBottomRight(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_SetMinMarginBottomRight,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_SetMinMarginBottomRight(self, *_args, **_kwargs)
         return val
     def SetPaperId(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_SetPaperId,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_SetPaperId(self, *_args, **_kwargs)
         return val
     def SetPaperSize(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_SetPaperSize,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_SetPaperSize(self, *_args, **_kwargs)
         return val
     def SetPrintData(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialogData_SetPrintData,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialogData_SetPrintData(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPageSetupDialogData instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPageSetupDialogData instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.Ok()
 class wxPageSetupDialogData(wxPageSetupDialogDataPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(printfwc.new_wxPageSetupDialogData,_args,_kwargs)
+        self.this = printfwc.new_wxPageSetupDialogData(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -304,17 +306,17 @@ class wxPageSetupDialogPtr(wxDialogPtr):
         self.this = this
         self.thisown = 0
     def GetPageSetupData(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialog_GetPageSetupData,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialog_GetPageSetupData(self, *_args, **_kwargs)
         if val: val = wxPageSetupDialogDataPtr(val) 
         return val
     def ShowModal(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPageSetupDialog_ShowModal,(self,) + _args, _kwargs)
+        val = printfwc.wxPageSetupDialog_ShowModal(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPageSetupDialog instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPageSetupDialog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPageSetupDialog(wxPageSetupDialogPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(printfwc.new_wxPageSetupDialog,_args,_kwargs)
+        self.this = printfwc.new_wxPageSetupDialog(*_args,**_kwargs)
         self.thisown = 1
         #wx._StdDialogCallbacks(self)
 
@@ -331,81 +333,106 @@ class wxPrintDialogDataPtr(wxObjectPtr):
                 delfunc(self)
             except:
                 pass
-    def EnableHelp(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_EnableHelp,(self,) + _args, _kwargs)
+    def GetFromPage(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_GetFromPage(self, *_args, **_kwargs)
         return val
-    def EnablePageNumbers(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_EnablePageNumbers,(self,) + _args, _kwargs)
+    def GetToPage(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_GetToPage(self, *_args, **_kwargs)
         return val
-    def EnablePrintToFile(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_EnablePrintToFile,(self,) + _args, _kwargs)
+    def GetMinPage(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_GetMinPage(self, *_args, **_kwargs)
         return val
-    def EnableSelection(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_EnableSelection,(self,) + _args, _kwargs)
+    def GetMaxPage(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_GetMaxPage(self, *_args, **_kwargs)
+        return val
+    def GetNoCopies(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_GetNoCopies(self, *_args, **_kwargs)
         return val
     def GetAllPages(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_GetAllPages,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintDialogData_GetAllPages(self, *_args, **_kwargs)
+        return val
+    def GetSelection(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_GetSelection(self, *_args, **_kwargs)
         return val
     def GetCollate(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_GetCollate,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintDialogData_GetCollate(self, *_args, **_kwargs)
         return val
-    def GetFromPage(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_GetFromPage,(self,) + _args, _kwargs)
+    def GetPrintToFile(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_GetPrintToFile(self, *_args, **_kwargs)
         return val
-    def GetMaxPage(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_GetMaxPage,(self,) + _args, _kwargs)
+    def GetSetupDialog(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_GetSetupDialog(self, *_args, **_kwargs)
         return val
-    def GetMinPage(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_GetMinPage,(self,) + _args, _kwargs)
+    def SetFromPage(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_SetFromPage(self, *_args, **_kwargs)
         return val
-    def GetNoCopies(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_GetNoCopies,(self,) + _args, _kwargs)
+    def SetToPage(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_SetToPage(self, *_args, **_kwargs)
         return val
-    def GetPrintData(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_GetPrintData,(self,) + _args, _kwargs)
-        if val: val = wxPrintDataPtr(val) ; val.thisown = 1
+    def SetMinPage(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_SetMinPage(self, *_args, **_kwargs)
         return val
-    def GetPrintToFile(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_GetPrintToFile,(self,) + _args, _kwargs)
+    def SetMaxPage(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_SetMaxPage(self, *_args, **_kwargs)
         return val
-    def GetToPage(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_GetToPage,(self,) + _args, _kwargs)
+    def SetNoCopies(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_SetNoCopies(self, *_args, **_kwargs)
         return val
-    def Ok(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_Ok,(self,) + _args, _kwargs)
+    def SetAllPages(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_SetAllPages(self, *_args, **_kwargs)
+        return val
+    def SetSelection(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_SetSelection(self, *_args, **_kwargs)
         return val
     def SetCollate(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_SetCollate,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintDialogData_SetCollate(self, *_args, **_kwargs)
         return val
-    def SetFromPage(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_SetFromPage,(self,) + _args, _kwargs)
+    def SetPrintToFile(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_SetPrintToFile(self, *_args, **_kwargs)
         return val
-    def SetMaxPage(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_SetMaxPage,(self,) + _args, _kwargs)
+    def SetSetupDialog(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_SetSetupDialog(self, *_args, **_kwargs)
         return val
-    def SetMinPage(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_SetMinPage,(self,) + _args, _kwargs)
+    def EnablePrintToFile(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_EnablePrintToFile(self, *_args, **_kwargs)
         return val
-    def SetNoCopies(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_SetNoCopies,(self,) + _args, _kwargs)
+    def EnableSelection(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_EnableSelection(self, *_args, **_kwargs)
         return val
-    def SetPrintData(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_SetPrintData,(self,) + _args, _kwargs)
+    def EnablePageNumbers(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_EnablePageNumbers(self, *_args, **_kwargs)
         return val
-    def SetPrintToFile(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_SetPrintToFile,(self,) + _args, _kwargs)
+    def EnableHelp(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_EnableHelp(self, *_args, **_kwargs)
         return val
-    def SetSetupDialog(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_SetSetupDialog,(self,) + _args, _kwargs)
+    def GetEnablePrintToFile(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_GetEnablePrintToFile(self, *_args, **_kwargs)
         return val
-    def SetToPage(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialogData_SetToPage,(self,) + _args, _kwargs)
+    def GetEnableSelection(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_GetEnableSelection(self, *_args, **_kwargs)
+        return val
+    def GetEnablePageNumbers(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_GetEnablePageNumbers(self, *_args, **_kwargs)
+        return val
+    def GetEnableHelp(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_GetEnableHelp(self, *_args, **_kwargs)
+        return val
+    def Ok(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_Ok(self, *_args, **_kwargs)
+        return val
+    def GetPrintData(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_GetPrintData(self, *_args, **_kwargs)
+        if val: val = wxPrintDataPtr(val) ; val.thisown = 1
+        return val
+    def SetPrintData(self, *_args, **_kwargs):
+        val = printfwc.wxPrintDialogData_SetPrintData(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPrintDialogData instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPrintDialogData instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.Ok()
 class wxPrintDialogData(wxPrintDialogDataPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(printfwc.new_wxPrintDialogData,_args,_kwargs)
+        self.this = printfwc.new_wxPrintDialogData(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -416,20 +443,20 @@ class wxPrintDialogPtr(wxDialogPtr):
         self.this = this
         self.thisown = 0
     def GetPrintDialogData(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialog_GetPrintDialogData,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintDialog_GetPrintDialogData(self, *_args, **_kwargs)
         if val: val = wxPrintDialogDataPtr(val) 
         return val
     def GetPrintDC(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialog_GetPrintDC,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintDialog_GetPrintDC(self, *_args, **_kwargs)
         return val
     def ShowModal(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintDialog_ShowModal,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintDialog_ShowModal(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPrintDialog instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPrintDialog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPrintDialog(wxPrintDialogPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(printfwc.new_wxPrintDialog,_args,_kwargs)
+        self.this = printfwc.new_wxPrintDialog(*_args,**_kwargs)
         self.thisown = 1
         #wx._StdDialogCallbacks(self)
 
@@ -441,55 +468,55 @@ class wxPrintoutPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintout__setCallbackInfo,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintout__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def Destroy(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintout_Destroy,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintout_Destroy(self, *_args, **_kwargs)
         return val
     def GetDC(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintout_GetDC,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintout_GetDC(self, *_args, **_kwargs)
         return val
     def GetPageSizeMM(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintout_GetPageSizeMM,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintout_GetPageSizeMM(self, *_args, **_kwargs)
         return val
     def GetPageSizePixels(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintout_GetPageSizePixels,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintout_GetPageSizePixels(self, *_args, **_kwargs)
         return val
     def GetPPIPrinter(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintout_GetPPIPrinter,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintout_GetPPIPrinter(self, *_args, **_kwargs)
         return val
     def GetPPIScreen(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintout_GetPPIScreen,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintout_GetPPIScreen(self, *_args, **_kwargs)
         return val
     def IsPreview(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintout_IsPreview,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintout_IsPreview(self, *_args, **_kwargs)
         return val
     def base_OnBeginDocument(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintout_base_OnBeginDocument,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintout_base_OnBeginDocument(self, *_args, **_kwargs)
         return val
     def base_OnEndDocument(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintout_base_OnEndDocument,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintout_base_OnEndDocument(self, *_args, **_kwargs)
         return val
     def base_OnBeginPrinting(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintout_base_OnBeginPrinting,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintout_base_OnBeginPrinting(self, *_args, **_kwargs)
         return val
     def base_OnEndPrinting(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintout_base_OnEndPrinting,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintout_base_OnEndPrinting(self, *_args, **_kwargs)
         return val
     def base_OnPreparePrinting(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintout_base_OnPreparePrinting,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintout_base_OnPreparePrinting(self, *_args, **_kwargs)
         return val
     def base_GetPageInfo(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintout_base_GetPageInfo,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintout_base_GetPageInfo(self, *_args, **_kwargs)
         return val
     def base_HasPage(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintout_base_HasPage,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintout_base_HasPage(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPrintout instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPrintout instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPrintout(wxPrintoutPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(printfwc.new_wxPrintout,_args,_kwargs)
+        self.this = printfwc.new_wxPrintout(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPrintout)
 
@@ -507,29 +534,46 @@ class wxPrinterPtr(wxObjectPtr):
             except:
                 pass
     def CreateAbortWindow(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrinter_CreateAbortWindow,(self,) + _args, _kwargs)
+        val = printfwc.wxPrinter_CreateAbortWindow(self, *_args, **_kwargs)
         return val
     def GetPrintDialogData(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrinter_GetPrintDialogData,(self,) + _args, _kwargs)
+        val = printfwc.wxPrinter_GetPrintDialogData(self, *_args, **_kwargs)
         if val: val = wxPrintDialogDataPtr(val) 
         return val
     def Print(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrinter_Print,(self,) + _args, _kwargs)
+        val = printfwc.wxPrinter_Print(self, *_args, **_kwargs)
         return val
     def PrintDialog(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrinter_PrintDialog,(self,) + _args, _kwargs)
+        val = printfwc.wxPrinter_PrintDialog(self, *_args, **_kwargs)
         return val
     def ReportError(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrinter_ReportError,(self,) + _args, _kwargs)
+        val = printfwc.wxPrinter_ReportError(self, *_args, **_kwargs)
         return val
     def Setup(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrinter_Setup,(self,) + _args, _kwargs)
+        val = printfwc.wxPrinter_Setup(self, *_args, **_kwargs)
+        return val
+    def GetAbort(self, *_args, **_kwargs):
+        val = printfwc.wxPrinter_GetAbort(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPrinter instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPrinter instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPrinter(wxPrinterPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(printfwc.new_wxPrinter,_args,_kwargs)
+        self.this = printfwc.new_wxPrinter(*_args,**_kwargs)
+        self.thisown = 1
+
+
+
+
+class wxPrintAbortDialogPtr(wxDialogPtr):
+    def __init__(self,this):
+        self.this = this
+        self.thisown = 0
+    def __repr__(self):
+        return "<%s.%s instance; proxy of C++ wxPrintAbortDialog instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+class wxPrintAbortDialog(wxPrintAbortDialogPtr):
+    def __init__(self,*_args,**_kwargs):
+        self.this = printfwc.new_wxPrintAbortDialog(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -539,60 +583,76 @@ class wxPrintPreviewPtr(wxObjectPtr):
     def __init__(self,this):
         self.this = this
         self.thisown = 0
-    def GetCanvas(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_GetCanvas,(self,) + _args, _kwargs)
+    def SetCurrentPage(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_SetCurrentPage(self, *_args, **_kwargs)
         return val
     def GetCurrentPage(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_GetCurrentPage,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintPreview_GetCurrentPage(self, *_args, **_kwargs)
+        return val
+    def SetPrintout(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_SetPrintout(self, *_args, **_kwargs)
+        return val
+    def GetPrintout(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_GetPrintout(self, *_args, **_kwargs)
+        return val
+    def GetPrintoutForPrinting(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_GetPrintoutForPrinting(self, *_args, **_kwargs)
+        return val
+    def SetFrame(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_SetFrame(self, *_args, **_kwargs)
+        return val
+    def SetCanvas(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_SetCanvas(self, *_args, **_kwargs)
         return val
     def GetFrame(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_GetFrame,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintPreview_GetFrame(self, *_args, **_kwargs)
         return val
-    def GetMaxPage(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_GetMaxPage,(self,) + _args, _kwargs)
+    def GetCanvas(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_GetCanvas(self, *_args, **_kwargs)
         return val
-    def GetMinPage(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_GetMinPage,(self,) + _args, _kwargs)
+    def PaintPage(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_PaintPage(self, *_args, **_kwargs)
+        return val
+    def DrawBlankPage(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_DrawBlankPage(self, *_args, **_kwargs)
+        return val
+    def RenderPage(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_RenderPage(self, *_args, **_kwargs)
         return val
     def GetPrintDialogData(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_GetPrintDialogData,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintPreview_GetPrintDialogData(self, *_args, **_kwargs)
         if val: val = wxPrintDialogDataPtr(val) 
         return val
-    def GetPrintout(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_GetPrintout,(self,) + _args, _kwargs)
-        return val
-    def GetPrintoutForPrinting(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_GetPrintoutForPrinting,(self,) + _args, _kwargs)
+    def SetZoom(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_SetZoom(self, *_args, **_kwargs)
         return val
     def GetZoom(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_GetZoom,(self,) + _args, _kwargs)
+        val = printfwc.wxPrintPreview_GetZoom(self, *_args, **_kwargs)
         return val
-    def Ok(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_Ok,(self,) + _args, _kwargs)
+    def GetMaxPage(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_GetMaxPage(self, *_args, **_kwargs)
         return val
-    def Print(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_Print,(self,) + _args, _kwargs)
+    def GetMinPage(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_GetMinPage(self, *_args, **_kwargs)
         return val
-    def SetCanvas(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_SetCanvas,(self,) + _args, _kwargs)
+    def Ok(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_Ok(self, *_args, **_kwargs)
         return val
-    def SetCurrentPage(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_SetCurrentPage,(self,) + _args, _kwargs)
+    def SetOk(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_SetOk(self, *_args, **_kwargs)
         return val
-    def SetFrame(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_SetFrame,(self,) + _args, _kwargs)
-        return val
-    def SetPrintout(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_SetPrintout,(self,) + _args, _kwargs)
+    def Print(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_Print(self, *_args, **_kwargs)
         return val
-    def SetZoom(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPrintPreview_SetZoom,(self,) + _args, _kwargs)
+    def DetermineScaling(self, *_args, **_kwargs):
+        val = printfwc.wxPrintPreview_DetermineScaling(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPrintPreview instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPrintPreview instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+    def __nonzero__(self): return self.Ok()
 class wxPrintPreview(wxPrintPreviewPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(printfwc.new_wxPrintPreview,_args,_kwargs)
+        self.this = printfwc.new_wxPrintPreview(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -603,14 +663,176 @@ class wxPreviewFramePtr(wxFramePtr):
         self.this = this
         self.thisown = 0
     def Initialize(self, *_args, **_kwargs):
-        val = apply(printfwc.wxPreviewFrame_Initialize,(self,) + _args, _kwargs)
+        val = printfwc.wxPreviewFrame_Initialize(self, *_args, **_kwargs)
+        return val
+    def CreateControlBar(self, *_args, **_kwargs):
+        val = printfwc.wxPreviewFrame_CreateControlBar(self, *_args, **_kwargs)
+        return val
+    def CreateCanvas(self, *_args, **_kwargs):
+        val = printfwc.wxPreviewFrame_CreateCanvas(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPreviewFrame instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPreviewFrame instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPreviewFrame(wxPreviewFramePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(printfwc.new_wxPreviewFrame,_args,_kwargs)
+        self.this = printfwc.new_wxPreviewFrame(*_args,**_kwargs)
+        self.thisown = 1
+        self._setOORInfo(self)
+
+
+
+
+class wxPreviewCanvasPtr(wxScrolledWindowPtr):
+    def __init__(self,this):
+        self.this = this
+        self.thisown = 0
+    def __repr__(self):
+        return "<%s.%s instance; proxy of C++ wxPreviewCanvas instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+class wxPreviewCanvas(wxPreviewCanvasPtr):
+    def __init__(self,*_args,**_kwargs):
+        self.this = printfwc.new_wxPreviewCanvas(*_args,**_kwargs)
+        self.thisown = 1
+        self._setOORInfo(self)
+
+
+
+
+class wxPreviewControlBarPtr(wxPanelPtr):
+    def __init__(self,this):
+        self.this = this
+        self.thisown = 0
+    def GetZoomControl(self, *_args, **_kwargs):
+        val = printfwc.wxPreviewControlBar_GetZoomControl(self, *_args, **_kwargs)
+        return val
+    def SetZoomControl(self, *_args, **_kwargs):
+        val = printfwc.wxPreviewControlBar_SetZoomControl(self, *_args, **_kwargs)
+        return val
+    def GetPrintPreview(self, *_args, **_kwargs):
+        val = printfwc.wxPreviewControlBar_GetPrintPreview(self, *_args, **_kwargs)
+        if val: val = wxPrintPreviewPtr(val) 
+        return val
+    def OnNext(self, *_args, **_kwargs):
+        val = printfwc.wxPreviewControlBar_OnNext(self, *_args, **_kwargs)
+        return val
+    def OnPrevious(self, *_args, **_kwargs):
+        val = printfwc.wxPreviewControlBar_OnPrevious(self, *_args, **_kwargs)
+        return val
+    def OnFirst(self, *_args, **_kwargs):
+        val = printfwc.wxPreviewControlBar_OnFirst(self, *_args, **_kwargs)
+        return val
+    def OnLast(self, *_args, **_kwargs):
+        val = printfwc.wxPreviewControlBar_OnLast(self, *_args, **_kwargs)
+        return val
+    def OnGoto(self, *_args, **_kwargs):
+        val = printfwc.wxPreviewControlBar_OnGoto(self, *_args, **_kwargs)
+        return val
+    def __repr__(self):
+        return "<%s.%s instance; proxy of C++ wxPreviewControlBar instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+class wxPreviewControlBar(wxPreviewControlBarPtr):
+    def __init__(self,*_args,**_kwargs):
+        self.this = printfwc.new_wxPreviewControlBar(*_args,**_kwargs)
+        self.thisown = 1
+        self._setOORInfo(self)
+
+
+
+
+class wxPyPrintPreviewPtr(wxPrintPreviewPtr):
+    def __init__(self,this):
+        self.this = this
+        self.thisown = 0
+    def _setCallbackInfo(self, *_args, **_kwargs):
+        val = printfwc.wxPyPrintPreview__setCallbackInfo(self, *_args, **_kwargs)
+        return val
+    def base_SetCurrentPage(self, *_args, **_kwargs):
+        val = printfwc.wxPyPrintPreview_base_SetCurrentPage(self, *_args, **_kwargs)
+        return val
+    def base_PaintPage(self, *_args, **_kwargs):
+        val = printfwc.wxPyPrintPreview_base_PaintPage(self, *_args, **_kwargs)
+        return val
+    def base_DrawBlankPage(self, *_args, **_kwargs):
+        val = printfwc.wxPyPrintPreview_base_DrawBlankPage(self, *_args, **_kwargs)
+        return val
+    def base_RenderPage(self, *_args, **_kwargs):
+        val = printfwc.wxPyPrintPreview_base_RenderPage(self, *_args, **_kwargs)
+        return val
+    def base_SetZoom(self, *_args, **_kwargs):
+        val = printfwc.wxPyPrintPreview_base_SetZoom(self, *_args, **_kwargs)
+        return val
+    def base_Print(self, *_args, **_kwargs):
+        val = printfwc.wxPyPrintPreview_base_Print(self, *_args, **_kwargs)
+        return val
+    def base_DetermineScaling(self, *_args, **_kwargs):
+        val = printfwc.wxPyPrintPreview_base_DetermineScaling(self, *_args, **_kwargs)
+        return val
+    def __repr__(self):
+        return "<%s.%s instance; proxy of C++ wxPyPrintPreview instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+class wxPyPrintPreview(wxPyPrintPreviewPtr):
+    def __init__(self,*_args,**_kwargs):
+        self.this = printfwc.new_wxPyPrintPreview(*_args,**_kwargs)
         self.thisown = 1
+        self._setCallbackInfo(self, wxPyPrintPreview)
+
+
+
+
+class wxPyPreviewFramePtr(wxPreviewFramePtr):
+    def __init__(self,this):
+        self.this = this
+        self.thisown = 0
+    def _setCallbackInfo(self, *_args, **_kwargs):
+        val = printfwc.wxPyPreviewFrame__setCallbackInfo(self, *_args, **_kwargs)
+        return val
+    def SetPreviewCanvas(self, *_args, **_kwargs):
+        val = printfwc.wxPyPreviewFrame_SetPreviewCanvas(self, *_args, **_kwargs)
+        return val
+    def SetControlBar(self, *_args, **_kwargs):
+        val = printfwc.wxPyPreviewFrame_SetControlBar(self, *_args, **_kwargs)
+        return val
+    def base_Initialize(self, *_args, **_kwargs):
+        val = printfwc.wxPyPreviewFrame_base_Initialize(self, *_args, **_kwargs)
+        return val
+    def base_CreateCanvas(self, *_args, **_kwargs):
+        val = printfwc.wxPyPreviewFrame_base_CreateCanvas(self, *_args, **_kwargs)
+        return val
+    def base_CreateControlBar(self, *_args, **_kwargs):
+        val = printfwc.wxPyPreviewFrame_base_CreateControlBar(self, *_args, **_kwargs)
+        return val
+    def __repr__(self):
+        return "<%s.%s instance; proxy of C++ wxPyPreviewFrame instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+class wxPyPreviewFrame(wxPyPreviewFramePtr):
+    def __init__(self,*_args,**_kwargs):
+        self.this = printfwc.new_wxPyPreviewFrame(*_args,**_kwargs)
+        self.thisown = 1
+        self._setCallbackInfo(self, wxPyPreviewFrame)
+        self._setOORInfo(self)
+
+
+
+
+class wxPyPreviewControlBarPtr(wxPreviewControlBarPtr):
+    def __init__(self,this):
+        self.this = this
+        self.thisown = 0
+    def _setCallbackInfo(self, *_args, **_kwargs):
+        val = printfwc.wxPyPreviewControlBar__setCallbackInfo(self, *_args, **_kwargs)
+        return val
+    def SetPrintPreview(self, *_args, **_kwargs):
+        val = printfwc.wxPyPreviewControlBar_SetPrintPreview(self, *_args, **_kwargs)
+        return val
+    def base_CreateButtons(self, *_args, **_kwargs):
+        val = printfwc.wxPyPreviewControlBar_base_CreateButtons(self, *_args, **_kwargs)
+        return val
+    def base_SetZoomControl(self, *_args, **_kwargs):
+        val = printfwc.wxPyPreviewControlBar_base_SetZoomControl(self, *_args, **_kwargs)
+        return val
+    def __repr__(self):
+        return "<%s.%s instance; proxy of C++ wxPyPreviewControlBar instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
+class wxPyPreviewControlBar(wxPyPreviewControlBarPtr):
+    def __init__(self,*_args,**_kwargs):
+        self.this = printfwc.new_wxPyPreviewControlBar(*_args,**_kwargs)
+        self.thisown = 1
+        self._setCallbackInfo(self, wxPyPreviewControlBar)
         self._setOORInfo(self)
 
 
@@ -624,7 +846,32 @@ wxPostScriptDC_SetResolution = printfwc.wxPostScriptDC_SetResolution
 
 wxPostScriptDC_GetResolution = printfwc.wxPostScriptDC_GetResolution
 
+wxPrinter_GetLastError = printfwc.wxPrinter_GetLastError
+
 
 
 #-------------- VARIABLE WRAPPERS ------------------
 
+wxPRINT_MODE_NONE = printfwc.wxPRINT_MODE_NONE
+wxPRINT_MODE_PREVIEW = printfwc.wxPRINT_MODE_PREVIEW
+wxPRINT_MODE_FILE = printfwc.wxPRINT_MODE_FILE
+wxPRINT_MODE_PRINTER = printfwc.wxPRINT_MODE_PRINTER
+wxPRINTER_NO_ERROR = printfwc.wxPRINTER_NO_ERROR
+wxPRINTER_CANCELLED = printfwc.wxPRINTER_CANCELLED
+wxPRINTER_ERROR = printfwc.wxPRINTER_ERROR
+wxPREVIEW_PRINT = printfwc.wxPREVIEW_PRINT
+wxPREVIEW_PREVIOUS = printfwc.wxPREVIEW_PREVIOUS
+wxPREVIEW_NEXT = printfwc.wxPREVIEW_NEXT
+wxPREVIEW_ZOOM = printfwc.wxPREVIEW_ZOOM
+wxPREVIEW_FIRST = printfwc.wxPREVIEW_FIRST
+wxPREVIEW_LAST = printfwc.wxPREVIEW_LAST
+wxPREVIEW_GOTO = printfwc.wxPREVIEW_GOTO
+wxPREVIEW_DEFAULT = printfwc.wxPREVIEW_DEFAULT
+wxID_PREVIEW_CLOSE = printfwc.wxID_PREVIEW_CLOSE
+wxID_PREVIEW_NEXT = printfwc.wxID_PREVIEW_NEXT
+wxID_PREVIEW_PREVIOUS = printfwc.wxID_PREVIEW_PREVIOUS
+wxID_PREVIEW_PRINT = printfwc.wxID_PREVIEW_PRINT
+wxID_PREVIEW_ZOOM = printfwc.wxID_PREVIEW_ZOOM
+wxID_PREVIEW_FIRST = printfwc.wxID_PREVIEW_FIRST
+wxID_PREVIEW_LAST = printfwc.wxID_PREVIEW_LAST
+wxID_PREVIEW_GOTO = printfwc.wxID_PREVIEW_GOTO
diff --git a/wxPython/src/gtk/sizers.cpp b/wxPython/src/gtk/sizers.cpp
index b7fd73d8aa..a3a72c6703 100644
--- a/wxPython/src/gtk/sizers.cpp
+++ b/wxPython/src/gtk/sizers.cpp
@@ -1110,98 +1110,69 @@ static PyObject *_wrap_wxSizer_Destroy(PyObject *self, PyObject *args, PyObject
     return _resultobj;
 }
 
-static void  wxSizer_AddWindow(wxSizer *self,wxWindow * window,int  proportion,int  flag,int  border,PyObject * userData) {
+static void  wxSizer__Add(wxSizer *self,PyObject * item,int  proportion,int  flag,int  border,PyObject * userData,int  option) {
+            // The option parameter is only for backwards compatibility
+            // with keyword args, all new code should use "proportion"
+            // instead.  This can be removed eventually.
+            if (option != -1) proportion = option;
+
+            wxWindow* window;
+            wxSizer*  sizer;
+            wxSize    size;
+            wxSize*   sizePtr = &size;
             wxPyUserData* data = NULL;
             if (userData) data = new wxPyUserData(userData);
-            self->Add(window, proportion, flag, border, data);
-        }
-static PyObject *_wrap_wxSizer_AddWindow(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxSizer * _arg0;
-    wxWindow * _arg1;
-    int  _arg2 = (int ) 0;
-    int  _arg3 = (int ) 0;
-    int  _arg4 = (int ) 0;
-    PyObject * _arg5 = (PyObject *) NULL;
-    PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    PyObject * _obj5 = 0;
-    char *_kwnames[] = { "self","window","proportion","flag","border","userData", NULL };
 
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|iiiO:wxSizer_AddWindow",_kwnames,&_argo0,&_argo1,&_arg2,&_arg3,&_arg4,&_obj5)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_AddWindow. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_AddWindow. Expected _wxWindow_p.");
-        return NULL;
-        }
-    }
-    if (_obj5)
-{
-  _arg5 = _obj5;
-}
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_AddWindow(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5);
+            // Find out what type the item is and call the real Add method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                self->Add(window, proportion, flag, border, data);
 
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-    return _resultobj;
-}
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                self->Add(sizer, proportion, flag, border, data);
 
-static void  wxSizer_AddSizer(wxSizer *self,wxSizer * sizer,int  proportion,int  flag,int  border,PyObject * userData) {
-            wxPyUserData* data = NULL;
-            if (userData) data = new wxPyUserData(userData);
-            self->Add(sizer, proportion, flag, border, data);
+            else if (wxSize_helper(item, &sizePtr))
+                self->Add(sizePtr->GetWidth(), sizePtr->GetHeight(),
+                          proportion, flag, border, data);
+            else {
+                if (data) delete data;
+                PyErr_SetString(PyExc_TypeError,
+                                "wxWindow, wxSizer, wxSize, or (w,h) expected for item");
+            }
         }
-static PyObject *_wrap_wxSizer_AddSizer(PyObject *self, PyObject *args, PyObject *kwargs) {
+static PyObject *_wrap_wxSizer__Add(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxSizer * _arg0;
-    wxSizer * _arg1;
+    PyObject * _arg1;
     int  _arg2 = (int ) 0;
     int  _arg3 = (int ) 0;
     int  _arg4 = (int ) 0;
     PyObject * _arg5 = (PyObject *) NULL;
+    int  _arg6 = (int ) -1;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
+    PyObject * _obj1 = 0;
     PyObject * _obj5 = 0;
-    char *_kwnames[] = { "self","sizer","proportion","flag","border","userData", NULL };
+    char *_kwnames[] = { "self","item","proportion","flag","border","userData","option", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|iiiO:wxSizer_AddSizer",_kwnames,&_argo0,&_argo1,&_arg2,&_arg3,&_arg4,&_obj5)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|iiiOi:wxSizer__Add",_kwnames,&_argo0,&_obj1,&_arg2,&_arg3,&_arg4,&_obj5,&_arg6)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_AddSizer. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_AddSizer. Expected _wxSizer_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer__Add. Expected _wxSizer_p.");
         return NULL;
         }
     }
+{
+  _arg1 = _obj1;
+}
     if (_obj5)
 {
   _arg5 = _obj5;
 }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_AddSizer(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5);
+    wxSizer__Add(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -1210,143 +1181,70 @@ static PyObject *_wrap_wxSizer_AddSizer(PyObject *self, PyObject *args, PyObject
     return _resultobj;
 }
 
-static void  wxSizer_AddSpacer(wxSizer *self,int  width,int  height,int  proportion,int  flag,int  border,PyObject * userData) {
+static void  wxSizer__Insert(wxSizer *self,int  before,PyObject * item,int  proportion,int  flag,int  border,PyObject * userData,int  option) {
+            // The option parameter is only for backwards compatibility
+            // with keyword args, all new code should use "proportion"
+            // instead.  This can be removed eventually.
+            if (option != -1) proportion = option;
+
+            wxWindow* window;
+            wxSizer*  sizer;
+            wxSize    size;
+            wxSize*   sizePtr = &size;
             wxPyUserData* data = NULL;
             if (userData) data = new wxPyUserData(userData);
-            self->Add(width, height, proportion, flag, border, data);
-        }
-static PyObject *_wrap_wxSizer_AddSpacer(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxSizer * _arg0;
-    int  _arg1;
-    int  _arg2;
-    int  _arg3 = (int ) 0;
-    int  _arg4 = (int ) 0;
-    int  _arg5 = (int ) 0;
-    PyObject * _arg6 = (PyObject *) NULL;
-    PyObject * _argo0 = 0;
-    PyObject * _obj6 = 0;
-    char *_kwnames[] = { "self","width","height","proportion","flag","border","userData", NULL };
 
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oii|iiiO:wxSizer_AddSpacer",_kwnames,&_argo0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5,&_obj6)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_AddSpacer. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_obj6)
-{
-  _arg6 = _obj6;
-}
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_AddSpacer(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6);
+            // Find out what type the item is and call the real Insert method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                self->Insert(before, window, proportion, flag, border, data);
 
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-    return _resultobj;
-}
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                self->Insert(before, sizer, proportion, flag, border, data);
 
-static void  wxSizer_InsertWindow(wxSizer *self,int  before,wxWindow * window,int  proportion,int  flag,int  border,PyObject * userData) {
-            wxPyUserData* data = NULL;
-            if (userData) data = new wxPyUserData(userData);
-            self->Insert(before, window, proportion, flag, border, data);
+            else if (wxSize_helper(item, &sizePtr))
+                self->Insert(before, sizePtr->GetWidth(), sizePtr->GetHeight(),
+                          proportion, flag, border, data);
+            else {
+                if (data) delete data;
+                PyErr_SetString(PyExc_TypeError,
+                                "wxWindow, wxSizer, wxSize, or (w,h) expected for item");
+            }
         }
-static PyObject *_wrap_wxSizer_InsertWindow(PyObject *self, PyObject *args, PyObject *kwargs) {
+static PyObject *_wrap_wxSizer__Insert(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxSizer * _arg0;
     int  _arg1;
-    wxWindow * _arg2;
+    PyObject * _arg2;
     int  _arg3 = (int ) 0;
     int  _arg4 = (int ) 0;
     int  _arg5 = (int ) 0;
     PyObject * _arg6 = (PyObject *) NULL;
+    int  _arg7 = (int ) -1;
     PyObject * _argo0 = 0;
-    PyObject * _argo2 = 0;
+    PyObject * _obj2 = 0;
     PyObject * _obj6 = 0;
-    char *_kwnames[] = { "self","before","window","proportion","flag","border","userData", NULL };
+    char *_kwnames[] = { "self","before","item","proportion","flag","border","userData","option", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO|iiiO:wxSizer_InsertWindow",_kwnames,&_argo0,&_arg1,&_argo2,&_arg3,&_arg4,&_arg5,&_obj6)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO|iiiOi:wxSizer__Insert",_kwnames,&_argo0,&_arg1,&_obj2,&_arg3,&_arg4,&_arg5,&_obj6,&_arg7)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_InsertWindow. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo2) {
-        if (_argo2 == Py_None) { _arg2 = NULL; }
-        else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxSizer_InsertWindow. Expected _wxWindow_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer__Insert. Expected _wxSizer_p.");
         return NULL;
         }
     }
-    if (_obj6)
-{
-  _arg6 = _obj6;
-}
 {
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_InsertWindow(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-    return _resultobj;
+  _arg2 = _obj2;
 }
-
-static void  wxSizer_InsertSizer(wxSizer *self,int  before,wxSizer * sizer,int  proportion,int  flag,int  border,PyObject * userData) {
-            wxPyUserData* data = NULL;
-            if (userData) data = new wxPyUserData(userData);
-            self->Insert(before, sizer, proportion, flag, border, data);
-        }
-static PyObject *_wrap_wxSizer_InsertSizer(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxSizer * _arg0;
-    int  _arg1;
-    wxSizer * _arg2;
-    int  _arg3 = (int ) 0;
-    int  _arg4 = (int ) 0;
-    int  _arg5 = (int ) 0;
-    PyObject * _arg6 = (PyObject *) NULL;
-    PyObject * _argo0 = 0;
-    PyObject * _argo2 = 0;
-    PyObject * _obj6 = 0;
-    char *_kwnames[] = { "self","before","sizer","proportion","flag","border","userData", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO|iiiO:wxSizer_InsertSizer",_kwnames,&_argo0,&_arg1,&_argo2,&_arg3,&_arg4,&_arg5,&_obj6)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_InsertSizer. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo2) {
-        if (_argo2 == Py_None) { _arg2 = NULL; }
-        else if (SWIG_GetPtrObj(_argo2,(void **) &_arg2,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 3 of wxSizer_InsertSizer. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
     if (_obj6)
 {
   _arg6 = _obj6;
 }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_InsertSizer(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6);
+    wxSizer__Insert(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -1355,92 +1253,69 @@ static PyObject *_wrap_wxSizer_InsertSizer(PyObject *self, PyObject *args, PyObj
     return _resultobj;
 }
 
-static void  wxSizer_InsertSpacer(wxSizer *self,int  before,int  width,int  height,int  proportion,int  flag,int  border,PyObject * userData) {
+static void  wxSizer__Prepend(wxSizer *self,PyObject * item,int  proportion,int  flag,int  border,PyObject * userData,int  option) {
+            // The option parameter is only for backwards compatibility
+            // with keyword args, all new code should use "proportion"
+            // instead.  This can be removed eventually.
+            if (option != -1) proportion = option;
+
+            wxWindow* window;
+            wxSizer*  sizer;
+            wxSize    size;
+            wxSize*   sizePtr = &size;
             wxPyUserData* data = NULL;
             if (userData) data = new wxPyUserData(userData);
-            self->Insert(before, width, height, proportion, flag, border, data);
-        }
-static PyObject *_wrap_wxSizer_InsertSpacer(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxSizer * _arg0;
-    int  _arg1;
-    int  _arg2;
-    int  _arg3;
-    int  _arg4 = (int ) 0;
-    int  _arg5 = (int ) 0;
-    int  _arg6 = (int ) 0;
-    PyObject * _arg7 = (PyObject *) NULL;
-    PyObject * _argo0 = 0;
-    PyObject * _obj7 = 0;
-    char *_kwnames[] = { "self","before","width","height","proportion","flag","border","userData", NULL };
 
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oiii|iiiO:wxSizer_InsertSpacer",_kwnames,&_argo0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5,&_arg6,&_obj7)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_InsertSpacer. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_obj7)
-{
-  _arg7 = _obj7;
-}
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_InsertSpacer(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7);
+            // Find out what type the item is and call the real Prepend method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                self->Prepend(window, proportion, flag, border, data);
 
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-    return _resultobj;
-}
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                self->Prepend(sizer, proportion, flag, border, data);
 
-static void  wxSizer_PrependWindow(wxSizer *self,wxWindow * window,int  proportion,int  flag,int  border,PyObject * userData) {
-            wxPyUserData* data = NULL;
-            if (userData) data = new wxPyUserData(userData);
-            self->Prepend(window, proportion, flag, border, data);
+            else if (wxSize_helper(item, &sizePtr))
+                self->Prepend(sizePtr->GetWidth(), sizePtr->GetHeight(),
+                              proportion, flag, border, data);
+            else {
+                if (data) delete data;
+                PyErr_SetString(PyExc_TypeError,
+                                "wxWindow, wxSizer, wxSize, or (w,h) expected for item");
+            }
         }
-static PyObject *_wrap_wxSizer_PrependWindow(PyObject *self, PyObject *args, PyObject *kwargs) {
+static PyObject *_wrap_wxSizer__Prepend(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxSizer * _arg0;
-    wxWindow * _arg1;
+    PyObject * _arg1;
     int  _arg2 = (int ) 0;
     int  _arg3 = (int ) 0;
     int  _arg4 = (int ) 0;
     PyObject * _arg5 = (PyObject *) NULL;
+    int  _arg6 = (int ) -1;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
+    PyObject * _obj1 = 0;
     PyObject * _obj5 = 0;
-    char *_kwnames[] = { "self","window","proportion","flag","border","userData", NULL };
+    char *_kwnames[] = { "self","item","proportion","flag","border","userData","option", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|iiiO:wxSizer_PrependWindow",_kwnames,&_argo0,&_argo1,&_arg2,&_arg3,&_arg4,&_obj5)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|iiiOi:wxSizer__Prepend",_kwnames,&_argo0,&_obj1,&_arg2,&_arg3,&_arg4,&_obj5,&_arg6)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_PrependWindow. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_PrependWindow. Expected _wxWindow_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer__Prepend. Expected _wxSizer_p.");
         return NULL;
         }
     }
+{
+  _arg1 = _obj1;
+}
     if (_obj5)
 {
   _arg5 = _obj5;
 }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_PrependWindow(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5);
+    wxSizer__Prepend(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -1449,91 +1324,110 @@ static PyObject *_wrap_wxSizer_PrependWindow(PyObject *self, PyObject *args, PyO
     return _resultobj;
 }
 
-static void  wxSizer_PrependSizer(wxSizer *self,wxSizer * sizer,int  proportion,int  flag,int  border,PyObject * userData) {
-            wxPyUserData* data = NULL;
-            if (userData) data = new wxPyUserData(userData);
-            self->Prepend(sizer, proportion, flag, border, data);
+static bool  wxSizer_Remove(wxSizer *self,PyObject * item) {
+            wxWindow* window;
+            wxSizer*  sizer;
+
+            // Find out what type the item is and call the real Remove method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                return self->Remove(window);
+
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                return self->Remove(sizer);
+
+            else if (PyInt_Check(item)) {
+                int pos = PyInt_AsLong(item);
+                return self->Remove(pos);
+            }
+            else {
+                PyErr_SetString(PyExc_TypeError,
+                                "wxWindow, wxSizer or int (position) expected.");
+                return FALSE;
+            }
         }
-static PyObject *_wrap_wxSizer_PrependSizer(PyObject *self, PyObject *args, PyObject *kwargs) {
+static PyObject *_wrap_wxSizer_Remove(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
+    bool  _result;
     wxSizer * _arg0;
-    wxSizer * _arg1;
-    int  _arg2 = (int ) 0;
-    int  _arg3 = (int ) 0;
-    int  _arg4 = (int ) 0;
-    PyObject * _arg5 = (PyObject *) NULL;
+    PyObject * _arg1;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    PyObject * _obj5 = 0;
-    char *_kwnames[] = { "self","sizer","proportion","flag","border","userData", NULL };
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|iiiO:wxSizer_PrependSizer",_kwnames,&_argo0,&_argo1,&_arg2,&_arg3,&_arg4,&_obj5)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxSizer_Remove",_kwnames,&_argo0,&_obj1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_PrependSizer. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_PrependSizer. Expected _wxSizer_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_Remove. Expected _wxSizer_p.");
         return NULL;
         }
     }
-    if (_obj5)
 {
-  _arg5 = _obj5;
+  _arg1 = _obj1;
 }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_PrependSizer(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5);
+    _result = (bool )wxSizer_Remove(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
+}    _resultobj = Py_BuildValue("i",_result);
     return _resultobj;
 }
 
-static void  wxSizer_PrependSpacer(wxSizer *self,int  width,int  height,int  proportion,int  flag,int  border,PyObject * userData) {
-            wxPyUserData* data = NULL;
-            if (userData) data = new wxPyUserData(userData);
-            self->Prepend(width, height, proportion, flag, border, data);
+static void  wxSizer__SetItemMinSize(wxSizer *self,PyObject * item,wxSize  size) {
+            wxWindow* window;
+            wxSizer*  sizer;
+
+            // Find out what type the item is and call the real Remove method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                self->SetItemMinSize(window, size);
+
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                self->SetItemMinSize(sizer, size);
+
+            else if (PyInt_Check(item)) {
+                int pos = PyInt_AsLong(item);
+                self->SetItemMinSize(pos, size);
+            }
+            else
+                PyErr_SetString(PyExc_TypeError,
+                                "wxWindow, wxSizer or int (position) expected.");
         }
-static PyObject *_wrap_wxSizer_PrependSpacer(PyObject *self, PyObject *args, PyObject *kwargs) {
+static PyObject *_wrap_wxSizer__SetItemMinSize(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxSizer * _arg0;
-    int  _arg1;
-    int  _arg2;
-    int  _arg3 = (int ) 0;
-    int  _arg4 = (int ) 0;
-    int  _arg5 = (int ) 0;
-    PyObject * _arg6 = (PyObject *) NULL;
+    PyObject * _arg1;
+    wxSize * _arg2;
     PyObject * _argo0 = 0;
-    PyObject * _obj6 = 0;
-    char *_kwnames[] = { "self","width","height","proportion","flag","border","userData", NULL };
+    PyObject * _obj1 = 0;
+    wxSize  temp;
+    PyObject * _obj2 = 0;
+    char *_kwnames[] = { "self","item","size", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oii|iiiO:wxSizer_PrependSpacer",_kwnames,&_argo0,&_arg1,&_arg2,&_arg3,&_arg4,&_arg5,&_obj6)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxSizer__SetItemMinSize",_kwnames,&_argo0,&_obj1,&_obj2)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_PrependSpacer. Expected _wxSizer_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer__SetItemMinSize. Expected _wxSizer_p.");
         return NULL;
         }
     }
-    if (_obj6)
 {
-  _arg6 = _obj6;
+  _arg1 = _obj1;
+}
+{
+    _arg2 = &temp;
+    if (! wxSize_helper(_obj2, &_arg2))
+        return NULL;
 }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_PrependSpacer(_arg0,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6);
+    wxSizer__SetItemMinSize(_arg0,_arg1,*_arg2);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -1542,504 +1436,30 @@ static PyObject *_wrap_wxSizer_PrependSpacer(PyObject *self, PyObject *args, PyO
     return _resultobj;
 }
 
-#define wxSizer_RemoveWindow(_swigobj,_swigarg0)  (_swigobj->Remove(_swigarg0))
-static PyObject *_wrap_wxSizer_RemoveWindow(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxSizer_SetDimension(_swigobj,_swigarg0,_swigarg1,_swigarg2,_swigarg3)  (_swigobj->SetDimension(_swigarg0,_swigarg1,_swigarg2,_swigarg3))
+static PyObject *_wrap_wxSizer_SetDimension(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
-    bool  _result;
     wxSizer * _arg0;
-    wxWindow * _arg1;
+    int  _arg1;
+    int  _arg2;
+    int  _arg3;
+    int  _arg4;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","window", NULL };
+    char *_kwnames[] = { "self","x","y","width","height", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxSizer_RemoveWindow",_kwnames,&_argo0,&_argo1)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_RemoveWindow. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_RemoveWindow. Expected _wxWindow_p.");
-        return NULL;
-        }
-    }
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxSizer_RemoveWindow(_arg0,_arg1);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-#define wxSizer_RemoveSizer(_swigobj,_swigarg0)  (_swigobj->Remove(_swigarg0))
-static PyObject *_wrap_wxSizer_RemoveSizer(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    bool  _result;
-    wxSizer * _arg0;
-    wxSizer * _arg1;
-    PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","sizer", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxSizer_RemoveSizer",_kwnames,&_argo0,&_argo1)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_RemoveSizer. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_RemoveSizer. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxSizer_RemoveSizer(_arg0,_arg1);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-#define wxSizer_RemovePos(_swigobj,_swigarg0)  (_swigobj->Remove(_swigarg0))
-static PyObject *_wrap_wxSizer_RemovePos(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    bool  _result;
-    wxSizer * _arg0;
-    int  _arg1;
-    PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self","pos", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxSizer_RemovePos",_kwnames,&_argo0,&_arg1)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_RemovePos. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxSizer_RemovePos(_arg0,_arg1);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-#define wxSizer_DetachWindow(_swigobj,_swigarg0)  (_swigobj->Detach(_swigarg0))
-static PyObject *_wrap_wxSizer_DetachWindow(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    bool  _result;
-    wxSizer * _arg0;
-    wxWindow * _arg1;
-    PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","window", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxSizer_DetachWindow",_kwnames,&_argo0,&_argo1)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_DetachWindow. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_DetachWindow. Expected _wxWindow_p.");
-        return NULL;
-        }
-    }
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxSizer_DetachWindow(_arg0,_arg1);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-#define wxSizer_DetachSizer(_swigobj,_swigarg0)  (_swigobj->Detach(_swigarg0))
-static PyObject *_wrap_wxSizer_DetachSizer(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    bool  _result;
-    wxSizer * _arg0;
-    wxSizer * _arg1;
-    PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","sizer", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxSizer_DetachSizer",_kwnames,&_argo0,&_argo1)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_DetachSizer. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_DetachSizer. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxSizer_DetachSizer(_arg0,_arg1);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-#define wxSizer_DetachPos(_swigobj,_swigarg0)  (_swigobj->Detach(_swigarg0))
-static PyObject *_wrap_wxSizer_DetachPos(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    bool  _result;
-    wxSizer * _arg0;
-    int  _arg1;
-    PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self","pos", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxSizer_DetachPos",_kwnames,&_argo0,&_arg1)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_DetachPos. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxSizer_DetachPos(_arg0,_arg1);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-#define wxSizer_Clear(_swigobj,_swigarg0)  (_swigobj->Clear(_swigarg0))
-static PyObject *_wrap_wxSizer_Clear(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxSizer * _arg0;
-    bool  _arg1 = (bool ) false;
-    PyObject * _argo0 = 0;
-    int tempbool1 = (int) false;
-    char *_kwnames[] = { "self","delete_windows", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O|i:wxSizer_Clear",_kwnames,&_argo0,&tempbool1)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_Clear. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    _arg1 = (bool ) tempbool1;
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_Clear(_arg0,_arg1);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-    return _resultobj;
-}
-
-#define wxSizer_DeleteWindows(_swigobj)  (_swigobj->DeleteWindows())
-static PyObject *_wrap_wxSizer_DeleteWindows(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxSizer * _arg0;
-    PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxSizer_DeleteWindows",_kwnames,&_argo0)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_DeleteWindows. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_DeleteWindows(_arg0);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-    return _resultobj;
-}
-
-#define wxSizer_SetMinSize(_swigobj,_swigarg0)  (_swigobj->SetMinSize(_swigarg0))
-static PyObject *_wrap_wxSizer_SetMinSize(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxSizer * _arg0;
-    wxSize * _arg1;
-    PyObject * _argo0 = 0;
-    wxSize  temp;
-    PyObject * _obj1 = 0;
-    char *_kwnames[] = { "self","size", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxSizer_SetMinSize",_kwnames,&_argo0,&_obj1)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_SetMinSize. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-{
-    _arg1 = &temp;
-    if (! wxSize_helper(_obj1, &_arg1))
-        return NULL;
-}
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_SetMinSize(_arg0,*_arg1);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-    return _resultobj;
-}
-
-#define wxSizer_SetItemMinSizeWindow(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetItemMinSize(_swigarg0,_swigarg1))
-static PyObject *_wrap_wxSizer_SetItemMinSizeWindow(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxSizer * _arg0;
-    wxWindow * _arg1;
-    wxSize * _arg2;
-    PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    wxSize  temp;
-    PyObject * _obj2 = 0;
-    char *_kwnames[] = { "self","window","size", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxSizer_SetItemMinSizeWindow",_kwnames,&_argo0,&_argo1,&_obj2)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_SetItemMinSizeWindow. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_SetItemMinSizeWindow. Expected _wxWindow_p.");
-        return NULL;
-        }
-    }
-{
-    _arg2 = &temp;
-    if (! wxSize_helper(_obj2, &_arg2))
-        return NULL;
-}
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_SetItemMinSizeWindow(_arg0,_arg1,*_arg2);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-    return _resultobj;
-}
-
-#define wxSizer_SetItemMinSizeSizer(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetItemMinSize(_swigarg0,_swigarg1))
-static PyObject *_wrap_wxSizer_SetItemMinSizeSizer(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxSizer * _arg0;
-    wxSizer * _arg1;
-    wxSize * _arg2;
-    PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    wxSize  temp;
-    PyObject * _obj2 = 0;
-    char *_kwnames[] = { "self","sizer","size", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOO:wxSizer_SetItemMinSizeSizer",_kwnames,&_argo0,&_argo1,&_obj2)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_SetItemMinSizeSizer. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_SetItemMinSizeSizer. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-{
-    _arg2 = &temp;
-    if (! wxSize_helper(_obj2, &_arg2))
-        return NULL;
-}
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_SetItemMinSizeSizer(_arg0,_arg1,*_arg2);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-    return _resultobj;
-}
-
-#define wxSizer_SetItemMinSizePos(_swigobj,_swigarg0,_swigarg1)  (_swigobj->SetItemMinSize(_swigarg0,_swigarg1))
-static PyObject *_wrap_wxSizer_SetItemMinSizePos(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxSizer * _arg0;
-    int  _arg1;
-    wxSize * _arg2;
-    PyObject * _argo0 = 0;
-    wxSize  temp;
-    PyObject * _obj2 = 0;
-    char *_kwnames[] = { "self","pos","size", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiO:wxSizer_SetItemMinSizePos",_kwnames,&_argo0,&_arg1,&_obj2)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_SetItemMinSizePos. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-{
-    _arg2 = &temp;
-    if (! wxSize_helper(_obj2, &_arg2))
-        return NULL;
-}
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_SetItemMinSizePos(_arg0,_arg1,*_arg2);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-    return _resultobj;
-}
-
-#define wxSizer_SetItemMinSizeWindowWH(_swigobj,_swigarg0,_swigarg1,_swigarg2)  (_swigobj->SetItemMinSize(_swigarg0,_swigarg1,_swigarg2))
-static PyObject *_wrap_wxSizer_SetItemMinSizeWindowWH(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxSizer * _arg0;
-    wxWindow * _arg1;
-    int  _arg2;
-    int  _arg3;
-    PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","window","width","height", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOii:wxSizer_SetItemMinSizeWindowWH",_kwnames,&_argo0,&_argo1,&_arg2,&_arg3)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_SetItemMinSizeWindowWH. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_SetItemMinSizeWindowWH. Expected _wxWindow_p.");
-        return NULL;
-        }
-    }
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_SetItemMinSizeWindowWH(_arg0,_arg1,_arg2,_arg3);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-    return _resultobj;
-}
-
-#define wxSizer_SetItemMinSizeSizerWH(_swigobj,_swigarg0,_swigarg1,_swigarg2)  (_swigobj->SetItemMinSize(_swigarg0,_swigarg1,_swigarg2))
-static PyObject *_wrap_wxSizer_SetItemMinSizeSizerWH(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxSizer * _arg0;
-    wxSizer * _arg1;
-    int  _arg2;
-    int  _arg3;
-    PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","sizer","width","height", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OOii:wxSizer_SetItemMinSizeSizerWH",_kwnames,&_argo0,&_argo1,&_arg2,&_arg3)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oiiii:wxSizer_SetDimension",_kwnames,&_argo0,&_arg1,&_arg2,&_arg3,&_arg4)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_SetItemMinSizeSizerWH. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_SetItemMinSizeSizerWH. Expected _wxSizer_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_SetDimension. Expected _wxSizer_p.");
         return NULL;
         }
     }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_SetItemMinSizeSizerWH(_arg0,_arg1,_arg2,_arg3);
+    wxSizer_SetDimension(_arg0,_arg1,_arg2,_arg3,_arg4);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -2048,29 +1468,34 @@ static PyObject *_wrap_wxSizer_SetItemMinSizeSizerWH(PyObject *self, PyObject *a
     return _resultobj;
 }
 
-#define wxSizer_SetItemMinSizePosWH(_swigobj,_swigarg0,_swigarg1,_swigarg2)  (_swigobj->SetItemMinSize(_swigarg0,_swigarg1,_swigarg2))
-static PyObject *_wrap_wxSizer_SetItemMinSizePosWH(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxSizer_SetMinSize(_swigobj,_swigarg0)  (_swigobj->SetMinSize(_swigarg0))
+static PyObject *_wrap_wxSizer_SetMinSize(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxSizer * _arg0;
-    int  _arg1;
-    int  _arg2;
-    int  _arg3;
+    wxSize * _arg1;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self","pos","width","height", NULL };
+    wxSize  temp;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","size", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oiii:wxSizer_SetItemMinSizePosWH",_kwnames,&_argo0,&_arg1,&_arg2,&_arg3)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxSizer_SetMinSize",_kwnames,&_argo0,&_obj1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_SetItemMinSizePosWH. Expected _wxSizer_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_SetMinSize. Expected _wxSizer_p.");
         return NULL;
         }
     }
+{
+    _arg1 = &temp;
+    if (! wxSize_helper(_obj1, &_arg1))
+        return NULL;
+}
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_SetItemMinSizePosWH(_arg0,_arg1,_arg2,_arg3);
+    wxSizer_SetMinSize(_arg0,*_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -2347,63 +1772,29 @@ static PyObject *_wrap_wxSizer_SetVirtualSizeHints(PyObject *self, PyObject *arg
     return _resultobj;
 }
 
-static PyObject * wxSizer_GetChildren(wxSizer *self) {
-            wxSizerItemList& list = self->GetChildren();
-            return wxPy_ConvertList(&list, "wxSizerItem");
-        }
-static PyObject *_wrap_wxSizer_GetChildren(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    PyObject * _result;
-    wxSizer * _arg0;
-    PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxSizer_GetChildren",_kwnames,&_argo0)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_GetChildren. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (PyObject *)wxSizer_GetChildren(_arg0);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}{
-  _resultobj = _result;
-}
-    return _resultobj;
-}
-
-#define wxSizer_SetDimension(_swigobj,_swigarg0,_swigarg1,_swigarg2,_swigarg3)  (_swigobj->SetDimension(_swigarg0,_swigarg1,_swigarg2,_swigarg3))
-static PyObject *_wrap_wxSizer_SetDimension(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxSizer_Clear(_swigobj,_swigarg0)  (_swigobj->Clear(_swigarg0))
+static PyObject *_wrap_wxSizer_Clear(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxSizer * _arg0;
-    int  _arg1;
-    int  _arg2;
-    int  _arg3;
-    int  _arg4;
+    bool  _arg1 = (bool ) FALSE;
     PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self","x","y","width","height", NULL };
+    int tempbool1 = (int) FALSE;
+    char *_kwnames[] = { "self","delete_windows", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oiiii:wxSizer_SetDimension",_kwnames,&_argo0,&_arg1,&_arg2,&_arg3,&_arg4)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O|i:wxSizer_Clear",_kwnames,&_argo0,&tempbool1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_SetDimension. Expected _wxSizer_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_Clear. Expected _wxSizer_p.");
         return NULL;
         }
     }
+    _arg1 = (bool ) tempbool1;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_SetDimension(_arg0,_arg1,_arg2,_arg3,_arg4);
+    wxSizer_Clear(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -2412,38 +1803,26 @@ static PyObject *_wrap_wxSizer_SetDimension(PyObject *self, PyObject *args, PyOb
     return _resultobj;
 }
 
-#define wxSizer_ShowWindow(_swigobj,_swigarg0,_swigarg1)  (_swigobj->Show(_swigarg0,_swigarg1))
-static PyObject *_wrap_wxSizer_ShowWindow(PyObject *self, PyObject *args, PyObject *kwargs) {
+#define wxSizer_DeleteWindows(_swigobj)  (_swigobj->DeleteWindows())
+static PyObject *_wrap_wxSizer_DeleteWindows(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxSizer * _arg0;
-    wxWindow * _arg1;
-    bool  _arg2 = (bool ) TRUE;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    int tempbool2 = (int) TRUE;
-    char *_kwnames[] = { "self","window","show", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|i:wxSizer_ShowWindow",_kwnames,&_argo0,&_argo1,&tempbool2)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxSizer_DeleteWindows",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_ShowWindow. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_ShowWindow. Expected _wxWindow_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_DeleteWindows. Expected _wxSizer_p.");
         return NULL;
         }
     }
-    _arg2 = (bool ) tempbool2;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_ShowWindow(_arg0,_arg1,_arg2);
+    wxSizer_DeleteWindows(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -2452,107 +1831,77 @@ static PyObject *_wrap_wxSizer_ShowWindow(PyObject *self, PyObject *args, PyObje
     return _resultobj;
 }
 
-#define wxSizer_ShowSizer(_swigobj,_swigarg0,_swigarg1)  (_swigobj->Show(_swigarg0,_swigarg1))
-static PyObject *_wrap_wxSizer_ShowSizer(PyObject *self, PyObject *args, PyObject *kwargs) {
+static PyObject * wxSizer_GetChildren(wxSizer *self) {
+            wxList& list = self->GetChildren();
+            return wxPy_ConvertList(&list, "wxSizerItem");
+        }
+static PyObject *_wrap_wxSizer_GetChildren(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
+    PyObject * _result;
     wxSizer * _arg0;
-    wxSizer * _arg1;
-    bool  _arg2 = (bool ) TRUE;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    int tempbool2 = (int) TRUE;
-    char *_kwnames[] = { "self","sizer","show", NULL };
+    char *_kwnames[] = { "self", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|i:wxSizer_ShowSizer",_kwnames,&_argo0,&_argo1,&tempbool2)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxSizer_GetChildren",_kwnames,&_argo0)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_ShowSizer. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_ShowSizer. Expected _wxSizer_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_GetChildren. Expected _wxSizer_p.");
         return NULL;
         }
     }
-    _arg2 = (bool ) tempbool2;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_ShowSizer(_arg0,_arg1,_arg2);
+    _result = (PyObject *)wxSizer_GetChildren(_arg0);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
+}{
+  _resultobj = _result;
+}
     return _resultobj;
 }
 
-#define wxSizer_ShowPos(_swigobj,_swigarg0,_swigarg1)  (_swigobj->Show(_swigarg0,_swigarg1))
-static PyObject *_wrap_wxSizer_ShowPos(PyObject *self, PyObject *args, PyObject *kwargs) {
+static void  wxSizer_Show(wxSizer *self,PyObject * item,bool  show) {
+            wxWindow* window;
+            wxSizer*  sizer;
+            // Find out what type the item is and call the real method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                self->Show(window, show);
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                self->Show(sizer, show);
+            else
+                PyErr_SetString(PyExc_TypeError, "wxWindow or wxSizer expected.");
+        }
+static PyObject *_wrap_wxSizer_Show(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxSizer * _arg0;
-    size_t  _arg1;
+    PyObject * _arg1;
     bool  _arg2 = (bool ) TRUE;
     PyObject * _argo0 = 0;
+    PyObject * _obj1 = 0;
     int tempbool2 = (int) TRUE;
-    char *_kwnames[] = { "self","index","show", NULL };
+    char *_kwnames[] = { "self","item","show", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi|i:wxSizer_ShowPos",_kwnames,&_argo0,&_arg1,&tempbool2)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO|i:wxSizer_Show",_kwnames,&_argo0,&_obj1,&tempbool2)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_ShowPos. Expected _wxSizer_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_Show. Expected _wxSizer_p.");
         return NULL;
         }
     }
-    _arg2 = (bool ) tempbool2;
 {
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_ShowPos(_arg0,_arg1,_arg2);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-    return _resultobj;
+  _arg1 = _obj1;
 }
-
-#define wxSizer_HideWindow(_swigobj,_swigarg0)  (_swigobj->Hide(_swigarg0))
-static PyObject *_wrap_wxSizer_HideWindow(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxSizer * _arg0;
-    wxWindow * _arg1;
-    PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","window", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxSizer_HideWindow",_kwnames,&_argo0,&_argo1)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_HideWindow. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_HideWindow. Expected _wxWindow_p.");
-        return NULL;
-        }
-    }
+    _arg2 = (bool ) tempbool2;
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_HideWindow(_arg0,_arg1);
+    wxSizer_Show(_arg0,_arg1,_arg2);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -2561,64 +1910,41 @@ static PyObject *_wrap_wxSizer_HideWindow(PyObject *self, PyObject *args, PyObje
     return _resultobj;
 }
 
-#define wxSizer_HideSizer(_swigobj,_swigarg0)  (_swigobj->Hide(_swigarg0))
-static PyObject *_wrap_wxSizer_HideSizer(PyObject *self, PyObject *args, PyObject *kwargs) {
+static void  wxSizer_Hide(wxSizer *self,PyObject * item) {
+            wxWindow* window;
+            wxSizer*  sizer;
+            // Find out what type the item is and call the real method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                self->Hide(window);
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                self->Hide(sizer);
+            else
+                PyErr_SetString(PyExc_TypeError, "wxWindow or wxSizer expected.");
+        }
+static PyObject *_wrap_wxSizer_Hide(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     wxSizer * _arg0;
-    wxSizer * _arg1;
+    PyObject * _arg1;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","sizer", NULL };
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxSizer_HideSizer",_kwnames,&_argo0,&_argo1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxSizer_Hide",_kwnames,&_argo0,&_obj1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_HideSizer. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_HideSizer. Expected _wxSizer_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_Hide. Expected _wxSizer_p.");
         return NULL;
         }
     }
 {
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_HideSizer(_arg0,_arg1);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-    return _resultobj;
+  _arg1 = _obj1;
 }
-
-#define wxSizer_HidePos(_swigobj,_swigarg0)  (_swigobj->Hide(_swigarg0))
-static PyObject *_wrap_wxSizer_HidePos(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxSizer * _arg0;
-    size_t  _arg1;
-    PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self","index", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxSizer_HidePos",_kwnames,&_argo0,&_arg1)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_HidePos. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    wxSizer_HidePos(_arg0,_arg1);
+    wxSizer_Hide(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -2627,102 +1953,44 @@ static PyObject *_wrap_wxSizer_HidePos(PyObject *self, PyObject *args, PyObject
     return _resultobj;
 }
 
-#define wxSizer_IsShownWindow(_swigobj,_swigarg0)  (_swigobj->IsShown(_swigarg0))
-static PyObject *_wrap_wxSizer_IsShownWindow(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    bool  _result;
-    wxSizer * _arg0;
-    wxWindow * _arg1;
-    PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","window", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxSizer_IsShownWindow",_kwnames,&_argo0,&_argo1)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_IsShownWindow. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxWindow_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_IsShownWindow. Expected _wxWindow_p.");
-        return NULL;
+static bool  wxSizer_IsShown(wxSizer *self,PyObject * item) {
+            wxWindow* window;
+            wxSizer*  sizer;
+            // Find out what type the item is and call the real method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                return self->IsShown(window);
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                return self->IsShown(sizer);
+            else {
+                PyErr_SetString(PyExc_TypeError, "wxWindow or wxSizer expected.");
+                return FALSE;
+            }
         }
-    }
-{
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxSizer_IsShownWindow(_arg0,_arg1);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-#define wxSizer_IsShownSizer(_swigobj,_swigarg0)  (_swigobj->IsShown(_swigarg0))
-static PyObject *_wrap_wxSizer_IsShownSizer(PyObject *self, PyObject *args, PyObject *kwargs) {
+static PyObject *_wrap_wxSizer_IsShown(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
     bool  _result;
     wxSizer * _arg0;
-    wxSizer * _arg1;
+    PyObject * _arg1;
     PyObject * _argo0 = 0;
-    PyObject * _argo1 = 0;
-    char *_kwnames[] = { "self","sizer", NULL };
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","item", NULL };
 
     self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxSizer_IsShownSizer",_kwnames,&_argo0,&_argo1)) 
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxSizer_IsShown",_kwnames,&_argo0,&_obj1)) 
         return NULL;
     if (_argo0) {
         if (_argo0 == Py_None) { _arg0 = NULL; }
         else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_IsShownSizer. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
-    if (_argo1) {
-        if (_argo1 == Py_None) { _arg1 = NULL; }
-        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxSizer_IsShownSizer. Expected _wxSizer_p.");
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_IsShown. Expected _wxSizer_p.");
         return NULL;
         }
     }
 {
-    PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxSizer_IsShownSizer(_arg0,_arg1);
-
-    wxPyEndAllowThreads(__tstate);
-    if (PyErr_Occurred()) return NULL;
-}    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
+  _arg1 = _obj1;
 }
-
-#define wxSizer_IsShownPos(_swigobj,_swigarg0)  (_swigobj->IsShown(_swigarg0))
-static PyObject *_wrap_wxSizer_IsShownPos(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    bool  _result;
-    wxSizer * _arg0;
-    size_t  _arg1;
-    PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self","index", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxSizer_IsShownPos",_kwnames,&_argo0,&_arg1)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxSizer_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxSizer_IsShownPos. Expected _wxSizer_p.");
-        return NULL;
-        }
-    }
 {
     PyThreadState* __tstate = wxPyBeginAllowThreads();
-    _result = (bool )wxSizer_IsShownPos(_arg0,_arg1);
+    _result = (bool )wxSizer_IsShown(_arg0,_arg1);
 
     wxPyEndAllowThreads(__tstate);
     if (PyErr_Occurred()) return NULL;
@@ -3997,17 +3265,12 @@ static PyMethodDef sizerscMethods[] = {
 	 { "wxPySizer__setCallbackInfo", (PyCFunction) _wrap_wxPySizer__setCallbackInfo, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxPySizer", (PyCFunction) _wrap_new_wxPySizer, METH_VARARGS | METH_KEYWORDS },
 	 { "wxSizer_ShowItems", (PyCFunction) _wrap_wxSizer_ShowItems, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_IsShownPos", (PyCFunction) _wrap_wxSizer_IsShownPos, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_IsShownSizer", (PyCFunction) _wrap_wxSizer_IsShownSizer, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_IsShownWindow", (PyCFunction) _wrap_wxSizer_IsShownWindow, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_HidePos", (PyCFunction) _wrap_wxSizer_HidePos, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_HideSizer", (PyCFunction) _wrap_wxSizer_HideSizer, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_HideWindow", (PyCFunction) _wrap_wxSizer_HideWindow, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_ShowPos", (PyCFunction) _wrap_wxSizer_ShowPos, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_ShowSizer", (PyCFunction) _wrap_wxSizer_ShowSizer, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_ShowWindow", (PyCFunction) _wrap_wxSizer_ShowWindow, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_SetDimension", (PyCFunction) _wrap_wxSizer_SetDimension, METH_VARARGS | METH_KEYWORDS },
+	 { "wxSizer_IsShown", (PyCFunction) _wrap_wxSizer_IsShown, METH_VARARGS | METH_KEYWORDS },
+	 { "wxSizer_Hide", (PyCFunction) _wrap_wxSizer_Hide, METH_VARARGS | METH_KEYWORDS },
+	 { "wxSizer_Show", (PyCFunction) _wrap_wxSizer_Show, METH_VARARGS | METH_KEYWORDS },
 	 { "wxSizer_GetChildren", (PyCFunction) _wrap_wxSizer_GetChildren, METH_VARARGS | METH_KEYWORDS },
+	 { "wxSizer_DeleteWindows", (PyCFunction) _wrap_wxSizer_DeleteWindows, METH_VARARGS | METH_KEYWORDS },
+	 { "wxSizer_Clear", (PyCFunction) _wrap_wxSizer_Clear, METH_VARARGS | METH_KEYWORDS },
 	 { "wxSizer_SetVirtualSizeHints", (PyCFunction) _wrap_wxSizer_SetVirtualSizeHints, METH_VARARGS | METH_KEYWORDS },
 	 { "wxSizer_SetSizeHints", (PyCFunction) _wrap_wxSizer_SetSizeHints, METH_VARARGS | METH_KEYWORDS },
 	 { "wxSizer_FitInside", (PyCFunction) _wrap_wxSizer_FitInside, METH_VARARGS | METH_KEYWORDS },
@@ -4016,30 +3279,13 @@ static PyMethodDef sizerscMethods[] = {
 	 { "wxSizer_GetMinSize", (PyCFunction) _wrap_wxSizer_GetMinSize, METH_VARARGS | METH_KEYWORDS },
 	 { "wxSizer_GetPosition", (PyCFunction) _wrap_wxSizer_GetPosition, METH_VARARGS | METH_KEYWORDS },
 	 { "wxSizer_GetSize", (PyCFunction) _wrap_wxSizer_GetSize, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_SetItemMinSizePosWH", (PyCFunction) _wrap_wxSizer_SetItemMinSizePosWH, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_SetItemMinSizeSizerWH", (PyCFunction) _wrap_wxSizer_SetItemMinSizeSizerWH, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_SetItemMinSizeWindowWH", (PyCFunction) _wrap_wxSizer_SetItemMinSizeWindowWH, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_SetItemMinSizePos", (PyCFunction) _wrap_wxSizer_SetItemMinSizePos, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_SetItemMinSizeSizer", (PyCFunction) _wrap_wxSizer_SetItemMinSizeSizer, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_SetItemMinSizeWindow", (PyCFunction) _wrap_wxSizer_SetItemMinSizeWindow, METH_VARARGS | METH_KEYWORDS },
 	 { "wxSizer_SetMinSize", (PyCFunction) _wrap_wxSizer_SetMinSize, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_DeleteWindows", (PyCFunction) _wrap_wxSizer_DeleteWindows, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_Clear", (PyCFunction) _wrap_wxSizer_Clear, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_DetachPos", (PyCFunction) _wrap_wxSizer_DetachPos, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_DetachSizer", (PyCFunction) _wrap_wxSizer_DetachSizer, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_DetachWindow", (PyCFunction) _wrap_wxSizer_DetachWindow, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_RemovePos", (PyCFunction) _wrap_wxSizer_RemovePos, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_RemoveSizer", (PyCFunction) _wrap_wxSizer_RemoveSizer, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_RemoveWindow", (PyCFunction) _wrap_wxSizer_RemoveWindow, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_PrependSpacer", (PyCFunction) _wrap_wxSizer_PrependSpacer, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_PrependSizer", (PyCFunction) _wrap_wxSizer_PrependSizer, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_PrependWindow", (PyCFunction) _wrap_wxSizer_PrependWindow, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_InsertSpacer", (PyCFunction) _wrap_wxSizer_InsertSpacer, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_InsertSizer", (PyCFunction) _wrap_wxSizer_InsertSizer, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_InsertWindow", (PyCFunction) _wrap_wxSizer_InsertWindow, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_AddSpacer", (PyCFunction) _wrap_wxSizer_AddSpacer, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_AddSizer", (PyCFunction) _wrap_wxSizer_AddSizer, METH_VARARGS | METH_KEYWORDS },
-	 { "wxSizer_AddWindow", (PyCFunction) _wrap_wxSizer_AddWindow, METH_VARARGS | METH_KEYWORDS },
+	 { "wxSizer_SetDimension", (PyCFunction) _wrap_wxSizer_SetDimension, METH_VARARGS | METH_KEYWORDS },
+	 { "wxSizer__SetItemMinSize", (PyCFunction) _wrap_wxSizer__SetItemMinSize, METH_VARARGS | METH_KEYWORDS },
+	 { "wxSizer_Remove", (PyCFunction) _wrap_wxSizer_Remove, METH_VARARGS | METH_KEYWORDS },
+	 { "wxSizer__Prepend", (PyCFunction) _wrap_wxSizer__Prepend, METH_VARARGS | METH_KEYWORDS },
+	 { "wxSizer__Insert", (PyCFunction) _wrap_wxSizer__Insert, METH_VARARGS | METH_KEYWORDS },
+	 { "wxSizer__Add", (PyCFunction) _wrap_wxSizer__Add, METH_VARARGS | METH_KEYWORDS },
 	 { "wxSizer_Destroy", (PyCFunction) _wrap_wxSizer_Destroy, METH_VARARGS | METH_KEYWORDS },
 	 { "wxSizer__setOORInfo", (PyCFunction) _wrap_wxSizer__setOORInfo, METH_VARARGS | METH_KEYWORDS },
 	 { "wxSizerItem_GetUserData", (PyCFunction) _wrap_wxSizerItem_GetUserData, METH_VARARGS | METH_KEYWORDS },
diff --git a/wxPython/src/gtk/sizers.py b/wxPython/src/gtk/sizers.py
index 64306d0a6d..e9e3f18dbd 100644
--- a/wxPython/src/gtk/sizers.py
+++ b/wxPython/src/gtk/sizers.py
@@ -20,102 +20,102 @@ class wxSizerItemPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def DeleteWindows(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_DeleteWindows,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_DeleteWindows(self, *_args, **_kwargs)
         return val
     def DetachSizer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_DetachSizer,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_DetachSizer(self, *_args, **_kwargs)
         return val
     def GetSize(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_GetSize,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_GetSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def CalcMin(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_CalcMin,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_CalcMin(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def SetDimension(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_SetDimension,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_SetDimension(self, *_args, **_kwargs)
         return val
     def GetMinSize(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_GetMinSize,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_GetMinSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def SetInitSize(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_SetInitSize,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_SetInitSize(self, *_args, **_kwargs)
         return val
     def SetRatioWH(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_SetRatioWH,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_SetRatioWH(self, *_args, **_kwargs)
         return val
     def SetRatioSize(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_SetRatioSize,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_SetRatioSize(self, *_args, **_kwargs)
         return val
     def SetRatio(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_SetRatio,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_SetRatio(self, *_args, **_kwargs)
         return val
     def GetRatio(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_GetRatio,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_GetRatio(self, *_args, **_kwargs)
         return val
     def IsWindow(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_IsWindow,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_IsWindow(self, *_args, **_kwargs)
         return val
     def IsSizer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_IsSizer,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_IsSizer(self, *_args, **_kwargs)
         return val
     def IsSpacer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_IsSpacer,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_IsSpacer(self, *_args, **_kwargs)
         return val
     def SetProportion(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_SetProportion,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_SetProportion(self, *_args, **_kwargs)
         return val
     def GetProportion(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_GetProportion,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_GetProportion(self, *_args, **_kwargs)
         return val
     def SetFlag(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_SetFlag,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_SetFlag(self, *_args, **_kwargs)
         return val
     def GetFlag(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_GetFlag,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_GetFlag(self, *_args, **_kwargs)
         return val
     def SetBorder(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_SetBorder,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_SetBorder(self, *_args, **_kwargs)
         return val
     def GetBorder(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_GetBorder,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_GetBorder(self, *_args, **_kwargs)
         return val
     def GetWindow(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_GetWindow,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_GetWindow(self, *_args, **_kwargs)
         return val
     def SetWindow(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_SetWindow,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_SetWindow(self, *_args, **_kwargs)
         return val
     def GetSizer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_GetSizer,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_GetSizer(self, *_args, **_kwargs)
         return val
     def SetSizer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_SetSizer,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_SetSizer(self, *_args, **_kwargs)
         return val
     def GetSpacer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_GetSpacer,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_GetSpacer(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) 
         return val
     def SetSpacer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_SetSpacer,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_SetSpacer(self, *_args, **_kwargs)
         return val
     def Show(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_Show,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_Show(self, *_args, **_kwargs)
         return val
     def IsShown(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_IsShown,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_IsShown(self, *_args, **_kwargs)
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_GetPosition,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetUserData(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizerItem_GetUserData,(self,) + _args, _kwargs)
+        val = sizersc.wxSizerItem_GetUserData(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxSizerItem instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSizerItem instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     SetOption = SetProportion
     GetOption = GetProportion
 class wxSizerItem(wxSizerItemPtr):
@@ -130,227 +130,123 @@ class wxSizerPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def _setOORInfo(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer__setOORInfo,(self,) + _args, _kwargs)
+        val = sizersc.wxSizer__setOORInfo(self, *_args, **_kwargs)
         return val
     def Destroy(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_Destroy,(self,) + _args, _kwargs)
+        val = sizersc.wxSizer_Destroy(self, *_args, **_kwargs)
         return val
-    def AddWindow(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_AddWindow,(self,) + _args, _kwargs)
+    def _Add(self, *_args, **_kwargs):
+        val = sizersc.wxSizer__Add(self, *_args, **_kwargs)
         return val
-    def AddSizer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_AddSizer,(self,) + _args, _kwargs)
+    def _Insert(self, *_args, **_kwargs):
+        val = sizersc.wxSizer__Insert(self, *_args, **_kwargs)
         return val
-    def AddSpacer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_AddSpacer,(self,) + _args, _kwargs)
+    def _Prepend(self, *_args, **_kwargs):
+        val = sizersc.wxSizer__Prepend(self, *_args, **_kwargs)
         return val
-    def InsertWindow(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_InsertWindow,(self,) + _args, _kwargs)
+    def Remove(self, *_args, **_kwargs):
+        val = sizersc.wxSizer_Remove(self, *_args, **_kwargs)
         return val
-    def InsertSizer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_InsertSizer,(self,) + _args, _kwargs)
+    def _SetItemMinSize(self, *_args, **_kwargs):
+        val = sizersc.wxSizer__SetItemMinSize(self, *_args, **_kwargs)
         return val
-    def InsertSpacer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_InsertSpacer,(self,) + _args, _kwargs)
-        return val
-    def PrependWindow(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_PrependWindow,(self,) + _args, _kwargs)
-        return val
-    def PrependSizer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_PrependSizer,(self,) + _args, _kwargs)
-        return val
-    def PrependSpacer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_PrependSpacer,(self,) + _args, _kwargs)
-        return val
-    def RemoveWindow(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_RemoveWindow,(self,) + _args, _kwargs)
-        return val
-    def RemoveSizer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_RemoveSizer,(self,) + _args, _kwargs)
-        return val
-    def RemovePos(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_RemovePos,(self,) + _args, _kwargs)
-        return val
-    def DetachWindow(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_DetachWindow,(self,) + _args, _kwargs)
-        return val
-    def DetachSizer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_DetachSizer,(self,) + _args, _kwargs)
-        return val
-    def DetachPos(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_DetachPos,(self,) + _args, _kwargs)
-        return val
-    def Clear(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_Clear,(self,) + _args, _kwargs)
-        return val
-    def DeleteWindows(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_DeleteWindows,(self,) + _args, _kwargs)
+    def SetDimension(self, *_args, **_kwargs):
+        val = sizersc.wxSizer_SetDimension(self, *_args, **_kwargs)
         return val
     def SetMinSize(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_SetMinSize,(self,) + _args, _kwargs)
-        return val
-    def SetItemMinSizeWindow(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_SetItemMinSizeWindow,(self,) + _args, _kwargs)
-        return val
-    def SetItemMinSizeSizer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_SetItemMinSizeSizer,(self,) + _args, _kwargs)
-        return val
-    def SetItemMinSizePos(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_SetItemMinSizePos,(self,) + _args, _kwargs)
-        return val
-    def SetItemMinSizeWindowWH(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_SetItemMinSizeWindowWH,(self,) + _args, _kwargs)
-        return val
-    def SetItemMinSizeSizerWH(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_SetItemMinSizeSizerWH,(self,) + _args, _kwargs)
-        return val
-    def SetItemMinSizePosWH(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_SetItemMinSizePosWH,(self,) + _args, _kwargs)
+        val = sizersc.wxSizer_SetMinSize(self, *_args, **_kwargs)
         return val
     def GetSize(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_GetSize,(self,) + _args, _kwargs)
+        val = sizersc.wxSizer_GetSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_GetPosition,(self,) + _args, _kwargs)
+        val = sizersc.wxSizer_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetMinSize(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_GetMinSize,(self,) + _args, _kwargs)
+        val = sizersc.wxSizer_GetMinSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def Layout(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_Layout,(self,) + _args, _kwargs)
+        val = sizersc.wxSizer_Layout(self, *_args, **_kwargs)
         return val
     def Fit(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_Fit,(self,) + _args, _kwargs)
+        val = sizersc.wxSizer_Fit(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def FitInside(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_FitInside,(self,) + _args, _kwargs)
+        val = sizersc.wxSizer_FitInside(self, *_args, **_kwargs)
         return val
     def SetSizeHints(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_SetSizeHints,(self,) + _args, _kwargs)
+        val = sizersc.wxSizer_SetSizeHints(self, *_args, **_kwargs)
         return val
     def SetVirtualSizeHints(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_SetVirtualSizeHints,(self,) + _args, _kwargs)
-        return val
-    def GetChildren(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_GetChildren,(self,) + _args, _kwargs)
-        return val
-    def SetDimension(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_SetDimension,(self,) + _args, _kwargs)
-        return val
-    def ShowWindow(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_ShowWindow,(self,) + _args, _kwargs)
+        val = sizersc.wxSizer_SetVirtualSizeHints(self, *_args, **_kwargs)
         return val
-    def ShowSizer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_ShowSizer,(self,) + _args, _kwargs)
-        return val
-    def ShowPos(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_ShowPos,(self,) + _args, _kwargs)
-        return val
-    def HideWindow(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_HideWindow,(self,) + _args, _kwargs)
+    def Clear(self, *_args, **_kwargs):
+        val = sizersc.wxSizer_Clear(self, *_args, **_kwargs)
         return val
-    def HideSizer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_HideSizer,(self,) + _args, _kwargs)
+    def DeleteWindows(self, *_args, **_kwargs):
+        val = sizersc.wxSizer_DeleteWindows(self, *_args, **_kwargs)
         return val
-    def HidePos(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_HidePos,(self,) + _args, _kwargs)
+    def GetChildren(self, *_args, **_kwargs):
+        val = sizersc.wxSizer_GetChildren(self, *_args, **_kwargs)
         return val
-    def IsShownWindow(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_IsShownWindow,(self,) + _args, _kwargs)
+    def Show(self, *_args, **_kwargs):
+        val = sizersc.wxSizer_Show(self, *_args, **_kwargs)
         return val
-    def IsShownSizer(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_IsShownSizer,(self,) + _args, _kwargs)
+    def Hide(self, *_args, **_kwargs):
+        val = sizersc.wxSizer_Hide(self, *_args, **_kwargs)
         return val
-    def IsShownPos(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_IsShownPos,(self,) + _args, _kwargs)
+    def IsShown(self, *_args, **_kwargs):
+        val = sizersc.wxSizer_IsShown(self, *_args, **_kwargs)
         return val
     def ShowItems(self, *_args, **_kwargs):
-        val = apply(sizersc.wxSizer_ShowItems,(self,) + _args, _kwargs)
+        val = sizersc.wxSizer_ShowItems(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxSizer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSizer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
-    def Add(self, *args, **kw):
-        if type(args[0]) == type(1):
-            apply(self.AddSpacer, args, kw)
-        elif isinstance(args[0], wxSizerPtr):
-            apply(self.AddSizer, args, kw)
-        elif isinstance(args[0], wxWindowPtr):
-            apply(self.AddWindow, args, kw)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-
-    def Insert(self, *args, **kw):
-        if type(args[1]) == type(1):
-            apply(self.InsertSpacer, args, kw)
-        elif isinstance(args[1], wxSizerPtr):
-            apply(self.InsertSizer, args, kw)
-        elif isinstance(args[1], wxWindowPtr):
-            apply(self.InsertWindow, args, kw)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-
-    def Prepend(self, *args, **kw):
-        if type(args[0]) == type(1):
-            apply(self.PrependSpacer, args, kw)
-        elif isinstance(args[0], wxSizerPtr):
-            apply(self.PrependSizer, args, kw)
-        elif isinstance(args[0], wxWindowPtr):
-            apply(self.PrependWindow, args, kw)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-
-    def Remove(self, *args, **kw):
-        if type(args[0]) == type(1):
-            return apply(self.RemovePos, args, kw)
-        elif isinstance(args[0], wxSizerPtr):
-            return apply(self.RemoveSizer, args, kw)
-        elif isinstance(args[0], wxWindowPtr):
-            return apply(self.RemoveWindow, args, kw)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-
-    def Detach(self, *args, **kw):
-        if type(args[0]) == type(1):
-            return apply(self.DetachPos, args, kw)
-        elif isinstance(args[0], wxSizerPtr):
-            return apply(self.DetachSizer, args, kw)
-        elif isinstance(args[0], wxWindowPtr):
-            return apply(self.DetachWindow, args, kw)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
+    def Add(self, item, *args, **kw):
+        if type(item) == type(1):
+            item = (item, args[0])  # backwards compatibility, args are width, height
+            args = args[1:]
+        self._Add(item, *args, **kw)
 
     def AddMany(self, widgets):
         for childinfo in widgets:
             if type(childinfo) != type(()):
                 childinfo = (childinfo, )
-            apply(self.Add, childinfo)
+            self.Add(*childinfo)
 
-    
-    def SetItemMinSize(self, *args):
-        if type(args[0]) == type(1):
-            apply(self.SetItemMinSizePos, args)
-        elif isinstance(args[0], wxSizerPtr):
-            apply(self.SetItemMinSizeSizer, args)
-        elif isinstance(args[0], wxWindowPtr):
-            apply(self.SetItemMinSizeWindow, args)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-
-    def SetItemMinSizeWH(self, *args):
-        if type(args[0]) == type(1):
-            apply(self.SetItemMinSizePosWH, args)
-        elif isinstance(args[0], wxSizerPtr):
-            apply(self.SetItemMinSizeSizerWH, args)
-        elif isinstance(args[0], wxWindowPtr):
-            apply(self.SetItemMinSizeWindowWH, args)
+    def Prepend(self, item, *args, **kw):
+        if type(item) == type(1):
+            item = (item, args[0])  # backwards compatibility, args are width, height
+            args = args[1:]
+        self._Prepend(item, *args, **kw)
+
+    def Insert(self, before, item, *args, **kw):
+        if type(item) == type(1):
+            item = (item, args[0])  # backwards compatibility, args are width, height
+            args = args[1:]
+        self._Insert(before, item, *args, **kw)
+
+
+    # for backwards compatibility only
+    AddWindow = AddSizer = AddSpacer = Add
+    PrependWindow = PrependSizer = PrependSpacer = Prepend
+    InsertWindow = InsertSizer = InsertSpacer = Insert
+    RemoveWindow = RemoveSizer = RemovePos = Remove
+
+
+    def SetItemMinSize(self, item, *args):
+        if len(args) == 2:
+            return self._SetItemMinSize(item, args)
         else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-     
+            return self._SetItemMinSize(item, args[0])
+
+
     
     def GetSizeTuple(self):
         return self.GetSize().asTuple()
@@ -359,37 +255,6 @@ class wxSizerPtr(wxObjectPtr):
     def GetMinSizeTuple(self):
         return self.GetMinSize().asTuple()
     
-    
-    def Show(self, *args):
-        if type(args[0]) == type(1):
-            apply(self.ShowPos, args)
-        elif isinstance(args[0], wxSizerPtr):
-            apply(self.ShowSizer, args)
-        elif isinstance(args[0], wxWindowPtr):
-            apply(self.ShowWindow, args)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-
-    def Hide(self, *args):
-        if type(args[0]) == type(1):
-            apply(self.HidePos, args)
-        elif isinstance(args[0], wxSizerPtr):
-            apply(self.HideSizer, args)
-        elif isinstance(args[0], wxWindowPtr):
-            apply(self.HideWindow, args)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-
-    def IsShown(self, *args):
-        if type(args[0]) == type(1):
-            return apply(self.IsShownPos, args)
-        elif isinstance(args[0], wxSizerPtr):
-            return apply(self.IsShownSizer, args)
-        elif isinstance(args[0], wxWindowPtr):
-            return apply(self.IsShownWindow, args)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-
 class wxSizer(wxSizerPtr):
     def __init__(self,this):
         self.this = this
@@ -402,13 +267,13 @@ class wxPySizerPtr(wxSizerPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(sizersc.wxPySizer__setCallbackInfo,(self,) + _args, _kwargs)
+        val = sizersc.wxPySizer__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPySizer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPySizer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPySizer(wxPySizerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(sizersc.new_wxPySizer,_args,_kwargs)
+        self.this = sizersc.new_wxPySizer(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPySizer)
         self._setOORInfo(self)
@@ -421,23 +286,23 @@ class wxBoxSizerPtr(wxSizerPtr):
         self.this = this
         self.thisown = 0
     def GetOrientation(self, *_args, **_kwargs):
-        val = apply(sizersc.wxBoxSizer_GetOrientation,(self,) + _args, _kwargs)
+        val = sizersc.wxBoxSizer_GetOrientation(self, *_args, **_kwargs)
         return val
     def SetOrientation(self, *_args, **_kwargs):
-        val = apply(sizersc.wxBoxSizer_SetOrientation,(self,) + _args, _kwargs)
+        val = sizersc.wxBoxSizer_SetOrientation(self, *_args, **_kwargs)
         return val
     def RecalcSizes(self, *_args, **_kwargs):
-        val = apply(sizersc.wxBoxSizer_RecalcSizes,(self,) + _args, _kwargs)
+        val = sizersc.wxBoxSizer_RecalcSizes(self, *_args, **_kwargs)
         return val
     def CalcMin(self, *_args, **_kwargs):
-        val = apply(sizersc.wxBoxSizer_CalcMin,(self,) + _args, _kwargs)
+        val = sizersc.wxBoxSizer_CalcMin(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def __repr__(self):
-        return "<C wxBoxSizer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxBoxSizer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxBoxSizer(wxBoxSizerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(sizersc.new_wxBoxSizer,_args,_kwargs)
+        self.this = sizersc.new_wxBoxSizer(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -449,20 +314,20 @@ class wxStaticBoxSizerPtr(wxBoxSizerPtr):
         self.this = this
         self.thisown = 0
     def GetStaticBox(self, *_args, **_kwargs):
-        val = apply(sizersc.wxStaticBoxSizer_GetStaticBox,(self,) + _args, _kwargs)
+        val = sizersc.wxStaticBoxSizer_GetStaticBox(self, *_args, **_kwargs)
         return val
     def RecalcSizes(self, *_args, **_kwargs):
-        val = apply(sizersc.wxStaticBoxSizer_RecalcSizes,(self,) + _args, _kwargs)
+        val = sizersc.wxStaticBoxSizer_RecalcSizes(self, *_args, **_kwargs)
         return val
     def CalcMin(self, *_args, **_kwargs):
-        val = apply(sizersc.wxStaticBoxSizer_CalcMin,(self,) + _args, _kwargs)
+        val = sizersc.wxStaticBoxSizer_CalcMin(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def __repr__(self):
-        return "<C wxStaticBoxSizer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxStaticBoxSizer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxStaticBoxSizer(wxStaticBoxSizerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(sizersc.new_wxStaticBoxSizer,_args,_kwargs)
+        self.this = sizersc.new_wxStaticBoxSizer(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -474,20 +339,20 @@ class wxNotebookSizerPtr(wxSizerPtr):
         self.this = this
         self.thisown = 0
     def RecalcSizes(self, *_args, **_kwargs):
-        val = apply(sizersc.wxNotebookSizer_RecalcSizes,(self,) + _args, _kwargs)
+        val = sizersc.wxNotebookSizer_RecalcSizes(self, *_args, **_kwargs)
         return val
     def CalcMin(self, *_args, **_kwargs):
-        val = apply(sizersc.wxNotebookSizer_CalcMin,(self,) + _args, _kwargs)
+        val = sizersc.wxNotebookSizer_CalcMin(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetNotebook(self, *_args, **_kwargs):
-        val = apply(sizersc.wxNotebookSizer_GetNotebook,(self,) + _args, _kwargs)
+        val = sizersc.wxNotebookSizer_GetNotebook(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxNotebookSizer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxNotebookSizer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxNotebookSizer(wxNotebookSizerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(sizersc.new_wxNotebookSizer,_args,_kwargs)
+        self.this = sizersc.new_wxNotebookSizer(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -499,41 +364,41 @@ class wxGridSizerPtr(wxSizerPtr):
         self.this = this
         self.thisown = 0
     def RecalcSizes(self, *_args, **_kwargs):
-        val = apply(sizersc.wxGridSizer_RecalcSizes,(self,) + _args, _kwargs)
+        val = sizersc.wxGridSizer_RecalcSizes(self, *_args, **_kwargs)
         return val
     def CalcMin(self, *_args, **_kwargs):
-        val = apply(sizersc.wxGridSizer_CalcMin,(self,) + _args, _kwargs)
+        val = sizersc.wxGridSizer_CalcMin(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def SetCols(self, *_args, **_kwargs):
-        val = apply(sizersc.wxGridSizer_SetCols,(self,) + _args, _kwargs)
+        val = sizersc.wxGridSizer_SetCols(self, *_args, **_kwargs)
         return val
     def SetRows(self, *_args, **_kwargs):
-        val = apply(sizersc.wxGridSizer_SetRows,(self,) + _args, _kwargs)
+        val = sizersc.wxGridSizer_SetRows(self, *_args, **_kwargs)
         return val
     def SetVGap(self, *_args, **_kwargs):
-        val = apply(sizersc.wxGridSizer_SetVGap,(self,) + _args, _kwargs)
+        val = sizersc.wxGridSizer_SetVGap(self, *_args, **_kwargs)
         return val
     def SetHGap(self, *_args, **_kwargs):
-        val = apply(sizersc.wxGridSizer_SetHGap,(self,) + _args, _kwargs)
+        val = sizersc.wxGridSizer_SetHGap(self, *_args, **_kwargs)
         return val
     def GetCols(self, *_args, **_kwargs):
-        val = apply(sizersc.wxGridSizer_GetCols,(self,) + _args, _kwargs)
+        val = sizersc.wxGridSizer_GetCols(self, *_args, **_kwargs)
         return val
     def GetRows(self, *_args, **_kwargs):
-        val = apply(sizersc.wxGridSizer_GetRows,(self,) + _args, _kwargs)
+        val = sizersc.wxGridSizer_GetRows(self, *_args, **_kwargs)
         return val
     def GetVGap(self, *_args, **_kwargs):
-        val = apply(sizersc.wxGridSizer_GetVGap,(self,) + _args, _kwargs)
+        val = sizersc.wxGridSizer_GetVGap(self, *_args, **_kwargs)
         return val
     def GetHGap(self, *_args, **_kwargs):
-        val = apply(sizersc.wxGridSizer_GetHGap,(self,) + _args, _kwargs)
+        val = sizersc.wxGridSizer_GetHGap(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxGridSizer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxGridSizer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxGridSizer(wxGridSizerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(sizersc.new_wxGridSizer,_args,_kwargs)
+        self.this = sizersc.new_wxGridSizer(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -545,41 +410,41 @@ class wxFlexGridSizerPtr(wxGridSizerPtr):
         self.this = this
         self.thisown = 0
     def RecalcSizes(self, *_args, **_kwargs):
-        val = apply(sizersc.wxFlexGridSizer_RecalcSizes,(self,) + _args, _kwargs)
+        val = sizersc.wxFlexGridSizer_RecalcSizes(self, *_args, **_kwargs)
         return val
     def CalcMin(self, *_args, **_kwargs):
-        val = apply(sizersc.wxFlexGridSizer_CalcMin,(self,) + _args, _kwargs)
+        val = sizersc.wxFlexGridSizer_CalcMin(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def AddGrowableRow(self, *_args, **_kwargs):
-        val = apply(sizersc.wxFlexGridSizer_AddGrowableRow,(self,) + _args, _kwargs)
+        val = sizersc.wxFlexGridSizer_AddGrowableRow(self, *_args, **_kwargs)
         return val
     def RemoveGrowableRow(self, *_args, **_kwargs):
-        val = apply(sizersc.wxFlexGridSizer_RemoveGrowableRow,(self,) + _args, _kwargs)
+        val = sizersc.wxFlexGridSizer_RemoveGrowableRow(self, *_args, **_kwargs)
         return val
     def AddGrowableCol(self, *_args, **_kwargs):
-        val = apply(sizersc.wxFlexGridSizer_AddGrowableCol,(self,) + _args, _kwargs)
+        val = sizersc.wxFlexGridSizer_AddGrowableCol(self, *_args, **_kwargs)
         return val
     def RemoveGrowableCol(self, *_args, **_kwargs):
-        val = apply(sizersc.wxFlexGridSizer_RemoveGrowableCol,(self,) + _args, _kwargs)
+        val = sizersc.wxFlexGridSizer_RemoveGrowableCol(self, *_args, **_kwargs)
         return val
     def SetFlexibleDirection(self, *_args, **_kwargs):
-        val = apply(sizersc.wxFlexGridSizer_SetFlexibleDirection,(self,) + _args, _kwargs)
+        val = sizersc.wxFlexGridSizer_SetFlexibleDirection(self, *_args, **_kwargs)
         return val
     def GetFlexibleDirection(self, *_args, **_kwargs):
-        val = apply(sizersc.wxFlexGridSizer_GetFlexibleDirection,(self,) + _args, _kwargs)
+        val = sizersc.wxFlexGridSizer_GetFlexibleDirection(self, *_args, **_kwargs)
         return val
     def SetNonFlexibleGrowMode(self, *_args, **_kwargs):
-        val = apply(sizersc.wxFlexGridSizer_SetNonFlexibleGrowMode,(self,) + _args, _kwargs)
+        val = sizersc.wxFlexGridSizer_SetNonFlexibleGrowMode(self, *_args, **_kwargs)
         return val
     def GetNonFlexibleGrowMode(self, *_args, **_kwargs):
-        val = apply(sizersc.wxFlexGridSizer_GetNonFlexibleGrowMode,(self,) + _args, _kwargs)
+        val = sizersc.wxFlexGridSizer_GetNonFlexibleGrowMode(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxFlexGridSizer instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFlexGridSizer instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFlexGridSizer(wxFlexGridSizerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(sizersc.new_wxFlexGridSizer,_args,_kwargs)
+        self.this = sizersc.new_wxFlexGridSizer(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
diff --git a/wxPython/src/gtk/stattool.py b/wxPython/src/gtk/stattool.py
index 0c74eee1b4..78a95dbfcd 100644
--- a/wxPython/src/gtk/stattool.py
+++ b/wxPython/src/gtk/stattool.py
@@ -21,54 +21,54 @@ class wxStatusBarPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxStatusBar_Create,(self,) + _args, _kwargs)
+        val = stattoolc.wxStatusBar_Create(self, *_args, **_kwargs)
         return val
     def GetFieldRect(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxStatusBar_GetFieldRect,(self,) + _args, _kwargs)
+        val = stattoolc.wxStatusBar_GetFieldRect(self, *_args, **_kwargs)
         if val: val = wxRectPtr(val) ; val.thisown = 1
         return val
     def GetFieldsCount(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxStatusBar_GetFieldsCount,(self,) + _args, _kwargs)
+        val = stattoolc.wxStatusBar_GetFieldsCount(self, *_args, **_kwargs)
         return val
     def GetStatusText(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxStatusBar_GetStatusText,(self,) + _args, _kwargs)
+        val = stattoolc.wxStatusBar_GetStatusText(self, *_args, **_kwargs)
         return val
     def GetBorderX(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxStatusBar_GetBorderX,(self,) + _args, _kwargs)
+        val = stattoolc.wxStatusBar_GetBorderX(self, *_args, **_kwargs)
         return val
     def GetBorderY(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxStatusBar_GetBorderY,(self,) + _args, _kwargs)
+        val = stattoolc.wxStatusBar_GetBorderY(self, *_args, **_kwargs)
         return val
     def SetFieldsCount(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxStatusBar_SetFieldsCount,(self,) + _args, _kwargs)
+        val = stattoolc.wxStatusBar_SetFieldsCount(self, *_args, **_kwargs)
         return val
     def SetStatusText(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxStatusBar_SetStatusText,(self,) + _args, _kwargs)
+        val = stattoolc.wxStatusBar_SetStatusText(self, *_args, **_kwargs)
         return val
     def SetStatusWidths(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxStatusBar_SetStatusWidths,(self,) + _args, _kwargs)
+        val = stattoolc.wxStatusBar_SetStatusWidths(self, *_args, **_kwargs)
         return val
     def PushStatusText(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxStatusBar_PushStatusText,(self,) + _args, _kwargs)
+        val = stattoolc.wxStatusBar_PushStatusText(self, *_args, **_kwargs)
         return val
     def PopStatusText(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxStatusBar_PopStatusText,(self,) + _args, _kwargs)
+        val = stattoolc.wxStatusBar_PopStatusText(self, *_args, **_kwargs)
         return val
     def SetMinHeight(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxStatusBar_SetMinHeight,(self,) + _args, _kwargs)
+        val = stattoolc.wxStatusBar_SetMinHeight(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxStatusBar instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxStatusBar instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxStatusBar(wxStatusBarPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(stattoolc.new_wxStatusBar,_args,_kwargs)
+        self.this = stattoolc.new_wxStatusBar(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreStatusBar(*_args,**_kwargs):
-    val = wxStatusBarPtr(apply(stattoolc.new_wxPreStatusBar,_args,_kwargs))
+    val = wxStatusBarPtr(stattoolc.new_wxPreStatusBar(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -79,100 +79,100 @@ class wxToolBarToolBasePtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def Destroy(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_Destroy,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_Destroy(self, *_args, **_kwargs)
         return val
     def GetId(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_GetId,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_GetId(self, *_args, **_kwargs)
         return val
     def GetControl(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_GetControl,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_GetControl(self, *_args, **_kwargs)
         return val
     def GetToolBar(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_GetToolBar,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_GetToolBar(self, *_args, **_kwargs)
         return val
     def IsButton(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_IsButton,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_IsButton(self, *_args, **_kwargs)
         return val
     def IsControl(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_IsControl,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_IsControl(self, *_args, **_kwargs)
         return val
     def IsSeparator(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_IsSeparator,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_IsSeparator(self, *_args, **_kwargs)
         return val
     def GetStyle(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_GetStyle,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_GetStyle(self, *_args, **_kwargs)
         return val
     def GetKind(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_GetKind,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_GetKind(self, *_args, **_kwargs)
         return val
     def IsEnabled(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_IsEnabled,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_IsEnabled(self, *_args, **_kwargs)
         return val
     def IsToggled(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_IsToggled,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_IsToggled(self, *_args, **_kwargs)
         return val
     def CanBeToggled(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_CanBeToggled,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_CanBeToggled(self, *_args, **_kwargs)
         return val
     def GetNormalBitmap(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_GetNormalBitmap,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_GetNormalBitmap(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) 
         return val
     def GetDisabledBitmap(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_GetDisabledBitmap,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_GetDisabledBitmap(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) 
         return val
     def GetBitmap(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_GetBitmap,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_GetBitmap(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) ; val.thisown = 1
         return val
     def GetLabel(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_GetLabel,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_GetLabel(self, *_args, **_kwargs)
         return val
     def GetShortHelp(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_GetShortHelp,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_GetShortHelp(self, *_args, **_kwargs)
         return val
     def GetLongHelp(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_GetLongHelp,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_GetLongHelp(self, *_args, **_kwargs)
         return val
     def Enable(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_Enable,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_Enable(self, *_args, **_kwargs)
         return val
     def Toggle(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_Toggle,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_Toggle(self, *_args, **_kwargs)
         return val
     def SetToggle(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_SetToggle,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_SetToggle(self, *_args, **_kwargs)
         return val
     def SetShortHelp(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_SetShortHelp,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_SetShortHelp(self, *_args, **_kwargs)
         return val
     def SetLongHelp(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_SetLongHelp,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_SetLongHelp(self, *_args, **_kwargs)
         return val
     def SetNormalBitmap(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_SetNormalBitmap,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_SetNormalBitmap(self, *_args, **_kwargs)
         return val
     def SetDisabledBitmap(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_SetDisabledBitmap,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_SetDisabledBitmap(self, *_args, **_kwargs)
         return val
     def SetLabel(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_SetLabel,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_SetLabel(self, *_args, **_kwargs)
         return val
     def Detach(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_Detach,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_Detach(self, *_args, **_kwargs)
         return val
     def Attach(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_Attach,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_Attach(self, *_args, **_kwargs)
         return val
     def GetClientData(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_GetClientData,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_GetClientData(self, *_args, **_kwargs)
         return val
     def SetClientData(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarToolBase_SetClientData,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarToolBase_SetClientData(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxToolBarToolBase instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxToolBarToolBase instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     GetBitmap1 = GetNormalBitmap
     GetBitmap2 = GetDisabledBitmap
@@ -191,131 +191,131 @@ class wxToolBarBasePtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def DoAddTool(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_DoAddTool,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_DoAddTool(self, *_args, **_kwargs)
         return val
     def DoInsertTool(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_DoInsertTool,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_DoInsertTool(self, *_args, **_kwargs)
         return val
     def AddControl(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_AddControl,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_AddControl(self, *_args, **_kwargs)
         return val
     def InsertControl(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_InsertControl,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_InsertControl(self, *_args, **_kwargs)
         return val
     def FindControl(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_FindControl,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_FindControl(self, *_args, **_kwargs)
         return val
     def AddSeparator(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_AddSeparator,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_AddSeparator(self, *_args, **_kwargs)
         return val
     def InsertSeparator(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_InsertSeparator,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_InsertSeparator(self, *_args, **_kwargs)
         return val
     def RemoveTool(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_RemoveTool,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_RemoveTool(self, *_args, **_kwargs)
         return val
     def DeleteToolByPos(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_DeleteToolByPos,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_DeleteToolByPos(self, *_args, **_kwargs)
         return val
     def DeleteTool(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_DeleteTool,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_DeleteTool(self, *_args, **_kwargs)
         return val
     def ClearTools(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_ClearTools,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_ClearTools(self, *_args, **_kwargs)
         return val
     def Realize(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_Realize,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_Realize(self, *_args, **_kwargs)
         return val
     def EnableTool(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_EnableTool,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_EnableTool(self, *_args, **_kwargs)
         return val
     def ToggleTool(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_ToggleTool,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_ToggleTool(self, *_args, **_kwargs)
         return val
     def SetToggle(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_SetToggle,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_SetToggle(self, *_args, **_kwargs)
         return val
     def GetToolClientData(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_GetToolClientData,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_GetToolClientData(self, *_args, **_kwargs)
         return val
     def SetToolClientData(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_SetToolClientData,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_SetToolClientData(self, *_args, **_kwargs)
         return val
     def GetToolState(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_GetToolState,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_GetToolState(self, *_args, **_kwargs)
         return val
     def GetToolEnabled(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_GetToolEnabled,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_GetToolEnabled(self, *_args, **_kwargs)
         return val
     def SetToolShortHelp(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_SetToolShortHelp,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_SetToolShortHelp(self, *_args, **_kwargs)
         return val
     def GetToolShortHelp(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_GetToolShortHelp,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_GetToolShortHelp(self, *_args, **_kwargs)
         return val
     def SetToolLongHelp(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_SetToolLongHelp,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_SetToolLongHelp(self, *_args, **_kwargs)
         return val
     def GetToolLongHelp(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_GetToolLongHelp,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_GetToolLongHelp(self, *_args, **_kwargs)
         return val
     def SetMarginsXY(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_SetMarginsXY,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_SetMarginsXY(self, *_args, **_kwargs)
         return val
     def SetMargins(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_SetMargins,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_SetMargins(self, *_args, **_kwargs)
         return val
     def SetToolPacking(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_SetToolPacking,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_SetToolPacking(self, *_args, **_kwargs)
         return val
     def SetToolSeparation(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_SetToolSeparation,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_SetToolSeparation(self, *_args, **_kwargs)
         return val
     def GetToolMargins(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_GetToolMargins,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_GetToolMargins(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetMargins(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_GetMargins,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_GetMargins(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetToolPacking(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_GetToolPacking,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_GetToolPacking(self, *_args, **_kwargs)
         return val
     def GetToolSeparation(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_GetToolSeparation,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_GetToolSeparation(self, *_args, **_kwargs)
         return val
     def SetRows(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_SetRows,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_SetRows(self, *_args, **_kwargs)
         return val
     def SetMaxRowsCols(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_SetMaxRowsCols,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_SetMaxRowsCols(self, *_args, **_kwargs)
         return val
     def GetMaxRows(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_GetMaxRows,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_GetMaxRows(self, *_args, **_kwargs)
         return val
     def GetMaxCols(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_GetMaxCols,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_GetMaxCols(self, *_args, **_kwargs)
         return val
     def SetToolBitmapSize(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_SetToolBitmapSize,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_SetToolBitmapSize(self, *_args, **_kwargs)
         return val
     def GetToolBitmapSize(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_GetToolBitmapSize,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_GetToolBitmapSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetToolSize(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_GetToolSize,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_GetToolSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def FindToolForPosition(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_FindToolForPosition,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_FindToolForPosition(self, *_args, **_kwargs)
         return val
     def IsVertical(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarBase_IsVertical,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarBase_IsVertical(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxToolBarBase instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxToolBarBase instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     # These match the original Add methods for this class, kept for
     # backwards compatibility with versions < 2.3.3.
@@ -452,23 +452,23 @@ class wxToolBarPtr(wxToolBarBasePtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBar_Create,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBar_Create(self, *_args, **_kwargs)
         return val
     def FindToolForPosition(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBar_FindToolForPosition,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBar_FindToolForPosition(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxToolBar instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxToolBar instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxToolBar(wxToolBarPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(stattoolc.new_wxToolBar,_args,_kwargs)
+        self.this = stattoolc.new_wxToolBar(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreToolBar(*_args,**_kwargs):
-    val = wxToolBarPtr(apply(stattoolc.new_wxPreToolBar,_args,_kwargs))
+    val = wxToolBarPtr(stattoolc.new_wxPreToolBar(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -479,23 +479,23 @@ class wxToolBarSimplePtr(wxToolBarBasePtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarSimple_Create,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarSimple_Create(self, *_args, **_kwargs)
         return val
     def FindToolForPosition(self, *_args, **_kwargs):
-        val = apply(stattoolc.wxToolBarSimple_FindToolForPosition,(self,) + _args, _kwargs)
+        val = stattoolc.wxToolBarSimple_FindToolForPosition(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxToolBarSimple instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxToolBarSimple instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxToolBarSimple(wxToolBarSimplePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(stattoolc.new_wxToolBarSimple,_args,_kwargs)
+        self.this = stattoolc.new_wxToolBarSimple(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreToolBarSimple(*_args,**_kwargs):
-    val = wxToolBarSimplePtr(apply(stattoolc.new_wxPreToolBarSimple,_args,_kwargs))
+    val = wxToolBarSimplePtr(stattoolc.new_wxPreToolBarSimple(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
diff --git a/wxPython/src/gtk/streams.py b/wxPython/src/gtk/streams.py
index d2a8b18800..5104c86c7d 100644
--- a/wxPython/src/gtk/streams.py
+++ b/wxPython/src/gtk/streams.py
@@ -6,58 +6,58 @@ class wxInputStreamPtr :
         self.this = this
         self.thisown = 0
     def close(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_close,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_close(self, *_args, **_kwargs)
         return val
     def flush(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_flush,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_flush(self, *_args, **_kwargs)
         return val
     def eof(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_eof,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_eof(self, *_args, **_kwargs)
         return val
     def read(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_read,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_read(self, *_args, **_kwargs)
         return val
     def readline(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_readline,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_readline(self, *_args, **_kwargs)
         return val
     def readlines(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_readlines,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_readlines(self, *_args, **_kwargs)
         return val
     def seek(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_seek,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_seek(self, *_args, **_kwargs)
         return val
     def tell(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_tell,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_tell(self, *_args, **_kwargs)
         return val
     def Peek(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_Peek,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_Peek(self, *_args, **_kwargs)
         return val
     def GetC(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_GetC,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_GetC(self, *_args, **_kwargs)
         return val
     def LastRead(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_LastRead,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_LastRead(self, *_args, **_kwargs)
         return val
     def CanRead(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_CanRead,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_CanRead(self, *_args, **_kwargs)
         return val
     def Eof(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_Eof,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_Eof(self, *_args, **_kwargs)
         return val
     def Ungetch(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_Ungetch,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_Ungetch(self, *_args, **_kwargs)
         return val
     def SeekI(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_SeekI,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_SeekI(self, *_args, **_kwargs)
         return val
     def TellI(self, *_args, **_kwargs):
-        val = apply(streamsc.wxInputStream_TellI,(self,) + _args, _kwargs)
+        val = streamsc.wxInputStream_TellI(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxInputStream instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxInputStream instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxInputStream(wxInputStreamPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(streamsc.new_wxInputStream,_args,_kwargs)
+        self.this = streamsc.new_wxInputStream(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -68,10 +68,10 @@ class wxOutputStreamPtr :
         self.this = this
         self.thisown = 0
     def write(self, *_args, **_kwargs):
-        val = apply(streamsc.wxOutputStream_write,(self,) + _args, _kwargs)
+        val = streamsc.wxOutputStream_write(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxOutputStream instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxOutputStream instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxOutputStream(wxOutputStreamPtr):
     def __init__(self,this):
         self.this = this
diff --git a/wxPython/src/gtk/utils.py b/wxPython/src/gtk/utils.py
index 5dc18f722d..c7c8da8ad2 100644
--- a/wxPython/src/gtk/utils.py
+++ b/wxPython/src/gtk/utils.py
@@ -17,118 +17,118 @@ class wxConfigBasePtr :
             except:
                 pass
     def DeleteAll(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_DeleteAll,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_DeleteAll(self, *_args, **_kwargs)
         return val
     def DeleteEntry(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_DeleteEntry,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_DeleteEntry(self, *_args, **_kwargs)
         return val
     def DeleteGroup(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_DeleteGroup,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_DeleteGroup(self, *_args, **_kwargs)
         return val
     def Exists(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_Exists,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_Exists(self, *_args, **_kwargs)
         return val
     def Flush(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_Flush,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_Flush(self, *_args, **_kwargs)
         return val
     def GetAppName(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_GetAppName,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_GetAppName(self, *_args, **_kwargs)
         return val
     def GetFirstGroup(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_GetFirstGroup,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_GetFirstGroup(self, *_args, **_kwargs)
         return val
     def GetFirstEntry(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_GetFirstEntry,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_GetFirstEntry(self, *_args, **_kwargs)
         return val
     def GetNextGroup(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_GetNextGroup,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_GetNextGroup(self, *_args, **_kwargs)
         return val
     def GetNextEntry(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_GetNextEntry,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_GetNextEntry(self, *_args, **_kwargs)
         return val
     def GetNumberOfEntries(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_GetNumberOfEntries,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_GetNumberOfEntries(self, *_args, **_kwargs)
         return val
     def GetNumberOfGroups(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_GetNumberOfGroups,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_GetNumberOfGroups(self, *_args, **_kwargs)
         return val
     def GetPath(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_GetPath,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_GetPath(self, *_args, **_kwargs)
         return val
     def GetVendorName(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_GetVendorName,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_GetVendorName(self, *_args, **_kwargs)
         return val
     def HasEntry(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_HasEntry,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_HasEntry(self, *_args, **_kwargs)
         return val
     def HasGroup(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_HasGroup,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_HasGroup(self, *_args, **_kwargs)
         return val
     def IsExpandingEnvVars(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_IsExpandingEnvVars,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_IsExpandingEnvVars(self, *_args, **_kwargs)
         return val
     def IsRecordingDefaults(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_IsRecordingDefaults,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_IsRecordingDefaults(self, *_args, **_kwargs)
         return val
     def Read(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_Read,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_Read(self, *_args, **_kwargs)
         return val
     def ReadInt(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_ReadInt,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_ReadInt(self, *_args, **_kwargs)
         return val
     def ReadFloat(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_ReadFloat,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_ReadFloat(self, *_args, **_kwargs)
         return val
     def ReadBool(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_ReadBool,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_ReadBool(self, *_args, **_kwargs)
         return val
     def SetExpandEnvVars(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_SetExpandEnvVars,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_SetExpandEnvVars(self, *_args, **_kwargs)
         return val
     def SetPath(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_SetPath,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_SetPath(self, *_args, **_kwargs)
         return val
     def SetRecordDefaults(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_SetRecordDefaults,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_SetRecordDefaults(self, *_args, **_kwargs)
         return val
     def SetAppName(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_SetAppName,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_SetAppName(self, *_args, **_kwargs)
         return val
     def SetVendorName(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_SetVendorName,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_SetVendorName(self, *_args, **_kwargs)
         return val
     def SetStyle(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_SetStyle,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_SetStyle(self, *_args, **_kwargs)
         return val
     def GetStyle(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_GetStyle,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_GetStyle(self, *_args, **_kwargs)
         return val
     def Write(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_Write,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_Write(self, *_args, **_kwargs)
         return val
     def WriteInt(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_WriteInt,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_WriteInt(self, *_args, **_kwargs)
         return val
     def WriteFloat(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_WriteFloat,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_WriteFloat(self, *_args, **_kwargs)
         return val
     def WriteBool(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_WriteBool,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_WriteBool(self, *_args, **_kwargs)
         return val
     def GetEntryType(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_GetEntryType,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_GetEntryType(self, *_args, **_kwargs)
         return val
     def RenameEntry(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_RenameEntry,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_RenameEntry(self, *_args, **_kwargs)
         return val
     def RenameGroup(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_RenameGroup,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_RenameGroup(self, *_args, **_kwargs)
         return val
     def ExpandEnvVars(self, *_args, **_kwargs):
-        val = apply(utilsc.wxConfigBase_ExpandEnvVars,(self,) + _args, _kwargs)
+        val = utilsc.wxConfigBase_ExpandEnvVars(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxConfigBase instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxConfigBase instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxConfigBase(wxConfigBasePtr):
     def __init__(self,this):
         self.this = this
@@ -147,10 +147,10 @@ class wxConfigPtr(wxConfigBasePtr):
             except:
                 pass
     def __repr__(self):
-        return "<C wxConfig instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxConfig instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxConfig(wxConfigPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(utilsc.new_wxConfig,_args,_kwargs)
+        self.this = utilsc.new_wxConfig(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -167,10 +167,10 @@ class wxFileConfigPtr(wxConfigBasePtr):
             except:
                 pass
     def __repr__(self):
-        return "<C wxFileConfig instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxFileConfig instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxFileConfig(wxFileConfigPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(utilsc.new_wxFileConfig,_args,_kwargs)
+        self.this = utilsc.new_wxFileConfig(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -278,289 +278,289 @@ class wxDateTimePtr :
             except:
                 pass
     def SetToCurrent(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetToCurrent,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetToCurrent(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SetTimeT(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetTimeT,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetTimeT(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SetJDN(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetJDN,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetJDN(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SetHMS(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetHMS,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetHMS(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def Set(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_Set,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_Set(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def ResetTime(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_ResetTime,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_ResetTime(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SetYear(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetYear,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetYear(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SetMonth(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetMonth,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetMonth(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SetDay(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetDay,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetDay(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SetHour(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetHour,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetHour(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SetMinute(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetMinute,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetMinute(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SetSecond(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetSecond,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetSecond(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SetMillisecond(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetMillisecond,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetMillisecond(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SetToWeekDayInSameWeek(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetToWeekDayInSameWeek,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetToWeekDayInSameWeek(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def GetWeekDayInSameWeek(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetWeekDayInSameWeek,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetWeekDayInSameWeek(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) ; val.thisown = 1
         return val
     def SetToNextWeekDay(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetToNextWeekDay,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetToNextWeekDay(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def GetNextWeekDay(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetNextWeekDay,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetNextWeekDay(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) ; val.thisown = 1
         return val
     def SetToPrevWeekDay(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetToPrevWeekDay,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetToPrevWeekDay(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def GetPrevWeekDay(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetPrevWeekDay,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetPrevWeekDay(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) ; val.thisown = 1
         return val
     def SetToWeekDay(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetToWeekDay,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetToWeekDay(self, *_args, **_kwargs)
         return val
     def SetToLastWeekDay(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetToLastWeekDay,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetToLastWeekDay(self, *_args, **_kwargs)
         return val
     def GetLastWeekDay(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetLastWeekDay,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetLastWeekDay(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) ; val.thisown = 1
         return val
     def SetToTheWeek(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetToTheWeek,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetToTheWeek(self, *_args, **_kwargs)
         return val
     def GetWeek(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetWeek,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetWeek(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) ; val.thisown = 1
         return val
     def SetToLastMonthDay(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetToLastMonthDay,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetToLastMonthDay(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def GetLastMonthDay(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetLastMonthDay,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetLastMonthDay(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) ; val.thisown = 1
         return val
     def SetToYearDay(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SetToYearDay,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SetToYearDay(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def GetYearDay(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetYearDay,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetYearDay(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) ; val.thisown = 1
         return val
     def GetJulianDayNumber(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetJulianDayNumber,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetJulianDayNumber(self, *_args, **_kwargs)
         return val
     def GetJDN(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetJDN,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetJDN(self, *_args, **_kwargs)
         return val
     def GetModifiedJulianDayNumber(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetModifiedJulianDayNumber,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetModifiedJulianDayNumber(self, *_args, **_kwargs)
         return val
     def GetMJD(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetMJD,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetMJD(self, *_args, **_kwargs)
         return val
     def GetRataDie(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetRataDie,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetRataDie(self, *_args, **_kwargs)
         return val
     def ToTimezone(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_ToTimezone,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_ToTimezone(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) ; val.thisown = 1
         return val
     def MakeTimezone(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_MakeTimezone,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_MakeTimezone(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def ToGMT(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_ToGMT,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_ToGMT(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) ; val.thisown = 1
         return val
     def MakeGMT(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_MakeGMT,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_MakeGMT(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def IsDST(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_IsDST,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_IsDST(self, *_args, **_kwargs)
         return val
     def IsValid(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_IsValid,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_IsValid(self, *_args, **_kwargs)
         return val
     def GetTicks(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetTicks,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetTicks(self, *_args, **_kwargs)
         return val
     def GetYear(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetYear,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetYear(self, *_args, **_kwargs)
         return val
     def GetMonth(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetMonth,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetMonth(self, *_args, **_kwargs)
         return val
     def GetDay(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetDay,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetDay(self, *_args, **_kwargs)
         return val
     def GetWeekDay(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetWeekDay,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetWeekDay(self, *_args, **_kwargs)
         return val
     def GetHour(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetHour,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetHour(self, *_args, **_kwargs)
         return val
     def GetMinute(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetMinute,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetMinute(self, *_args, **_kwargs)
         return val
     def GetSecond(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetSecond,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetSecond(self, *_args, **_kwargs)
         return val
     def GetMillisecond(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetMillisecond,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetMillisecond(self, *_args, **_kwargs)
         return val
     def GetDayOfYear(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetDayOfYear,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetDayOfYear(self, *_args, **_kwargs)
         return val
     def GetWeekOfYear(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetWeekOfYear,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetWeekOfYear(self, *_args, **_kwargs)
         return val
     def GetWeekOfMonth(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_GetWeekOfMonth,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_GetWeekOfMonth(self, *_args, **_kwargs)
         return val
     def IsWorkDay(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_IsWorkDay,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_IsWorkDay(self, *_args, **_kwargs)
         return val
     def IsEqualTo(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_IsEqualTo,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_IsEqualTo(self, *_args, **_kwargs)
         return val
     def IsEarlierThan(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_IsEarlierThan,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_IsEarlierThan(self, *_args, **_kwargs)
         return val
     def IsLaterThan(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_IsLaterThan,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_IsLaterThan(self, *_args, **_kwargs)
         return val
     def IsStrictlyBetween(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_IsStrictlyBetween,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_IsStrictlyBetween(self, *_args, **_kwargs)
         return val
     def IsBetween(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_IsBetween,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_IsBetween(self, *_args, **_kwargs)
         return val
     def IsSameDate(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_IsSameDate,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_IsSameDate(self, *_args, **_kwargs)
         return val
     def IsSameTime(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_IsSameTime,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_IsSameTime(self, *_args, **_kwargs)
         return val
     def IsEqualUpTo(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_IsEqualUpTo,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_IsEqualUpTo(self, *_args, **_kwargs)
         return val
     def AddTS(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_AddTS,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_AddTS(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def AddDS(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_AddDS,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_AddDS(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SubtractTS(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SubtractTS,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SubtractTS(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def SubtractDS(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_SubtractDS,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_SubtractDS(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) 
         return val
     def Subtract(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_Subtract,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_Subtract(self, *_args, **_kwargs)
         if val: val = wxTimeSpanPtr(val) ; val.thisown = 1
         return val
     def __add__TS(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime___add__TS,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime___add__TS(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) ; val.thisown = 1
         return val
     def __add__DS(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime___add__DS,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime___add__DS(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) ; val.thisown = 1
         return val
     def __sub__DT(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime___sub__DT,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime___sub__DT(self, *_args, **_kwargs)
         if val: val = wxTimeSpanPtr(val) ; val.thisown = 1
         return val
     def __sub__TS(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime___sub__TS,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime___sub__TS(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) ; val.thisown = 1
         return val
     def __sub__DS(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime___sub__DS,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime___sub__DS(self, *_args, **_kwargs)
         if val: val = wxDateTimePtr(val) ; val.thisown = 1
         return val
     def __cmp__(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime___cmp__,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime___cmp__(self, *_args, **_kwargs)
         return val
     def ParseRfc822Date(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_ParseRfc822Date,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_ParseRfc822Date(self, *_args, **_kwargs)
         return val
     def ParseFormat(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_ParseFormat,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_ParseFormat(self, *_args, **_kwargs)
         return val
     def ParseDateTime(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_ParseDateTime,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_ParseDateTime(self, *_args, **_kwargs)
         return val
     def ParseDate(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_ParseDate,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_ParseDate(self, *_args, **_kwargs)
         return val
     def ParseTime(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_ParseTime,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_ParseTime(self, *_args, **_kwargs)
         return val
     def Format(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_Format,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_Format(self, *_args, **_kwargs)
         return val
     def FormatDate(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_FormatDate,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_FormatDate(self, *_args, **_kwargs)
         return val
     def FormatTime(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_FormatTime,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_FormatTime(self, *_args, **_kwargs)
         return val
     def FormatISODate(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_FormatISODate,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_FormatISODate(self, *_args, **_kwargs)
         return val
     def FormatISOTime(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateTime_FormatISOTime,(self,) + _args, _kwargs)
+        val = utilsc.wxDateTime_FormatISOTime(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxDateTime instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDateTime instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     
     def __add__(self, other):
         if isinstance(other, wxTimeSpanPtr):
@@ -585,28 +585,28 @@ class wxDateTimePtr :
 
 class wxDateTime(wxDateTimePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(utilsc.new_wxDateTime,_args,_kwargs)
+        self.this = utilsc.new_wxDateTime(*_args,**_kwargs)
         self.thisown = 1
 
 
 
 def wxDateTimeFromTimeT(*_args,**_kwargs):
-    val = wxDateTimePtr(apply(utilsc.new_wxDateTimeFromTimeT,_args,_kwargs))
+    val = wxDateTimePtr(utilsc.new_wxDateTimeFromTimeT(*_args,**_kwargs))
     val.thisown = 1
     return val
 
 def wxDateTimeFromJDN(*_args,**_kwargs):
-    val = wxDateTimePtr(apply(utilsc.new_wxDateTimeFromJDN,_args,_kwargs))
+    val = wxDateTimePtr(utilsc.new_wxDateTimeFromJDN(*_args,**_kwargs))
     val.thisown = 1
     return val
 
 def wxDateTimeFromHMS(*_args,**_kwargs):
-    val = wxDateTimePtr(apply(utilsc.new_wxDateTimeFromHMS,_args,_kwargs))
+    val = wxDateTimePtr(utilsc.new_wxDateTimeFromHMS(*_args,**_kwargs))
     val.thisown = 1
     return val
 
 def wxDateTimeFromDMY(*_args,**_kwargs):
-    val = wxDateTimePtr(apply(utilsc.new_wxDateTimeFromDMY,_args,_kwargs))
+    val = wxDateTimePtr(utilsc.new_wxDateTimeFromDMY(*_args,**_kwargs))
     val.thisown = 1
     return val
 
@@ -622,92 +622,92 @@ class wxTimeSpanPtr :
             except:
                 pass
     def Add(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_Add,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_Add(self, *_args, **_kwargs)
         if val: val = wxTimeSpanPtr(val) 
         return val
     def Subtract(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_Subtract,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_Subtract(self, *_args, **_kwargs)
         if val: val = wxTimeSpanPtr(val) 
         return val
     def Multiply(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_Multiply,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_Multiply(self, *_args, **_kwargs)
         if val: val = wxTimeSpanPtr(val) 
         return val
     def Neg(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_Neg,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_Neg(self, *_args, **_kwargs)
         if val: val = wxTimeSpanPtr(val) 
         return val
     def Abs(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_Abs,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_Abs(self, *_args, **_kwargs)
         if val: val = wxTimeSpanPtr(val) ; val.thisown = 1
         return val
     def __add__(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan___add__,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan___add__(self, *_args, **_kwargs)
         if val: val = wxTimeSpanPtr(val) ; val.thisown = 1
         return val
     def __sub__(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan___sub__,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan___sub__(self, *_args, **_kwargs)
         if val: val = wxTimeSpanPtr(val) ; val.thisown = 1
         return val
     def __mul__(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan___mul__,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan___mul__(self, *_args, **_kwargs)
         if val: val = wxTimeSpanPtr(val) ; val.thisown = 1
         return val
     def __rmul__(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan___rmul__,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan___rmul__(self, *_args, **_kwargs)
         if val: val = wxTimeSpanPtr(val) ; val.thisown = 1
         return val
     def __neg__(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan___neg__,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan___neg__(self, *_args, **_kwargs)
         if val: val = wxTimeSpanPtr(val) ; val.thisown = 1
         return val
     def __cmp__(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan___cmp__,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan___cmp__(self, *_args, **_kwargs)
         return val
     def IsNull(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_IsNull,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_IsNull(self, *_args, **_kwargs)
         return val
     def IsPositive(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_IsPositive,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_IsPositive(self, *_args, **_kwargs)
         return val
     def IsNegative(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_IsNegative,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_IsNegative(self, *_args, **_kwargs)
         return val
     def IsEqualTo(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_IsEqualTo,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_IsEqualTo(self, *_args, **_kwargs)
         return val
     def IsLongerThan(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_IsLongerThan,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_IsLongerThan(self, *_args, **_kwargs)
         return val
     def IsShorterThan(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_IsShorterThan,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_IsShorterThan(self, *_args, **_kwargs)
         return val
     def GetWeeks(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_GetWeeks,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_GetWeeks(self, *_args, **_kwargs)
         return val
     def GetDays(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_GetDays,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_GetDays(self, *_args, **_kwargs)
         return val
     def GetHours(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_GetHours,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_GetHours(self, *_args, **_kwargs)
         return val
     def GetMinutes(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_GetMinutes,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_GetMinutes(self, *_args, **_kwargs)
         return val
     def GetSeconds(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_GetSeconds,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_GetSeconds(self, *_args, **_kwargs)
         return val
     def GetMilliseconds(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_GetMilliseconds,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_GetMilliseconds(self, *_args, **_kwargs)
         return val
     def Format(self, *_args, **_kwargs):
-        val = apply(utilsc.wxTimeSpan_Format,(self,) + _args, _kwargs)
+        val = utilsc.wxTimeSpan_Format(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTimeSpan instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTimeSpan instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxTimeSpan(wxTimeSpanPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(utilsc.new_wxTimeSpan,_args,_kwargs)
+        self.this = utilsc.new_wxTimeSpan(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -724,77 +724,77 @@ class wxDateSpanPtr :
             except:
                 pass
     def SetYears(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan_SetYears,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan_SetYears(self, *_args, **_kwargs)
         if val: val = wxDateSpanPtr(val) 
         return val
     def SetMonths(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan_SetMonths,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan_SetMonths(self, *_args, **_kwargs)
         if val: val = wxDateSpanPtr(val) 
         return val
     def SetWeeks(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan_SetWeeks,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan_SetWeeks(self, *_args, **_kwargs)
         if val: val = wxDateSpanPtr(val) 
         return val
     def SetDays(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan_SetDays,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan_SetDays(self, *_args, **_kwargs)
         if val: val = wxDateSpanPtr(val) 
         return val
     def GetYears(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan_GetYears,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan_GetYears(self, *_args, **_kwargs)
         return val
     def GetMonths(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan_GetMonths,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan_GetMonths(self, *_args, **_kwargs)
         return val
     def GetWeeks(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan_GetWeeks,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan_GetWeeks(self, *_args, **_kwargs)
         return val
     def GetDays(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan_GetDays,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan_GetDays(self, *_args, **_kwargs)
         return val
     def GetTotalDays(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan_GetTotalDays,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan_GetTotalDays(self, *_args, **_kwargs)
         return val
     def Add(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan_Add,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan_Add(self, *_args, **_kwargs)
         if val: val = wxDateSpanPtr(val) 
         return val
     def Subtract(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan_Subtract,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan_Subtract(self, *_args, **_kwargs)
         if val: val = wxDateSpanPtr(val) 
         return val
     def Neg(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan_Neg,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan_Neg(self, *_args, **_kwargs)
         if val: val = wxDateSpanPtr(val) 
         return val
     def Multiply(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan_Multiply,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan_Multiply(self, *_args, **_kwargs)
         if val: val = wxDateSpanPtr(val) 
         return val
     def __add__(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan___add__,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan___add__(self, *_args, **_kwargs)
         if val: val = wxDateSpanPtr(val) ; val.thisown = 1
         return val
     def __sub__(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan___sub__,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan___sub__(self, *_args, **_kwargs)
         if val: val = wxDateSpanPtr(val) ; val.thisown = 1
         return val
     def __mul__(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan___mul__,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan___mul__(self, *_args, **_kwargs)
         if val: val = wxDateSpanPtr(val) ; val.thisown = 1
         return val
     def __rmul__(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan___rmul__,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan___rmul__(self, *_args, **_kwargs)
         if val: val = wxDateSpanPtr(val) ; val.thisown = 1
         return val
     def __neg__(self, *_args, **_kwargs):
-        val = apply(utilsc.wxDateSpan___neg__,(self,) + _args, _kwargs)
+        val = utilsc.wxDateSpan___neg__(self, *_args, **_kwargs)
         if val: val = wxDateSpanPtr(val) ; val.thisown = 1
         return val
     def __repr__(self):
-        return "<C wxDateSpan instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxDateSpan instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxDateSpan(wxDateSpanPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(utilsc.new_wxDateSpan,_args,_kwargs)
+        self.this = utilsc.new_wxDateSpan(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -813,17 +813,17 @@ wxGetCurrentTime = utilsc.wxGetCurrentTime
 wxGetLocalTimeMillis = utilsc.wxGetLocalTimeMillis
 
 def wxConfigBase_Set(*_args, **_kwargs):
-    val = apply(utilsc.wxConfigBase_Set,_args,_kwargs)
+    val = utilsc.wxConfigBase_Set(*_args,**_kwargs)
     if val: val = wxConfigBasePtr(val)
     return val
 
 def wxConfigBase_Get(*_args, **_kwargs):
-    val = apply(utilsc.wxConfigBase_Get,_args,_kwargs)
+    val = utilsc.wxConfigBase_Get(*_args,**_kwargs)
     if val: val = wxConfigBasePtr(val)
     return val
 
 def wxConfigBase_Create(*_args, **_kwargs):
-    val = apply(utilsc.wxConfigBase_Create,_args,_kwargs)
+    val = utilsc.wxConfigBase_Create(*_args,**_kwargs)
     if val: val = wxConfigBasePtr(val)
     return val
 
@@ -858,117 +858,117 @@ wxDateTime_GetAmPmStrings = utilsc.wxDateTime_GetAmPmStrings
 wxDateTime_IsDSTApplicable = utilsc.wxDateTime_IsDSTApplicable
 
 def wxDateTime_GetBeginDST(*_args, **_kwargs):
-    val = apply(utilsc.wxDateTime_GetBeginDST,_args,_kwargs)
+    val = utilsc.wxDateTime_GetBeginDST(*_args,**_kwargs)
     if val: val = wxDateTimePtr(val); val.thisown = 1
     return val
 
 def wxDateTime_GetEndDST(*_args, **_kwargs):
-    val = apply(utilsc.wxDateTime_GetEndDST,_args,_kwargs)
+    val = utilsc.wxDateTime_GetEndDST(*_args,**_kwargs)
     if val: val = wxDateTimePtr(val); val.thisown = 1
     return val
 
 def wxDateTime_Now(*_args, **_kwargs):
-    val = apply(utilsc.wxDateTime_Now,_args,_kwargs)
+    val = utilsc.wxDateTime_Now(*_args,**_kwargs)
     if val: val = wxDateTimePtr(val); val.thisown = 1
     return val
 
 def wxDateTime_UNow(*_args, **_kwargs):
-    val = apply(utilsc.wxDateTime_UNow,_args,_kwargs)
+    val = utilsc.wxDateTime_UNow(*_args,**_kwargs)
     if val: val = wxDateTimePtr(val); val.thisown = 1
     return val
 
 def wxDateTime_Today(*_args, **_kwargs):
-    val = apply(utilsc.wxDateTime_Today,_args,_kwargs)
+    val = utilsc.wxDateTime_Today(*_args,**_kwargs)
     if val: val = wxDateTimePtr(val); val.thisown = 1
     return val
 
 def wxTimeSpan_Seconds(*_args, **_kwargs):
-    val = apply(utilsc.wxTimeSpan_Seconds,_args,_kwargs)
+    val = utilsc.wxTimeSpan_Seconds(*_args,**_kwargs)
     if val: val = wxTimeSpanPtr(val); val.thisown = 1
     return val
 
 def wxTimeSpan_Second(*_args, **_kwargs):
-    val = apply(utilsc.wxTimeSpan_Second,_args,_kwargs)
+    val = utilsc.wxTimeSpan_Second(*_args,**_kwargs)
     if val: val = wxTimeSpanPtr(val); val.thisown = 1
     return val
 
 def wxTimeSpan_Minutes(*_args, **_kwargs):
-    val = apply(utilsc.wxTimeSpan_Minutes,_args,_kwargs)
+    val = utilsc.wxTimeSpan_Minutes(*_args,**_kwargs)
     if val: val = wxTimeSpanPtr(val); val.thisown = 1
     return val
 
 def wxTimeSpan_Minute(*_args, **_kwargs):
-    val = apply(utilsc.wxTimeSpan_Minute,_args,_kwargs)
+    val = utilsc.wxTimeSpan_Minute(*_args,**_kwargs)
     if val: val = wxTimeSpanPtr(val); val.thisown = 1
     return val
 
 def wxTimeSpan_Hours(*_args, **_kwargs):
-    val = apply(utilsc.wxTimeSpan_Hours,_args,_kwargs)
+    val = utilsc.wxTimeSpan_Hours(*_args,**_kwargs)
     if val: val = wxTimeSpanPtr(val); val.thisown = 1
     return val
 
 def wxTimeSpan_Hour(*_args, **_kwargs):
-    val = apply(utilsc.wxTimeSpan_Hour,_args,_kwargs)
+    val = utilsc.wxTimeSpan_Hour(*_args,**_kwargs)
     if val: val = wxTimeSpanPtr(val); val.thisown = 1
     return val
 
 def wxTimeSpan_Days(*_args, **_kwargs):
-    val = apply(utilsc.wxTimeSpan_Days,_args,_kwargs)
+    val = utilsc.wxTimeSpan_Days(*_args,**_kwargs)
     if val: val = wxTimeSpanPtr(val); val.thisown = 1
     return val
 
 def wxTimeSpan_Day(*_args, **_kwargs):
-    val = apply(utilsc.wxTimeSpan_Day,_args,_kwargs)
+    val = utilsc.wxTimeSpan_Day(*_args,**_kwargs)
     if val: val = wxTimeSpanPtr(val); val.thisown = 1
     return val
 
 def wxTimeSpan_Weeks(*_args, **_kwargs):
-    val = apply(utilsc.wxTimeSpan_Weeks,_args,_kwargs)
+    val = utilsc.wxTimeSpan_Weeks(*_args,**_kwargs)
     if val: val = wxTimeSpanPtr(val); val.thisown = 1
     return val
 
 def wxTimeSpan_Week(*_args, **_kwargs):
-    val = apply(utilsc.wxTimeSpan_Week,_args,_kwargs)
+    val = utilsc.wxTimeSpan_Week(*_args,**_kwargs)
     if val: val = wxTimeSpanPtr(val); val.thisown = 1
     return val
 
 def wxDateSpan_Days(*_args, **_kwargs):
-    val = apply(utilsc.wxDateSpan_Days,_args,_kwargs)
+    val = utilsc.wxDateSpan_Days(*_args,**_kwargs)
     if val: val = wxDateSpanPtr(val); val.thisown = 1
     return val
 
 def wxDateSpan_Day(*_args, **_kwargs):
-    val = apply(utilsc.wxDateSpan_Day,_args,_kwargs)
+    val = utilsc.wxDateSpan_Day(*_args,**_kwargs)
     if val: val = wxDateSpanPtr(val); val.thisown = 1
     return val
 
 def wxDateSpan_Weeks(*_args, **_kwargs):
-    val = apply(utilsc.wxDateSpan_Weeks,_args,_kwargs)
+    val = utilsc.wxDateSpan_Weeks(*_args,**_kwargs)
     if val: val = wxDateSpanPtr(val); val.thisown = 1
     return val
 
 def wxDateSpan_Week(*_args, **_kwargs):
-    val = apply(utilsc.wxDateSpan_Week,_args,_kwargs)
+    val = utilsc.wxDateSpan_Week(*_args,**_kwargs)
     if val: val = wxDateSpanPtr(val); val.thisown = 1
     return val
 
 def wxDateSpan_Months(*_args, **_kwargs):
-    val = apply(utilsc.wxDateSpan_Months,_args,_kwargs)
+    val = utilsc.wxDateSpan_Months(*_args,**_kwargs)
     if val: val = wxDateSpanPtr(val); val.thisown = 1
     return val
 
 def wxDateSpan_Month(*_args, **_kwargs):
-    val = apply(utilsc.wxDateSpan_Month,_args,_kwargs)
+    val = utilsc.wxDateSpan_Month(*_args,**_kwargs)
     if val: val = wxDateSpanPtr(val); val.thisown = 1
     return val
 
 def wxDateSpan_Years(*_args, **_kwargs):
-    val = apply(utilsc.wxDateSpan_Years,_args,_kwargs)
+    val = utilsc.wxDateSpan_Years(*_args,**_kwargs)
     if val: val = wxDateSpanPtr(val); val.thisown = 1
     return val
 
 def wxDateSpan_Year(*_args, **_kwargs):
-    val = apply(utilsc.wxDateSpan_Year,_args,_kwargs)
+    val = utilsc.wxDateSpan_Year(*_args,**_kwargs)
     if val: val = wxDateSpanPtr(val); val.thisown = 1
     return val
 
diff --git a/wxPython/src/gtk/windows.cpp b/wxPython/src/gtk/windows.cpp
index be97b5e797..4ce68f2e12 100644
--- a/wxPython/src/gtk/windows.cpp
+++ b/wxPython/src/gtk/windows.cpp
@@ -6640,6 +6640,65 @@ static PyObject *_wrap_wxWindow_HasCapture(PyObject *self, PyObject *args, PyObj
     return _resultobj;
 }
 
+#define wxWindow_SetThemeEnabled(_swigobj,_swigarg0)  (_swigobj->SetThemeEnabled(_swigarg0))
+static PyObject *_wrap_wxWindow_SetThemeEnabled(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxWindow * _arg0;
+    bool  _arg1;
+    PyObject * _argo0 = 0;
+    int tempbool1;
+    char *_kwnames[] = { "self","enable", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"Oi:wxWindow_SetThemeEnabled",_kwnames,&_argo0,&tempbool1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxWindow_SetThemeEnabled. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+    _arg1 = (bool ) tempbool1;
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxWindow_SetThemeEnabled(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
+#define wxWindow_GetThemeEnabled(_swigobj)  (_swigobj->GetThemeEnabled())
+static PyObject *_wrap_wxWindow_GetThemeEnabled(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxWindow * _arg0;
+    PyObject * _argo0 = 0;
+    char *_kwnames[] = { "self", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxWindow_GetThemeEnabled",_kwnames,&_argo0)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxWindow_GetThemeEnabled. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxWindow_GetThemeEnabled(_arg0);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+    return _resultobj;
+}
+
 static void *SwigwxPanelTowxWindow(void *ptr) {
     wxPanel *src;
     wxWindow *dest;
@@ -10638,6 +10697,43 @@ static PyObject *_wrap_wxMenuItem_GetMenu(PyObject *self, PyObject *args, PyObje
     return _resultobj;
 }
 
+#define wxMenuItem_SetMenu(_swigobj,_swigarg0)  (_swigobj->SetMenu(_swigarg0))
+static PyObject *_wrap_wxMenuItem_SetMenu(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxMenuItem * _arg0;
+    wxMenu * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","menu", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxMenuItem_SetMenu",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxMenuItem_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxMenuItem_SetMenu. Expected _wxMenuItem_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxMenu_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxMenuItem_SetMenu. Expected _wxMenu_p.");
+        return NULL;
+        }
+    }
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    wxMenuItem_SetMenu(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 #define wxMenuItem_SetId(_swigobj,_swigarg0)  (_swigobj->SetId(_swigarg0))
 static PyObject *_wrap_wxMenuItem_SetId(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -11441,6 +11537,7 @@ static PyMethodDef windowscMethods[] = {
 	 { "wxMenuItem_IsSeparator", (PyCFunction) _wrap_wxMenuItem_IsSeparator, METH_VARARGS | METH_KEYWORDS },
 	 { "wxMenuItem_GetId", (PyCFunction) _wrap_wxMenuItem_GetId, METH_VARARGS | METH_KEYWORDS },
 	 { "wxMenuItem_SetId", (PyCFunction) _wrap_wxMenuItem_SetId, METH_VARARGS | METH_KEYWORDS },
+	 { "wxMenuItem_SetMenu", (PyCFunction) _wrap_wxMenuItem_SetMenu, METH_VARARGS | METH_KEYWORDS },
 	 { "wxMenuItem_GetMenu", (PyCFunction) _wrap_wxMenuItem_GetMenu, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxMenuItem", (PyCFunction) _wrap_new_wxMenuItem, METH_VARARGS | METH_KEYWORDS },
 	 { "wxMenuBar_GetHelpString", (PyCFunction) _wrap_wxMenuBar_GetHelpString, METH_VARARGS | METH_KEYWORDS },
@@ -11543,6 +11640,8 @@ static PyMethodDef windowscMethods[] = {
 	 { "wxPanel_Create", (PyCFunction) _wrap_wxPanel_Create, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxPrePanel", (PyCFunction) _wrap_new_wxPrePanel, METH_VARARGS | METH_KEYWORDS },
 	 { "new_wxPanel", (PyCFunction) _wrap_new_wxPanel, METH_VARARGS | METH_KEYWORDS },
+	 { "wxWindow_GetThemeEnabled", (PyCFunction) _wrap_wxWindow_GetThemeEnabled, METH_VARARGS | METH_KEYWORDS },
+	 { "wxWindow_SetThemeEnabled", (PyCFunction) _wrap_wxWindow_SetThemeEnabled, METH_VARARGS | METH_KEYWORDS },
 	 { "wxWindow_HasCapture", (PyCFunction) _wrap_wxWindow_HasCapture, METH_VARARGS | METH_KEYWORDS },
 	 { "wxWindow_GetCapture", (PyCFunction) _wrap_wxWindow_GetCapture, METH_VARARGS | METH_KEYWORDS },
 	 { "wxWindow_ReleaseMouse", (PyCFunction) _wrap_wxWindow_ReleaseMouse, METH_VARARGS | METH_KEYWORDS },
diff --git a/wxPython/src/gtk/windows.py b/wxPython/src/gtk/windows.py
index de800237a3..95570cbe9f 100644
--- a/wxPython/src/gtk/windows.py
+++ b/wxPython/src/gtk/windows.py
@@ -27,43 +27,43 @@ class wxEvtHandlerPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def ProcessEvent(self, *_args, **_kwargs):
-        val = apply(windowsc.wxEvtHandler_ProcessEvent,(self,) + _args, _kwargs)
+        val = windowsc.wxEvtHandler_ProcessEvent(self, *_args, **_kwargs)
         return val
     def AddPendingEvent(self, *_args, **_kwargs):
-        val = apply(windowsc.wxEvtHandler_AddPendingEvent,(self,) + _args, _kwargs)
+        val = windowsc.wxEvtHandler_AddPendingEvent(self, *_args, **_kwargs)
         return val
     def GetEvtHandlerEnabled(self, *_args, **_kwargs):
-        val = apply(windowsc.wxEvtHandler_GetEvtHandlerEnabled,(self,) + _args, _kwargs)
+        val = windowsc.wxEvtHandler_GetEvtHandlerEnabled(self, *_args, **_kwargs)
         return val
     def SetEvtHandlerEnabled(self, *_args, **_kwargs):
-        val = apply(windowsc.wxEvtHandler_SetEvtHandlerEnabled,(self,) + _args, _kwargs)
+        val = windowsc.wxEvtHandler_SetEvtHandlerEnabled(self, *_args, **_kwargs)
         return val
     def GetNextHandler(self, *_args, **_kwargs):
-        val = apply(windowsc.wxEvtHandler_GetNextHandler,(self,) + _args, _kwargs)
+        val = windowsc.wxEvtHandler_GetNextHandler(self, *_args, **_kwargs)
         return val
     def GetPreviousHandler(self, *_args, **_kwargs):
-        val = apply(windowsc.wxEvtHandler_GetPreviousHandler,(self,) + _args, _kwargs)
+        val = windowsc.wxEvtHandler_GetPreviousHandler(self, *_args, **_kwargs)
         return val
     def SetNextHandler(self, *_args, **_kwargs):
-        val = apply(windowsc.wxEvtHandler_SetNextHandler,(self,) + _args, _kwargs)
+        val = windowsc.wxEvtHandler_SetNextHandler(self, *_args, **_kwargs)
         return val
     def SetPreviousHandler(self, *_args, **_kwargs):
-        val = apply(windowsc.wxEvtHandler_SetPreviousHandler,(self,) + _args, _kwargs)
+        val = windowsc.wxEvtHandler_SetPreviousHandler(self, *_args, **_kwargs)
         return val
     def Connect(self, *_args, **_kwargs):
-        val = apply(windowsc.wxEvtHandler_Connect,(self,) + _args, _kwargs)
+        val = windowsc.wxEvtHandler_Connect(self, *_args, **_kwargs)
         return val
     def Disconnect(self, *_args, **_kwargs):
-        val = apply(windowsc.wxEvtHandler_Disconnect,(self,) + _args, _kwargs)
+        val = windowsc.wxEvtHandler_Disconnect(self, *_args, **_kwargs)
         return val
     def _setOORInfo(self, *_args, **_kwargs):
-        val = apply(windowsc.wxEvtHandler__setOORInfo,(self,) + _args, _kwargs)
+        val = windowsc.wxEvtHandler__setOORInfo(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxEvtHandler instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxEvtHandler instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxEvtHandler(wxEvtHandlerPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windowsc.new_wxEvtHandler,_args,_kwargs)
+        self.this = windowsc.new_wxEvtHandler(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -74,19 +74,19 @@ class wxValidatorPtr(wxEvtHandlerPtr):
         self.this = this
         self.thisown = 0
     def Clone(self, *_args, **_kwargs):
-        val = apply(windowsc.wxValidator_Clone,(self,) + _args, _kwargs)
+        val = windowsc.wxValidator_Clone(self, *_args, **_kwargs)
         return val
     def GetWindow(self, *_args, **_kwargs):
-        val = apply(windowsc.wxValidator_GetWindow,(self,) + _args, _kwargs)
+        val = windowsc.wxValidator_GetWindow(self, *_args, **_kwargs)
         return val
     def SetWindow(self, *_args, **_kwargs):
-        val = apply(windowsc.wxValidator_SetWindow,(self,) + _args, _kwargs)
+        val = windowsc.wxValidator_SetWindow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxValidator instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxValidator instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxValidator(wxValidatorPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windowsc.new_wxValidator,_args,_kwargs)
+        self.this = windowsc.new_wxValidator(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -98,13 +98,13 @@ class wxPyValidatorPtr(wxValidatorPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(windowsc.wxPyValidator__setCallbackInfo,(self,) + _args, _kwargs)
+        val = windowsc.wxPyValidator__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyValidator instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyValidator instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyValidator(wxPyValidatorPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windowsc.new_wxPyValidator,_args,_kwargs)
+        self.this = windowsc.new_wxPyValidator(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyValidator, 1)
         self._setOORInfo(self)
@@ -117,551 +117,557 @@ class wxWindowPtr(wxEvtHandlerPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Create,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Create(self, *_args, **_kwargs)
         return val
     def Center(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Center,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Center(self, *_args, **_kwargs)
         return val
     def Centre(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Centre,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Centre(self, *_args, **_kwargs)
         return val
     def CentreOnParent(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_CentreOnParent,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_CentreOnParent(self, *_args, **_kwargs)
         return val
     def CenterOnParent(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_CenterOnParent,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_CenterOnParent(self, *_args, **_kwargs)
         return val
     def CentreOnScreen(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_CentreOnScreen,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_CentreOnScreen(self, *_args, **_kwargs)
         return val
     def CenterOnScreen(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_CenterOnScreen,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_CenterOnScreen(self, *_args, **_kwargs)
         return val
     def Clear(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Clear,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Clear(self, *_args, **_kwargs)
         return val
     def ClientToScreenXY(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_ClientToScreenXY,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_ClientToScreenXY(self, *_args, **_kwargs)
         return val
     def ClientToScreen(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_ClientToScreen,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_ClientToScreen(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def Close(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Close,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Close(self, *_args, **_kwargs)
         return val
     def Destroy(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Destroy,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Destroy(self, *_args, **_kwargs)
         return val
     def DestroyChildren(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_DestroyChildren,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_DestroyChildren(self, *_args, **_kwargs)
         return val
     def IsBeingDeleted(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_IsBeingDeleted,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_IsBeingDeleted(self, *_args, **_kwargs)
         return val
     def Enable(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Enable,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Enable(self, *_args, **_kwargs)
         return val
     def Disable(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Disable,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Disable(self, *_args, **_kwargs)
         return val
     def FindWindowById(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_FindWindowById,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_FindWindowById(self, *_args, **_kwargs)
         return val
     def FindWindowByName(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_FindWindowByName,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_FindWindowByName(self, *_args, **_kwargs)
         return val
     def Fit(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Fit,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Fit(self, *_args, **_kwargs)
         return val
     def FitInside(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_FitInside,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_FitInside(self, *_args, **_kwargs)
         return val
     def GetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetBackgroundColour,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetBackgroundColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetBorder(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetBorder,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetBorder(self, *_args, **_kwargs)
         return val
     def GetChildren(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetChildren,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetChildren(self, *_args, **_kwargs)
         return val
     def GetCharHeight(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetCharHeight,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetCharHeight(self, *_args, **_kwargs)
         return val
     def GetCharWidth(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetCharWidth,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetCharWidth(self, *_args, **_kwargs)
         return val
     def GetClientSizeTuple(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetClientSizeTuple,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetClientSizeTuple(self, *_args, **_kwargs)
         return val
     def GetClientSize(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetClientSize,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetClientSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetClientAreaOrigin(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetClientAreaOrigin,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetClientAreaOrigin(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetClientRect(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetClientRect,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetClientRect(self, *_args, **_kwargs)
         if val: val = wxRectPtr(val) ; val.thisown = 1
         return val
     def GetConstraints(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetConstraints,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetConstraints(self, *_args, **_kwargs)
         if val: val = wxLayoutConstraintsPtr(val) 
         return val
     def GetEventHandler(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetEventHandler,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetEventHandler(self, *_args, **_kwargs)
         return val
     def GetFont(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetFont,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetFont(self, *_args, **_kwargs)
         if val: val = wxFontPtr(val) ; val.thisown = 1
         return val
     def GetForegroundColour(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetForegroundColour,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetForegroundColour(self, *_args, **_kwargs)
         if val: val = wxColourPtr(val) ; val.thisown = 1
         return val
     def GetGrandParent(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetGrandParent,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetGrandParent(self, *_args, **_kwargs)
         return val
     def GetHandle(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetHandle,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetHandle(self, *_args, **_kwargs)
         return val
     def GetId(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetId,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetId(self, *_args, **_kwargs)
         return val
     def GetLabel(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetLabel,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetLabel(self, *_args, **_kwargs)
         return val
     def SetLabel(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetLabel,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetLabel(self, *_args, **_kwargs)
         return val
     def GetName(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetName,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetName(self, *_args, **_kwargs)
         return val
     def GetParent(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetParent,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetParent(self, *_args, **_kwargs)
         return val
     def GetPositionTuple(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetPositionTuple,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetPositionTuple(self, *_args, **_kwargs)
         return val
     def GetPosition(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetPosition,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetPosition(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def GetRect(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetRect,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetRect(self, *_args, **_kwargs)
         if val: val = wxRectPtr(val) ; val.thisown = 1
         return val
     def GetScrollThumb(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetScrollThumb,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetScrollThumb(self, *_args, **_kwargs)
         return val
     def GetScrollPos(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetScrollPos,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetScrollPos(self, *_args, **_kwargs)
         return val
     def GetScrollRange(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetScrollRange,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetScrollRange(self, *_args, **_kwargs)
         return val
     def GetSizeTuple(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetSizeTuple,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetSizeTuple(self, *_args, **_kwargs)
         return val
     def GetSize(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetSize,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetTextExtent(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetTextExtent,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetTextExtent(self, *_args, **_kwargs)
         return val
     def GetFullTextExtent(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetFullTextExtent,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetFullTextExtent(self, *_args, **_kwargs)
         return val
     def GetTitle(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetTitle,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetTitle(self, *_args, **_kwargs)
         return val
     def GetUpdateRegion(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetUpdateRegion,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetUpdateRegion(self, *_args, **_kwargs)
         if val: val = wxRegionPtr(val) ; val.thisown = 1
         return val
     def GetWindowStyleFlag(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetWindowStyleFlag,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetWindowStyleFlag(self, *_args, **_kwargs)
         return val
     def SetWindowStyleFlag(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetWindowStyleFlag,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetWindowStyleFlag(self, *_args, **_kwargs)
         return val
     def SetWindowStyle(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetWindowStyle,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetWindowStyle(self, *_args, **_kwargs)
         return val
     def HasScrollbar(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_HasScrollbar,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_HasScrollbar(self, *_args, **_kwargs)
         return val
     def Hide(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Hide,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Hide(self, *_args, **_kwargs)
         return val
     def HitTest(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_HitTest,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_HitTest(self, *_args, **_kwargs)
         return val
     def InitDialog(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_InitDialog,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_InitDialog(self, *_args, **_kwargs)
         return val
     def IsEnabled(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_IsEnabled,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_IsEnabled(self, *_args, **_kwargs)
         return val
     def IsExposed(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_IsExposed,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_IsExposed(self, *_args, **_kwargs)
         return val
     def IsExposedPoint(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_IsExposedPoint,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_IsExposedPoint(self, *_args, **_kwargs)
         return val
     def IsExposedRect(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_IsExposedRect,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_IsExposedRect(self, *_args, **_kwargs)
         return val
     def IsRetained(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_IsRetained,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_IsRetained(self, *_args, **_kwargs)
         return val
     def IsShown(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_IsShown,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_IsShown(self, *_args, **_kwargs)
         return val
     def IsTopLevel(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_IsTopLevel,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_IsTopLevel(self, *_args, **_kwargs)
         return val
     def Layout(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Layout,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Layout(self, *_args, **_kwargs)
         return val
     def Lower(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Lower,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Lower(self, *_args, **_kwargs)
         return val
     def MakeModal(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_MakeModal,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_MakeModal(self, *_args, **_kwargs)
         return val
     def MoveXY(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_MoveXY,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_MoveXY(self, *_args, **_kwargs)
         return val
     def Move(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Move,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Move(self, *_args, **_kwargs)
         return val
     def PopEventHandler(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_PopEventHandler,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_PopEventHandler(self, *_args, **_kwargs)
         return val
     def PushEventHandler(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_PushEventHandler,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_PushEventHandler(self, *_args, **_kwargs)
         return val
     def RemoveEventHandler(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_RemoveEventHandler,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_RemoveEventHandler(self, *_args, **_kwargs)
         return val
     def PopupMenuXY(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_PopupMenuXY,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_PopupMenuXY(self, *_args, **_kwargs)
         return val
     def PopupMenu(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_PopupMenu,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_PopupMenu(self, *_args, **_kwargs)
         return val
     def Raise(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Raise,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Raise(self, *_args, **_kwargs)
         return val
     def Refresh(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Refresh,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Refresh(self, *_args, **_kwargs)
         return val
     def RefreshRect(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_RefreshRect,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_RefreshRect(self, *_args, **_kwargs)
         return val
     def AddChild(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_AddChild,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_AddChild(self, *_args, **_kwargs)
         return val
     def RemoveChild(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_RemoveChild,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_RemoveChild(self, *_args, **_kwargs)
         return val
     def Reparent(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Reparent,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Reparent(self, *_args, **_kwargs)
         return val
     def ScreenToClientXY(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_ScreenToClientXY,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_ScreenToClientXY(self, *_args, **_kwargs)
         return val
     def ScreenToClient(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_ScreenToClient,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_ScreenToClient(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def ScrollWindow(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_ScrollWindow,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_ScrollWindow(self, *_args, **_kwargs)
         return val
     def SetAutoLayout(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetAutoLayout,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetAutoLayout(self, *_args, **_kwargs)
         return val
     def GetAutoLayout(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetAutoLayout,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetAutoLayout(self, *_args, **_kwargs)
         return val
     def SetBackgroundColour(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetBackgroundColour,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetBackgroundColour(self, *_args, **_kwargs)
         return val
     def SetConstraints(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetConstraints,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetConstraints(self, *_args, **_kwargs)
         return val
     def UnsetConstraints(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_UnsetConstraints,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_UnsetConstraints(self, *_args, **_kwargs)
         return val
     def SetFocus(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetFocus,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetFocus(self, *_args, **_kwargs)
         return val
     def SetFocusFromKbd(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetFocusFromKbd,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetFocusFromKbd(self, *_args, **_kwargs)
         return val
     def AcceptsFocus(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_AcceptsFocus,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_AcceptsFocus(self, *_args, **_kwargs)
         return val
     def SetFont(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetFont,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetFont(self, *_args, **_kwargs)
         return val
     def SetForegroundColour(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetForegroundColour,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetForegroundColour(self, *_args, **_kwargs)
         return val
     def SetId(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetId,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetId(self, *_args, **_kwargs)
         return val
     def SetName(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetName,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetName(self, *_args, **_kwargs)
         return val
     def SetScrollbar(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetScrollbar,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetScrollbar(self, *_args, **_kwargs)
         return val
     def SetScrollPos(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetScrollPos,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetScrollPos(self, *_args, **_kwargs)
         return val
     def SetDimensions(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetDimensions,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetDimensions(self, *_args, **_kwargs)
         return val
     def SetSize(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetSize,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetSize(self, *_args, **_kwargs)
         return val
     def SetPosition(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetPosition,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetPosition(self, *_args, **_kwargs)
         return val
     def SetRect(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetRect,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetRect(self, *_args, **_kwargs)
         return val
     def SetSizeHints(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetSizeHints,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetSizeHints(self, *_args, **_kwargs)
         return val
     def SetVirtualSizeHints(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetVirtualSizeHints,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetVirtualSizeHints(self, *_args, **_kwargs)
         return val
     def SetVirtualSize(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetVirtualSize,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetVirtualSize(self, *_args, **_kwargs)
         return val
     def SetVirtualSizeWH(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetVirtualSizeWH,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetVirtualSizeWH(self, *_args, **_kwargs)
         return val
     def GetVirtualSize(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetVirtualSize,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetVirtualSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetVirtualSizeTuple(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetVirtualSizeTuple,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetVirtualSizeTuple(self, *_args, **_kwargs)
         return val
     def GetBestVirtualSize(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetBestVirtualSize,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetBestVirtualSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def SetClientSizeWH(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetClientSizeWH,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetClientSizeWH(self, *_args, **_kwargs)
         return val
     def SetClientSize(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetClientSize,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetClientSize(self, *_args, **_kwargs)
         return val
     def SetCursor(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetCursor,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetCursor(self, *_args, **_kwargs)
         return val
     def GetCursor(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetCursor,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetCursor(self, *_args, **_kwargs)
         if val: val = wxCursorPtr(val) 
         return val
     def SetEventHandler(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetEventHandler,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetEventHandler(self, *_args, **_kwargs)
         return val
     def SetExtraStyle(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetExtraStyle,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetExtraStyle(self, *_args, **_kwargs)
         return val
     def SetTitle(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetTitle,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetTitle(self, *_args, **_kwargs)
         return val
     def Show(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Show,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Show(self, *_args, **_kwargs)
         return val
     def TransferDataFromWindow(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_TransferDataFromWindow,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_TransferDataFromWindow(self, *_args, **_kwargs)
         return val
     def TransferDataToWindow(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_TransferDataToWindow,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_TransferDataToWindow(self, *_args, **_kwargs)
         return val
     def UpdateWindowUI(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_UpdateWindowUI,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_UpdateWindowUI(self, *_args, **_kwargs)
         return val
     def Validate(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Validate,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Validate(self, *_args, **_kwargs)
         return val
     def ConvertDialogPointToPixels(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_ConvertDialogPointToPixels,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_ConvertDialogPointToPixels(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def ConvertDialogSizeToPixels(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_ConvertDialogSizeToPixels,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_ConvertDialogSizeToPixels(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def DLG_PNT(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_DLG_PNT,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_DLG_PNT(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def DLG_SZE(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_DLG_SZE,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_DLG_SZE(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def ConvertPixelPointToDialog(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_ConvertPixelPointToDialog,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_ConvertPixelPointToDialog(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def ConvertPixelSizeToDialog(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_ConvertPixelSizeToDialog,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_ConvertPixelSizeToDialog(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def SetToolTipString(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetToolTipString,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetToolTipString(self, *_args, **_kwargs)
         return val
     def SetToolTip(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetToolTip,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetToolTip(self, *_args, **_kwargs)
         return val
     def GetToolTip(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetToolTip,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetToolTip(self, *_args, **_kwargs)
         return val
     def SetSizer(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetSizer,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetSizer(self, *_args, **_kwargs)
         return val
     def SetSizerAndFit(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetSizerAndFit,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetSizerAndFit(self, *_args, **_kwargs)
         return val
     def GetSizer(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetSizer,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetSizer(self, *_args, **_kwargs)
         return val
     def SetContainingSizer(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetContainingSizer,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetContainingSizer(self, *_args, **_kwargs)
         return val
     def GetContainingSizer(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetContainingSizer,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetContainingSizer(self, *_args, **_kwargs)
         return val
     def GetValidator(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetValidator,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetValidator(self, *_args, **_kwargs)
         return val
     def SetValidator(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetValidator,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetValidator(self, *_args, **_kwargs)
         return val
     def SetDropTarget(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetDropTarget,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetDropTarget(self, *_args, **_kwargs)
         _args[0].thisown = 0
         return val
     def GetDropTarget(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetDropTarget,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetDropTarget(self, *_args, **_kwargs)
         if val: val = wxDropTargetPtr(val) 
         return val
     def GetBestSize(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetBestSize,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetBestSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetMaxSize(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetMaxSize,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetMaxSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def GetAdjustedBestSize(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetAdjustedBestSize,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetAdjustedBestSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def SetCaret(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetCaret,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetCaret(self, *_args, **_kwargs)
         return val
     def GetCaret(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetCaret,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetCaret(self, *_args, **_kwargs)
         if val: val = wxCaretPtr(val) 
         return val
     def Freeze(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Freeze,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Freeze(self, *_args, **_kwargs)
         return val
     def Thaw(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Thaw,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Thaw(self, *_args, **_kwargs)
         return val
     def Update(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_Update,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_Update(self, *_args, **_kwargs)
         return val
     def GetHelpText(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetHelpText,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetHelpText(self, *_args, **_kwargs)
         return val
     def SetHelpText(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetHelpText,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetHelpText(self, *_args, **_kwargs)
         return val
     def SetHelpTextForId(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetHelpTextForId,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetHelpTextForId(self, *_args, **_kwargs)
         return val
     def ScrollLines(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_ScrollLines,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_ScrollLines(self, *_args, **_kwargs)
         return val
     def ScrollPages(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_ScrollPages,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_ScrollPages(self, *_args, **_kwargs)
         return val
     def LineUp(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_LineUp,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_LineUp(self, *_args, **_kwargs)
         return val
     def LineDown(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_LineDown,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_LineDown(self, *_args, **_kwargs)
         return val
     def PageUp(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_PageUp,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_PageUp(self, *_args, **_kwargs)
         return val
     def PageDown(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_PageDown,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_PageDown(self, *_args, **_kwargs)
         return val
     def SetAcceleratorTable(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetAcceleratorTable,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetAcceleratorTable(self, *_args, **_kwargs)
         return val
     def GetAcceleratorTable(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetAcceleratorTable,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetAcceleratorTable(self, *_args, **_kwargs)
         if val: val = wxAcceleratorTablePtr(val) 
         return val
     def GetDefaultItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_GetDefaultItem,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetDefaultItem(self, *_args, **_kwargs)
         return val
     def SetDefaultItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetDefaultItem,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetDefaultItem(self, *_args, **_kwargs)
         return val
     def SetTmpDefaultItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_SetTmpDefaultItem,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_SetTmpDefaultItem(self, *_args, **_kwargs)
         return val
     def WarpPointer(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_WarpPointer,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_WarpPointer(self, *_args, **_kwargs)
         return val
     def CaptureMouse(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_CaptureMouse,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_CaptureMouse(self, *_args, **_kwargs)
         return val
     def ReleaseMouse(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_ReleaseMouse,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_ReleaseMouse(self, *_args, **_kwargs)
         return val
     def HasCapture(self, *_args, **_kwargs):
-        val = apply(windowsc.wxWindow_HasCapture,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_HasCapture(self, *_args, **_kwargs)
+        return val
+    def SetThemeEnabled(self, *_args, **_kwargs):
+        val = windowsc.wxWindow_SetThemeEnabled(self, *_args, **_kwargs)
+        return val
+    def GetThemeEnabled(self, *_args, **_kwargs):
+        val = windowsc.wxWindow_GetThemeEnabled(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     # replaces broken shadow method
     def GetCaret(self, *_args, **_kwargs):
         from misc2 import wxCaretPtr
-        val = apply(windowsc.wxWindow_GetCaret,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetCaret(self, *_args, **_kwargs)
         if val: val = wxCaretPtr(val)
         return val
     
 class wxWindow(wxWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windowsc.new_wxWindow,_args,_kwargs)
+        self.this = windowsc.new_wxWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreWindow(*_args,**_kwargs):
-    val = wxWindowPtr(apply(windowsc.new_wxPreWindow,_args,_kwargs))
+    val = wxWindowPtr(windowsc.new_wxPreWindow(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -672,23 +678,23 @@ class wxPanelPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(windowsc.wxPanel_Create,(self,) + _args, _kwargs)
+        val = windowsc.wxPanel_Create(self, *_args, **_kwargs)
         return val
     def InitDialog(self, *_args, **_kwargs):
-        val = apply(windowsc.wxPanel_InitDialog,(self,) + _args, _kwargs)
+        val = windowsc.wxPanel_InitDialog(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPanel instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPanel instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPanel(wxPanelPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windowsc.new_wxPanel,_args,_kwargs)
+        self.this = windowsc.new_wxPanel(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPrePanel(*_args,**_kwargs):
-    val = wxPanelPtr(apply(windowsc.new_wxPrePanel,_args,_kwargs))
+    val = wxPanelPtr(windowsc.new_wxPrePanel(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -699,103 +705,103 @@ class wxScrolledWindowPtr(wxPanelPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_Create,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_Create(self, *_args, **_kwargs)
         return val
     def EnableScrolling(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_EnableScrolling,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_EnableScrolling(self, *_args, **_kwargs)
         return val
     def GetScrollPageSize(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_GetScrollPageSize,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_GetScrollPageSize(self, *_args, **_kwargs)
         return val
     def GetScrollPixelsPerUnit(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_GetScrollPixelsPerUnit,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_GetScrollPixelsPerUnit(self, *_args, **_kwargs)
         return val
     def GetTargetWindow(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_GetTargetWindow,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_GetTargetWindow(self, *_args, **_kwargs)
         return val
     def IsRetained(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_IsRetained,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_IsRetained(self, *_args, **_kwargs)
         return val
     def PrepareDC(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_PrepareDC,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_PrepareDC(self, *_args, **_kwargs)
         return val
     def Scroll(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_Scroll,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_Scroll(self, *_args, **_kwargs)
         return val
     def SetScrollbars(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_SetScrollbars,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_SetScrollbars(self, *_args, **_kwargs)
         return val
     def SetScrollPageSize(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_SetScrollPageSize,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_SetScrollPageSize(self, *_args, **_kwargs)
         return val
     def SetTargetWindow(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_SetTargetWindow,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_SetTargetWindow(self, *_args, **_kwargs)
         return val
     def GetViewStart(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_GetViewStart,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_GetViewStart(self, *_args, **_kwargs)
         return val
     def CalcScrolledPosition1(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_CalcScrolledPosition1,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_CalcScrolledPosition1(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def CalcScrolledPosition2(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_CalcScrolledPosition2,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_CalcScrolledPosition2(self, *_args, **_kwargs)
         return val
     def CalcUnscrolledPosition1(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_CalcUnscrolledPosition1,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_CalcUnscrolledPosition1(self, *_args, **_kwargs)
         if val: val = wxPointPtr(val) ; val.thisown = 1
         return val
     def CalcUnscrolledPosition2(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_CalcUnscrolledPosition2,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_CalcUnscrolledPosition2(self, *_args, **_kwargs)
         return val
     def SetScale(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_SetScale,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_SetScale(self, *_args, **_kwargs)
         return val
     def GetScaleX(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_GetScaleX,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_GetScaleX(self, *_args, **_kwargs)
         return val
     def GetScaleY(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_GetScaleY,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_GetScaleY(self, *_args, **_kwargs)
         return val
     def AdjustScrollbars(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_AdjustScrollbars,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_AdjustScrollbars(self, *_args, **_kwargs)
         return val
     def Layout(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_Layout,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_Layout(self, *_args, **_kwargs)
         return val
     def SetScrollRate(self, *_args, **_kwargs):
-        val = apply(windowsc.wxScrolledWindow_SetScrollRate,(self,) + _args, _kwargs)
+        val = windowsc.wxScrolledWindow_SetScrollRate(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxScrolledWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxScrolledWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
     ViewStart = GetViewStart
     
     def CalcScrolledPosition(self, *args):
         if len(args) == 1:
-            return apply(self.CalcScrolledPosition1, args)
+            return self.CalcScrolledPosition1(*args)
         elif len(args) == 2:
-            return apply(self.CalcScrolledPosition2, args)
+            return self.CalcScrolledPosition2(*args)
         else:
             raise TypeError, 'Invalid parameters: only (x,y) or (point) allowed'
 
     def CalcUnscrolledPosition(self, *args):
         if len(args) == 1:
-            return apply(self.CalcUnscrolledPosition1, args)
+            return self.CalcUnscrolledPosition1(*args)
         elif len(args) == 2:
-            return apply(self.CalcUnscrolledPosition2, args)
+            return self.CalcUnscrolledPosition2(*args)
         else:
             raise TypeError, 'Invalid parameters: only (x,y) or (point) allowed'
 
 class wxScrolledWindow(wxScrolledWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windowsc.new_wxScrolledWindow,_args,_kwargs)
+        self.this = windowsc.new_wxScrolledWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreScrolledWindow(*_args,**_kwargs):
-    val = wxScrolledWindowPtr(apply(windowsc.new_wxPreScrolledWindow,_args,_kwargs))
+    val = wxScrolledWindowPtr(windowsc.new_wxPreScrolledWindow(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -806,157 +812,157 @@ class wxMenuPtr(wxEvtHandlerPtr):
         self.this = this
         self.thisown = 0
     def Append(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_Append,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_Append(self, *_args, **_kwargs)
         return val
     def AppendMenu(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_AppendMenu,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_AppendMenu(self, *_args, **_kwargs)
         return val
     def AppendItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_AppendItem,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_AppendItem(self, *_args, **_kwargs)
         return val
     def AppendCheckItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_AppendCheckItem,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_AppendCheckItem(self, *_args, **_kwargs)
         return val
     def AppendRadioItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_AppendRadioItem,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_AppendRadioItem(self, *_args, **_kwargs)
         return val
     def AppendSeparator(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_AppendSeparator,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_AppendSeparator(self, *_args, **_kwargs)
         return val
     def Insert(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_Insert,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_Insert(self, *_args, **_kwargs)
         return val
     def InsertSeparator(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_InsertSeparator,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_InsertSeparator(self, *_args, **_kwargs)
         return val
     def InsertCheckItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_InsertCheckItem,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_InsertCheckItem(self, *_args, **_kwargs)
         return val
     def InsertRadioItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_InsertRadioItem,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_InsertRadioItem(self, *_args, **_kwargs)
         return val
     def InsertMenu(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_InsertMenu,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_InsertMenu(self, *_args, **_kwargs)
         return val
     def InsertItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_InsertItem,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_InsertItem(self, *_args, **_kwargs)
         return val
     def Prepend(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_Prepend,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_Prepend(self, *_args, **_kwargs)
         return val
     def PrependSeparator(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_PrependSeparator,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_PrependSeparator(self, *_args, **_kwargs)
         return val
     def PrependCheckItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_PrependCheckItem,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_PrependCheckItem(self, *_args, **_kwargs)
         return val
     def PrependRadioItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_PrependRadioItem,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_PrependRadioItem(self, *_args, **_kwargs)
         return val
     def PrependMenu(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_PrependMenu,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_PrependMenu(self, *_args, **_kwargs)
         return val
     def PrependItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_PrependItem,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_PrependItem(self, *_args, **_kwargs)
         return val
     def Break(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_Break,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_Break(self, *_args, **_kwargs)
         return val
     def Check(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_Check,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_Check(self, *_args, **_kwargs)
         return val
     def IsChecked(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_IsChecked,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_IsChecked(self, *_args, **_kwargs)
         return val
     def Enable(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_Enable,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_Enable(self, *_args, **_kwargs)
         return val
     def IsEnabled(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_IsEnabled,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_IsEnabled(self, *_args, **_kwargs)
         return val
     def FindItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_FindItem,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_FindItem(self, *_args, **_kwargs)
         return val
     def FindItemById(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_FindItemById,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_FindItemById(self, *_args, **_kwargs)
         return val
     def GetTitle(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_GetTitle,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_GetTitle(self, *_args, **_kwargs)
         return val
     def SetTitle(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_SetTitle,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_SetTitle(self, *_args, **_kwargs)
         return val
     def GetLabel(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_GetLabel,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_GetLabel(self, *_args, **_kwargs)
         return val
     def SetLabel(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_SetLabel,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_SetLabel(self, *_args, **_kwargs)
         return val
     def GetHelpString(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_GetHelpString,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_GetHelpString(self, *_args, **_kwargs)
         return val
     def SetHelpString(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_SetHelpString,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_SetHelpString(self, *_args, **_kwargs)
         return val
     def UpdateUI(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_UpdateUI,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_UpdateUI(self, *_args, **_kwargs)
         return val
     def Delete(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_Delete,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_Delete(self, *_args, **_kwargs)
         return val
     def DeleteItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_DeleteItem,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_DeleteItem(self, *_args, **_kwargs)
         return val
     def Remove(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_Remove,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_Remove(self, *_args, **_kwargs)
         return val
     def RemoveItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_RemoveItem,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_RemoveItem(self, *_args, **_kwargs)
         return val
     def Destroy(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_Destroy,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_Destroy(self, *_args, **_kwargs)
         return val
     def DestroyId(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_DestroyId,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_DestroyId(self, *_args, **_kwargs)
         return val
     def DestroyItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_DestroyItem,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_DestroyItem(self, *_args, **_kwargs)
         return val
     def GetMenuItemCount(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_GetMenuItemCount,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_GetMenuItemCount(self, *_args, **_kwargs)
         return val
     def GetMenuItems(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_GetMenuItems,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_GetMenuItems(self, *_args, **_kwargs)
         return val
     def SetEventHandler(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_SetEventHandler,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_SetEventHandler(self, *_args, **_kwargs)
         return val
     def GetEventHandler(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_GetEventHandler,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_GetEventHandler(self, *_args, **_kwargs)
         return val
     def SetInvokingWindow(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_SetInvokingWindow,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_SetInvokingWindow(self, *_args, **_kwargs)
         return val
     def GetInvokingWindow(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_GetInvokingWindow,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_GetInvokingWindow(self, *_args, **_kwargs)
         return val
     def GetStyle(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_GetStyle,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_GetStyle(self, *_args, **_kwargs)
         return val
     def IsAttached(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_IsAttached,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_IsAttached(self, *_args, **_kwargs)
         return val
     def SetParent(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_SetParent,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_SetParent(self, *_args, **_kwargs)
         return val
     def GetParent(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenu_GetParent,(self,) + _args, _kwargs)
+        val = windowsc.wxMenu_GetParent(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxMenu instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMenu instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMenu(wxMenuPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windowsc.new_wxMenu,_args,_kwargs)
+        self.this = windowsc.new_wxMenu(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -968,73 +974,73 @@ class wxMenuBarPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def Append(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_Append,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_Append(self, *_args, **_kwargs)
         return val
     def Insert(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_Insert,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_Insert(self, *_args, **_kwargs)
         return val
     def GetMenuCount(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_GetMenuCount,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_GetMenuCount(self, *_args, **_kwargs)
         return val
     def GetMenu(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_GetMenu,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_GetMenu(self, *_args, **_kwargs)
         return val
     def Replace(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_Replace,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_Replace(self, *_args, **_kwargs)
         return val
     def Remove(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_Remove,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_Remove(self, *_args, **_kwargs)
         return val
     def EnableTop(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_EnableTop,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_EnableTop(self, *_args, **_kwargs)
         return val
     def IsEnabledTop(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_IsEnabledTop,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_IsEnabledTop(self, *_args, **_kwargs)
         return val
     def SetLabelTop(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_SetLabelTop,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_SetLabelTop(self, *_args, **_kwargs)
         return val
     def GetLabelTop(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_GetLabelTop,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_GetLabelTop(self, *_args, **_kwargs)
         return val
     def FindMenu(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_FindMenu,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_FindMenu(self, *_args, **_kwargs)
         return val
     def FindMenuItem(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_FindMenuItem,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_FindMenuItem(self, *_args, **_kwargs)
         return val
     def FindItemById(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_FindItemById,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_FindItemById(self, *_args, **_kwargs)
         return val
     def Enable(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_Enable,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_Enable(self, *_args, **_kwargs)
         return val
     def Check(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_Check,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_Check(self, *_args, **_kwargs)
         return val
     def IsChecked(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_IsChecked,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_IsChecked(self, *_args, **_kwargs)
         return val
     def IsEnabled(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_IsEnabled,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_IsEnabled(self, *_args, **_kwargs)
         return val
     def SetLabel(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_SetLabel,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_SetLabel(self, *_args, **_kwargs)
         return val
     def GetLabel(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_GetLabel,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_GetLabel(self, *_args, **_kwargs)
         return val
     def SetHelpString(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_SetHelpString,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_SetHelpString(self, *_args, **_kwargs)
         return val
     def GetHelpString(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuBar_GetHelpString,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuBar_GetHelpString(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxMenuBar instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMenuBar instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMenuBar(wxMenuBarPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windowsc.new_wxMenuBar,_args,_kwargs)
+        self.this = windowsc.new_wxMenuBar(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
@@ -1046,84 +1052,87 @@ class wxMenuItemPtr(wxObjectPtr):
         self.this = this
         self.thisown = 0
     def GetMenu(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_GetMenu,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_GetMenu(self, *_args, **_kwargs)
+        return val
+    def SetMenu(self, *_args, **_kwargs):
+        val = windowsc.wxMenuItem_SetMenu(self, *_args, **_kwargs)
         return val
     def SetId(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_SetId,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_SetId(self, *_args, **_kwargs)
         return val
     def GetId(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_GetId,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_GetId(self, *_args, **_kwargs)
         return val
     def IsSeparator(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_IsSeparator,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_IsSeparator(self, *_args, **_kwargs)
         return val
     def SetText(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_SetText,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_SetText(self, *_args, **_kwargs)
         return val
     def GetLabel(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_GetLabel,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_GetLabel(self, *_args, **_kwargs)
         return val
     def GetText(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_GetText,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_GetText(self, *_args, **_kwargs)
         return val
     def GetKind(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_GetKind,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_GetKind(self, *_args, **_kwargs)
         return val
     def SetCheckable(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_SetCheckable,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_SetCheckable(self, *_args, **_kwargs)
         return val
     def IsCheckable(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_IsCheckable,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_IsCheckable(self, *_args, **_kwargs)
         return val
     def IsSubMenu(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_IsSubMenu,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_IsSubMenu(self, *_args, **_kwargs)
         return val
     def SetSubMenu(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_SetSubMenu,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_SetSubMenu(self, *_args, **_kwargs)
         return val
     def GetSubMenu(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_GetSubMenu,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_GetSubMenu(self, *_args, **_kwargs)
         return val
     def Enable(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_Enable,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_Enable(self, *_args, **_kwargs)
         return val
     def IsEnabled(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_IsEnabled,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_IsEnabled(self, *_args, **_kwargs)
         return val
     def Check(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_Check,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_Check(self, *_args, **_kwargs)
         return val
     def IsChecked(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_IsChecked,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_IsChecked(self, *_args, **_kwargs)
         return val
     def Toggle(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_Toggle,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_Toggle(self, *_args, **_kwargs)
         return val
     def SetHelp(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_SetHelp,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_SetHelp(self, *_args, **_kwargs)
         return val
     def GetHelp(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_GetHelp,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_GetHelp(self, *_args, **_kwargs)
         return val
     def GetAccel(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_GetAccel,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_GetAccel(self, *_args, **_kwargs)
         if val: val = wxAcceleratorEntryPtr(val) 
         return val
     def SetAccel(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_SetAccel,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_SetAccel(self, *_args, **_kwargs)
         return val
     def SetBitmap(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_SetBitmap,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_SetBitmap(self, *_args, **_kwargs)
         return val
     def GetBitmap(self, *_args, **_kwargs):
-        val = apply(windowsc.wxMenuItem_GetBitmap,(self,) + _args, _kwargs)
+        val = windowsc.wxMenuItem_GetBitmap(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) 
         return val
     def __repr__(self):
-        return "<C wxMenuItem instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxMenuItem instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxMenuItem(wxMenuItemPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windowsc.new_wxMenuItem,_args,_kwargs)
+        self.this = windowsc.new_wxMenuItem(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -1134,15 +1143,15 @@ class wxMenuItem(wxMenuItemPtr):
 #-------------- FUNCTION WRAPPERS ------------------
 
 def wxFindWindowById(*_args, **_kwargs):
-    val = apply(windowsc.wxFindWindowById,_args,_kwargs)
+    val = windowsc.wxFindWindowById(*_args,**_kwargs)
     return val
 
 def wxFindWindowByName(*_args, **_kwargs):
-    val = apply(windowsc.wxFindWindowByName,_args,_kwargs)
+    val = windowsc.wxFindWindowByName(*_args,**_kwargs)
     return val
 
 def wxFindWindowByLabel(*_args, **_kwargs):
-    val = apply(windowsc.wxFindWindowByLabel,_args,_kwargs)
+    val = windowsc.wxFindWindowByLabel(*_args,**_kwargs)
     return val
 
 wxValidator_IsSilent = windowsc.wxValidator_IsSilent
@@ -1150,7 +1159,7 @@ wxValidator_IsSilent = windowsc.wxValidator_IsSilent
 wxValidator_SetBellOnError = windowsc.wxValidator_SetBellOnError
 
 def wxWindow_FindFocus(*_args, **_kwargs):
-    val = apply(windowsc.wxWindow_FindFocus,_args,_kwargs)
+    val = windowsc.wxWindow_FindFocus(*_args,**_kwargs)
     return val
 
 wxWindow_NewControlId = windowsc.wxWindow_NewControlId
@@ -1160,7 +1169,7 @@ wxWindow_NextControlId = windowsc.wxWindow_NextControlId
 wxWindow_PrevControlId = windowsc.wxWindow_PrevControlId
 
 def wxWindow_GetCapture(*_args, **_kwargs):
-    val = apply(windowsc.wxWindow_GetCapture,_args,_kwargs)
+    val = windowsc.wxWindow_GetCapture(*_args,**_kwargs)
     return val
 
 wxMenuItem_GetLabelFromText = windowsc.wxMenuItem_GetLabelFromText
diff --git a/wxPython/src/gtk/windows2.cpp b/wxPython/src/gtk/windows2.cpp
index 93f68f8e41..54d802fd96 100644
--- a/wxPython/src/gtk/windows2.cpp
+++ b/wxPython/src/gtk/windows2.cpp
@@ -1277,7 +1277,7 @@ static PyObject *_wrap_wxNotebook_InsertPage(PyObject *self, PyObject *args, PyO
     PyObject * _argo2 = 0;
     PyObject * _obj3 = 0;
     int tempbool4 = (int) FALSE;
-    char *_kwnames[] = { "self","page","page","text","select","imageId", NULL };
+    char *_kwnames[] = { "self","index","page","text","select","imageId", NULL };
 
     self = self;
     if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OiOO|ii:wxNotebook_InsertPage",_kwnames,&_argo0,&_arg1,&_argo2,&_obj3,&tempbool4,&_arg5)) 
diff --git a/wxPython/src/gtk/windows2.py b/wxPython/src/gtk/windows2.py
index 9047cab0df..3d88094351 100644
--- a/wxPython/src/gtk/windows2.py
+++ b/wxPython/src/gtk/windows2.py
@@ -20,22 +20,22 @@ class wxNotebookEventPtr(wxNotifyEventPtr):
         self.this = this
         self.thisown = 0
     def GetSelection(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebookEvent_GetSelection,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebookEvent_GetSelection(self, *_args, **_kwargs)
         return val
     def GetOldSelection(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebookEvent_GetOldSelection,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebookEvent_GetOldSelection(self, *_args, **_kwargs)
         return val
     def SetOldSelection(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebookEvent_SetOldSelection,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebookEvent_SetOldSelection(self, *_args, **_kwargs)
         return val
     def SetSelection(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebookEvent_SetSelection,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebookEvent_SetSelection(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxNotebookEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxNotebookEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxNotebookEvent(wxNotebookEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows2c.new_wxNotebookEvent,_args,_kwargs)
+        self.this = windows2c.new_wxNotebookEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -46,84 +46,84 @@ class wxNotebookPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_Create,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_Create(self, *_args, **_kwargs)
         return val
     def GetPageCount(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_GetPageCount,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_GetPageCount(self, *_args, **_kwargs)
         return val
     def SetSelection(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_SetSelection,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_SetSelection(self, *_args, **_kwargs)
         return val
     def AdvanceSelection(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_AdvanceSelection,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_AdvanceSelection(self, *_args, **_kwargs)
         return val
     def GetSelection(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_GetSelection,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_GetSelection(self, *_args, **_kwargs)
         return val
     def SetPageText(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_SetPageText,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_SetPageText(self, *_args, **_kwargs)
         return val
     def GetPageText(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_GetPageText,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_GetPageText(self, *_args, **_kwargs)
         return val
     def SetImageList(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_SetImageList,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_SetImageList(self, *_args, **_kwargs)
         return val
     def AssignImageList(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_AssignImageList,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_AssignImageList(self, *_args, **_kwargs)
         _args[0].thisown = 0
         return val
     def GetImageList(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_GetImageList,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_GetImageList(self, *_args, **_kwargs)
         return val
     def GetPageImage(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_GetPageImage,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_GetPageImage(self, *_args, **_kwargs)
         return val
     def SetPageImage(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_SetPageImage,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_SetPageImage(self, *_args, **_kwargs)
         return val
     def GetRowCount(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_GetRowCount,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_GetRowCount(self, *_args, **_kwargs)
         return val
     def SetPageSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_SetPageSize,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_SetPageSize(self, *_args, **_kwargs)
         return val
     def SetPadding(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_SetPadding,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_SetPadding(self, *_args, **_kwargs)
         return val
     def DeletePage(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_DeletePage,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_DeletePage(self, *_args, **_kwargs)
         return val
     def RemovePage(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_RemovePage,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_RemovePage(self, *_args, **_kwargs)
         return val
     def DeleteAllPages(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_DeleteAllPages,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_DeleteAllPages(self, *_args, **_kwargs)
         return val
     def AddPage(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_AddPage,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_AddPage(self, *_args, **_kwargs)
         return val
     def InsertPage(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_InsertPage,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_InsertPage(self, *_args, **_kwargs)
         return val
     def GetPage(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_GetPage,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_GetPage(self, *_args, **_kwargs)
         return val
     def ResizeChildren(self, *_args, **_kwargs):
-        val = apply(windows2c.wxNotebook_ResizeChildren,(self,) + _args, _kwargs)
+        val = windows2c.wxNotebook_ResizeChildren(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxNotebook instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxNotebook instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxNotebook(wxNotebookPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows2c.new_wxNotebook,_args,_kwargs)
+        self.this = windows2c.new_wxNotebook(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreNotebook(*_args,**_kwargs):
-    val = wxNotebookPtr(apply(windows2c.new_wxPreNotebook,_args,_kwargs))
+    val = wxNotebookPtr(windows2c.new_wxPreNotebook(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -134,25 +134,25 @@ class wxSplitterEventPtr(wxNotifyEventPtr):
         self.this = this
         self.thisown = 0
     def GetSashPosition(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterEvent_GetSashPosition,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterEvent_GetSashPosition(self, *_args, **_kwargs)
         return val
     def GetX(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterEvent_GetX,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterEvent_GetX(self, *_args, **_kwargs)
         return val
     def GetY(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterEvent_GetY,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterEvent_GetY(self, *_args, **_kwargs)
         return val
     def GetWindowBeingRemoved(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterEvent_GetWindowBeingRemoved,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterEvent_GetWindowBeingRemoved(self, *_args, **_kwargs)
         return val
     def SetSashPosition(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterEvent_SetSashPosition,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterEvent_SetSashPosition(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxSplitterEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSplitterEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSplitterEvent(wxSplitterEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows2c.new_wxSplitterEvent,_args,_kwargs)
+        self.this = windows2c.new_wxSplitterEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -163,83 +163,83 @@ class wxSplitterWindowPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_Create,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_Create(self, *_args, **_kwargs)
         return val
     def GetWindow1(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_GetWindow1,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_GetWindow1(self, *_args, **_kwargs)
         return val
     def GetWindow2(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_GetWindow2,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_GetWindow2(self, *_args, **_kwargs)
         return val
     def SetSplitMode(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_SetSplitMode,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_SetSplitMode(self, *_args, **_kwargs)
         return val
     def GetSplitMode(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_GetSplitMode,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_GetSplitMode(self, *_args, **_kwargs)
         return val
     def Initialize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_Initialize,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_Initialize(self, *_args, **_kwargs)
         return val
     def SplitVertically(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_SplitVertically,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_SplitVertically(self, *_args, **_kwargs)
         return val
     def SplitHorizontally(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_SplitHorizontally,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_SplitHorizontally(self, *_args, **_kwargs)
         return val
     def Unsplit(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_Unsplit,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_Unsplit(self, *_args, **_kwargs)
         return val
     def ReplaceWindow(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_ReplaceWindow,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_ReplaceWindow(self, *_args, **_kwargs)
         return val
     def IsSplit(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_IsSplit,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_IsSplit(self, *_args, **_kwargs)
         return val
     def SetSashSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_SetSashSize,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_SetSashSize(self, *_args, **_kwargs)
         return val
     def SetBorderSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_SetBorderSize,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_SetBorderSize(self, *_args, **_kwargs)
         return val
     def GetSashSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_GetSashSize,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_GetSashSize(self, *_args, **_kwargs)
         return val
     def GetBorderSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_GetBorderSize,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_GetBorderSize(self, *_args, **_kwargs)
         return val
     def SetSashPosition(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_SetSashPosition,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_SetSashPosition(self, *_args, **_kwargs)
         return val
     def GetSashPosition(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_GetSashPosition,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_GetSashPosition(self, *_args, **_kwargs)
         return val
     def SetMinimumPaneSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_SetMinimumPaneSize,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_SetMinimumPaneSize(self, *_args, **_kwargs)
         return val
     def GetMinimumPaneSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_GetMinimumPaneSize,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_GetMinimumPaneSize(self, *_args, **_kwargs)
         return val
     def SizeWindows(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_SizeWindows,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_SizeWindows(self, *_args, **_kwargs)
         return val
     def SetNeedUpdating(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_SetNeedUpdating,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_SetNeedUpdating(self, *_args, **_kwargs)
         return val
     def GetNeedUpdating(self, *_args, **_kwargs):
-        val = apply(windows2c.wxSplitterWindow_GetNeedUpdating,(self,) + _args, _kwargs)
+        val = windows2c.wxSplitterWindow_GetNeedUpdating(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxSplitterWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSplitterWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSplitterWindow(wxSplitterWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows2c.new_wxSplitterWindow,_args,_kwargs)
+        self.this = windows2c.new_wxSplitterWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreSplitterWindow(*_args,**_kwargs):
-    val = wxSplitterWindowPtr(apply(windows2c.new_wxPreSplitterWindow,_args,_kwargs))
+    val = wxSplitterWindowPtr(windows2c.new_wxPreSplitterWindow(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -250,70 +250,70 @@ class wxPyWindowPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow__setCallbackInfo,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def base_DoMoveWindow(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_DoMoveWindow,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_DoMoveWindow(self, *_args, **_kwargs)
         return val
     def base_DoSetSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_DoSetSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_DoSetSize(self, *_args, **_kwargs)
         return val
     def base_DoSetClientSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_DoSetClientSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_DoSetClientSize(self, *_args, **_kwargs)
         return val
     def base_DoSetVirtualSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_DoSetVirtualSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_DoSetVirtualSize(self, *_args, **_kwargs)
         return val
     def base_DoGetSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_DoGetSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_DoGetSize(self, *_args, **_kwargs)
         return val
     def base_DoGetClientSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_DoGetClientSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_DoGetClientSize(self, *_args, **_kwargs)
         return val
     def base_DoGetPosition(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_DoGetPosition,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_DoGetPosition(self, *_args, **_kwargs)
         return val
     def base_DoGetVirtualSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_DoGetVirtualSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_DoGetVirtualSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def base_DoGetBestSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_DoGetBestSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_DoGetBestSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def base_InitDialog(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_InitDialog,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_InitDialog(self, *_args, **_kwargs)
         return val
     def base_TransferDataToWindow(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_TransferDataToWindow,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_TransferDataToWindow(self, *_args, **_kwargs)
         return val
     def base_TransferDataFromWindow(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_TransferDataFromWindow,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_TransferDataFromWindow(self, *_args, **_kwargs)
         return val
     def base_Validate(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_Validate,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_Validate(self, *_args, **_kwargs)
         return val
     def base_AcceptsFocus(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_AcceptsFocus,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_AcceptsFocus(self, *_args, **_kwargs)
         return val
     def base_AcceptsFocusFromKeyboard(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_AcceptsFocusFromKeyboard,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_AcceptsFocusFromKeyboard(self, *_args, **_kwargs)
         return val
     def base_GetMaxSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_GetMaxSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_GetMaxSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def base_AddChild(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_AddChild,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_AddChild(self, *_args, **_kwargs)
         return val
     def base_RemoveChild(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyWindow_base_RemoveChild,(self,) + _args, _kwargs)
+        val = windows2c.wxPyWindow_base_RemoveChild(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyWindow(wxPyWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows2c.new_wxPyWindow,_args,_kwargs)
+        self.this = windows2c.new_wxPyWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyWindow)
         self._setOORInfo(self)
@@ -326,70 +326,70 @@ class wxPyControlPtr(wxControlPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl__setCallbackInfo,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def base_DoMoveWindow(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_DoMoveWindow,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_DoMoveWindow(self, *_args, **_kwargs)
         return val
     def base_DoSetSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_DoSetSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_DoSetSize(self, *_args, **_kwargs)
         return val
     def base_DoSetClientSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_DoSetClientSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_DoSetClientSize(self, *_args, **_kwargs)
         return val
     def base_DoSetVirtualSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_DoSetVirtualSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_DoSetVirtualSize(self, *_args, **_kwargs)
         return val
     def base_DoGetSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_DoGetSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_DoGetSize(self, *_args, **_kwargs)
         return val
     def base_DoGetClientSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_DoGetClientSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_DoGetClientSize(self, *_args, **_kwargs)
         return val
     def base_DoGetPosition(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_DoGetPosition,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_DoGetPosition(self, *_args, **_kwargs)
         return val
     def base_DoGetVirtualSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_DoGetVirtualSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_DoGetVirtualSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def base_DoGetBestSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_DoGetBestSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_DoGetBestSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def base_InitDialog(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_InitDialog,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_InitDialog(self, *_args, **_kwargs)
         return val
     def base_TransferDataToWindow(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_TransferDataToWindow,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_TransferDataToWindow(self, *_args, **_kwargs)
         return val
     def base_TransferDataFromWindow(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_TransferDataFromWindow,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_TransferDataFromWindow(self, *_args, **_kwargs)
         return val
     def base_Validate(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_Validate,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_Validate(self, *_args, **_kwargs)
         return val
     def base_AcceptsFocus(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_AcceptsFocus,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_AcceptsFocus(self, *_args, **_kwargs)
         return val
     def base_AcceptsFocusFromKeyboard(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_AcceptsFocusFromKeyboard,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_AcceptsFocusFromKeyboard(self, *_args, **_kwargs)
         return val
     def base_GetMaxSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_GetMaxSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_GetMaxSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def base_AddChild(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_AddChild,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_AddChild(self, *_args, **_kwargs)
         return val
     def base_RemoveChild(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyControl_base_RemoveChild,(self,) + _args, _kwargs)
+        val = windows2c.wxPyControl_base_RemoveChild(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyControl instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyControl instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyControl(wxPyControlPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows2c.new_wxPyControl,_args,_kwargs)
+        self.this = windows2c.new_wxPyControl(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyControl)
         self._setOORInfo(self)
@@ -402,70 +402,70 @@ class wxPyPanelPtr(wxPanelPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel__setCallbackInfo,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def base_DoMoveWindow(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_DoMoveWindow,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_DoMoveWindow(self, *_args, **_kwargs)
         return val
     def base_DoSetSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_DoSetSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_DoSetSize(self, *_args, **_kwargs)
         return val
     def base_DoSetClientSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_DoSetClientSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_DoSetClientSize(self, *_args, **_kwargs)
         return val
     def base_DoSetVirtualSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_DoSetVirtualSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_DoSetVirtualSize(self, *_args, **_kwargs)
         return val
     def base_DoGetSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_DoGetSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_DoGetSize(self, *_args, **_kwargs)
         return val
     def base_DoGetClientSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_DoGetClientSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_DoGetClientSize(self, *_args, **_kwargs)
         return val
     def base_DoGetPosition(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_DoGetPosition,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_DoGetPosition(self, *_args, **_kwargs)
         return val
     def base_DoGetVirtualSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_DoGetVirtualSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_DoGetVirtualSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def base_DoGetBestSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_DoGetBestSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_DoGetBestSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def base_InitDialog(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_InitDialog,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_InitDialog(self, *_args, **_kwargs)
         return val
     def base_TransferDataToWindow(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_TransferDataToWindow,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_TransferDataToWindow(self, *_args, **_kwargs)
         return val
     def base_TransferDataFromWindow(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_TransferDataFromWindow,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_TransferDataFromWindow(self, *_args, **_kwargs)
         return val
     def base_Validate(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_Validate,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_Validate(self, *_args, **_kwargs)
         return val
     def base_AcceptsFocus(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_AcceptsFocus,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_AcceptsFocus(self, *_args, **_kwargs)
         return val
     def base_AcceptsFocusFromKeyboard(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_AcceptsFocusFromKeyboard,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_AcceptsFocusFromKeyboard(self, *_args, **_kwargs)
         return val
     def base_GetMaxSize(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_GetMaxSize,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_GetMaxSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def base_AddChild(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_AddChild,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_AddChild(self, *_args, **_kwargs)
         return val
     def base_RemoveChild(self, *_args, **_kwargs):
-        val = apply(windows2c.wxPyPanel_base_RemoveChild,(self,) + _args, _kwargs)
+        val = windows2c.wxPyPanel_base_RemoveChild(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyPanel instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyPanel instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyPanel(wxPyPanelPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows2c.new_wxPyPanel,_args,_kwargs)
+        self.this = windows2c.new_wxPyPanel(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyPanel)
         self._setOORInfo(self)
diff --git a/wxPython/src/gtk/windows3.cpp b/wxPython/src/gtk/windows3.cpp
index 4fe2badf76..7a5ae89c16 100644
--- a/wxPython/src/gtk/windows3.cpp
+++ b/wxPython/src/gtk/windows3.cpp
@@ -57,10 +57,8 @@ extern PyObject *SWIG_newvarlink(void);
 #include "helpers.h"
 #include <wx/sashwin.h>
 #include <wx/laywin.h>
-#ifndef __WXMAC__
 #include <wx/popupwin.h>
 #include <wx/tipwin.h>
-#endif
 
 
 static PyObject* t_output_helper(PyObject* target, PyObject* o) {
diff --git a/wxPython/src/gtk/windows3.py b/wxPython/src/gtk/windows3.py
index c7a571f564..dd7b26accd 100644
--- a/wxPython/src/gtk/windows3.py
+++ b/wxPython/src/gtk/windows3.py
@@ -28,29 +28,29 @@ class wxSashEventPtr(wxCommandEventPtr):
         self.this = this
         self.thisown = 0
     def SetEdge(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashEvent_SetEdge,(self,) + _args, _kwargs)
+        val = windows3c.wxSashEvent_SetEdge(self, *_args, **_kwargs)
         return val
     def GetEdge(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashEvent_GetEdge,(self,) + _args, _kwargs)
+        val = windows3c.wxSashEvent_GetEdge(self, *_args, **_kwargs)
         return val
     def SetDragRect(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashEvent_SetDragRect,(self,) + _args, _kwargs)
+        val = windows3c.wxSashEvent_SetDragRect(self, *_args, **_kwargs)
         return val
     def GetDragRect(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashEvent_GetDragRect,(self,) + _args, _kwargs)
+        val = windows3c.wxSashEvent_GetDragRect(self, *_args, **_kwargs)
         if val: val = wxRectPtr(val) ; val.thisown = 1
         return val
     def SetDragStatus(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashEvent_SetDragStatus,(self,) + _args, _kwargs)
+        val = windows3c.wxSashEvent_SetDragStatus(self, *_args, **_kwargs)
         return val
     def GetDragStatus(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashEvent_GetDragStatus,(self,) + _args, _kwargs)
+        val = windows3c.wxSashEvent_GetDragStatus(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxSashEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSashEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSashEvent(wxSashEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows3c.new_wxSashEvent,_args,_kwargs)
+        self.this = windows3c.new_wxSashEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -61,71 +61,71 @@ class wxSashWindowPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_Create,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_Create(self, *_args, **_kwargs)
         return val
     def GetSashVisible(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_GetSashVisible,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_GetSashVisible(self, *_args, **_kwargs)
         return val
     def GetDefaultBorderSize(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_GetDefaultBorderSize,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_GetDefaultBorderSize(self, *_args, **_kwargs)
         return val
     def GetEdgeMargin(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_GetEdgeMargin,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_GetEdgeMargin(self, *_args, **_kwargs)
         return val
     def GetExtraBorderSize(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_GetExtraBorderSize,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_GetExtraBorderSize(self, *_args, **_kwargs)
         return val
     def GetMaximumSizeX(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_GetMaximumSizeX,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_GetMaximumSizeX(self, *_args, **_kwargs)
         return val
     def GetMaximumSizeY(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_GetMaximumSizeY,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_GetMaximumSizeY(self, *_args, **_kwargs)
         return val
     def GetMinimumSizeX(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_GetMinimumSizeX,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_GetMinimumSizeX(self, *_args, **_kwargs)
         return val
     def GetMinimumSizeY(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_GetMinimumSizeY,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_GetMinimumSizeY(self, *_args, **_kwargs)
         return val
     def HasBorder(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_HasBorder,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_HasBorder(self, *_args, **_kwargs)
         return val
     def SetDefaultBorderSize(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_SetDefaultBorderSize,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_SetDefaultBorderSize(self, *_args, **_kwargs)
         return val
     def SetExtraBorderSize(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_SetExtraBorderSize,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_SetExtraBorderSize(self, *_args, **_kwargs)
         return val
     def SetMaximumSizeX(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_SetMaximumSizeX,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_SetMaximumSizeX(self, *_args, **_kwargs)
         return val
     def SetMaximumSizeY(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_SetMaximumSizeY,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_SetMaximumSizeY(self, *_args, **_kwargs)
         return val
     def SetMinimumSizeX(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_SetMinimumSizeX,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_SetMinimumSizeX(self, *_args, **_kwargs)
         return val
     def SetMinimumSizeY(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_SetMinimumSizeY,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_SetMinimumSizeY(self, *_args, **_kwargs)
         return val
     def SetSashVisible(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_SetSashVisible,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_SetSashVisible(self, *_args, **_kwargs)
         return val
     def SetSashBorder(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashWindow_SetSashBorder,(self,) + _args, _kwargs)
+        val = windows3c.wxSashWindow_SetSashBorder(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxSashWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSashWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSashWindow(wxSashWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows3c.new_wxSashWindow,_args,_kwargs)
+        self.this = windows3c.new_wxSashWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreSashWindow(*_args,**_kwargs):
-    val = wxSashWindowPtr(apply(windows3c.new_wxPreSashWindow,_args,_kwargs))
+    val = wxSashWindowPtr(windows3c.new_wxPreSashWindow(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -136,41 +136,41 @@ class wxQueryLayoutInfoEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def SetRequestedLength(self, *_args, **_kwargs):
-        val = apply(windows3c.wxQueryLayoutInfoEvent_SetRequestedLength,(self,) + _args, _kwargs)
+        val = windows3c.wxQueryLayoutInfoEvent_SetRequestedLength(self, *_args, **_kwargs)
         return val
     def GetRequestedLength(self, *_args, **_kwargs):
-        val = apply(windows3c.wxQueryLayoutInfoEvent_GetRequestedLength,(self,) + _args, _kwargs)
+        val = windows3c.wxQueryLayoutInfoEvent_GetRequestedLength(self, *_args, **_kwargs)
         return val
     def SetFlags(self, *_args, **_kwargs):
-        val = apply(windows3c.wxQueryLayoutInfoEvent_SetFlags,(self,) + _args, _kwargs)
+        val = windows3c.wxQueryLayoutInfoEvent_SetFlags(self, *_args, **_kwargs)
         return val
     def GetFlags(self, *_args, **_kwargs):
-        val = apply(windows3c.wxQueryLayoutInfoEvent_GetFlags,(self,) + _args, _kwargs)
+        val = windows3c.wxQueryLayoutInfoEvent_GetFlags(self, *_args, **_kwargs)
         return val
     def SetSize(self, *_args, **_kwargs):
-        val = apply(windows3c.wxQueryLayoutInfoEvent_SetSize,(self,) + _args, _kwargs)
+        val = windows3c.wxQueryLayoutInfoEvent_SetSize(self, *_args, **_kwargs)
         return val
     def GetSize(self, *_args, **_kwargs):
-        val = apply(windows3c.wxQueryLayoutInfoEvent_GetSize,(self,) + _args, _kwargs)
+        val = windows3c.wxQueryLayoutInfoEvent_GetSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def SetOrientation(self, *_args, **_kwargs):
-        val = apply(windows3c.wxQueryLayoutInfoEvent_SetOrientation,(self,) + _args, _kwargs)
+        val = windows3c.wxQueryLayoutInfoEvent_SetOrientation(self, *_args, **_kwargs)
         return val
     def GetOrientation(self, *_args, **_kwargs):
-        val = apply(windows3c.wxQueryLayoutInfoEvent_GetOrientation,(self,) + _args, _kwargs)
+        val = windows3c.wxQueryLayoutInfoEvent_GetOrientation(self, *_args, **_kwargs)
         return val
     def SetAlignment(self, *_args, **_kwargs):
-        val = apply(windows3c.wxQueryLayoutInfoEvent_SetAlignment,(self,) + _args, _kwargs)
+        val = windows3c.wxQueryLayoutInfoEvent_SetAlignment(self, *_args, **_kwargs)
         return val
     def GetAlignment(self, *_args, **_kwargs):
-        val = apply(windows3c.wxQueryLayoutInfoEvent_GetAlignment,(self,) + _args, _kwargs)
+        val = windows3c.wxQueryLayoutInfoEvent_GetAlignment(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxQueryLayoutInfoEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxQueryLayoutInfoEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxQueryLayoutInfoEvent(wxQueryLayoutInfoEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows3c.new_wxQueryLayoutInfoEvent,_args,_kwargs)
+        self.this = windows3c.new_wxQueryLayoutInfoEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -181,23 +181,23 @@ class wxCalculateLayoutEventPtr(wxEventPtr):
         self.this = this
         self.thisown = 0
     def SetFlags(self, *_args, **_kwargs):
-        val = apply(windows3c.wxCalculateLayoutEvent_SetFlags,(self,) + _args, _kwargs)
+        val = windows3c.wxCalculateLayoutEvent_SetFlags(self, *_args, **_kwargs)
         return val
     def GetFlags(self, *_args, **_kwargs):
-        val = apply(windows3c.wxCalculateLayoutEvent_GetFlags,(self,) + _args, _kwargs)
+        val = windows3c.wxCalculateLayoutEvent_GetFlags(self, *_args, **_kwargs)
         return val
     def SetRect(self, *_args, **_kwargs):
-        val = apply(windows3c.wxCalculateLayoutEvent_SetRect,(self,) + _args, _kwargs)
+        val = windows3c.wxCalculateLayoutEvent_SetRect(self, *_args, **_kwargs)
         return val
     def GetRect(self, *_args, **_kwargs):
-        val = apply(windows3c.wxCalculateLayoutEvent_GetRect,(self,) + _args, _kwargs)
+        val = windows3c.wxCalculateLayoutEvent_GetRect(self, *_args, **_kwargs)
         if val: val = wxRectPtr(val) ; val.thisown = 1
         return val
     def __repr__(self):
-        return "<C wxCalculateLayoutEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxCalculateLayoutEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxCalculateLayoutEvent(wxCalculateLayoutEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows3c.new_wxCalculateLayoutEvent,_args,_kwargs)
+        self.this = windows3c.new_wxCalculateLayoutEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -208,35 +208,35 @@ class wxSashLayoutWindowPtr(wxSashWindowPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashLayoutWindow_Create,(self,) + _args, _kwargs)
+        val = windows3c.wxSashLayoutWindow_Create(self, *_args, **_kwargs)
         return val
     def GetAlignment(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashLayoutWindow_GetAlignment,(self,) + _args, _kwargs)
+        val = windows3c.wxSashLayoutWindow_GetAlignment(self, *_args, **_kwargs)
         return val
     def GetOrientation(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashLayoutWindow_GetOrientation,(self,) + _args, _kwargs)
+        val = windows3c.wxSashLayoutWindow_GetOrientation(self, *_args, **_kwargs)
         return val
     def SetAlignment(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashLayoutWindow_SetAlignment,(self,) + _args, _kwargs)
+        val = windows3c.wxSashLayoutWindow_SetAlignment(self, *_args, **_kwargs)
         return val
     def SetDefaultSize(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashLayoutWindow_SetDefaultSize,(self,) + _args, _kwargs)
+        val = windows3c.wxSashLayoutWindow_SetDefaultSize(self, *_args, **_kwargs)
         return val
     def SetOrientation(self, *_args, **_kwargs):
-        val = apply(windows3c.wxSashLayoutWindow_SetOrientation,(self,) + _args, _kwargs)
+        val = windows3c.wxSashLayoutWindow_SetOrientation(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxSashLayoutWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxSashLayoutWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxSashLayoutWindow(wxSashLayoutWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows3c.new_wxSashLayoutWindow,_args,_kwargs)
+        self.this = windows3c.new_wxSashLayoutWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreSashLayoutWindow(*_args,**_kwargs):
-    val = wxSashLayoutWindowPtr(apply(windows3c.new_wxPreSashLayoutWindow,_args,_kwargs))
+    val = wxSashLayoutWindowPtr(windows3c.new_wxPreSashLayoutWindow(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -253,19 +253,19 @@ class wxLayoutAlgorithmPtr(wxObjectPtr):
             except:
                 pass
     def LayoutMDIFrame(self, *_args, **_kwargs):
-        val = apply(windows3c.wxLayoutAlgorithm_LayoutMDIFrame,(self,) + _args, _kwargs)
+        val = windows3c.wxLayoutAlgorithm_LayoutMDIFrame(self, *_args, **_kwargs)
         return val
     def LayoutFrame(self, *_args, **_kwargs):
-        val = apply(windows3c.wxLayoutAlgorithm_LayoutFrame,(self,) + _args, _kwargs)
+        val = windows3c.wxLayoutAlgorithm_LayoutFrame(self, *_args, **_kwargs)
         return val
     def LayoutWindow(self, *_args, **_kwargs):
-        val = apply(windows3c.wxLayoutAlgorithm_LayoutWindow,(self,) + _args, _kwargs)
+        val = windows3c.wxLayoutAlgorithm_LayoutWindow(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxLayoutAlgorithm instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxLayoutAlgorithm instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxLayoutAlgorithm(wxLayoutAlgorithmPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows3c.new_wxLayoutAlgorithm,_args,_kwargs)
+        self.this = windows3c.new_wxLayoutAlgorithm(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -276,23 +276,23 @@ class wxPopupWindowPtr(wxWindowPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(windows3c.wxPopupWindow_Create,(self,) + _args, _kwargs)
+        val = windows3c.wxPopupWindow_Create(self, *_args, **_kwargs)
         return val
     def Position(self, *_args, **_kwargs):
-        val = apply(windows3c.wxPopupWindow_Position,(self,) + _args, _kwargs)
+        val = windows3c.wxPopupWindow_Position(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPopupWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPopupWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPopupWindow(wxPopupWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows3c.new_wxPopupWindow,_args,_kwargs)
+        self.this = windows3c.new_wxPopupWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPrePopupWindow(*_args,**_kwargs):
-    val = wxPopupWindowPtr(apply(windows3c.new_wxPrePopupWindow,_args,_kwargs))
+    val = wxPopupWindowPtr(windows3c.new_wxPrePopupWindow(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -303,19 +303,19 @@ class wxPopupTransientWindowPtr(wxPopupWindowPtr):
         self.this = this
         self.thisown = 0
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(windows3c.wxPopupTransientWindow__setCallbackInfo,(self,) + _args, _kwargs)
+        val = windows3c.wxPopupTransientWindow__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def Popup(self, *_args, **_kwargs):
-        val = apply(windows3c.wxPopupTransientWindow_Popup,(self,) + _args, _kwargs)
+        val = windows3c.wxPopupTransientWindow_Popup(self, *_args, **_kwargs)
         return val
     def Dismiss(self, *_args, **_kwargs):
-        val = apply(windows3c.wxPopupTransientWindow_Dismiss,(self,) + _args, _kwargs)
+        val = windows3c.wxPopupTransientWindow_Dismiss(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPopupTransientWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPopupTransientWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPopupTransientWindow(wxPopupTransientWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows3c.new_wxPopupTransientWindow,_args,_kwargs)
+        self.this = windows3c.new_wxPopupTransientWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPopupTransientWindow)
         self._setOORInfo(self)
@@ -323,7 +323,7 @@ class wxPopupTransientWindow(wxPopupTransientWindowPtr):
 
 
 def wxPrePopupTransientWindow(*_args,**_kwargs):
-    val = wxPopupTransientWindowPtr(apply(windows3c.new_wxPrePopupTransientWindow,_args,_kwargs))
+    val = wxPopupTransientWindowPtr(windows3c.new_wxPrePopupTransientWindow(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -334,16 +334,16 @@ class wxTipWindowPtr(wxPopupTransientWindowPtr):
         self.this = this
         self.thisown = 0
     def SetBoundingRect(self, *_args, **_kwargs):
-        val = apply(windows3c.wxTipWindow_SetBoundingRect,(self,) + _args, _kwargs)
+        val = windows3c.wxTipWindow_SetBoundingRect(self, *_args, **_kwargs)
         return val
     def Close(self, *_args, **_kwargs):
-        val = apply(windows3c.wxTipWindow_Close,(self,) + _args, _kwargs)
+        val = windows3c.wxTipWindow_Close(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxTipWindow instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxTipWindow instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxTipWindow(wxTipWindowPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(windows3c.new_wxTipWindow,_args,_kwargs)
+        self.this = windows3c.new_wxTipWindow(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
diff --git a/wxPython/src/gtk/wizard.py b/wxPython/src/gtk/wizard.py
index 845cdb939f..9acf81282b 100644
--- a/wxPython/src/gtk/wizard.py
+++ b/wxPython/src/gtk/wizard.py
@@ -41,16 +41,16 @@ class wxWizardEventPtr(wxNotifyEventPtr):
         self.this = this
         self.thisown = 0
     def GetDirection(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizardEvent_GetDirection,(self,) + _args, _kwargs)
+        val = wizardc.wxWizardEvent_GetDirection(self, *_args, **_kwargs)
         return val
     def GetPage(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizardEvent_GetPage,(self,) + _args, _kwargs)
+        val = wizardc.wxWizardEvent_GetPage(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxWizardEvent instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxWizardEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxWizardEvent(wxWizardEventPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(wizardc.new_wxWizardEvent,_args,_kwargs)
+        self.this = wizardc.new_wxWizardEvent(*_args,**_kwargs)
         self.thisown = 1
 
 
@@ -61,20 +61,20 @@ class wxWizardPagePtr(wxPanelPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizardPage_Create,(self,) + _args, _kwargs)
+        val = wizardc.wxWizardPage_Create(self, *_args, **_kwargs)
         return val
     def GetPrev(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizardPage_GetPrev,(self,) + _args, _kwargs)
+        val = wizardc.wxWizardPage_GetPrev(self, *_args, **_kwargs)
         return val
     def GetNext(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizardPage_GetNext,(self,) + _args, _kwargs)
+        val = wizardc.wxWizardPage_GetNext(self, *_args, **_kwargs)
         return val
     def GetBitmap(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizardPage_GetBitmap,(self,) + _args, _kwargs)
+        val = wizardc.wxWizardPage_GetBitmap(self, *_args, **_kwargs)
         if val: val = wxBitmapPtr(val) ; val.thisown = 1
         return val
     def __repr__(self):
-        return "<C wxWizardPage instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxWizardPage instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxWizardPage(wxWizardPagePtr):
     def __init__(self,this):
         self.this = this
@@ -87,73 +87,73 @@ class wxPyWizardPagePtr(wxWizardPagePtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_Create,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_Create(self, *_args, **_kwargs)
         return val
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage__setCallbackInfo,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def base_DoMoveWindow(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_DoMoveWindow,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_DoMoveWindow(self, *_args, **_kwargs)
         return val
     def base_DoSetSize(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_DoSetSize,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_DoSetSize(self, *_args, **_kwargs)
         return val
     def base_DoSetClientSize(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_DoSetClientSize,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_DoSetClientSize(self, *_args, **_kwargs)
         return val
     def base_DoSetVirtualSize(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_DoSetVirtualSize,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_DoSetVirtualSize(self, *_args, **_kwargs)
         return val
     def base_DoGetSize(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_DoGetSize,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_DoGetSize(self, *_args, **_kwargs)
         return val
     def base_DoGetClientSize(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_DoGetClientSize,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_DoGetClientSize(self, *_args, **_kwargs)
         return val
     def base_DoGetPosition(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_DoGetPosition,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_DoGetPosition(self, *_args, **_kwargs)
         return val
     def base_DoGetVirtualSize(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_DoGetVirtualSize,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_DoGetVirtualSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def base_DoGetBestSize(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_DoGetBestSize,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_DoGetBestSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def base_InitDialog(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_InitDialog,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_InitDialog(self, *_args, **_kwargs)
         return val
     def base_TransferDataToWindow(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_TransferDataToWindow,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_TransferDataToWindow(self, *_args, **_kwargs)
         return val
     def base_TransferDataFromWindow(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_TransferDataFromWindow,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_TransferDataFromWindow(self, *_args, **_kwargs)
         return val
     def base_Validate(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_Validate,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_Validate(self, *_args, **_kwargs)
         return val
     def base_AcceptsFocus(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_AcceptsFocus,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_AcceptsFocus(self, *_args, **_kwargs)
         return val
     def base_AcceptsFocusFromKeyboard(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_AcceptsFocusFromKeyboard,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_AcceptsFocusFromKeyboard(self, *_args, **_kwargs)
         return val
     def base_GetMaxSize(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_GetMaxSize,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_GetMaxSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def base_AddChild(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_AddChild,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_AddChild(self, *_args, **_kwargs)
         return val
     def base_RemoveChild(self, *_args, **_kwargs):
-        val = apply(wizardc.wxPyWizardPage_base_RemoveChild,(self,) + _args, _kwargs)
+        val = wizardc.wxPyWizardPage_base_RemoveChild(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyWizardPage instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyWizardPage instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyWizardPage(wxPyWizardPagePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(wizardc.new_wxPyWizardPage,_args,_kwargs)
+        self.this = wizardc.new_wxPyWizardPage(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyWizardPage)
         self._setOORInfo(self)
@@ -161,7 +161,7 @@ class wxPyWizardPage(wxPyWizardPagePtr):
 
 
 def wxPrePyWizardPage(*_args,**_kwargs):
-    val = wxPyWizardPagePtr(apply(wizardc.new_wxPrePyWizardPage,_args,_kwargs))
+    val = wxPyWizardPagePtr(wizardc.new_wxPrePyWizardPage(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -172,26 +172,26 @@ class wxWizardPageSimplePtr(wxWizardPagePtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizardPageSimple_Create,(self,) + _args, _kwargs)
+        val = wizardc.wxWizardPageSimple_Create(self, *_args, **_kwargs)
         return val
     def SetPrev(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizardPageSimple_SetPrev,(self,) + _args, _kwargs)
+        val = wizardc.wxWizardPageSimple_SetPrev(self, *_args, **_kwargs)
         return val
     def SetNext(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizardPageSimple_SetNext,(self,) + _args, _kwargs)
+        val = wizardc.wxWizardPageSimple_SetNext(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxWizardPageSimple instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxWizardPageSimple instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxWizardPageSimple(wxWizardPageSimplePtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(wizardc.new_wxWizardPageSimple,_args,_kwargs)
+        self.this = wizardc.new_wxWizardPageSimple(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreWizardPageSimple(*_args,**_kwargs):
-    val = wxWizardPageSimplePtr(apply(wizardc.new_wxPreWizardPageSimple,_args,_kwargs))
+    val = wxWizardPageSimplePtr(wizardc.new_wxPreWizardPageSimple(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
@@ -202,51 +202,51 @@ class wxWizardPtr(wxDialogPtr):
         self.this = this
         self.thisown = 0
     def Create(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizard_Create,(self,) + _args, _kwargs)
+        val = wizardc.wxWizard_Create(self, *_args, **_kwargs)
         return val
     def Init(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizard_Init,(self,) + _args, _kwargs)
+        val = wizardc.wxWizard_Init(self, *_args, **_kwargs)
         return val
     def RunWizard(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizard_RunWizard,(self,) + _args, _kwargs)
+        val = wizardc.wxWizard_RunWizard(self, *_args, **_kwargs)
         return val
     def GetCurrentPage(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizard_GetCurrentPage,(self,) + _args, _kwargs)
+        val = wizardc.wxWizard_GetCurrentPage(self, *_args, **_kwargs)
         return val
     def SetPageSize(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizard_SetPageSize,(self,) + _args, _kwargs)
+        val = wizardc.wxWizard_SetPageSize(self, *_args, **_kwargs)
         return val
     def GetPageSize(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizard_GetPageSize,(self,) + _args, _kwargs)
+        val = wizardc.wxWizard_GetPageSize(self, *_args, **_kwargs)
         if val: val = wxSizePtr(val) ; val.thisown = 1
         return val
     def FitToPage(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizard_FitToPage,(self,) + _args, _kwargs)
+        val = wizardc.wxWizard_FitToPage(self, *_args, **_kwargs)
         return val
     def IsRunning(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizard_IsRunning,(self,) + _args, _kwargs)
+        val = wizardc.wxWizard_IsRunning(self, *_args, **_kwargs)
         return val
     def ShowPage(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizard_ShowPage,(self,) + _args, _kwargs)
+        val = wizardc.wxWizard_ShowPage(self, *_args, **_kwargs)
         return val
     def HasNextPage(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizard_HasNextPage,(self,) + _args, _kwargs)
+        val = wizardc.wxWizard_HasNextPage(self, *_args, **_kwargs)
         return val
     def HasPrevPage(self, *_args, **_kwargs):
-        val = apply(wizardc.wxWizard_HasPrevPage,(self,) + _args, _kwargs)
+        val = wizardc.wxWizard_HasPrevPage(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxWizard instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxWizard instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxWizard(wxWizardPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(wizardc.new_wxWizard,_args,_kwargs)
+        self.this = wizardc.new_wxWizard(*_args,**_kwargs)
         self.thisown = 1
         self._setOORInfo(self)
 
 
 
 def wxPreWizard(*_args,**_kwargs):
-    val = wxWizardPtr(apply(wizardc.new_wxPreWizard,_args,_kwargs))
+    val = wxWizardPtr(wizardc.new_wxPreWizard(*_args,**_kwargs))
     val.thisown = 1
     val._setOORInfo(val)
     return val
diff --git a/wxPython/src/gtk/wx.cpp b/wxPython/src/gtk/wx.cpp
index 0497076557..646088cbda 100644
--- a/wxPython/src/gtk/wx.cpp
+++ b/wxPython/src/gtk/wx.cpp
@@ -2242,6 +2242,7 @@ SWIGEXPORT(void) initwxc() {
 	 PyDict_SetItemString(d,"wxFRAME_FLOAT_ON_PARENT", PyInt_FromLong((long) wxFRAME_FLOAT_ON_PARENT));
 	 PyDict_SetItemString(d,"wxFRAME_NO_WINDOW_MENU", PyInt_FromLong((long) wxFRAME_NO_WINDOW_MENU));
 	 PyDict_SetItemString(d,"wxFRAME_NO_TASKBAR", PyInt_FromLong((long) wxFRAME_NO_TASKBAR));
+	 PyDict_SetItemString(d,"wxFRAME_SHAPED", PyInt_FromLong((long) wxFRAME_SHAPED));
 	 PyDict_SetItemString(d,"wxED_CLIENT_MARGIN", PyInt_FromLong((long) wxED_CLIENT_MARGIN));
 	 PyDict_SetItemString(d,"wxED_BUTTONS_BOTTOM", PyInt_FromLong((long) wxED_BUTTONS_BOTTOM));
 	 PyDict_SetItemString(d,"wxED_BUTTONS_RIGHT", PyInt_FromLong((long) wxED_BUTTONS_RIGHT));
@@ -2485,6 +2486,7 @@ SWIGEXPORT(void) initwxc() {
 	 PyDict_SetItemString(d,"wxGROW", PyInt_FromLong((long) wxGROW));
 	 PyDict_SetItemString(d,"wxEXPAND", PyInt_FromLong((long) wxEXPAND));
 	 PyDict_SetItemString(d,"wxNB_FIXEDWIDTH", PyInt_FromLong((long) wxNB_FIXEDWIDTH));
+	 PyDict_SetItemString(d,"wxNB_TOP", PyInt_FromLong((long) wxNB_TOP));
 	 PyDict_SetItemString(d,"wxNB_LEFT", PyInt_FromLong((long) wxNB_LEFT));
 	 PyDict_SetItemString(d,"wxNB_RIGHT", PyInt_FromLong((long) wxNB_RIGHT));
 	 PyDict_SetItemString(d,"wxNB_BOTTOM", PyInt_FromLong((long) wxNB_BOTTOM));
@@ -2956,7 +2958,6 @@ SWIGEXPORT(void) initwxc() {
 	 PyDict_SetItemString(d,"wxEVT_COMMAND_ENTER", PyInt_FromLong((long) wxEVT_COMMAND_ENTER));
 	 PyDict_SetItemString(d,"wxEVT_NAVIGATION_KEY", PyInt_FromLong((long) wxEVT_NAVIGATION_KEY));
 	 PyDict_SetItemString(d,"wxEVT_TIMER", PyInt_FromLong((long) wxEVT_TIMER));
-	 PyDict_SetItemString(d,"__version__", PyString_FromString("0.0.0"));
 	 PyDict_SetItemString(d,"cvar", SWIG_globals);
 	 SWIG_addvarlink(SWIG_globals,"wxDefaultPosition",_wrap_wxDefaultPosition_get, _wrap_wxDefaultPosition_set);
 	 SWIG_addvarlink(SWIG_globals,"wxDefaultSize",_wrap_wxDefaultSize_get, _wrap_wxDefaultSize_set);
@@ -3001,17 +3002,12 @@ SWIGEXPORT(void) initwxc() {
     initfontsc();
 
 
+    // Although these are redfined in __version__ they need to be here too so
+    // that an assert can be done to ensure that the wxPython and the wxWindows
+    // versions match.
     PyDict_SetItemString(d,"wxMAJOR_VERSION", PyInt_FromLong((long)wxMAJOR_VERSION ));
     PyDict_SetItemString(d,"wxMINOR_VERSION", PyInt_FromLong((long)wxMINOR_VERSION ));
-    PyDict_SetItemString(d,"wxRELEASE_NUMBER", PyInt_FromLong((long)wxRELEASE_NUMBER ));
-    PyDict_SetItemString(d,"wxVERSION_NUMBER", PyInt_FromLong((long)wxVERSION_NUMBER ));
-#if wxUSE_UNICODE
-    wxString tempStr(wxVERSION_STRING);
-    PyDict_SetItemString(d,"wxVERSION_STRING", PyUnicode_FromWideChar(tempStr.c_str(), tempStr.Len()));
-#else
-    PyDict_SetItemString(d,"wxVERSION_STRING", PyString_FromString(wxVERSION_STRING));
-#endif
-
+    PyDict_SetItemString(d,"wxRELEASE_VERSION", PyInt_FromLong((long)wxRELEASE_NUMBER ));
 
 {
    int i;
diff --git a/wxPython/src/gtk/wx.py b/wxPython/src/gtk/wx.py
index 0651ed5757..8dcae391b5 100644
--- a/wxPython/src/gtk/wx.py
+++ b/wxPython/src/gtk/wx.py
@@ -53,82 +53,82 @@ class wxPyAppPtr(wxEvtHandlerPtr):
             except:
                 pass
     def _setCallbackInfo(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp__setCallbackInfo,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp__setCallbackInfo(self, *_args, **_kwargs)
         return val
     def GetAppName(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_GetAppName,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_GetAppName(self, *_args, **_kwargs)
         return val
     def GetClassName(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_GetClassName,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_GetClassName(self, *_args, **_kwargs)
         return val
     def GetExitOnFrameDelete(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_GetExitOnFrameDelete,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_GetExitOnFrameDelete(self, *_args, **_kwargs)
         return val
     def GetPrintMode(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_GetPrintMode,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_GetPrintMode(self, *_args, **_kwargs)
         return val
     def GetTopWindow(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_GetTopWindow,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_GetTopWindow(self, *_args, **_kwargs)
         return val
     def GetVendorName(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_GetVendorName,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_GetVendorName(self, *_args, **_kwargs)
         return val
     def GetUseBestVisual(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_GetUseBestVisual,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_GetUseBestVisual(self, *_args, **_kwargs)
         return val
     def Dispatch(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_Dispatch,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_Dispatch(self, *_args, **_kwargs)
         return val
     def ExitMainLoop(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_ExitMainLoop,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_ExitMainLoop(self, *_args, **_kwargs)
         return val
     def Initialized(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_Initialized,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_Initialized(self, *_args, **_kwargs)
         return val
     def MainLoop(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_MainLoop,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_MainLoop(self, *_args, **_kwargs)
         return val
     def Pending(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_Pending,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_Pending(self, *_args, **_kwargs)
         return val
     def ProcessIdle(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_ProcessIdle,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_ProcessIdle(self, *_args, **_kwargs)
         return val
     def Yield(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_Yield,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_Yield(self, *_args, **_kwargs)
         return val
     def SetAppName(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_SetAppName,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_SetAppName(self, *_args, **_kwargs)
         return val
     def SetClassName(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_SetClassName,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_SetClassName(self, *_args, **_kwargs)
         return val
     def SetExitOnFrameDelete(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_SetExitOnFrameDelete,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_SetExitOnFrameDelete(self, *_args, **_kwargs)
         return val
     def SetPrintMode(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_SetPrintMode,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_SetPrintMode(self, *_args, **_kwargs)
         return val
     def SetTopWindow(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_SetTopWindow,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_SetTopWindow(self, *_args, **_kwargs)
         return val
     def SetVendorName(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_SetVendorName,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_SetVendorName(self, *_args, **_kwargs)
         return val
     def SetUseBestVisual(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_SetUseBestVisual,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_SetUseBestVisual(self, *_args, **_kwargs)
         return val
     def GetAssertMode(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_GetAssertMode,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_GetAssertMode(self, *_args, **_kwargs)
         return val
     def SetAssertMode(self, *_args, **_kwargs):
-        val = apply(wxc.wxPyApp_SetAssertMode,(self,) + _args, _kwargs)
+        val = wxc.wxPyApp_SetAssertMode(self, *_args, **_kwargs)
         return val
     def __repr__(self):
-        return "<C wxPyApp instance at %s>" % (self.this,)
+        return "<%s.%s instance; proxy of C++ wxPyApp instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this)
 class wxPyApp(wxPyAppPtr):
     def __init__(self,*_args,**_kwargs):
-        self.this = apply(wxc.new_wxPyApp,_args,_kwargs)
+        self.this = wxc.new_wxPyApp(*_args,**_kwargs)
         self.thisown = 1
         self._setCallbackInfo(self, wxPyApp)
         self._setOORInfo(self)
@@ -159,7 +159,7 @@ _wxStart = wxc._wxStart
 _wxSetDictionary = wxc._wxSetDictionary
 
 def wxGetApp(*_args, **_kwargs):
-    val = apply(wxc.wxGetApp,_args,_kwargs)
+    val = wxc.wxGetApp(*_args,**_kwargs)
     return val
 
 wxApp_CleanUp = wxc.wxApp_CleanUp
@@ -240,6 +240,7 @@ wxFRAME_TOOL_WINDOW = wxc.wxFRAME_TOOL_WINDOW
 wxFRAME_FLOAT_ON_PARENT = wxc.wxFRAME_FLOAT_ON_PARENT
 wxFRAME_NO_WINDOW_MENU = wxc.wxFRAME_NO_WINDOW_MENU
 wxFRAME_NO_TASKBAR = wxc.wxFRAME_NO_TASKBAR
+wxFRAME_SHAPED = wxc.wxFRAME_SHAPED
 wxED_CLIENT_MARGIN = wxc.wxED_CLIENT_MARGIN
 wxED_BUTTONS_BOTTOM = wxc.wxED_BUTTONS_BOTTOM
 wxED_BUTTONS_RIGHT = wxc.wxED_BUTTONS_RIGHT
@@ -483,6 +484,7 @@ wxSHRINK = wxc.wxSHRINK
 wxGROW = wxc.wxGROW
 wxEXPAND = wxc.wxEXPAND
 wxNB_FIXEDWIDTH = wxc.wxNB_FIXEDWIDTH
+wxNB_TOP = wxc.wxNB_TOP
 wxNB_LEFT = wxc.wxNB_LEFT
 wxNB_RIGHT = wxc.wxNB_RIGHT
 wxNB_BOTTOM = wxc.wxNB_BOTTOM
@@ -954,7 +956,6 @@ wxEVT_COMMAND_KILL_FOCUS = wxc.wxEVT_COMMAND_KILL_FOCUS
 wxEVT_COMMAND_ENTER = wxc.wxEVT_COMMAND_ENTER
 wxEVT_NAVIGATION_KEY = wxc.wxEVT_NAVIGATION_KEY
 wxEVT_TIMER = wxc.wxEVT_TIMER
-__version__ = wxc.__version__
 cvar = wxc.cvar
 wxDefaultPosition = wxPointPtr(wxc.cvar.wxDefaultPosition)
 wxDefaultSize = wxSizePtr(wxc.cvar.wxDefaultSize)
@@ -1485,10 +1486,10 @@ def EVT_SASH_DRAGGED_RANGE(win, id1, id2, func):
     win.Connect(id1, id2, wxEVT_SASH_DRAGGED, func)
 
 def EVT_QUERY_LAYOUT_INFO(win, func):
-    win.Connect(-1, -1, wxEVT_EVT_QUERY_LAYOUT_INFO, func)
+    win.Connect(-1, -1, wxEVT_QUERY_LAYOUT_INFO, func)
 
 def EVT_CALCULATE_LAYOUT(win, func):
-    win.Connect(-1, -1, wxEVT_EVT_CALCULATE_LAYOUT, func)
+    win.Connect(-1, -1, wxEVT_CALCULATE_LAYOUT, func)
 
 
 #wxSplitterWindow
@@ -1578,6 +1579,8 @@ wxSystemSettings_GetSystemMetric = wxSystemSettings_GetMetric
 
 # workarounds for bad wxRTTI names
 __wxPyPtrTypeMap['wxGauge95']    = 'wxGauge'
+__wxPyPtrTypeMap['wxSlider95']   = 'wxSlider'
+__wxPyPtrTypeMap['wxStatusBar95']   = 'wxStatusBar'
 
 
 
@@ -1615,6 +1618,8 @@ if wxPlatform == "__WXGTK__":
     except:
         pass
 
+# On MSW add the directory where the wxWindows catalogs were installed
+# to the default catalog path.
 if wxPlatform == "__WXMSW__":
     import os
     localedir = os.path.join(os.path.split(__file__)[0], "locale")
@@ -1622,15 +1627,17 @@ if wxPlatform == "__WXMSW__":
     del os
 
 #----------------------------------------------------------------------
-# wxWindows version numbers.  wxPython version is in __version__.
+# Load version numbers from __version__...  Ensure that major and minor
+# versions are the same for both wxPython and wxWindows.
 
-wxMAJOR_VERSION   = wxc.wxMAJOR_VERSION
-wxMINOR_VERSION   = wxc.wxMINOR_VERSION
-wxRELEASE_NUMBER  = wxc.wxRELEASE_NUMBER
-wxVERSION_STRING  = wxc.wxVERSION_STRING
-wxVERSION_NUMBER  = wxc.wxVERSION_NUMBER
+from wxPython.__version__ import *
+__version__ = wxVERSION_STRING
 
-wxVERSION = (wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_NUMBER)
+assert wxMAJOR_VERSION == wxc.wxMAJOR_VERSION, "wxPython/wxWindows version mismatch"
+assert wxMINOR_VERSION == wxc.wxMINOR_VERSION, "wxPython/wxWindows version mismatch"
+if wxRELEASE_VERSION != wxc.wxRELEASE_VERSION:
+    import warnings
+    warnings.warn("wxPython/wxWindows release number mismatch")
 
 
 #----------------------------------------------------------------------
@@ -1698,9 +1705,9 @@ def wxCallAfter(callable, *args, **kw):
 
     global _wxCallAfterId
     if _wxCallAfterId is None:
-        _wxCallAfterId = wxNewId()
+        _wxCallAfterId = wxNewEventType()
         app.Connect(-1, -1, _wxCallAfterId,
-              lambda event: apply(event.callable, event.args, event.kw) )
+              lambda event: event.callable(*event.args, **event.kw) )
     evt = wxPyEvent()
     evt.SetEventType(_wxCallAfterId)
     evt.callable = callable
@@ -1708,8 +1715,97 @@ def wxCallAfter(callable, *args, **kw):
     evt.kw = kw
     wxPostEvent(app, evt)
 
-# an alias
-wxRunLater = wxCallAfter
+
+#----------------------------------------------------------------------
+
+
+class wxFutureCall:
+    """
+    A convenience class for wxTimer, that calls the given callable
+    object once after the given amount of milliseconds, passing any
+    positional or keyword args.  The return value of the callable is
+    availbale after it has been run with the GetResult method.
+
+    If you don't need to get the return value or restart the timer
+    then there is no need to hold a reference to this object.  It will
+    hold a reference to itself while the timer is running (the timer
+    has a reference to self.Notify) but the cycle will be broken when
+    the timer completes, automatically cleaning up the wxFutureCall
+    object.
+    """
+    def __init__(self, millis, callable, *args, **kwargs):
+        self.millis = millis
+        self.callable = callable
+        self.SetArgs(*args, **kwargs)
+        self.runCount = 0
+        self.hasRun = False
+        self.result = None
+        self.timer = None
+        self.Start()
+
+    def __del__(self):
+        self.Stop()
+
+
+    def Start(self, millis=None):
+        """
+        (Re)start the timer
+        """
+        self.hasRun = False
+        if millis is not None:
+            self.millis = millis
+        self.Stop()
+        self.timer = wxPyTimer(self.Notify)
+        self.timer.Start(self.millis, wxTIMER_ONE_SHOT)
+    Restart = Start
+
+
+    def Stop(self):
+        """
+        Stop and destroy the timer.
+        """
+        if self.timer is not None:
+            self.timer.Stop()
+            self.timer = None
+
+
+    def GetInterval(self):
+        if self.timer is not None:
+            return self.timer.GetInterval()
+        else:
+            return 0
+
+
+    def IsRunning(self):
+        return self.timer is not None and self.timer.IsRunning()
+
+
+    def SetArgs(self, *args, **kwargs):
+        """
+        (Re)set the args passed to the callable object.  This is
+        useful in conjunction with Restart if you want to schedule a
+        new call to the same callable object but with different
+        parameters.
+        """
+        self.args = args
+        self.kwargs = kwargs
+
+    def HasRun(self):
+        return self.hasRun
+
+    def GetResult(self):
+        return self.result
+
+    def Notify(self):
+        """
+        The timer has expired so call the callable.
+        """
+        if self.callable and getattr(self.callable, 'im_self', True):
+            self.runCount += 1
+            self.result = self.callable(*self.args, **self.kwargs)
+        self.hasRun = True
+        wxCallAfter(self.Stop)
+
 
 #----------------------------------------------------------------------
 
@@ -1739,6 +1835,35 @@ class _wxPyDeadObject:
         return 0
 
 
+#----------------------------------------------------------------------
+
+class wxNotebookPage(wxPanel):
+    """
+    There is an old (and apparently unsolvable) bug when placing a
+    window with a nonstandard background colour in a wxNotebook on
+    wxGTK, as the notbooks's background colour would always be used
+    when the window is refreshed.  The solution is to place a panel in
+    the notbook and the coloured window on the panel, sized to cover
+    the panel.  This simple class does that for you, just put an
+    instance of this in the notebook and make your regular window a
+    child of this one and it will handle the resize for you.
+    """
+    def __init__(self, parent, id=-1,
+                 pos=wxDefaultPosition, size=wxDefaultSize,
+                 style=wxTAB_TRAVERSAL, name="panel"):
+        wxPanel.__init__(self, parent, id, pos, size, style, name)
+        self.child = None
+        EVT_SIZE(self, self.OnSize)
+    def OnSize(self, evt):
+        if self.child is None:
+            children = self.GetChildren()
+            if len(children):
+                self.child = children[0]
+        if self.child:
+            self.child.SetPosition((0,0))
+            self.child.SetSize(self.GetSize())
+
+
 #----------------------------------------------------------------------
 #----------------------------------------------------------------------
 
@@ -1793,6 +1918,18 @@ class wxApp(wxPyApp):
 
     def __init__(self, redirect=_defRedirect, filename=None, useBestVisual=False):
         wxPyApp.__init__(self)
+
+        if wx.wxPlatform == "__WXMAC__":
+            try:
+                import MacOS
+                if not MacOS.WMAvailable():
+                    print """This program needs access to the screen. Please run with
+'pythonw', not 'python', and only when you are logged in on the main display
+of your Mac."""
+                    sys.exit(1)
+            except:
+                pass
+
         self.stdioWin = None
         self.saveStdio = (sys.stdout, sys.stderr)
 
@@ -1872,7 +2009,7 @@ class wxPyWidgetTester(wxApp):
         return True
 
     def SetWidget(self, widgetClass, *args):
-        w = apply(widgetClass, (self.frame,) + args)
+        w = widgetClass(self.frame, *args)
         self.frame.Show(True)
 
 #----------------------------------------------------------------------------
diff --git a/wxPython/src/help.i b/wxPython/src/help.i
index 54f431b47c..3d2ad7bc78 100644
--- a/wxPython/src/help.i
+++ b/wxPython/src/help.i
@@ -105,8 +105,8 @@ public:
 
     // Virtuals...
     wxString GetHelp(const wxWindow *window);
-    bool ShowHelp(wxWindowBase *window);
-    void AddHelp(wxWindowBase *window, const wxString& text);
+    bool ShowHelp(wxWindow *window);
+    void AddHelp(wxWindow *window, const wxString& text);
     %name(AddHelpById)void AddHelp(wxWindowID id, const wxString& text);
 
     %addmethods { void Destroy() { delete self; } }
diff --git a/wxPython/src/helpers.cpp b/wxPython/src/helpers.cpp
index c47bd837c5..a425d6cf1f 100644
--- a/wxPython/src/helpers.cpp
+++ b/wxPython/src/helpers.cpp
@@ -386,6 +386,10 @@ void __wxPreStart(PyObject* moduleDict)
     wxPyTMutex = new wxMutex;
 #endif
 
+     // Restore default signal handlers, (prevents crash upon Ctrl-C in the
+     // console that launched a wxPython app...)
+    PyOS_FiniInterrupts();
+
     wxApp::CheckBuildOptions(wxBuildOptions());
 
     wxPyAssertionError = PyErr_NewException("wxPython.wxc.wxPyAssertionError",
@@ -587,21 +591,37 @@ void wxPyOORClientData_dtor(wxPyOORClientData* self) {
         Py_INCREF(deadObjectClass);
     }
 
-    // TODO:  If wxPyDOingCleanup, should we skip the code below?
 
-    // Clear the instance's dictionary, put the name of the old class into the
-    // instance, and then reset the class to be the dead class.
-    if (self->m_obj->ob_refcnt > 1) {  // but only if there is more than one reference
+    // Only if there is more than one reference to the object
+    if ( !wxPyDoingCleanup && self->m_obj->ob_refcnt > 1 ) {
         wxASSERT_MSG(PyInstance_Check(self->m_obj), wxT("m_obj not an instance!?!?!"));
+
+        // Call __del__, if there is one.
+        PyObject* func = PyObject_GetAttrString(self->m_obj, "__del__");
+        if (func) {
+            PyObject* rv = PyObject_CallMethod(self->m_obj, "__del__", NULL);
+            Py_XDECREF(rv);
+            Py_DECREF(func);
+        }
+        if (PyErr_Occurred())
+            PyErr_Clear();      // just ignore it for now
+
+        // Clear the instance's dictionary
         PyInstanceObject* inst = (PyInstanceObject*)self->m_obj;
         PyDict_Clear(inst->in_dict);
+
+        // put the name of the old class into the instance, and then reset the
+        // class to be the dead class.
         PyDict_SetItemString(inst->in_dict, "_name", inst->in_class->cl_name);
         inst->in_class = (PyClassObject*)deadObjectClass;
         Py_INCREF(deadObjectClass);
     }
+
+    // m_obj is DECREF's in the base class dtor...
     wxPyEndBlockThreads();
 }
 
+
 //---------------------------------------------------------------------------
 // Stuff used by OOR to find the right wxPython class type to return and to
 // build it.
@@ -1145,7 +1165,12 @@ size_t wxPyCBInputStream::OnSysWrite(const void *buffer, size_t bufsize) {
 
 off_t wxPyCBInputStream::OnSysSeek(off_t off, wxSeekMode mode) {
     wxPyBeginBlockThreads();
+#ifdef _LARGE_FILES
+    // off_t is a 64-bit value...
+    PyObject* arglist = Py_BuildValue("(Li)", off, mode);
+#else
     PyObject* arglist = Py_BuildValue("(ii)", off, mode);
+#endif
     PyObject* result = PyEval_CallObject(m_seek, arglist);
     Py_DECREF(arglist);
     Py_XDECREF(result);
@@ -1153,6 +1178,7 @@ off_t wxPyCBInputStream::OnSysSeek(off_t off, wxSeekMode mode) {
     return OnSysTell();
 }
 
+
 off_t wxPyCBInputStream::OnSysTell() const {
     wxPyBeginBlockThreads();
     PyObject* arglist = Py_BuildValue("()");
@@ -1160,7 +1186,13 @@ off_t wxPyCBInputStream::OnSysTell() const {
     Py_DECREF(arglist);
     off_t o = 0;
     if (result != NULL) {
+#ifdef _LARGE_FILES
+        if (PyLong_Check(result))
+            o = PyLong_AsLongLong(result);
+        else
+#else
         o = PyInt_AsLong(result);
+#endif
         Py_DECREF(result);
     };
     wxPyEndBlockThreads();
diff --git a/wxPython/src/helpers.h b/wxPython/src/helpers.h
index 4cfd02d5ba..e731fb51df 100644
--- a/wxPython/src/helpers.h
+++ b/wxPython/src/helpers.h
@@ -485,7 +485,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__(CBNAME)                        \
     void CBNAME();                                      \
-    void base_##CBNAME();
+    void base_##CBNAME()
 
 
 #define IMP_PYCALLBACK__(CLASS, PCLASS, CBNAME)                         \
@@ -506,7 +506,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_BOOL_INTINT(CBNAME)                      \
     bool CBNAME(int a, int b);                                  \
-    bool base_##CBNAME(int a, int b);
+    bool base_##CBNAME(int a, int b)
 
 
 #define IMP_PYCALLBACK_BOOL_INTINT(CLASS, PCLASS, CBNAME)               \
@@ -526,9 +526,30 @@ extern wxPyApp *wxPythonApp;
 
 //---------------------------------------------------------------------------
 
+#define DEC_PYCALLBACK_VOID_(CBNAME)                    \
+    void CBNAME();                                      \
+    void base_##CBNAME()
+
+
+#define IMP_PYCALLBACK_VOID_(CLASS, PCLASS, CBNAME)                     \
+    void CLASS::CBNAME() {                                              \
+        bool found;                                                     \
+        wxPyBeginBlockThreads();                                        \
+        if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME)))          \
+            wxPyCBH_callCallback(m_myInst, Py_BuildValue("()"));        \
+        wxPyEndBlockThreads();                                          \
+        if (! found)                                                    \
+            PCLASS::CBNAME();                                           \
+    }                                                                   \
+    void CLASS::base_##CBNAME() {                                       \
+        PCLASS::CBNAME();                                               \
+    }
+
+//---------------------------------------------------------------------------
+
 #define DEC_PYCALLBACK_VOID_INTINT(CBNAME)                      \
     void CBNAME(int a, int b);                                  \
-    void base_##CBNAME(int a, int b);
+    void base_##CBNAME(int a, int b)
 
 
 #define IMP_PYCALLBACK_VOID_INTINT(CLASS, PCLASS, CBNAME)               \
@@ -547,9 +568,30 @@ extern wxPyApp *wxPythonApp;
 
 //---------------------------------------------------------------------------
 
+#define DEC_PYCALLBACK_VOID_INT(CBNAME)                         \
+    void CBNAME(int a);                                         \
+    void base_##CBNAME(int a)
+
+
+#define IMP_PYCALLBACK_VOID_INT(CLASS, PCLASS, CBNAME)                  \
+    void CLASS::CBNAME(int a) {                                         \
+        bool found;                                                     \
+        wxPyBeginBlockThreads();                                        \
+        if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME)))          \
+            wxPyCBH_callCallback(m_myInst, Py_BuildValue("(i)",a));     \
+        wxPyEndBlockThreads();                                          \
+        if (! found)                                                    \
+            PCLASS::CBNAME(a);                                          \
+    }                                                                   \
+    void CLASS::base_##CBNAME(int a) {                                  \
+        PCLASS::CBNAME(a);                                              \
+    }
+
+//---------------------------------------------------------------------------
+
 #define DEC_PYCALLBACK_VOID_INT4(CBNAME)                                \
     void CBNAME(int a, int b, int c, int d);                            \
-    void base_##CBNAME(int a, int b, int c, int d);
+    void base_##CBNAME(int a, int b, int c, int d)
 
 
 #define IMP_PYCALLBACK_VOID_INT4(CLASS, PCLASS, CBNAME)                 \
@@ -569,7 +611,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 #define DEC_PYCALLBACK_VOID_INT5(CBNAME)                                \
     void CBNAME(int a, int b, int c, int d, int e);                     \
-    void base_##CBNAME(int a, int b, int c, int d, int e);
+    void base_##CBNAME(int a, int b, int c, int d, int e)
 
 
 #define IMP_PYCALLBACK_VOID_INT5(CLASS, PCLASS, CBNAME)                 \
@@ -590,7 +632,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_VOID_INTPINTP_const(CBNAME)                              \
     void CBNAME(int* a, int* b) const;                                          \
-    void base_##CBNAME(int* a, int* b) const;
+    void base_##CBNAME(int* a, int* b) const
 
 
 #define IMP_PYCALLBACK_VOID_INTPINTP_const(CLASS, PCLASS, CBNAME)               \
@@ -632,7 +674,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_SIZE_const(CBNAME)                                       \
     wxSize CBNAME() const;                                                      \
-    wxSize base_##CBNAME() const;
+    wxSize base_##CBNAME() const
 
 
 #define IMP_PYCALLBACK_SIZE_const(CLASS, PCLASS, CBNAME)                        \
@@ -674,9 +716,31 @@ extern wxPyApp *wxPythonApp;
 
 //---------------------------------------------------------------------------
 
+#define DEC_PYCALLBACK_BOOL_BOOL(CBNAME)                         \
+    bool CBNAME(bool a);                                         \
+    bool base_##CBNAME(bool a)
+
+
+#define IMP_PYCALLBACK_BOOL_BOOL(CLASS, PCLASS, CBNAME)                 \
+    bool CLASS::CBNAME(bool a) {                                        \
+        bool rval=FALSE, found;                                         \
+        wxPyBeginBlockThreads();                                        \
+        if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME)))          \
+            rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(i)",a));\
+        wxPyEndBlockThreads();                                          \
+        if (! found)                                                    \
+            rval = PCLASS::CBNAME(a);                                   \
+        return rval;                                                    \
+    }                                                                   \
+    bool CLASS::base_##CBNAME(bool a) {                                 \
+        return PCLASS::CBNAME(a);                                       \
+    }
+
+//---------------------------------------------------------------------------
+
 #define DEC_PYCALLBACK_BOOL_INT(CBNAME)                         \
     bool CBNAME(int a);                                         \
-    bool base_##CBNAME(int a);
+    bool base_##CBNAME(int a)
 
 
 #define IMP_PYCALLBACK_BOOL_INT(CLASS, PCLASS, CBNAME)                  \
@@ -697,7 +761,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_BOOL_INT_pure(CBNAME)            \
-    bool CBNAME(int a);
+    bool CBNAME(int a)
 
 
 #define IMP_PYCALLBACK_BOOL_INT_pure(CLASS, PCLASS, CBNAME)             \
@@ -716,7 +780,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__DC(CBNAME)                      \
     void CBNAME(wxDC& a);                               \
-    void base_##CBNAME(wxDC& a);
+    void base_##CBNAME(wxDC& a)
 
 
 #define IMP_PYCALLBACK__DC(CLASS, PCLASS, CBNAME)                       \
@@ -742,7 +806,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__DCBOOL(CBNAME)                  \
     void CBNAME(wxDC& a, bool b);                       \
-    void base_##CBNAME(wxDC& a, bool b);
+    void base_##CBNAME(wxDC& a, bool b)
 
 
 #define IMP_PYCALLBACK__DCBOOL(CLASS, PCLASS, CBNAME)                   \
@@ -766,7 +830,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__DCBOOL(CBNAME)                          \
     void CBNAME(wxDC& a, bool b);                               \
-    void base_##CBNAME(wxDC& a, bool b);
+    void base_##CBNAME(wxDC& a, bool b)
 
 
 #define IMP_PYCALLBACK__DCBOOL(CLASS, PCLASS, CBNAME)                   \
@@ -790,7 +854,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__2DBL(CBNAME)                    \
     void CBNAME(double a, double b);                    \
-    void base_##CBNAME(double a, double b);
+    void base_##CBNAME(double a, double b)
 
 
 #define IMP_PYCALLBACK__2DBL(CLASS, PCLASS, CBNAME)                     \
@@ -811,7 +875,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__2DBL2INT(CBNAME)                        \
     void CBNAME(double a, double b, int c, int d);              \
-    void base_##CBNAME(double a, double b, int c, int d);
+    void base_##CBNAME(double a, double b, int c, int d)
 
 
 #define IMP_PYCALLBACK__2DBL2INT(CLASS, PCLASS, CBNAME)                 \
@@ -833,7 +897,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__DC4DBLBOOL(CBNAME)                                      \
     void CBNAME(wxDC& a, double b, double c, double d, double e, bool f);       \
-    void base_##CBNAME(wxDC& a, double b, double c, double d, double e, bool f);
+    void base_##CBNAME(wxDC& a, double b, double c, double d, double e, bool f)
 
 
 #define IMP_PYCALLBACK__DC4DBLBOOL(CLASS, PCLASS, CBNAME)                               \
@@ -857,7 +921,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_BOOL_DC4DBLBOOL(CBNAME)                                  \
     bool CBNAME(wxDC& a, double b, double c, double d, double e, bool f);       \
-    bool base_##CBNAME(wxDC& a, double b, double c, double d, double e, bool f);
+    bool base_##CBNAME(wxDC& a, double b, double c, double d, double e, bool f)
 
 
 #define IMP_PYCALLBACK_BOOL_DC4DBLBOOL(CLASS, PCLASS, CBNAME)                           \
@@ -883,7 +947,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__BOOL2DBL2INT(CBNAME)                            \
     void CBNAME(bool a, double b, double c, int d, int e);              \
-    void base_##CBNAME(bool a, double b, double c, int d, int e);
+    void base_##CBNAME(bool a, double b, double c, int d, int e)
 
 
 #define IMP_PYCALLBACK__BOOL2DBL2INT(CLASS, PCLASS, CBNAME)                     \
@@ -905,7 +969,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__DC4DBL(CBNAME)                                          \
     void CBNAME(wxDC& a, double b, double c, double d, double e);               \
-    void base_##CBNAME(wxDC& a, double b, double c, double d, double e);
+    void base_##CBNAME(wxDC& a, double b, double c, double d, double e)
 
 
 #define IMP_PYCALLBACK__DC4DBL(CLASS, PCLASS, CBNAME)                           \
@@ -929,7 +993,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__DCBOOL(CBNAME)                  \
     void CBNAME(wxDC& a, bool b);                       \
-    void base_##CBNAME(wxDC& a, bool b);
+    void base_##CBNAME(wxDC& a, bool b)
 
 
 #define IMP_PYCALLBACK__DCBOOL(CLASS, PCLASS, CBNAME)                           \
@@ -953,7 +1017,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__WXCPBOOL2DBL2INT(CBNAME)                                \
     void CBNAME(wxControlPoint* a, bool b, double c, double d, int e, int f);   \
-    void base_##CBNAME(wxControlPoint* a, bool b, double c, double d, int e, int f);
+    void base_##CBNAME(wxControlPoint* a, bool b, double c, double d, int e, int f)
 
 
 #define IMP_PYCALLBACK__WXCPBOOL2DBL2INT(CLASS, PCLASS, CBNAME)                 \
@@ -979,7 +1043,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__WXCP2DBL2INT(CBNAME)                                    \
     void CBNAME(wxControlPoint* a, double b, double c, int d, int e);           \
-    void base_##CBNAME(wxControlPoint* a, double b, double c, int d, int e);
+    void base_##CBNAME(wxControlPoint* a, double b, double c, int d, int e)
 
 
 #define IMP_PYCALLBACK__WXCP2DBL2INT(CLASS, PCLASS, CBNAME)                     \
@@ -1004,7 +1068,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__2DBLINT(CBNAME)                 \
     void CBNAME(double a, double b, int c);             \
-    void base_##CBNAME(double a, double b, int c);
+    void base_##CBNAME(double a, double b, int c)
 
 
 #define IMP_PYCALLBACK__2DBLINT(CLASS, PCLASS, CBNAME)                          \
@@ -1025,7 +1089,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__BOOL2DBLINT(CBNAME)                     \
     void CBNAME(bool a, double b, double c, int d);             \
-    void base_##CBNAME(bool a, double b, double c, int d);
+    void base_##CBNAME(bool a, double b, double c, int d)
 
 
 #define IMP_PYCALLBACK__BOOL2DBLINT(CLASS, PCLASS, CBNAME)                      \
@@ -1047,7 +1111,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__STRING(CBNAME)                  \
     void CBNAME(const wxString& a);                     \
-    void base_##CBNAME(const wxString& a);
+    void base_##CBNAME(const wxString& a)
 
 #define IMP_PYCALLBACK__STRING(CLASS, PCLASS, CBNAME)                           \
     void CLASS::CBNAME(const wxString& a)  {                                    \
@@ -1070,7 +1134,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_BOOL_STRING(CBNAME)              \
     bool CBNAME(const wxString& a);                     \
-    bool base_##CBNAME(const wxString& a);
+    bool base_##CBNAME(const wxString& a)
 
 #define IMP_PYCALLBACK_BOOL_STRING(CLASS, PCLASS, CBNAME)                       \
     bool CLASS::CBNAME(const wxString& a)  {                                    \
@@ -1094,7 +1158,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_BOOL_STRING_pure(CBNAME)         \
-    bool CBNAME(const wxString& a);
+    bool CBNAME(const wxString& a)
 
 #define IMP_PYCALLBACK_BOOL_STRING_pure(CLASS, PCLASS, CBNAME)                  \
     bool CLASS::CBNAME(const wxString& a)  {                                    \
@@ -1112,7 +1176,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_STRING_STRING_pure(CBNAME)                               \
-    wxString CBNAME(const wxString& a);                                         \
+    wxString CBNAME(const wxString& a)
 
 #define IMP_PYCALLBACK_STRING_STRING_pure(CLASS, PCLASS, CBNAME)                \
     wxString CLASS::CBNAME(const wxString& a)  {                                \
@@ -1136,7 +1200,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_STRING_STRING(CBNAME)                                    \
     wxString CBNAME(const wxString& a);                                         \
-    wxString base_##CBNAME(const wxString& a);
+    wxString base_##CBNAME(const wxString& a)
 
 #define IMP_PYCALLBACK_STRING_STRING(CLASS, PCLASS, CBNAME)                     \
     wxString CLASS::CBNAME(const wxString& a)  {                                \
@@ -1162,7 +1226,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_STRING_STRINGINT_pure(CBNAME)                            \
-    wxString CBNAME(const wxString& a,int b);                                   \
+    wxString CBNAME(const wxString& a,int b)
 
 #define IMP_PYCALLBACK_STRING_STRINGINT_pure(CLASS, PCLASS, CBNAME)             \
     wxString CLASS::CBNAME(const wxString& a,int b)  {                          \
@@ -1186,7 +1250,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_BOOL_STRINGSTRING(CBNAME)              \
     bool CBNAME(const wxString& a, const wxString& b);        \
-    bool base_##CBNAME(const wxString& a, const wxString& b);
+    bool base_##CBNAME(const wxString& a, const wxString& b)
 
 #define IMP_PYCALLBACK_BOOL_STRINGSTRING(CLASS, PCLASS, CBNAME)                 \
     bool CLASS::CBNAME(const wxString& a, const wxString& b) {                  \
@@ -1213,7 +1277,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_STRING_(CBNAME)                  \
     wxString CBNAME();                                  \
-    wxString base_##CBNAME();
+    wxString base_##CBNAME()
 
 #define IMP_PYCALLBACK_STRING_(CLASS, PCLASS, CBNAME)                           \
     wxString CLASS::CBNAME() {                                                  \
@@ -1268,7 +1332,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_STRING__pure(CBNAME)             \
-    wxString CBNAME();
+    wxString CBNAME()
 
 #define IMP_PYCALLBACK_STRING__pure(CLASS, PCLASS, CBNAME)                      \
     wxString CLASS::CBNAME() {                                                  \
@@ -1310,7 +1374,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_BOOL_TAG_pure(CBNAME)                  \
-    bool CBNAME(const wxHtmlTag& a);                          \
+    bool CBNAME(const wxHtmlTag& a)
 
 
 #define IMP_PYCALLBACK_BOOL_TAG_pure(CLASS, PCLASS, CBNAME)                     \
@@ -1330,7 +1394,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__CELLINTINT(CBNAME)                                      \
     void CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y);                        \
-    void base_##CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y);
+    void base_##CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y)
 
 #define IMP_PYCALLBACK__CELLINTINT(CLASS, PCLASS, CBNAME)                       \
     void CLASS::CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y) {                \
@@ -1354,7 +1418,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__CELLINTINTME(CBNAME)                                    \
     void CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y, const wxMouseEvent& e); \
-    void base_##CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y, const wxMouseEvent& e);
+    void base_##CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y, const wxMouseEvent& e)
 
 #define IMP_PYCALLBACK__CELLINTINTME(CLASS, PCLASS, CBNAME)                       \
     void CLASS::CBNAME(wxHtmlCell *cell, wxCoord x, wxCoord y, const wxMouseEvent& e) {                \
@@ -1380,7 +1444,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK___pure(CBNAME)                         \
-    void CBNAME();                                            \
+    void CBNAME()
 
 
 #define IMP_PYCALLBACK___pure(CLASS, PCLASS, CBNAME)                            \
@@ -1394,7 +1458,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_wxSize__pure(CBNAME)                         \
-    wxSize CBNAME();                                                \
+    wxSize CBNAME()
 
 
 #define IMP_PYCALLBACK_wxSize__pure(CLASS, PCLASS, CBNAME)                      \
@@ -1433,7 +1497,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_BOOL_WXWIN(CBNAME)                      \
     bool CBNAME(wxWindow* a);                                  \
-    bool base_##CBNAME(wxWindow* a);
+    bool base_##CBNAME(wxWindow* a)
 
 
 #define IMP_PYCALLBACK_BOOL_WXWIN(CLASS, PCLASS, CBNAME)                        \
@@ -1457,9 +1521,37 @@ extern wxPyApp *wxPythonApp;
 
 //---------------------------------------------------------------------------
 
+#define DEC_PYCALLBACK_BOOL_WXWINDC(CBNAME)                             \
+    bool CBNAME(wxWindow* a, wxDC& b);                                  \
+    bool base_##CBNAME(wxWindow* a, wxDC& b)
+
+
+#define IMP_PYCALLBACK_BOOL_WXWINDC(CLASS, PCLASS, CBNAME)                        \
+    bool CLASS::CBNAME(wxWindow* a, wxDC& b) {                                  \
+        bool rval=FALSE;                                                        \
+        bool found;                                                             \
+        wxPyBeginBlockThreads();                                                \
+        if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) {                \
+            PyObject* win = wxPyMake_wxObject(a);                               \
+            PyObject* dc  = wxPyMake_wxObject(&b);                              \
+            rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OO)", win, dc));\
+            Py_DECREF(win);                                                     \
+            Py_DECREF(dc);                                                      \
+        }                                                                       \
+        wxPyEndBlockThreads();                                                  \
+        if (! found)                                                            \
+            rval = PCLASS::CBNAME(a, b);                                        \
+        return rval;                                                            \
+    }                                                                           \
+    bool CLASS::base_##CBNAME(wxWindow* a, wxDC& b) {                           \
+        return PCLASS::CBNAME(a, b);                                            \
+    }
+
+//---------------------------------------------------------------------------
+
 #define DEC_PYCALLBACK_VOID_WXWINBASE(CBNAME)                      \
     void CBNAME(wxWindowBase* a);                                  \
-    void base_##CBNAME(wxWindowBase* a);
+    void base_##CBNAME(wxWindowBase* a)
 
 
 #define IMP_PYCALLBACK_VOID_WXWINBASE(CLASS, PCLASS, CBNAME)                    \
@@ -1483,7 +1575,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_BOOL_(CBNAME)                      \
     bool CBNAME();                                        \
-    bool base_##CBNAME();
+    bool base_##CBNAME()
 
 
 #define IMP_PYCALLBACK_BOOL_(CLASS, PCLASS, CBNAME)                             \
@@ -1506,7 +1598,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_BOOL_const(CBNAME)                       \
     bool CBNAME() const;                                        \
-    bool base_##CBNAME() const;
+    bool base_##CBNAME() const
 
 
 #define IMP_PYCALLBACK_BOOL_const(CLASS, PCLASS, CBNAME)                        \
@@ -1529,7 +1621,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_DR_2WXCDR(CBNAME)                                \
     wxDragResult CBNAME(wxCoord x, wxCoord y, wxDragResult def);        \
-    wxDragResult base_##CBNAME(wxCoord x, wxCoord y, wxDragResult def);
+    wxDragResult base_##CBNAME(wxCoord x, wxCoord y, wxDragResult def)
 
 
 #define IMP_PYCALLBACK_DR_2WXCDR(CLASS, PCLASS, CBNAME)                         \
@@ -1551,7 +1643,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_FSF_FSSTRING_pure(CBNAME)                        \
-    wxFSFile* CBNAME(wxFileSystem& fs, const wxString& location);       \
+    wxFSFile* CBNAME(wxFileSystem& fs, const wxString& location)
 
 #define IMP_PYCALLBACK_FSF_FSSTRING_pure(CLASS, PCLASS, CBNAME)         \
     wxFSFile* CLASS::CBNAME(wxFileSystem& a,const wxString& b) {        \
@@ -1578,7 +1670,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_BOOL_DR(CBNAME)                  \
     bool CBNAME(wxDragResult a);                        \
-    bool base_##CBNAME(wxDragResult a);
+    bool base_##CBNAME(wxDragResult a)
 
 
 #define IMP_PYCALLBACK_BOOL_DR(CLASS, PCLASS, CBNAME)                   \
@@ -1600,7 +1692,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_DR_2WXCDR_pure(CBNAME)   \
-    wxDragResult CBNAME(wxCoord x, wxCoord y, wxDragResult def);
+    wxDragResult CBNAME(wxCoord x, wxCoord y, wxDragResult def)
 
 
 #define IMP_PYCALLBACK_DR_2WXCDR_pure(CLASS, PCLASS, CBNAME)            \
@@ -1616,7 +1708,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_BOOL_INTINTSTR_pure(CBNAME)                      \
-    bool CBNAME(int a, int b, const wxString& c);
+    bool CBNAME(int a, int b, const wxString& c)
 
 #define IMP_PYCALLBACK_BOOL_INTINTSTR_pure(CLASS, PCLASS, CBNAME)       \
     bool CLASS::CBNAME(int a, int b, const wxString& c) {               \
@@ -1635,7 +1727,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_SIZET_(CBNAME)                  \
     size_t CBNAME();                                   \
-    size_t base_##CBNAME();
+    size_t base_##CBNAME()
 
 
 #define IMP_PYCALLBACK_SIZET_(CLASS, PCLASS, CBNAME)                            \
@@ -1658,7 +1750,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_DATAFMT_SIZET(CBNAME)                                    \
     wxDataFormat  CBNAME(size_t a);                                             \
-    wxDataFormat  base_##CBNAME(size_t a);
+    wxDataFormat  base_##CBNAME(size_t a)
 
 
 #define IMP_PYCALLBACK_DATAFMT_SIZET(CLASS, PCLASS, CBNAME)                     \
@@ -1689,7 +1781,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__constany(CBNAME, Type)          \
     void CBNAME(const Type& a);                         \
-    void base_##CBNAME(const Type& a);
+    void base_##CBNAME(const Type& a)
 
 
 #define IMP_PYCALLBACK__constany(CLASS, PCLASS, CBNAME, Type)                   \
@@ -1714,7 +1806,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK__any(CBNAME, Type)          \
     void CBNAME(Type& a);                          \
-    void base_##CBNAME(Type& a);
+    void base_##CBNAME(Type& a)
 
 
 #define IMP_PYCALLBACK__any(CLASS, PCLASS, CBNAME, Type)                        \
@@ -1738,7 +1830,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_bool_any(CBNAME, Type)           \
     bool CBNAME(Type& a);                               \
-    bool base_##CBNAME(Type& a);
+    bool base_##CBNAME(Type& a)
 
 
 #define IMP_PYCALLBACK_bool_any(CLASS, PCLASS, CBNAME, Type)                    \
@@ -1763,7 +1855,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_bool_anypure(CBNAME, Type)                               \
-    bool CBNAME(Type& a);
+    bool CBNAME(Type& a)
 
 
 #define IMP_PYCALLBACK_bool_anypure(CLASS, PCLASS, CBNAME, Type)                \
@@ -1783,7 +1875,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_STRING_LONGLONG(CBNAME)                                  \
     wxString CBNAME(long a, long b) const;                                      \
-    wxString base_##CBNAME(long a, long b)const ;
+    wxString base_##CBNAME(long a, long b) const
 
 #define IMP_PYCALLBACK_STRING_LONGLONG(CLASS, PCLASS, CBNAME)                   \
     wxString CLASS::CBNAME(long a, long b) const {                              \
@@ -1811,7 +1903,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_INT_LONG(CBNAME)                                         \
     int CBNAME(long a) const;                                                   \
-    int base_##CBNAME(long a)const ;
+    int base_##CBNAME(long a) const
 
 
 #define IMP_PYCALLBACK_INT_LONG(CLASS, PCLASS, CBNAME)                          \
@@ -1841,7 +1933,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_LISTATTR_LONG(CBNAME)                                    \
     wxListItemAttr*  CBNAME(long a) const;                                      \
-    wxListItemAttr*  base_##CBNAME(long a);
+    wxListItemAttr*  base_##CBNAME(long a) const
 
 
 #define IMP_PYCALLBACK_LISTATTR_LONG(CLASS, PCLASS, CBNAME)                     \
@@ -1864,7 +1956,7 @@ extern wxPyApp *wxPythonApp;
             rval = PCLASS::CBNAME(a);                                           \
         return rval;                                                            \
     }                                                                           \
-    wxListItemAttr *CLASS::base_##CBNAME(long a) {                              \
+    wxListItemAttr *CLASS::base_##CBNAME(long a) const {                        \
         return PCLASS::CBNAME(a);                                               \
     }
 
@@ -1872,7 +1964,7 @@ extern wxPyApp *wxPythonApp;
 
 #define DEC_PYCALLBACK_BOOL_ME(CBNAME)                                          \
     bool CBNAME(wxMouseEvent& e);                                               \
-    bool base_##CBNAME(wxMouseEvent& e);
+    bool base_##CBNAME(wxMouseEvent& e)
 
 #define IMP_PYCALLBACK_BOOL_ME(CLASS, PCLASS, CBNAME)                           \
     bool CLASS::CBNAME(wxMouseEvent& e) {                                       \
@@ -1902,7 +1994,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_WIZPG__pure(CBNAME)                                      \
-    wxWizardPage* CBNAME() const;
+    wxWizardPage* CBNAME() const
 
 #define IMP_PYCALLBACK_WIZPG__pure(CLASS, PCLASS, CBNAME)                       \
     wxWizardPage* CLASS::CBNAME() const {                                       \
@@ -1923,7 +2015,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_BITMAP__pure(CBNAME)                                     \
-    wxBitmap CBNAME() const;
+    wxBitmap CBNAME() const
 
 #define IMP_PYCALLBACK_BITMAP__pure(CLASS, PCLASS, CBNAME)                      \
     wxBitmap CLASS::CBNAME() const {                                            \
@@ -1946,7 +2038,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_OBJECT__pure(CBNAME)                                     \
-    wxObject* CBNAME();
+    wxObject* CBNAME()
 
 #define IMP_PYCALLBACK_OBJECT__pure(CLASS, PCLASS, CBNAME)                      \
     wxObject* CLASS::CBNAME() {                                                 \
@@ -1967,7 +2059,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_OBJECT_STRING_pure(CBNAME)                               \
-    wxObject* CBNAME(const wxString& a);
+    wxObject* CBNAME(const wxString& a)
 
 #define IMP_PYCALLBACK_OBJECT_STRING_pure(CLASS, PCLASS, CBNAME)                \
     wxObject* CLASS::CBNAME(const wxString& a) {                                \
@@ -1990,7 +2082,7 @@ extern wxPyApp *wxPythonApp;
 //---------------------------------------------------------------------------
 
 #define DEC_PYCALLBACK_BOOL_NODE_pure(CBNAME)                                   \
-    bool CBNAME(wxXmlNode* a);
+    bool CBNAME(wxXmlNode* a)
 
 
 #define IMP_PYCALLBACK_BOOL_NODE_pure(CLASS, PCLASS, CBNAME)                    \
diff --git a/wxPython/src/html.i b/wxPython/src/html.i
index cafe91ec3b..7c83c30edf 100644
--- a/wxPython/src/html.i
+++ b/wxPython/src/html.i
@@ -180,13 +180,14 @@ public:
 
 class wxHtmlWinParser : public wxHtmlParser {
 public:
-    wxHtmlWinParser(wxHtmlWindow *wnd = NULL);
+    wxHtmlWinParser(wxPyHtmlWindow *wnd = NULL);
 
     void SetDC(wxDC *dc);
     wxDC* GetDC();
     int GetCharHeight();
     int GetCharWidth();
-    wxHtmlWindow* GetWindow();
+    wxPyHtmlWindow* GetWindow();
+    // Sets fonts to be used when displaying HTML page. (if size null then default sizes used).
     %addmethods {
         void SetFonts(wxString normal_face, wxString fixed_face, PyObject* sizes=NULL) {
             int* temp = NULL;
@@ -389,7 +390,7 @@ public:
     void DrawInvisible(wxDC& dc, int x, int y);
     const wxHtmlCell* Find(int condition, const void* param);
 
-    bool AdjustPagebreak(int * pagebreak);
+    bool AdjustPagebreak(int* INOUT);
     void SetCanLiveOnPagebreak(bool can);
 
 };
@@ -650,9 +651,8 @@ public:
     // Return value : same as SetPage
     bool LoadPage(const wxString& location);
 
-    // TODO: (accept a string, convert to filename)
     // Loads HTML page from file
-    // bool LoadFile(const wxFileName& filename);
+    bool LoadFile(const wxString& filename);
 
     // Append to current page
     bool AppendToPage(const wxString& source);
@@ -744,6 +744,7 @@ public:
     void SetHtmlText(const wxString& html,
                      const wxString& basepath = wxPyEmptyString,
                      bool isdir = TRUE);
+    // Sets fonts to be used when displaying HTML page. (if size null then default sizes used).
     %addmethods {
         void SetFonts(wxString normal_face, wxString fixed_face, PyObject* sizes=NULL) {
             int* temp = NULL;
@@ -777,6 +778,7 @@ public:
     void SetHtmlFile(const wxString &htmlfile);
     void SetHeader(const wxString& header, int pg = wxPAGE_ALL);
     void SetFooter(const wxString& footer, int pg = wxPAGE_ALL);
+    // Sets fonts to be used when displaying HTML page. (if size null then default sizes used).
     %addmethods {
         void SetFonts(wxString normal_face, wxString fixed_face, PyObject* sizes=NULL) {
             int* temp = NULL;
diff --git a/wxPython/src/image.i b/wxPython/src/image.i
index 8e001f0d11..ee6606d097 100644
--- a/wxPython/src/image.i
+++ b/wxPython/src/image.i
@@ -333,6 +333,8 @@ public:
             return bitmap;
         }
     }
+
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.Ok()"
 };
 
 
diff --git a/wxPython/src/misc2.i b/wxPython/src/misc2.i
index c719f1e09d..5d61038132 100644
--- a/wxPython/src/misc2.i
+++ b/wxPython/src/misc2.i
@@ -379,6 +379,8 @@ public:
     void SetSize(const wxSize& size);
     void Show(int show = TRUE);
     void Hide();
+
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.IsOk()"
 };
 
 %inline %{
@@ -537,7 +539,7 @@ public:
     bool IsOneShot();
     bool IsRunning();
     void SetOwner(wxEvtHandler *owner, int id = -1);
-    void Start(int milliseconds=-1, int oneShot=FALSE);
+    bool Start(int milliseconds=-1, int oneShot=FALSE);
     void Stop();
 };
 
@@ -1048,6 +1050,8 @@ public:
 
     bool SetCapture(wxWindow* win, int pollingFreq = 0);
     bool ReleaseCapture();
+
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.IsOk()"
 };
 
 //----------------------------------------------------------------------
@@ -1081,11 +1085,13 @@ public:
 class wxWave : public wxObject
 {
 public:
-  wxWave(const wxString& fileName, bool isResource = FALSE);
-  ~wxWave();
+    wxWave(const wxString& fileName, bool isResource = FALSE);
+    ~wxWave();
+
+    bool  IsOk() const;
+    bool  Play(bool async = TRUE, bool looped = FALSE) const;
 
-  bool  IsOk() const;
-  bool  Play(bool async = TRUE, bool looped = FALSE) const;
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.IsOk()"
 };
 
 %new wxWave* wxWaveData(const wxString& data);
diff --git a/wxPython/src/my_typemaps.i b/wxPython/src/my_typemaps.i
index 4a3e33a01a..e20d37cba3 100644
--- a/wxPython/src/my_typemaps.i
+++ b/wxPython/src/my_typemaps.i
@@ -436,6 +436,7 @@ $function
 %typemap(python, out) wxTreeCtrl*               { $target = wxPyMake_wxObject($source); }
 %typemap(python, out) wxWindow*                 { $target = wxPyMake_wxObject($source); }
 %typemap(python, out) wxHtmlWindow*             { $target = wxPyMake_wxObject($source); }
+%typemap(python, out) wxPyHtmlWindow*             { $target = wxPyMake_wxObject($source); }
 %typemap(python, out) wxWizardPage*             { $target = wxPyMake_wxObject($source); }
 
 %typemap(python, out) wxSizer*                  { $target = wxPyMake_wxSizer($source); }
diff --git a/wxPython/src/printfw.i b/wxPython/src/printfw.i
index 05293bade1..ea705ac36f 100644
--- a/wxPython/src/printfw.i
+++ b/wxPython/src/printfw.i
@@ -27,8 +27,13 @@
     // Put some wx default wxChar* values into wxStrings.
     static const wxChar* wxPrintoutTitleStr = wxT("Printout");
     DECLARE_DEF_STRING(PrintoutTitleStr);
+    static const wxChar* wxPreviewCanvasNameStr = wxT("previewcanvas");
+    DECLARE_DEF_STRING(PreviewCanvasNameStr);
 
     DECLARE_DEF_STRING(FrameNameStr);
+    DECLARE_DEF_STRING(PanelNameStr);
+    DECLARE_DEF_STRING(DialogNameStr);
+
 %}
 
 //----------------------------------------------------------------------
@@ -50,6 +55,14 @@
 
 //----------------------------------------------------------------------
 
+enum wxPrintMode
+{
+    wxPRINT_MODE_NONE =    0,
+    wxPRINT_MODE_PREVIEW = 1,   // Preview in external application
+    wxPRINT_MODE_FILE =    2,   // Print to file
+    wxPRINT_MODE_PRINTER = 3    // Send to printer
+};
+
 
 
 class wxPrintData : public wxObject {
@@ -107,6 +120,7 @@ public:
     void SetPrinterTranslation(long x, long y);
     void SetPrintMode(wxPrintMode printMode);
 
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.Ok()"
 };
 
 //----------------------------------------------------------------------
@@ -181,6 +195,8 @@ public:
     void SetPaperId(wxPaperSize id);
     void SetPaperSize(const wxSize& size);
     void SetPrintData(const wxPrintData& printData);
+
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.Ok()"
 };
 
 
@@ -202,35 +218,49 @@ public:
     wxPrintDialogData();
     ~wxPrintDialogData();
 
-    void EnableHelp(bool flag);
-    void EnablePageNumbers(bool flag);
+    int GetFromPage() const;
+    int GetToPage() const;
+    int GetMinPage() const;
+    int GetMaxPage() const;
+    int GetNoCopies() const;
+    bool GetAllPages() const;
+    bool GetSelection() const;
+    bool GetCollate() const;
+    bool GetPrintToFile() const;
+    bool GetSetupDialog() const;
+
+    void SetFromPage(int v);
+    void SetToPage(int v);
+    void SetMinPage(int v);
+    void SetMaxPage(int v);
+    void SetNoCopies(int v);
+    void SetAllPages(bool flag);
+    void SetSelection(bool flag);
+    void SetCollate(bool flag);
+    void SetPrintToFile(bool flag);
+    void SetSetupDialog(bool flag);
+
     void EnablePrintToFile(bool flag);
     void EnableSelection(bool flag);
-    bool GetAllPages();
-    bool GetCollate();
-    int GetFromPage();
-    int GetMaxPage();
-    int GetMinPage();
-    int GetNoCopies();
+    void EnablePageNumbers(bool flag);
+    void EnableHelp(bool flag);
+
+    bool GetEnablePrintToFile() const;
+    bool GetEnableSelection() const;
+    bool GetEnablePageNumbers() const;
+    bool GetEnableHelp() const;
+
+    // Is this data OK for showing the print dialog?
+    bool Ok() const;
+
     %addmethods {
         %new wxPrintData* GetPrintData() {
             return new wxPrintData(self->GetPrintData());  // force a copy
         }
     }
-    bool GetPrintToFile();
-    int GetToPage();
-
-    bool Ok();
-
-    void SetCollate(bool flag);
-    void SetFromPage(int page);
-    void SetMaxPage(int page);
-    void SetMinPage(int page);
-    void SetNoCopies(int n);
     void SetPrintData(const wxPrintData& printData);
-    void SetPrintToFile(bool flag);
-    void SetSetupDialog(bool flag);
-    void SetToPage(int page);
+
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.Ok()"
 };
 
 
@@ -339,46 +369,91 @@ public:
 
 //----------------------------------------------------------------------
 
+enum wxPrinterError
+{
+    wxPRINTER_NO_ERROR = 0,
+    wxPRINTER_CANCELLED,
+    wxPRINTER_ERROR
+};
+
+
 class wxPrinter : public wxObject {
 public:
     wxPrinter(wxPrintDialogData* data = NULL);
     ~wxPrinter();
 
-//    bool Abort();
     void CreateAbortWindow(wxWindow* parent, wxPyPrintout* printout);
     wxPrintDialogData& GetPrintDialogData();
     bool Print(wxWindow *parent, wxPyPrintout *printout, int prompt=TRUE);
     wxDC* PrintDialog(wxWindow *parent);
     void ReportError(wxWindow *parent, wxPyPrintout *printout, const wxString& message);
     bool Setup(wxWindow *parent);
+    bool GetAbort();
+
+    static wxPrinterError GetLastError();
+};
+
+//----------------------------------------------------------------------
+
+class wxPrintAbortDialog: public wxDialog
+{
+public:
+    wxPrintAbortDialog(wxWindow *parent,
+                       const wxString& title,
+                       const wxPoint& pos = wxDefaultPosition,
+                       const wxSize& size = wxDefaultSize,
+                       long style = 0,
+                       const wxString& name = wxPyDialogNameStr);
+
 };
 
 //----------------------------------------------------------------------
 
 class wxPrintPreview : public wxObject {
 public:
-    wxPrintPreview(wxPyPrintout* printout, wxPyPrintout* printoutForPrinting, wxPrintData* data=NULL);
-//    ~wxPrintPreview();   **** ????
+    wxPrintPreview(wxPyPrintout* printout,
+                   wxPyPrintout* printoutForPrinting,
+                   wxPrintData* data=NULL);
 
-    wxWindow* GetCanvas();
+    virtual bool SetCurrentPage(int pageNum);
     int GetCurrentPage();
-    wxFrame * GetFrame();
-    int GetMaxPage();
-    int GetMinPage();
+
+    void SetPrintout(wxPyPrintout *printout);
+    wxPyPrintout *GetPrintout();
+    wxPyPrintout *GetPrintoutForPrinting();
+
+    void SetFrame(wxFrame *frame);
+    void SetCanvas(wxWindow *canvas);
+
+    virtual wxFrame *GetFrame();
+    virtual wxWindow *GetCanvas();
+
+    // The preview canvas should call this from OnPaint
+    virtual bool PaintPage(wxWindow *canvas, wxDC& dc);
+
+    // This draws a blank page onto the preview canvas
+    virtual bool DrawBlankPage(wxWindow *canvas, wxDC& dc);
+
+    // This is called by wxPrintPreview to render a page into a wxMemoryDC.
+    virtual bool RenderPage(int pageNum);
+
     wxPrintDialogData& GetPrintDialogData();
-    wxPyPrintout * GetPrintout();
-    wxPyPrintout * GetPrintoutForPrinting();
+
+    virtual void SetZoom(int percent);
     int GetZoom();
+
+    int GetMaxPage();
+    int GetMinPage();
+
     bool Ok();
-    bool Print(bool prompt);
-    void SetCanvas(wxWindow* window);
-    void SetCurrentPage(int pageNum);
-    void SetFrame(wxFrame *frame);
-    void SetPrintout(wxPyPrintout *printout);
-    void SetZoom(int percent);
+    void SetOk(bool ok);
+
+    virtual bool Print(bool interactive);
+    virtual void DetermineScaling();
+
+    %pragma(python) addtoclass = "def __nonzero__(self): return self.Ok()"
 };
 
-//----------------------------------------------------------------------
 
 class wxPreviewFrame : public wxFrame {
 public:
@@ -391,13 +466,241 @@ public:
     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
 
     void Initialize();
+    void CreateControlBar();
+    void CreateCanvas();
+};
+
+
+class wxPreviewCanvas: public wxScrolledWindow
+{
+public:
+    wxPreviewCanvas(wxPrintPreview *preview,
+                    wxWindow *parent,
+                    const wxPoint& pos = wxDefaultPosition,
+                    const wxSize& size = wxDefaultSize,
+                    long style = 0,
+                    const wxString& name = wxPyPreviewCanvasNameStr);
+    %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
+};
+
+
+
+enum {
+    wxPREVIEW_PRINT,
+    wxPREVIEW_PREVIOUS,
+    wxPREVIEW_NEXT,
+    wxPREVIEW_ZOOM,
+    wxPREVIEW_FIRST,
+    wxPREVIEW_LAST,
+    wxPREVIEW_GOTO,
+    wxPREVIEW_DEFAULT,
+
+    wxID_PREVIEW_CLOSE,
+    wxID_PREVIEW_NEXT,
+    wxID_PREVIEW_PREVIOUS,
+    wxID_PREVIEW_PRINT,
+    wxID_PREVIEW_ZOOM,
+    wxID_PREVIEW_FIRST,
+    wxID_PREVIEW_LAST,
+    wxID_PREVIEW_GOTO
+};
+
+class wxPreviewControlBar: public wxPanel
+{
+public:
+    wxPreviewControlBar(wxPrintPreview *preview,
+                        long buttons,
+                        wxWindow *parent,
+                        const wxPoint& pos = wxDefaultPosition,
+                        const wxSize& size = wxDefaultSize,
+                        long style = 0,
+                        const wxString& name = wxPyPanelNameStr);
+    %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
+
+    int GetZoomControl();
+    void SetZoomControl(int zoom);
+    wxPrintPreview* GetPrintPreview();
+
+    void OnNext();
+    void OnPrevious();
+    void OnFirst();
+    void OnLast();
+    void OnGoto();
+};
+
+
+//----------------------------------------------------------------------
+// Python-derivable versions of the above preview classes
+
+%{
+class wxPyPrintPreview : public wxPrintPreview
+{
+    DECLARE_CLASS(wxPyPrintPreview)
+public:
+    wxPyPrintPreview(wxPyPrintout* printout,
+                     wxPyPrintout* printoutForPrinting,
+                     wxPrintData* data=NULL)
+        : wxPrintPreview(printout, printoutForPrinting, data)
+    {}
+
+    DEC_PYCALLBACK_BOOL_INT(SetCurrentPage);
+    DEC_PYCALLBACK_BOOL_WXWINDC(PaintPage);
+    DEC_PYCALLBACK_BOOL_WXWINDC(DrawBlankPage);
+    DEC_PYCALLBACK_BOOL_INT(RenderPage);
+    DEC_PYCALLBACK_VOID_INT(SetZoom);
+    DEC_PYCALLBACK_BOOL_BOOL(Print);
+    DEC_PYCALLBACK_VOID_(DetermineScaling);
+
+    PYPRIVATE;
+};
+
+// Stupid renamed classes...  Fix this in 2.5...
+#if defined(__WXMSW__)
+IMPLEMENT_CLASS( wxPyPrintPreview, wxWindowsPrintPreview );
+#elif defined(__WXMAC__)
+IMPLEMENT_CLASS( wxPyPrintPreview, wxMacPrintPreview );
+#else
+IMPLEMENT_CLASS( wxPyPrintPreview, wxPostScriptPrintPreview );
+#endif
+
+IMP_PYCALLBACK_BOOL_INT    (wxPyPrintPreview, wxPrintPreview, SetCurrentPage);
+IMP_PYCALLBACK_BOOL_WXWINDC(wxPyPrintPreview, wxPrintPreview, PaintPage);
+IMP_PYCALLBACK_BOOL_WXWINDC(wxPyPrintPreview, wxPrintPreview, DrawBlankPage);
+IMP_PYCALLBACK_BOOL_INT    (wxPyPrintPreview, wxPrintPreview, RenderPage);
+IMP_PYCALLBACK_VOID_INT    (wxPyPrintPreview, wxPrintPreview, SetZoom);
+IMP_PYCALLBACK_BOOL_BOOL   (wxPyPrintPreview, wxPrintPreview, Print);
+IMP_PYCALLBACK_VOID_       (wxPyPrintPreview, wxPrintPreview, DetermineScaling);
+%}
+
+
+class wxPyPrintPreview : public wxPrintPreview
+{
+public:
+    wxPyPrintPreview(wxPyPrintout* printout,
+                     wxPyPrintout* printoutForPrinting,
+                     wxPrintData* data=NULL);
+
+    void _setCallbackInfo(PyObject* self, PyObject* _class);
+    %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxPyPrintPreview)"
+
+    bool base_SetCurrentPage(int pageNum);
+    bool base_PaintPage(wxWindow *canvas, wxDC& dc);
+    bool base_DrawBlankPage(wxWindow *canvas, wxDC& dc);
+    bool base_RenderPage(int pageNum);
+    void base_SetZoom(int percent);
+    bool base_Print(bool interactive);
+    void base_DetermineScaling();
+};
+
+
 
-    // ****  need to use derived class so these can be properly overridden:
-    //void CreateControlBar()
-    //void CreateCanvas()
 
+%{
+class wxPyPreviewFrame : public wxPreviewFrame
+{
+    DECLARE_CLASS(wxPyPreviewFrame);
+public:
+    wxPyPreviewFrame(wxPrintPreview* preview, wxFrame* parent,
+                     const wxString& title,
+                     const wxPoint& pos = wxDefaultPosition,
+                     const wxSize&  size = wxDefaultSize,
+                     long style = wxDEFAULT_FRAME_STYLE,
+                     const wxString& name = wxPyFrameNameStr)
+        : wxPreviewFrame(preview, parent, title, pos, size, style, name)
+    {}
+
+    void SetPreviewCanvas(wxWindow* canvas) { m_previewCanvas = canvas; }
+    void SetControlBar(wxPreviewControlBar* bar) { m_controlBar = bar; }
+
+    DEC_PYCALLBACK_VOID_(Initialize);
+    DEC_PYCALLBACK_VOID_(CreateCanvas);
+    DEC_PYCALLBACK_VOID_(CreateControlBar);
+
+    PYPRIVATE;
+};
+
+IMPLEMENT_CLASS(wxPyPreviewFrame, wxPreviewFrame);
+
+IMP_PYCALLBACK_VOID_(wxPyPreviewFrame, wxPreviewFrame, Initialize);
+IMP_PYCALLBACK_VOID_(wxPyPreviewFrame, wxPreviewFrame, CreateCanvas);
+IMP_PYCALLBACK_VOID_(wxPyPreviewFrame, wxPreviewFrame, CreateControlBar);
+%}
+
+class wxPyPreviewFrame : public wxPreviewFrame
+{
+public:
+    wxPyPreviewFrame(wxPrintPreview* preview, wxFrame* parent,
+                     const wxString& title,
+                     const wxPoint& pos = wxDefaultPosition,
+                     const wxSize&  size = wxDefaultSize,
+                     long style = wxDEFAULT_FRAME_STYLE,
+                     const wxString& name = wxPyFrameNameStr);
+
+    void _setCallbackInfo(PyObject* self, PyObject* _class);
+    %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxPyPreviewFrame)"
+    %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
+
+    void SetPreviewCanvas(wxWindow* canvas);
+    void SetControlBar(wxPreviewControlBar* bar);
+
+    void base_Initialize();
+    void base_CreateCanvas();
+    void base_CreateControlBar();
 };
 
+
+
+
+%{
+class wxPyPreviewControlBar : public wxPreviewControlBar
+{
+    DECLARE_CLASS(wxPyPreviewControlBar);
+public:
+    wxPyPreviewControlBar(wxPrintPreview *preview,
+                          long buttons,
+                          wxWindow *parent,
+                          const wxPoint& pos = wxDefaultPosition,
+                          const wxSize& size = wxDefaultSize,
+                          long style = 0,
+                          const wxString& name = wxPyPanelNameStr)
+        : wxPreviewControlBar(preview, buttons, parent, pos, size, style, name)
+    {}
+
+    void SetPrintPreview(wxPrintPreview* preview) { m_printPreview = preview; }
+
+    DEC_PYCALLBACK_VOID_(CreateButtons);
+    DEC_PYCALLBACK_VOID_INT(SetZoomControl);
+
+    PYPRIVATE;
+};
+
+IMPLEMENT_CLASS(wxPyPreviewControlBar, wxPreviewControlBar);
+IMP_PYCALLBACK_VOID_(wxPyPreviewControlBar, wxPreviewControlBar, CreateButtons);
+IMP_PYCALLBACK_VOID_INT(wxPyPreviewControlBar, wxPreviewControlBar, SetZoomControl);
+%}
+
+class wxPyPreviewControlBar : public wxPreviewControlBar
+{
+public:
+    wxPyPreviewControlBar(wxPrintPreview *preview,
+                          long buttons,
+                          wxWindow *parent,
+                          const wxPoint& pos = wxDefaultPosition,
+                          const wxSize& size = wxDefaultSize,
+                          long style = 0,
+                          const wxString& name = wxPyPanelNameStr);
+
+    void _setCallbackInfo(PyObject* self, PyObject* _class);
+    %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxPyPreviewControlBar)"
+    %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
+
+    void SetPrintPreview(wxPrintPreview* preview);
+
+    void base_CreateButtons();
+    void base_SetZoomControl(int zoom);
+};
+
+
 //----------------------------------------------------------------------
 
 %init %{
diff --git a/wxPython/src/pytree.h b/wxPython/src/pytree.h
new file mode 100644
index 0000000000..dc178a7278
--- /dev/null
+++ b/wxPython/src/pytree.h
@@ -0,0 +1,47 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        pytree.h
+// Purpose:     Common declarations of tree stuff for wxTreeCtrl in the core
+//              and wxTreeListCtrl in gizmos
+//
+// Author:      Robin Dunn
+//
+// Created:     30-April-2003
+// RCS-ID:      $Id$
+// Copyright:   (c) 2003 by Total Control Software
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+
+class wxPyTreeItemData : public wxTreeItemData {
+public:
+    wxPyTreeItemData(PyObject* obj = NULL) {
+        if (obj == NULL)
+            obj = Py_None;
+        Py_INCREF(obj);
+        m_obj = obj;
+    }
+
+    ~wxPyTreeItemData() {
+        wxPyBeginBlockThreads();
+        Py_DECREF(m_obj);
+        wxPyEndBlockThreads();
+    }
+
+    PyObject* GetData() {
+        Py_INCREF(m_obj);
+        return m_obj;
+    }
+
+    void SetData(PyObject* obj) {
+        wxPyBeginBlockThreads();
+        Py_DECREF(m_obj);
+        wxPyEndBlockThreads();
+        m_obj = obj;
+        Py_INCREF(obj);
+    }
+
+    PyObject* m_obj;
+};
+
diff --git a/wxPython/src/sizers.i b/wxPython/src/sizers.i
index b841dd758c..ffa534b533 100644
--- a/wxPython/src/sizers.i
+++ b/wxPython/src/sizers.i
@@ -101,6 +101,7 @@ public:
 
 //---------------------------------------------------------------------------
 
+
 class wxSizer : public wxObject {
 public:
     // wxSizer();      ****  abstract, can't instantiate
@@ -115,168 +116,192 @@ public:
     %addmethods {
         void Destroy() { delete self; }
 
-        void AddWindow(wxWindow *window, int proportion=0, int flag=0, int border=0,
-                       PyObject* userData=NULL) {
-            wxPyUserData* data = NULL;
-            if (userData) data = new wxPyUserData(userData);
-            self->Add(window, proportion, flag, border, data);
-        }
-        void AddSizer(wxSizer *sizer, int proportion=0, int flag=0, int border=0,
-                      PyObject* userData=NULL) {
-            wxPyUserData* data = NULL;
-            if (userData) data = new wxPyUserData(userData);
-            self->Add(sizer, proportion, flag, border, data);
-        }
-        void AddSpacer(int width, int height, int proportion=0, int flag=0,
-                       int border=0, PyObject* userData=NULL) {
-            wxPyUserData* data = NULL;
-            if (userData) data = new wxPyUserData(userData);
-            self->Add(width, height, proportion, flag, border, data);
-        }
 
-        void InsertWindow(int before, wxWindow *window, int proportion=0, int flag=0,
-                          int border=0, PyObject* userData=NULL) {
-            wxPyUserData* data = NULL;
-            if (userData) data = new wxPyUserData(userData);
-            self->Insert(before, window, proportion, flag, border, data);
-        }
-        void InsertSizer(int before, wxSizer *sizer, int proportion=0, int flag=0,
-                         int border=0, PyObject* userData=NULL) {
-            wxPyUserData* data = NULL;
-            if (userData) data = new wxPyUserData(userData);
-            self->Insert(before, sizer, proportion, flag, border, data);
-        }
-        void InsertSpacer(int before, int width, int height, int proportion=0, int flag=0,
-                          int border=0, PyObject* userData=NULL) {
+        void _Add(PyObject* item, int proportion=0, int flag=0, int border=0,
+                  PyObject* userData=NULL, int option=-1) {
+            // The option parameter is only for backwards compatibility
+            // with keyword args, all new code should use "proportion"
+            // instead.  This can be removed eventually.
+            if (option != -1) proportion = option;
+
+            wxWindow* window;
+            wxSizer*  sizer;
+            wxSize    size;
+            wxSize*   sizePtr = &size;
             wxPyUserData* data = NULL;
             if (userData) data = new wxPyUserData(userData);
-            self->Insert(before, width, height, proportion, flag, border, data);
+
+            // Find out what type the item is and call the real Add method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                self->Add(window, proportion, flag, border, data);
+
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                self->Add(sizer, proportion, flag, border, data);
+
+            else if (wxSize_helper(item, &sizePtr))
+                self->Add(sizePtr->GetWidth(), sizePtr->GetHeight(),
+                          proportion, flag, border, data);
+            else {
+                if (data) delete data;
+                PyErr_SetString(PyExc_TypeError,
+                                "wxWindow, wxSizer, wxSize, or (w,h) expected for item");
+            }
         }
 
 
-        void PrependWindow(wxWindow *window, int proportion=0, int flag=0, int border=0,
-                           PyObject* userData=NULL) {
+        void _Insert(int before, PyObject* item, int proportion=0, int flag=0,
+                     int border=0, PyObject* userData=NULL, int option=-1) {
+            // The option parameter is only for backwards compatibility
+            // with keyword args, all new code should use "proportion"
+            // instead.  This can be removed eventually.
+            if (option != -1) proportion = option;
+
+            wxWindow* window;
+            wxSizer*  sizer;
+            wxSize    size;
+            wxSize*   sizePtr = &size;
             wxPyUserData* data = NULL;
             if (userData) data = new wxPyUserData(userData);
-            self->Prepend(window, proportion, flag, border, data);
+
+            // Find out what type the item is and call the real Insert method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                self->Insert(before, window, proportion, flag, border, data);
+
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                self->Insert(before, sizer, proportion, flag, border, data);
+
+            else if (wxSize_helper(item, &sizePtr))
+                self->Insert(before, sizePtr->GetWidth(), sizePtr->GetHeight(),
+                          proportion, flag, border, data);
+            else {
+                if (data) delete data;
+                PyErr_SetString(PyExc_TypeError,
+                                "wxWindow, wxSizer, wxSize, or (w,h) expected for item");
+            }
         }
-        void PrependSizer(wxSizer *sizer, int proportion=0, int flag=0, int border=0,
-                          PyObject* userData=NULL) {
+
+
+
+        void _Prepend(PyObject* item, int proportion=0, int flag=0, int border=0,
+                           PyObject* userData=NULL, int option=-1) {
+            // The option parameter is only for backwards compatibility
+            // with keyword args, all new code should use "proportion"
+            // instead.  This can be removed eventually.
+            if (option != -1) proportion = option;
+
+            wxWindow* window;
+            wxSizer*  sizer;
+            wxSize    size;
+            wxSize*   sizePtr = &size;
             wxPyUserData* data = NULL;
             if (userData) data = new wxPyUserData(userData);
-            self->Prepend(sizer, proportion, flag, border, data);
+
+            // Find out what type the item is and call the real Prepend method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                self->Prepend(window, proportion, flag, border, data);
+
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                self->Prepend(sizer, proportion, flag, border, data);
+
+            else if (wxSize_helper(item, &sizePtr))
+                self->Prepend(sizePtr->GetWidth(), sizePtr->GetHeight(),
+                              proportion, flag, border, data);
+            else {
+                if (data) delete data;
+                PyErr_SetString(PyExc_TypeError,
+                                "wxWindow, wxSizer, wxSize, or (w,h) expected for item");
+            }
         }
-        void PrependSpacer(int width, int height, int proportion=0, int flag=0,
-                           int border=0, PyObject* userData=NULL) {
-            wxPyUserData* data = NULL;
-            if (userData) data = new wxPyUserData(userData);
-            self->Prepend(width, height, proportion, flag, border, data);
+
+        bool Remove(PyObject* item) {
+            wxWindow* window;
+            wxSizer*  sizer;
+
+            // Find out what type the item is and call the real Remove method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                return self->Remove(window);
+
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                return self->Remove(sizer);
+
+            else if (PyInt_Check(item)) {
+                int pos = PyInt_AsLong(item);
+                return self->Remove(pos);
+            }
+            else {
+                PyErr_SetString(PyExc_TypeError,
+                                "wxWindow, wxSizer or int (position) expected.");
+                return FALSE;
+            }
         }
 
-        // TODO:  AddItem, InsertItem, PrependItem
+        void _SetItemMinSize(PyObject* item, wxSize size) {
+            wxWindow* window;
+            wxSizer*  sizer;
 
-    }
+            // Find out what type the item is and call the real Remove method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                self->SetItemMinSize(window, size);
+
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                self->SetItemMinSize(sizer, size);
 
-    %name(RemoveWindow)bool Remove( wxWindow *window );  // TODO: This is DEPRECATED.  Should all be removed?
-    %name(RemoveSizer)bool Remove( wxSizer *sizer );
-    %name(RemovePos)bool Remove( int pos );
+            else if (PyInt_Check(item)) {
+                int pos = PyInt_AsLong(item);
+                self->SetItemMinSize(pos, size);
+            }
+            else
+                PyErr_SetString(PyExc_TypeError,
+                                "wxWindow, wxSizer or int (position) expected.");
+        }
 
-    %name(DetachWindow)bool Detach( wxWindow *window );
-    %name(DetachSizer)bool Detach( wxSizer *sizer );
-    %name(DetachPos)bool Detach( int pos );
+    }
 
 
     %pragma(python) addtoclass = "
-    def Add(self, *args, **kw):
-        if type(args[0]) == type(1):
-            apply(self.AddSpacer, args, kw)
-        elif isinstance(args[0], wxSizerPtr):
-            apply(self.AddSizer, args, kw)
-        elif isinstance(args[0], wxWindowPtr):
-            apply(self.AddWindow, args, kw)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-
-    def Insert(self, *args, **kw):
-        if type(args[1]) == type(1):
-            apply(self.InsertSpacer, args, kw)
-        elif isinstance(args[1], wxSizerPtr):
-            apply(self.InsertSizer, args, kw)
-        elif isinstance(args[1], wxWindowPtr):
-            apply(self.InsertWindow, args, kw)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-
-    def Prepend(self, *args, **kw):
-        if type(args[0]) == type(1):
-            apply(self.PrependSpacer, args, kw)
-        elif isinstance(args[0], wxSizerPtr):
-            apply(self.PrependSizer, args, kw)
-        elif isinstance(args[0], wxWindowPtr):
-            apply(self.PrependWindow, args, kw)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-
-    def Remove(self, *args, **kw):
-        if type(args[0]) == type(1):
-            return apply(self.RemovePos, args, kw)
-        elif isinstance(args[0], wxSizerPtr):
-            return apply(self.RemoveSizer, args, kw)
-        elif isinstance(args[0], wxWindowPtr):
-            return apply(self.RemoveWindow, args, kw)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-
-    def Detach(self, *args, **kw):
-        if type(args[0]) == type(1):
-            return apply(self.DetachPos, args, kw)
-        elif isinstance(args[0], wxSizerPtr):
-            return apply(self.DetachSizer, args, kw)
-        elif isinstance(args[0], wxWindowPtr):
-            return apply(self.DetachWindow, args, kw)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
+    def Add(self, item, *args, **kw):
+        if type(item) == type(1):
+            item = (item, args[0])  # backwards compatibility, args are width, height
+            args = args[1:]
+        self._Add(item, *args, **kw)
 
     def AddMany(self, widgets):
         for childinfo in widgets:
             if type(childinfo) != type(()):
                 childinfo = (childinfo, )
-            apply(self.Add, childinfo)
-"
+            self.Add(*childinfo)
 
-    void Clear( bool delete_windows = false );
-    void DeleteWindows();
+    def Prepend(self, item, *args, **kw):
+        if type(item) == type(1):
+            item = (item, args[0])  # backwards compatibility, args are width, height
+            args = args[1:]
+        self._Prepend(item, *args, **kw)
 
-    void SetMinSize(wxSize size);
+    def Insert(self, before, item, *args, **kw):
+        if type(item) == type(1):
+            item = (item, args[0])  # backwards compatibility, args are width, height
+            args = args[1:]
+        self._Insert(before, item, *args, **kw)
 
-    %name(SetItemMinSizeWindow) void SetItemMinSize(wxWindow* window, wxSize size);
-    %name(SetItemMinSizeSizer) void SetItemMinSize(wxSizer* sizer, wxSize size);
-    %name(SetItemMinSizePos) void SetItemMinSize(int pos, wxSize size);
-    %name(SetItemMinSizeWindowWH) void SetItemMinSize(wxWindow* window, int width, int height);
-    %name(SetItemMinSizeSizerWH) void SetItemMinSize(wxSizer* sizer, int width, int height);
-    %name(SetItemMinSizePosWH) void SetItemMinSize(int pos, int width, int height);
 
-    %pragma(python) addtoclass = "
-    def SetItemMinSize(self, *args):
-        if type(args[0]) == type(1):
-            apply(self.SetItemMinSizePos, args)
-        elif isinstance(args[0], wxSizerPtr):
-            apply(self.SetItemMinSizeSizer, args)
-        elif isinstance(args[0], wxWindowPtr):
-            apply(self.SetItemMinSizeWindow, args)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-
-    def SetItemMinSizeWH(self, *args):
-        if type(args[0]) == type(1):
-            apply(self.SetItemMinSizePosWH, args)
-        elif isinstance(args[0], wxSizerPtr):
-            apply(self.SetItemMinSizeSizerWH, args)
-        elif isinstance(args[0], wxWindowPtr):
-            apply(self.SetItemMinSizeWindowWH, args)
+    # for backwards compatibility only
+    AddWindow = AddSizer = AddSpacer = Add
+    PrependWindow = PrependSizer = PrependSpacer = Prepend
+    InsertWindow = InsertSizer = InsertSpacer = Insert
+    RemoveWindow = RemoveSizer = RemovePos = Remove
+
+
+    def SetItemMinSize(self, item, *args):
+        if len(args) == 2:
+            return self._SetItemMinSize(item, args)
         else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-     "
+            return self._SetItemMinSize(item, args[0])
+
+"
+
+
+    void SetDimension( int x, int y, int width, int height );
+    void SetMinSize(wxSize size);
 
     wxSize GetSize();
     wxPoint GetPosition();
@@ -302,63 +327,65 @@ public:
     void SetSizeHints( wxWindow *window );
     void SetVirtualSizeHints( wxWindow *window );
 
+    void Clear( bool delete_windows=FALSE );
+    void DeleteWindows();
+
 
     // wxList& GetChildren();
     %addmethods {
         PyObject* GetChildren() {
-            wxSizerItemList& list = self->GetChildren();
+            wxList& list = self->GetChildren();
             return wxPy_ConvertList(&list, "wxSizerItem");
         }
     }
 
-    void SetDimension( int x, int y, int width, int height );
 
     // Manage whether individual windows or sub-sizers are considered
     // in the layout calculations or not.
-    %name(ShowWindow)void Show( wxWindow *window, bool show = TRUE );
-    %name(ShowSizer)void Show( wxSizer *sizer, bool show = TRUE );
-    %name(ShowPos)void Show( size_t index, bool show = TRUE );
-    %name(HideWindow)void Hide( wxWindow *window );
-    %name(HideSizer)void Hide( wxSizer *sizer );
-    %name(HidePos)void Hide( size_t index );
-    %name(IsShownWindow)bool IsShown( wxWindow *window );
-    %name(IsShownSizer)bool IsShown( wxSizer *sizer );
-    %name(IsShownPos)bool IsShown( size_t index );
 
-    %pragma(python) addtoclass = "
-    def Show(self, *args):
-        if type(args[0]) == type(1):
-            apply(self.ShowPos, args)
-        elif isinstance(args[0], wxSizerPtr):
-            apply(self.ShowSizer, args)
-        elif isinstance(args[0], wxWindowPtr):
-            apply(self.ShowWindow, args)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-
-    def Hide(self, *args):
-        if type(args[0]) == type(1):
-            apply(self.HidePos, args)
-        elif isinstance(args[0], wxSizerPtr):
-            apply(self.HideSizer, args)
-        elif isinstance(args[0], wxWindowPtr):
-            apply(self.HideWindow, args)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-
-    def IsShown(self, *args):
-        if type(args[0]) == type(1):
-            return apply(self.IsShownPos, args)
-        elif isinstance(args[0], wxSizerPtr):
-            return apply(self.IsShownSizer, args)
-        elif isinstance(args[0], wxWindowPtr):
-            return apply(self.IsShownWindow, args)
-        else:
-            raise TypeError, 'Expected int, wxSizer or wxWindow parameter'
-"
+    %addmethods {
+        void Show(PyObject* item, bool show = TRUE) {
+            wxWindow* window;
+            wxSizer*  sizer;
+            // Find out what type the item is and call the real method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                self->Show(window, show);
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                self->Show(sizer, show);
+            else
+                PyErr_SetString(PyExc_TypeError, "wxWindow or wxSizer expected.");
+        }
+
+        void Hide(PyObject* item) {
+            wxWindow* window;
+            wxSizer*  sizer;
+            // Find out what type the item is and call the real method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                self->Hide(window);
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                self->Hide(sizer);
+            else
+                PyErr_SetString(PyExc_TypeError, "wxWindow or wxSizer expected.");
+        }
+
+        bool IsShown(PyObject* item) {
+            wxWindow* window;
+            wxSizer*  sizer;
+            // Find out what type the item is and call the real method
+            if (! SWIG_GetPtrObj(item, (void**)&window, "_wxWindow_p"))
+                return self->IsShown(window);
+            else if (!SWIG_GetPtrObj(item, (void**)&sizer, "_wxSizer_p"))
+                return self->IsShown(sizer);
+            else {
+                PyErr_SetString(PyExc_TypeError, "wxWindow or wxSizer expected.");
+                return FALSE;
+            }
+        }
+    }
+
 
-    // Recursively call wxWindow::Show () on all sizer items.
-    void ShowItems (bool show);
+    // Recursively call wxWindow::Show() on all sizer items.
+    void ShowItems(bool show);
 
 };
 
diff --git a/wxPython/src/windows.i b/wxPython/src/windows.i
index 5b6ccf56da..d63b8d5f36 100644
--- a/wxPython/src/windows.i
+++ b/wxPython/src/windows.i
@@ -431,7 +431,7 @@ public:
     %pragma(python) addtoclass = "# replaces broken shadow method
     def GetCaret(self, *_args, **_kwargs):
         from misc2 import wxCaretPtr
-        val = apply(windowsc.wxWindow_GetCaret,(self,) + _args, _kwargs)
+        val = windowsc.wxWindow_GetCaret(self, *_args, **_kwargs)
         if val: val = wxCaretPtr(val)
         return val
     "
@@ -483,6 +483,9 @@ public:
 
     // does this window have the capture?
     bool HasCapture() const;
+
+    void SetThemeEnabled(bool enable);
+    bool GetThemeEnabled();
 };
 
 
@@ -613,17 +616,17 @@ public:
     %pragma(python) addtoclass = "
     def CalcScrolledPosition(self, *args):
         if len(args) == 1:
-            return apply(self.CalcScrolledPosition1, args)
+            return self.CalcScrolledPosition1(*args)
         elif len(args) == 2:
-            return apply(self.CalcScrolledPosition2, args)
+            return self.CalcScrolledPosition2(*args)
         else:
             raise TypeError, 'Invalid parameters: only (x,y) or (point) allowed'
 
     def CalcUnscrolledPosition(self, *args):
         if len(args) == 1:
-            return apply(self.CalcUnscrolledPosition1, args)
+            return self.CalcUnscrolledPosition1(*args)
         elif len(args) == 2:
-            return apply(self.CalcUnscrolledPosition2, args)
+            return self.CalcUnscrolledPosition2(*args)
         else:
             raise TypeError, 'Invalid parameters: only (x,y) or (point) allowed'
 "
@@ -730,8 +733,6 @@ public:
     %name(RemoveItem) wxMenuItem *Remove(wxMenuItem *item);
 
 
-
-
     %addmethods {
         void Destroy() { delete self; }
     }
@@ -809,6 +810,7 @@ public:
 
 
     wxMenu *GetMenu();
+    void SetMenu(wxMenu* menu);
     void SetId(int id);
     int  GetId();
     bool IsSeparator();
diff --git a/wxPython/src/windows2.i b/wxPython/src/windows2.i
index 167ecb379f..a81eccdf38 100644
--- a/wxPython/src/windows2.i
+++ b/wxPython/src/windows2.i
@@ -117,7 +117,7 @@ public:
                  const wxString& text,
                  int select = FALSE,
                  int imageId = -1);
-    bool InsertPage(int page,
+    bool InsertPage(int index,
                     /*wxNotebookPage*/ wxWindow *page,
                     const wxString& text,
                     bool select = FALSE,
diff --git a/wxPython/src/windows3.i b/wxPython/src/windows3.i
index bb2b7300d5..d74d808dec 100644
--- a/wxPython/src/windows3.i
+++ b/wxPython/src/windows3.i
@@ -16,10 +16,8 @@
 #include "helpers.h"
 #include <wx/sashwin.h>
 #include <wx/laywin.h>
-#ifndef __WXMAC__
 #include <wx/popupwin.h>
 #include <wx/tipwin.h>
-#endif
 %}
 
 //----------------------------------------------------------------------
@@ -304,7 +302,39 @@ public:
     void Close();
 };
 
+#endif // ! __WXMAC__
+
+//---------------------------------------------------------------------------
+
+#ifdef __WXMAC__
+
+%import frames.i
+
+class wxTipWindow : public wxFrame
+{
+public:
+    %addmethods {
+        wxTipWindow(wxWindow *parent,
+                    const wxString* text,
+                    wxCoord maxLength = 100,
+                    wxRect* rectBound = NULL) {
+            wxString tmp = *text;
+            return new wxTipWindow(parent, tmp, maxLength, NULL, rectBound);
+        }
+    }
+
+    %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
+
+    // If rectBound is not NULL, the window will disappear automatically when
+    // the mouse leave the specified rect: note that rectBound should be in the
+    // screen coordinates!
+    void SetBoundingRect(const wxRect& rectBound);
+
+    // Hide and destroy the window
+    void Close();
+};
+
+#endif // __WXMAC__
 
 //---------------------------------------------------------------------------
 
-#endif
diff --git a/wxPython/src/wx.i b/wxPython/src/wx.i
index 747fa6839e..5b0091eecf 100644
--- a/wxPython/src/wx.i
+++ b/wxPython/src/wx.i
@@ -54,9 +54,6 @@
 
 //---------------------------------------------------------------------------
 
-
-#define __version__ "0.0.0"   // The real value is now in setup.py...
-
 %readonly
 wxPoint     wxDefaultPosition;
 wxSize      wxDefaultSize;
@@ -287,17 +284,12 @@ static wxPyCoreAPI API = {
     initfontsc();
 
 
+    // Although these are redfined in __version__ they need to be here too so
+    // that an assert can be done to ensure that the wxPython and the wxWindows
+    // versions match.
     PyDict_SetItemString(d,"wxMAJOR_VERSION", PyInt_FromLong((long)wxMAJOR_VERSION ));
     PyDict_SetItemString(d,"wxMINOR_VERSION", PyInt_FromLong((long)wxMINOR_VERSION ));
-    PyDict_SetItemString(d,"wxRELEASE_NUMBER", PyInt_FromLong((long)wxRELEASE_NUMBER ));
-    PyDict_SetItemString(d,"wxVERSION_NUMBER", PyInt_FromLong((long)wxVERSION_NUMBER ));
-#if wxUSE_UNICODE
-    wxString tempStr(wxVERSION_STRING);
-    PyDict_SetItemString(d,"wxVERSION_STRING", PyUnicode_FromWideChar(tempStr.c_str(), tempStr.Len()));
-#else
-    PyDict_SetItemString(d,"wxVERSION_STRING", PyString_FromString(wxVERSION_STRING));
-#endif
-
+    PyDict_SetItemString(d,"wxRELEASE_VERSION", PyInt_FromLong((long)wxRELEASE_NUMBER ));
 
 %}
 
diff --git a/wxPython/tests/.cvsignore b/wxPython/tests/.cvsignore
deleted file mode 100644
index 95e09fc86a..0000000000
--- a/wxPython/tests/.cvsignore
+++ /dev/null
@@ -1,13 +0,0 @@
-hh_test.py
-hook.pyc
-listGetItem.pyc
-setup.bat
-ste.pyc
-test.out
-test1.pyc
-test4.pyc
-test6.pyc
-test8.pyc
-testDlg.pyc
-th_test.py
-val.pyc
diff --git a/wxPython/tests/README.txt b/wxPython/tests/README.txt
deleted file mode 100644
index ca2d358b96..0000000000
--- a/wxPython/tests/README.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-29-Apr-1999
-
-The tests in this directory are being depreciated in favor of the demo
-program found in ../demo.
-
-They are still used from time to time for my development efforts, but
-they should not be included with any distributions.
-
-Robin
-
-
-
diff --git a/wxPython/tests/TstLstIcon.py b/wxPython/tests/TstLstIcon.py
deleted file mode 100644
index 915b20e853..0000000000
--- a/wxPython/tests/TstLstIcon.py
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/bin/env python
-#----------------------------------------------------------------------------
-# Name:         TstLstIcon.py
-# Purpose:      Lest Icon List
-#
-# Author:       Lorne White
-#
-# Version:      0.8
-# Licence:      wxWindows, wxPython license
-#----------------------------------------------------------------------------
-
-import sys, os
-from   wxPython.wx import *
-
-class AppFrame(wxFrame):
-    def __init__(self, parent, id=-1, title="New"):
-        wxFrame.__init__(self, parent, id, title, wxPyDefaultPosition, wxSize(420, 320))
-        if wxPlatform == '__WXMSW__':
-            self.icon = wxIcon('bitmaps/mondrian.ico', wxBITMAP_TYPE_ICO)
-            self.SetIcon(self.icon)
-
-        self.CreateStatusBar()
-
-        self.mainmenu = wxMenuBar()
-        menu = wxMenu()
-
-        menu = self.MakeFileMenu()
-        self.mainmenu.Append(menu, '&File')
-
-        self.SetMenuBar(self.mainmenu)
-
-        self.il = wxImageList(32, 32)
-        self.idx1 = idx1 = self.il.Add(wxNoRefBitmap('table.bmp', wxBITMAP_TYPE_BMP))
-        self.idx2 = idx2 = self.il.Add(wxNoRefBitmap('query.bmp', wxBITMAP_TYPE_BMP))
-
-        self.nb = nb = wxNotebook(self, -1)
-
-        self.list = wxListCtrl(nb, 1100, wxDefaultPosition, wxDefaultSize)
-
-        nb.AddPage(self.list, "Tables")
-
-        self.list.SetSingleStyle(wxLC_ICON)
-        self.list.SetWindowStyleFlag(wxSTATIC_BORDER|wxVSCROLL)
-        self.list.SetImageList(self.il, wxIMAGE_LIST_NORMAL)
-
-        self.qlist = wxListCtrl(nb, 1200, wxDefaultPosition, wxDefaultSize)
-        nb.AddPage(self.qlist, "Queries")
-
-        self.qlist.SetSingleStyle(wxLC_ICON)
-        self.qlist.SetWindowStyleFlag(wxSTATIC_BORDER|wxVSCROLL)
-        self.qlist.SetImageList(self.il, wxIMAGE_LIST_NORMAL)
-
-        self.UpdateView2()
-        self.UpdateView1()
-
-        self.nb.SetSelection(1)
-        self.nb.SetSelection(0)
-        #self.nb.Refresh()
-        #self.nb.ResizeChildren()
-
-    def MakeFileMenu(self):
-        self.fl_mn = menu = wxMenu()
-
-        mID = NewId()
-        menu.Append(mID, 'E&xit', 'Exit')
-        EVT_MENU(self, mID, self.OnFileExit)
-
-        return menu
-
-
-    def UpdateView1(self):
-        vset = "ViewA "
-        for i in range(20):
-            self.list.InsertImageStringItem(i, vset + str(i), self.idx1)
-
-    def UpdateView2(self):
-        vset = "ViewB "
-        for i in range(5):
-            self.qlist.InsertImageStringItem(i, vset + str(i), self.idx2)
-
-    def OnFileExit(self, event):
-        self.Close()
-
-#---------------------------------------------------------------------------
-
-
-class MyApp(wxApp):
-    def OnInit(self):
-        frame = AppFrame(NULL, -1, "Demo")
-        frame.Show(true)
-        self.SetTopWindow(frame)
-        return true
-
-#---------------------------------------------------------------------------
-
-
-def main():
-    app = MyApp(0)
-    app.MainLoop()
-
-
-def t():
-    import pdb
-    pdb.run('main()')
-
-
-if __name__ == '__main__':
-    main()
diff --git a/wxPython/tests/alternateThread.py b/wxPython/tests/alternateThread.py
deleted file mode 100644
index 69d435b326..0000000000
--- a/wxPython/tests/alternateThread.py
+++ /dev/null
@@ -1,52 +0,0 @@
-from time import sleep
-from threading import Thread
-
-def test_a_window():
-    print "starting window thread"
-
-    from wxPython.wx import *    # <-- the wxWin DLL is not loaded until here
-
-    app = wxPySimpleApp(1)
-    frame = wxFrame(None, -1, "Hello", size=(400,200))
-    frame.Show(true)
-    EVT_SIZE(frame, OnFrameSize)
-    app.MainLoop()
-    print "finishing window thread"
-
-def OnFrameSize(evt):
-    print evt.GetSize()
-
-
-
-keep_going = 1
-def counter():
-    print "starting counter thread"
-    count = 0
-    while keep_going:
-        sleep(1)
-        count += 1
-        print count
-    print "finishing counter thread"
-
-def main():
-    print "main startup"
-
-    ct = Thread(target=counter)
-    wt = Thread(target=test_a_window)
-
-    ct.start()
-    wt.start()
-    wt.join()
-
-    global keep_going
-    keep_going = 0
-
-    ct.join()
-
-    print "main finished"
-
-main()
-
-
-
-
diff --git a/wxPython/tests/atom.bmp b/wxPython/tests/atom.bmp
deleted file mode 100644
index d85435104d3f95e67510ba6ac033427d9d88fa50..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 630
zcmZuuF;2ul3^WLdEA9nUS5or?gapMRQPAEuE-8pM-8DRFi%8c*h-RfL@DEO+bVFEX
zyaA=a*-h3vW5*ufKJLy%Hga{d6On7|&AiX#0w);o|E(9nlD@AWym6G2621hAFDZp5
zY&^W8@7BQTiSL|OEiU4GGi|p|`@Q{LsDcn<oI@s61;NZ}L<c_~!L9`BG<J#vO(is)
zmMI_G7Hno{jCe{Q6yt)YA0ga1AsWI|2iQF`M8l8c2y;Tif7loON??)kmHrqWT9#mD
z)gKZP{NksIqXNg@zL8*of0mQS6EBEg;xWF2!1xvOvt%0vh98jM>&rQWaa^N;hV?_g
z=V5f%&~v1I>op{XgZ`-(1+M)U=tcc70CF*cSwB|lGn!mK%HVJ*)bG;uuLGM@-@SE4
O(-iPxp16TG&-({tSAQ%3

diff --git a/wxPython/tests/bitmaps/copy.bmp b/wxPython/tests/bitmaps/copy.bmp
deleted file mode 100644
index 4551a06bfa79e0a42c1ffb7cdbb90fd4f699dce2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 238
zcmZvVK?*`K3`9pLxU9$U91{2|@hV+>tjiv)Cz3AyzP{vxy7<$~OeTT!c7JQf6T89-
z%<!ayO0Uo(X%eN@c0*~^d&hk-qco>?kmn<${;(P#uFN<0A#FuUo(qgT{&F@ekspii
W=d@ZzPG(Cb=QBs}_=7thzxV(viB<;y

diff --git a/wxPython/tests/bitmaps/mondrian.ico b/wxPython/tests/bitmaps/mondrian.ico
deleted file mode 100644
index 2310c5d275a87af295d5ea8dc79ea417a5e74c53..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 766
zcmZQzU<5)11px*Sc)`TLAO@s0fLH;D9e|jTfdxnc0Z<M**w4TKL=5})Lnt5#WHKB$
zaDbtqp#doIAB-6O{|B*v7zjZ^AOa2W|NsACHyAJ}De?dRKnp(HN~rljcR;{k;{zQE
i@;}UZ|9Q?Fpp*~yJCwmWbLIrN`9Qm9%}2L?p!oo$cZ4ed

diff --git a/wxPython/tests/bitmaps/new.bmp b/wxPython/tests/bitmaps/new.bmp
deleted file mode 100644
index d66feb2384ad4c626a078c995c1a3e49af78ec3c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 238
zcmbu2yA6Oa5JQcGL>b0l4tjP;1(ew=nJ8j|<6WY3bU0`GK9aK^RUId`!4(ELX-1{H
u>6c`QQqJ8_T9s0iQsQ8(Wab^@`3kuPA_p->w)Xt<krS4l<G*-5<G>4Pkz>06

diff --git a/wxPython/tests/bitmaps/open.bmp b/wxPython/tests/bitmaps/open.bmp
deleted file mode 100644
index 1c38e97b59dac5b7dcb3d4ac14a31fe36d3fbc6e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 238
zcmZvVF%m){3`Ez_nP2KLES>QN_TFVHvE)eH08ZrCQ{W?L=aStGNg%iTOA8O|3{UU~
zcRHZbGxVQiiBQhVP*Szl@Yxs<8e?XVGfPPN!qmmh`zzRz%k)d~SOwQraPKkc3JUWb
WyzyG%ebUB{{{0*7WXGE5t%V;V>_w>n

diff --git a/wxPython/tests/bitmaps/paste.bmp b/wxPython/tests/bitmaps/paste.bmp
deleted file mode 100644
index 564f514e0df7225f0a7adbe8457b41af537813bd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 238
zcmZvVF%Ci@5Jbns<dazFG5#@(+2mJ-tNhBfq~tjEHk`;S;9I_0IWRN311y*8OB-(3
z3{UU~ciN-Ueds?a5?iHghEl4vhQ~o4TfIjGSrH-bZeUrZOuwXBvsoVg>$83OZ*I;#
co}I%%@f6>ra3+S=gC69}eM%GII+SAI4J;x>B>(^b

diff --git a/wxPython/tests/bitmaps/smiles.bmp b/wxPython/tests/bitmaps/smiles.bmp
deleted file mode 100644
index 39006fae82aa4e8c238c053f871538a8e2e5d8ac..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 246
zcmYLCu?@p83{!w^29lo9JF@qk%swHfXe~I@Ll4T-B?CjrNh_P8M9S9u{92Di^bqbR
z2D_zEl|N(0<)vYA!mPEEvPx^MiNj!CBcl>@LW=$@$O2#@cM+TfUaN!+Sgqi_!zIHD
cVh+Fj@4d)`=7RlVy^omkdw@(qd!o?x0|m}&@c;k-

diff --git a/wxPython/tests/bitmaps/smiles.ico b/wxPython/tests/bitmaps/smiles.ico
deleted file mode 100644
index bb29c8edd7e66d24e5acde41c632ebb805b87891..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 766
zcmah{Ic~!+5FEt;0>gz}rHxAeBL12A1hx8wdNzED%9JWo7^Y`-NeVsyue8_f>~eJg
z9k0GWK=StieA6GPJ@rKG@JUNy?X?7eH$ren%Md9gdKI$W$XOAUmmry!5-Dq8r!>Z?
zBAzxzO$%UbpmkU<js^C@b{q%coG5%6fUN~y7C6}i%O~qK>$zHE6l(2OW(RYUe1r&$
z)Fj+QvAFmA=iIxDWqcdyW1sT2rPo)xMz%;<t2}SrM6a|gXHIYUF)!N+_Ajs!M5k21
zGe4rS8>3e5eO~rChb~`%^9A_*2Ywb{KLcM0*hm9^!K!#8l_#G{|IAsMso6S1XX#9x
FeFHZg6}12W

diff --git a/wxPython/tests/bitmaps/test2.bmp b/wxPython/tests/bitmaps/test2.bmp
deleted file mode 100644
index 3a6547321271e48f304443d3597480f9e1b6f448..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12342
zcmd6tZ)jIl7{|Z8&NPZpvm&t63}q?^MbMaR&e(F8L9z)mBwvldfgngUL|pl1Y@uXt
zBIsQ-7(tLA3>vIdCT#wBAwt523lfI2m7A{b^E<!av*+A<&%O6|XHz+j=id9A=X{>$
zJm=hV&i&OjZ?8e=-**1p!2h-7|4(5RCH^ZvcNgyOJdjxMH3}3lmH02vN@COAO|@2y
zg#zSSCF(*o?Rw;ksHiZ-gt7~Z0I-f=+q}KZl#4M(YRv&Nz;vMS5f!pYw#^gXl}u$-
zh>%oqc?S3j=*1K;4vYfBz>r_Ceh3?ev2hfe#;HaJL%t~aQt*?!7x<Dfolh&Pj)7%$
z7hdkg+J3AXbiPcK9EtQugrAoh;S`~YXuAoD<mt?zr!RD1)zOMC10#U-A`buP`3sX<
zkDhJ8bFEm}*#is!>IJsW6>}kP{4K-c<rPh>Kquh5z#Esbc@kUi$6ZLt9QP=jfAO>d
z3r&FY0x$Pr-FXi1xC@Kr4>VnH2*j+_b4{?K3D37<O*dXYSHOj|_{W-iRM?)KXX>!L
z5zp<%nv;nxq<2A(e`(-dE2%CN;a^Jl#kr6W|D}h|av`M)qWmHFxjD?t;NCs?OWCTq
zN7K__i9fZP5jk#iA(6UeMv_VOLHdi#<B!<a%lr2+If=0`T)c>D*Kp?!9y}<!K!KOM
z`P*+89u^&HQeW$a1hskLf>+DAz!`~?D&Gq=(>eLsNAX5=PlLfhoH>IpzQFh2<N9^R
zSszi5n<q}7t4nmKNf*??7{695+hj#sYgsMm0w>j#ome}7%@gc`l>8BFXEEH65VDDb
z2hr9hoWK9hL{bbVVBbEpw1^HhuUwHtiW%gcXf5jR-HStq@Xa?8mVf?{TH->zEHhr}
z!5bs&f=vGO;0r&oKl~7T_DGPKCvkql@7N(OR1|XY)8>2ciPvY(`utuOJjmKRWVR(y
zWt3Pd;Z2An;n@q74$5nj@ZH@wf8NVF(*<1Pao3R11xbBPfO2jypPAL{ViuF$)&-nC
zjn6*A=bz)d?_@X!@+ZM2BTxA8ac|U{QNU#?SK29EkQk_in-3r2@4xZKA2Ru{P~atR
zs>_^7Zr{eGOZe$0{P2S~c<UDa{dYk@HLXAeGLMXi&6_tdHHFz(uS%&4+JHV_th8$j
zb%9sQHsNH>B!B&d(NO_op}<Qsy~yaGM>lTZ=b!QIxA^f#L83?LvnVJ3KmWw#%VKkA
z2v@Iq(=wZ0R$B+O09~bR>Ai3Yh4{Vna5E%xyE1>eTAt3SQ~2~#965r%zJ!#hM8>NU
zFiYdLrQ<BFv5x|SkS%t#@%I`cImf0yJgtJ0(bR<IX0*4<kUV!Tn$;y2Y%Lk=F|#f*
zj(-=>0rZ#72NH)sDEPeZHFWHlfU!_ucXO%WE2y%}qK%E%zaJ-0;+J1!EKu1jIaHH^
zSc{oeB)Y&2Li!L;<+zZiA*-YEf(yrwqrYF0+$<_ojY1}W<`9Tu>z$kpSv4z5FMRY7
z4j+yT2Tvy}{_KKgdRaPCN_-0_ZCuFTkkzy@8X9Co_`|_dcry6uyQQ-7LM~Navfk4t
zhTnCcWmCEA!hr+wj=pk5?^8(6e_6;at6hTpvAJjQoGb%@lhW?pvcUNDSF4bRA1j*w
z@BFv?@m!KoTwjk}yU@|W>FCMlPjG?obb;H4zP{@CxtDpig{P)G*-l(SL_%jTt7xdQ
zHqh#}E@hd8>gwF?z&^^(AKA#XaW5HP!j<=xv8EFlG8&2*v5*D%OM@57cYz1jJbT|X
z9$7!Q!_vf^mvg}~B=d()9&BCVFOWZupBv#-N9Dso&6HigIe6Cv8t{l<8KV4m@5=I+
zs{$T4a68Gub@jxAEOlmQZAF3S_;oL`&Q1&r*r!pmrDataL)QQ0<d?4=Tkbt7eh+}#
zNp5&qdV9&n{fK?)WSKw7-`a|vo`^yge>wTFaSU5#Lj0d_WgSak-mxUwkiDt049wP6
zy|hAk^5^(11)qK7Jq^8oUGM{^D4IMje-_Vgks@;W<;x`yH#J;{PET6}4T}hsWw``X
z_`M?(hw8c@&Y$Q)s3ChlU6wgt*Kd^*23sYWKPmW*`H}E5P?jMiyQGq|@wby!Kg=Hu
zekOms3o;wB3RV^>79G@8?O(#d*Az<3pA3G&aFB8h7D-gT0yyb$=H&dzS(G`f#ZIaz
z`$yWOW!k4c&$pA#ZxuKtf5;zk!3!zpNgkA$^G|QevM(~aqb2D$-80MmJ8jakJJwtF
zZsl8&cYdCqKjea((y$40{_OE5O}`-p<(C6bo}bVrEz|zf?_l}Pln-H<`Qy4E;(}o4
ztCj~-k@Np*$UTqr!vSrMjlILy^zw#u`273{F1QRy{Qgqdg^JD9cy}lH!=E6l%Aa5_
z6y{8=_#*0FLgRk&2fm*wd}93FO=XS<UXQ0@6w_RT`d84j4(;9K4}8B?eqI0Q9VhU9
z1Y0lps2EtDS|ooBt((#LHu}!9p`_mrSXAW~s>;ut^0+{E^6=!>QS!IYvl9a!;PNDq
zl77FToEE+SKV3M;pMWhog<eIAi@77;gON5&9KiHkETl@V5w<Qwp7N4UHEpcmYU!QA
zUc8Bp8XVn*uD8+4m@7FA#^V{mv*b>WD7Z^LQqG9rYUxcj%AhfH={>Rq$5<S51NxgW
z*n;7`7<DnH5oeIb6M1;kwHyDNuCJUa0&PmCZ<&!#%r#Ro`uHO~ZuHi30VKcTdmlrt
zIObN2w_}Q4e~cL=r+tNwL#Esb@w@x3VhG+njauLjz{<YR9Vt96))M;7VG3dTqiE~?
zbfjKb7t~;$x;b^!W&t5j6V_}V{ro!Caxpo*t+>r}{rpekmLJQV{J>80u|Ph7js6FY
C`uY<9

diff --git a/wxPython/tests/bitmaps/tog1.bmp b/wxPython/tests/bitmaps/tog1.bmp
deleted file mode 100644
index 75f6e7c4cb5d8733655a31cdedc5a6e8a2cdf611..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 238
zcmZ?rea8R+Wk5;;hy{R{ABY(lSb!u0Lj@2Y;e%kX0G!y*zyL%H`}adAAPHnL95`@*
vp`oDxDDfYR82<kUv49u|K|(;H90^oF*aaMv(j6V`<v@FY07fI(0$~CG7i38o

diff --git a/wxPython/tests/bitmaps/tog2.bmp b/wxPython/tests/bitmaps/tog2.bmp
deleted file mode 100644
index 7d6e7d580e2acc868a74c3943effbd0e8f3e6338..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 238
zcmZ?rea8R+Wk5;;hy{R{ABY(lSb!u0Lj@2Y;e%kX0G!y*zyL%H`}adAAPHnL95`@*
rp`oDxDDfYR82<kUv49u|K|(;H90|ZU6ww7h3m6#K%V9K<`N&KF!?#Gx

diff --git a/wxPython/tests/blit.py b/wxPython/tests/blit.py
deleted file mode 100644
index 6d7b9f5b33..0000000000
--- a/wxPython/tests/blit.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#-------------------------------------------------
-
-from wxPython.wx import *
-
-
-class MyFrame(wxFrame):
-    def __init__(self,parent,title,id):
-        wxFrame.__init__(self,parent,title,id,
-                         wxPoint(100,100),wxSize(300,300))
-
-
-        self.SetBackgroundColour(wxWHITE)
-        self.windowx,self.windowy=self.GetClientSizeTuple()
-
-        # make a memory DC to draw into...
-        self.mask=wxMemoryDC()
-
-        self.maskbitmap=wxEmptyBitmap(self.windowx,self.windowy)
-        self.mask.SelectObject(self.maskbitmap)
-        self.mask.SetBackgroundMode(wxTRANSPARENT)
-
-        self.mask.SetDeviceOrigin(0,0)
-
-        self.mask.SetBrush(wxBrush(wxColour(150,160,0),wxSOLID))
-        self.mask.SetPen(wxPen(wxColour(1,2,3),1,wxSOLID))
-        self.mask.DrawRectangle(0,0,self.windowx,self.windowy)
-
-        img = wxImageFromBitmap(self.maskbitmap)
-        print (img.GetRed(0,0), img.GetGreen(0,0), img.GetBlue(0,0))
-
-
-    def OnPaint(self,evt):
-        """ overriding OnPaint to give handler. """
-        dc = wxPaintDC(self)
-
-        dc.Blit(0,0,self.windowx,self.windowy,self.mask,0,0,wxCOPY)
-
-#-----------------------------------------------------------
-
-if __name__ == "__main__":
-    class MyApp(wxApp):
-        def OnInit(self):
-
-            self.frame = MyFrame(NULL, -1, "Blit Test")
-            self.frame.Show(true)
-
-            self.exiting = FALSE;
-            return true
-
-    app = MyApp(0)     # Create an instance of the application
-    app.MainLoop()     # Tell it to start processing events
-
-
-
diff --git a/wxPython/tests/dynamicform.py b/wxPython/tests/dynamicform.py
deleted file mode 100644
index e65b3fddc5..0000000000
--- a/wxPython/tests/dynamicform.py
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-from wxPython.wx import *
-
-class FieldData:
-    def __init__(self, name, label, shortHelp="", defValue="",
-                 size=(-1, -1), style=0, ID=-1):
-        self.name = name
-        self.label = label
-        self.shortHelp = shortHelp
-        self.defValue = defValue
-        self.size = size
-        self.style = style
-        self.ID = ID
-
-
-class DynamicForm(wxPanel):
-    def __init__(self, parent, ID, fieldData):
-        wxPanel.__init__(self, parent, ID)
-
-        sizer = wxFlexGridSizer(cols=2, vgap=5, hgap=5)
-        for field in fieldData:
-            label = wxStaticText(self, -1, field.label)
-            sizer.Add(label, 0, wxALIGN_RIGHT)
-            text = wxTextCtrl(self, field.ID, field.defValue,
-                              size=field.size, style=field.style)
-            if field.shortHelp:
-                text.SetToolTip(wxToolTip(field.shortHelp))
-            self.__dict__["get_"+field.name] = text.GetValue
-            self.__dict__["set_"+field.name] = text.SetValue
-            sizer.Add(text, 0, wxEXPAND)
-
-        sizer.Fit(self)
-        self.SetAutoLayout(true)
-        self.SetSizer(sizer)
-
-
-class TestFrame(wxFrame):
-    testFields = [
-        FieldData("fname", "First name:", "Enter someone's first name"),
-        FieldData("lname", "Last name:",  "Enter someone's last name"),
-        FieldData("email", "Email address:", "just figure it out..."),
-        ]
-    def __init__(self):
-        wxFrame.__init__(self, None, -1, "This is a test")
-        form = DynamicForm(self, -1, self.testFields)
-        form.set_fname("Robin")
-        form.set_lname("Dunn")
-        self.form = form
-        self.Fit()
-        EVT_CLOSE(self, self.OnCloseWindow)
-
-    def OnCloseWindow(self, evt):
-        print self.form.get_email()
-        self.Destroy()
-
-
-app = wxPySimpleApp()
-frame = TestFrame()
-frame.Show(true)
-app.MainLoop()
-
diff --git a/wxPython/tests/fs_test.py b/wxPython/tests/fs_test.py
deleted file mode 100644
index f9712cd01b..0000000000
--- a/wxPython/tests/fs_test.py
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-from wxPython.wx import *
-import glob
-
-class File2(wxFileSystemHandler):
-
-    def CanOpen(self,location):
-        return self.GetProtocol(location) == "file2"
-
-    def OpenFile(self,fs,location):
-        return wxFSFile(wxInputStream(open(self.GetRightLocation(location),"rb")),
-                                      location,"text/plain","",wxDateTime())
-
-    def FindFirst(self,location,flags):
-        # the flags are ignored
-        self.files = glob.glob(self.GetRightLocation(location))
-        if len(self.files) == 0:
-            return ""
-        else:
-            return self.files[0]
-
-    def FindNext(self):
-        self.files = self.files[1:]
-        if len(self.files) == 0:
-            return ""
-        else:
-            return self.files[0]
-
-# register new handler
-wxFileSystem_AddHandler(File2())
-fs = wxFileSystem()
-
-# cat /etc/passwd
-print fs.OpenFile("file2:/projects/files.lst").GetStream().read()
-
-# ls /etc/*
-fn = fs.FindFirst("file2:/projects/*")
-while fn:
-    print fn
-    fn = fs.FindNext()
diff --git a/wxPython/tests/getvalues.py b/wxPython/tests/getvalues.py
deleted file mode 100644
index 562a3179e0..0000000000
--- a/wxPython/tests/getvalues.py
+++ /dev/null
@@ -1,48 +0,0 @@
-from wxPython.wx import *
-
-class MyDlg(wxDialog):
-    def __init__(self, parent):
-        wxDialog.__init__(self, parent, -1, "This is a test",
-                          wxDefaultPosition, wxSize(150, 150))
-
-        self.text1 = wxTextCtrl(self, -1, "", wxPoint(10, 10), wxSize(120, -1))
-        self.text2 = wxTextCtrl(self, -1, "", wxPoint(10, 40), wxSize(120, -1))
-
-        wxButton(self, wxID_OK, "Okay", wxPoint(10,70)).SetDefault()
-        wxButton(self, wxID_CANCEL, "Cancel", wxPoint(60, 70))
-
-
-    def GetValues(self):
-        val1 = self.text1.GetValue()
-        val2 = self.text2.GetValue()
-        return (val1, val2)
-
-
-
-
-class MyApp(wxApp):
-    def OnInit(self):
-
-        frame = wxFrame(NULL, -1, "")
-        wxButton(frame, 101, "test it", wxDefaultPosition, wxSize(50, 25))
-        EVT_BUTTON(frame, 101, self.OnClick)
-        frame.Fit()
-        frame.Show(true)
-
-        self.SetTopWindow(frame)
-        return true
-
-    def OnClick(self, event):
-        dlg = MyDlg(NULL)
-        if dlg.ShowModal() == wxID_OK:
-            values = dlg.GetValues()
-            print "Your values are: %s" % str(values)
-        else:
-            print "You canceled!"
-
-        dlg.Destroy()
-
-
-
-app = MyApp(0)
-app.MainLoop()
diff --git a/wxPython/tests/grid.py b/wxPython/tests/grid.py
deleted file mode 100644
index 85c629398d..0000000000
--- a/wxPython/tests/grid.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from wxPython.wx import *
-from wxPython.lib.grids import wxFlexGridSizer
-
-class aFrame(wxFrame):
-    def __init__(self, parent=NULL, id=-1, title="test"):
-        wxFrame.__init__(self, parent, id, title)
-        s =wxBoxSizer(wxVERTICAL)
-        gs =wxFlexGridSizer(2, 2, 2, 2)
-        for label in ('one', 'two', 'tree', 'four'):
-            gs.Add(wxButton(self, -1, label, size=(100,100)), 1, wxEXPAND)
-        s.Add(gs, 1, wxEXPAND|wxALL, 50)
-        self.SetSizer(s)
-        self.SetAutoLayout(TRUE)
-        s.Fit(self)
-
-class MyApp(wxApp):
-    def OnInit(self):
-      frame =aFrame()
-      self.SetTopWindow(frame)
-      frame.Show(TRUE)
-      return TRUE
-
-app=MyApp(0)
-app.MainLoop()
diff --git a/wxPython/tests/gridtest.py b/wxPython/tests/gridtest.py
deleted file mode 100644
index 8635051d5c..0000000000
--- a/wxPython/tests/gridtest.py
+++ /dev/null
@@ -1,219 +0,0 @@
-# wxGrid workout
-
-import sys
-
-#----------------------------------------------------------------------------
-from   wxPython.wx import *
-from   wxPython.grid import *
-
-class MyCellEditor(wxPyGridCellEditor):
-    """
-    A custom GridCellEditor that only accepts numbers.
-    Also tries to work around wxGTK anomaly that key cannot start edit.
-    """
-
-    def Create(self, parent, id, evtHandler):
-        """
-        Called to create the control, which must derive from wxControl.
-        *Must Override*
-        """
-        print "Create"
-        theStyle = 0
-        if wxPlatform == '__WXMSW__':
-            theStyle = wxTE_PROCESS_TAB | wxTE_MULTILINE | wxTE_NO_VSCROLL | wxTE_AUTO_SCROLL
-            #theStyle = wxTE_PROCESS_TAB | wxTE_PROCESS_ENTER
-
-        self._tc = wxTextCtrl(parent, id, "", style=theStyle)
-        self._tc.SetInsertionPoint(0)
-        self.SetControl(self._tc)
-        if evtHandler:
-            print evtHandler
-            self._tc.PushEventHandler(evtHandler)
-
-
-    def SetSize(self, rect):
-        """
-        Called to position/size the edit control within the cell rectangle.
-        If you don't fill the cell (the rect) then be sure to override
-        PaintBackground and do something meaningful there.
-        """
-        self._tc.SetDimensions(rect.x-1, rect.y-1, rect.width+4, rect.height+4)
-
-    def BeginEdit(self, row, col, grid):
-        """
-        Fetch the value from the table and prepare the edit control
-        to begin editing.  Set the focus to the edit control.
-        *Must Override*
-        """
-        print "BeginEdit"
-        self.startValue = grid.GetTable().GetValue(row, col)
-        self._tc.SetValue(self.startValue)
-        self._tc.SetFocus()
-
-    def EndEdit(self, row, col, grid):
-        """
-        Complete the editing of the current cell. Returns true if the value
-        has changed.  If necessary, the control may be destroyed.
-        *Must Override*
-        """
-        changed = false
-        val = self._tc.GetValue()
-        if val != self.startValue:
-            changed = true
-            grid.GetTable().SetValue(row, col, val) # update the table
-
-        self.startValue = ''
-        self._tc.SetValue('')
-        return changed
-
-
-    def Reset(self):
-        """
-        Reset the value in the control back to its starting value.
-        *Must Override*
-        """
-        self._tc.SetValue(self.startValue)
-        self._tc.SetInsertionPointEnd()
-
-
-    def IsAcceptedKey(self, evt):
-        """
-        Return TRUE to allow the given key to start editing: the base class
-        version only checks that the event has no modifiers.
-        """
-        key = evt.GetKeyCode()
-        print "KeyCode:", key
-        if (key in range(ord('0'),ord('9')+1) or
-            key in range(WXK_NUMPAD0, WXK_NUMPAD9+1)):
-            return true
-        else:
-            return false
-
-
-    def StartingKey(self, evt):
-        """
-        If the editor is enabled by pressing keys on the grid, this will be
-        called to let the editor do something about that first key if desired.
-        """
-        key = evt.GetKeyCode()
-        print "StartingKey", key
-        ch = None
-        if key in range(WXK_NUMPAD0, WXK_NUMPAD9+1):
-            ch = ch = chr(ord('0') + key - WXK_NUMPAD0)
-
-        elif key < 256 and key >= 0 and chr(key) in string.printable:
-            ch = chr(key)
-            if not evt.ShiftDown():
-                ch = ch.lower()
-
-        if ch is not None:
-            # Replace the text.  Other option would be to append it.
-            # self._tc.AppendText(ch)
-            self._tc.SetValue(ch)
-            self._tc.SetInsertionPointEnd()
-        else:
-            evt.Skip()
-
-
-    def Destroy(self):
-        """final cleanup"""
-        self.base_Destroy()
-
-
-    def Clone(self):
-        """
-        Create a new object which is the copy of this one
-        *Must Override*
-        """
-        print "clone"
-        return MyCellEditor()
-
-
-class MyGrid(wxGrid):
-    def __init__(self, parent, cust):
-        wxGrid.__init__(self, parent, -1)
-        self.CreateGrid(10, 10)
-        for column in xrange(10):
-            self.SetColSize(column, 40)
-
-        self.SetDefaultCellAlignment(wxCENTRE, wxCENTRE)
-
-        import os
-        if cust:
-            for column in xrange(10):
-                # Note, we create attr and cell editor for each column
-                # otherwise segfault at exit, probably tries to free those
-                # multiple times from each column.
-                attr = wxGridCellAttr()
-                attr.SetEditor(MyCellEditor())
-                self.SetColAttr(column, attr)
-
-
-#----------------------------------------------------------------------------
-
-class CardNoteBook(wxNotebook):
-    def __init__(self, parent, id):
-        wxNotebook.__init__(self, parent, id)
-
-        for title, cust in [("Default", 0), ("Custom Cell Editor", 1)]:
-            win = MyGrid(self, cust)
-            self.AddPage(win, title)
-
-        EVT_NOTEBOOK_PAGE_CHANGED(self, self.GetId(), self.OnPageChanged)
-        EVT_KEY_DOWN(self, self.OnKeyDown)
-        EVT_NAVIGATION_KEY(self, self.OnNavKey)
-
-
-    def OnKeyDown(self, evt):
-        print 'CardNoteBook.OnKeyDown: ', evt.GetKeyCode()
-        evt.Skip()
-
-
-    def OnNavKey(self, evt):
-        print 'CardNoteBook.OnNavKey:', evt
-        evt.Skip()
-
-    def OnPageChanged(self, event):
-        event.Skip()
-
-
-#----------------------------------------------------------------------------
-
-class ScoreKeeper(wxFrame):
-    def __init__(self, parent, id, title):
-        wxFrame.__init__(self, parent, -1, title, size = (500, 400),
-                         style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE)
-        EVT_CLOSE(self, self.OnCloseWindow)
-        self.Centre(wxBOTH)
-
-        self.nb = CardNoteBook(self, -1)
-        #win=MyGrid(self, "GTK")
-        self.Show(true)
-
-    def OnCloseWindow(self, event):
-        self.dying = true
-        self.window = None
-        self.mainmenu = None
-        self.Destroy()
-
-    def OnFileExit(self, event):
-        self.Close()
-
-#----------------------------------------------------------------------------
-
-class MyApp(wxApp):
-    def OnInit(self):
-        frame = ScoreKeeper(None, -1, "ScoreKeeper: (A Demonstration)")
-        frame.Show(true)
-        self.SetTopWindow(frame)
-        return true
-
-
-
-#---------------------------------------------------------------------------
-
-def main():
-    app = MyApp(0)
-    app.MainLoop()
-
-main()
diff --git a/wxPython/tests/hangman.py b/wxPython/tests/hangman.py
deleted file mode 100644
index c735372bf4..0000000000
--- a/wxPython/tests/hangman.py
+++ /dev/null
@@ -1,390 +0,0 @@
-"""Hangman.py, a simple wxPython game, inspired by the
-old bsd game by Ken Arnold.
-From the original man page:
-
- In hangman, the computer picks a word from the on-line
- word list and you must try to guess it.  The computer
- keeps track of which letters have been guessed and how
- many wrong guesses you have made on the screen in a
- graphic fashion.
-
-That says it all, doesn't it?
-
-Have fun with it,
-
-Harm van der Heijden (H.v.d.Heijden@phys.tue.nl)"""
-
-import random,re
-from wxPython.wx import *
-
-class WordFetcher:
-    def __init__(self, filename, min_length = 5):
-        self.min_length = min_length
-        print "Trying to open file %s" % (filename,)
-        try:
-            f = open(filename, "r")
-        except:
-            print "Couldn't open dictionary file %s, using build-ins" % (filename,)
-            self.words = self.builtin_words
-            self.filename = None
-            return
-        self.words = f.read()
-        self.filename = filename
-        print "Got %d bytes." % (len(self.words),)
-    def SetMinLength(min_length):
-        self.min_length = min_length
-    def Get(self):
-        reg = re.compile('\s+([a-zA-Z]+)\s+')
-        n = 50 # safety valve; maximum number of tries to find a suitable word
-        while n:
-            index = int(random.random()*len(self.words))
-            m = reg.search(self.words[index:])
-            if m and len(m.groups()[0]) >= self.min_length: break
-            n = n - 1
-        if n: return string.lower(m.groups()[0])
-        return "error"
-    builtin_words = ' albatros  banana  electrometer  eggshell'
-
-def stdprint(x):
-    print x
-
-class URLWordFetcher(WordFetcher):
-    def __init__(self, url):
-        self.OpenURL(url)
-        WordFetcher.__init__(self, "hangman_dict.txt")
-    def logprint(self,x):
-        print x
-    def RetrieveAsFile(self, host, path=''):
-        from httplib import HTTP
-        try:
-            h = HTTP(host)
-        except:
-            self.logprint("Failed to create HTTP connection to %s... is the network available?" % (host))
-            return None
-        h.putrequest('GET',path)
-        h.putheader('Accept','text/html')
-        h.putheader('Accept','text/plain')
-        h.endheaders()
-        errcode, errmsg, headers = h.getreply()
-        if errcode != 200:
-            self.logprint("HTTP error code %d: %s" % (errcode, errmsg))
-            return None
-        f = h.getfile()
-        return f
-    def OpenURL(self,url):
-        from htmllib import HTMLParser
-        import formatter
-        self.url = url
-        m = re.match('http://([^/]+)(/\S*)\s*', url)
-        if m:
-            host = m.groups()[0]
-            path = m.groups()[1]
-        else:
-            m = re.match('http://(\S+)\s*', url)
-            if not m:
-                # Invalid URL
-                self.logprint("Invalid or unsupported URL: %s" % (url))
-                return
-            host = m.groups()[0]
-            path = ''
-        f = self.RetrieveAsFile(host,path)
-        if not f:
-            self.logprint("Could not open %s" % (url))
-            return
-        self.logprint("Receiving data...")
-        data = f.read()
-        tmp = open('hangman_dict.txt','w')
-        fmt = formatter.AbstractFormatter(formatter.DumbWriter(tmp))
-        p = HTMLParser(fmt)
-        self.logprint("Parsing data...")
-        p.feed(data)
-        p.close()
-        tmp.close()
-
-class HangmanWnd(wxWindow):
-    def __init__(self, parent, id, pos=wxDefaultPosition, size=wxDefaultSize):
-        wxWindow.__init__(self, parent, id, pos, size)
-        self.SetBackgroundColour(wxNamedColour('white'))
-        if wxPlatform == '__WXGTK__':
-            self.font = wxFont(12, wxMODERN, wxNORMAL, wxNORMAL)
-        else:
-            self.font = wxFont(10, wxMODERN, wxNORMAL, wxNORMAL)
-        self.SetFocus()
-    def StartGame(self, word):
-        self.word = word
-        self.guess = []
-        self.tries = 0
-        self.misses = 0
-        self.Draw()
-    def EndGame(self):
-        self.misses = 7;
-        self.guess = map(chr, range(ord('a'),ord('z')+1))
-        self.Draw()
-    def HandleKey(self, key):
-        self.message = ""
-        if self.guess.count(key):
-            self.message = 'Already guessed %s' % (key,)
-            return 0
-        self.guess.append(key)
-        self.guess.sort()
-        self.tries = self.tries+1
-        if not key in self.word:
-            self.misses = self.misses+1
-        if self.misses == 7:
-            self.EndGame()
-            return 1
-        has_won = 1
-        for letter in self.word:
-            if not self.guess.count(letter):
-                has_won = 0
-                break
-        if has_won:
-            self.Draw()
-            return 2
-        self.Draw()
-        return 0
-    def Draw(self, dc = None):
-        if not dc:
-            dc = wxClientDC(self)
-        dc.SetFont(self.font)
-        dc.Clear()
-        (x,y) = self.GetSizeTuple()
-        x1 = x-200; y1 = 20
-        for letter in self.word:
-            if self.guess.count(letter):
-                dc.DrawText(letter, x1, y1)
-            else:
-                dc.DrawText('.', x1, y1)
-            x1 = x1 + 10
-        x1 = x-200
-        dc.DrawText("tries %d misses %d" % (self.tries,self.misses),x1,50)
-        guesses = ""
-        for letter in self.guess:
-            guesses = guesses + letter
-        dc.DrawText("guessed:", x1, 70)
-        dc.DrawText(guesses[:13], x1+80, 70)
-        dc.DrawText(guesses[13:], x1+80, 90)
-        dc.SetUserScale(x/1000., y/1000.)
-        self.DrawVictim(dc)
-    def DrawVictim(self, dc):
-        dc.SetPen(wxPen(wxNamedColour('black'), 20))
-        dc.DrawLines([(10, 980), (10,900), (700,900), (700,940), (720,940),
-                      (720,980), (900,980)])
-        dc.DrawLines([(100,900), (100, 100), (300,100)])
-        dc.DrawLine(100,200,200,100)
-        if ( self.misses == 0 ): return
-        dc.SetPen(wxPen(wxNamedColour('blue'), 10))
-        dc.DrawLine(300,100,300,200)
-        if ( self.misses == 1 ): return
-        dc.DrawEllipse(250,200,100,100)
-        if ( self.misses == 2 ): return
-        dc.DrawLine(300,300,300,600)
-        if ( self.misses == 3) : return
-        dc.DrawLine(300,300,250,550)
-        if ( self.misses == 4) : return
-        dc.DrawLine(300,300,350,550)
-        if ( self.misses == 5) : return
-        dc.DrawLine(300,600,350,850)
-        if ( self.misses == 6) : return
-        dc.DrawLine(300,600,250,850)
-    def OnPaint(self, event):
-        dc = wxPaintDC(self)
-        self.Draw(dc)
-
-class HangmanDemo(HangmanWnd):
-    def __init__(self, wf, parent, id, pos, size):
-        HangmanWnd.__init__(self, parent, id, pos, size)
-        self.StartGame("dummy")
-        self.start_new = 1
-        self.wf = wf
-        self.delay = 500
-        self.timer = self.PlayTimer(self.MakeMove)
-    def MakeMove(self):
-        self.timer.Stop()
-        if self.start_new:
-            self.StartGame(self.wf.Get())
-            self.start_new = 0
-            self.left = list('aaaabcdeeeeefghiiiiijklmnnnoooopqrssssttttuuuuvwxyz')
-        else:
-            key = self.left[int(random.random()*len(self.left))]
-            while self.left.count(key): self.left.remove(key)
-            self.start_new = self.HandleKey(key)
-        self.timer.Start(self.delay)
-    def Stop(self):
-        self.timer.Stop()
-    class PlayTimer(wxTimer):
-        def __init__(self,func):
-            wxTimer.__init__(self)
-            self.func = func
-            self.Start(1000)
-        def Notify(self):
-            apply(self.func, ())
-
-class HangmanDemoFrame(wxFrame):
-    def __init__(self, wf, parent, id, pos, size):
-        wxFrame.__init__(self, parent, id, "Hangman demo", pos, size)
-        self.demo = HangmanDemo(wf, self, -1, wxDefaultPosition, wxDefaultSize)
-    def OnCloseWindow(self, event):
-        self.demo.timer.Stop()
-        self.Destroy()
-
-class AboutBox(wxDialog):
-    def __init__(self, parent,wf):
-        wxDialog.__init__(self, parent, -1, "About Hangman", wxDefaultPosition, wxSize(350,450))
-        self.wnd = HangmanDemo(wf, self, -1, wxPoint(1,1), wxSize(350,150))
-        self.static = wxStaticText(self, -1, __doc__, wxPoint(1,160), wxSize(350, 250))
-        self.button = wxButton(self, 2001, "OK", wxPoint(150,420), wxSize(50,-1))
-        EVT_BUTTON(self, 2001, self.OnOK)
-    def OnOK(self, event):
-        self.wnd.Stop()
-        self.EndModal(wxID_OK)
-
-class MyFrame(wxFrame):
-    def __init__(self, wf):
-        self.wf = wf
-        wxFrame.__init__(self, NULL, -1, "hangman", wxDefaultPosition, wxSize(400,300))
-        self.wnd = HangmanWnd(self, -1)
-        menu = wxMenu()
-        menu.Append(1001, "New")
-        menu.Append(1002, "End")
-        menu.AppendSeparator()
-        menu.Append(1003, "Reset")
-        menu.Append(1004, "Demo...")
-        menu.AppendSeparator()
-        menu.Append(1005, "Exit")
-        menubar = wxMenuBar()
-        menubar.Append(menu, "Game")
-        menu = wxMenu()
-        #menu.Append(1010, "Internal", "Use internal dictionary", TRUE)
-        menu.Append(1011, "ASCII File...")
-        urls = [ 'wxPython home', 'http://208.240.253.245/wxPython/main.html',
-                 'slashdot.org', 'http://slashdot.org/',
-                 'cnn.com', 'http://cnn.com',
-                 'The New York Times', 'http://www.nytimes.com',
-                 'De Volkskrant', 'http://www.volkskrant.nl/frameless/25000006.html',
-                 'Gnu GPL', 'http://www.fsf.org/copyleft/gpl.html',
-                 'Bijbel: Genesis', 'http://www.coas.com/bijbel/gn1.htm']
-        urlmenu = wxMenu()
-        for item in range(0,len(urls),2):
-            urlmenu.Append(1020+item/2, urls[item], urls[item+1])
-        urlmenu.Append(1080, 'Other...', 'Enter an URL')
-        menu.AppendMenu(1012, 'URL', urlmenu, 'Use a webpage')
-        menu.Append(1013, 'Dump', 'Write contents to stdout')
-        menubar.Append(menu, "Dictionary")
-        self.urls = urls
-        self.urloffset = 1020
-        menu = wxMenu()
-        menu.Append(1090, "About...")
-        menubar.Append(menu, "Help")
-        self.SetMenuBar(menubar)
-        self.CreateStatusBar(2)
-        EVT_MENU(self, 1001, self.OnGameNew)
-        EVT_MENU(self, 1002, self.OnGameEnd)
-        EVT_MENU(self, 1003, self.OnGameReset)
-        EVT_MENU(self, 1004, self.OnGameDemo)
-        EVT_MENU(self, 1005, self.OnWindowClose)
-        EVT_MENU(self, 1011, self.OnDictFile)
-        EVT_MENU_RANGE(self, 1020, 1020+len(urls)/2, self.OnDictURL)
-        EVT_MENU(self, 1080, self.OnDictURLSel)
-        EVT_MENU(self, 1013, self.OnDictDump)
-        EVT_MENU(self, 1090, self.OnHelpAbout)
-        EVT_CHAR(self.wnd, self.OnChar)
-        self.OnGameReset()
-    def OnGameNew(self, event):
-        word = self.wf.Get()
-        self.in_progress = 1
-        self.SetStatusText("",0)
-        self.wnd.StartGame(word)
-    def OnGameEnd(self, event):
-        self.UpdateAverages(0)
-        self.in_progress = 0
-        self.SetStatusText("",0)
-        self.wnd.EndGame()
-    def OnGameReset(self, event=None):
-        self.played = 0
-        self.won = 0
-        self.history = []
-        self.average = 0.0
-        self.OnGameNew(None)
-    def OnGameDemo(self, event):
-        frame = HangmanDemoFrame(self.wf, self, -1, wxDefaultPosition, self.GetSize())
-        frame.Show(TRUE)
-    def OnDictFile(self, event):
-        fd = wxFileDialog(self)
-        if (self.wf.filename):
-            fd.SetFilename(self.wf.filename)
-        if fd.ShowModal() == wxID_OK:
-            file = fd.GetPath()
-            self.wf = WordFetcher(file)
-    def OnDictURL(self, event):
-        item = (event.GetId() - self.urloffset)*2
-        print "Trying to open %s at %s" % (self.urls[item], self.urls[item+1])
-        self.wf = URLWordFetcher(self.urls[item+1])
-    def OnDictURLSel(self, event):
-        msg = wxTextEntryDialog(self, "Enter the URL of the dictionary document", "Enter URL")
-        if msg.ShowModal() == wxID_OK:
-            url = msg.GetValue()
-            self.wf = URLWordFetcher(url)
-    def OnDictDump(self, event):
-        print self.wf.words
-    def OnHelpAbout(self, event):
-        about = AboutBox(self, self.wf)
-        about.ShowModal()
-        about.wnd.Stop() # that damn timer won't stop!
-    def UpdateAverages(self, has_won):
-        if has_won:
-            self.won = self.won + 1
-        self.played = self.played+1
-        self.history.append(self.wnd.misses) # ugly
-        total = 0.0
-        for m in self.history:
-            total = total + m
-        self.average = float(total/len(self.history))
-    def OnChar(self, event):
-        if not self.in_progress:
-            self.OnGameNew(None)
-            return
-        key = event.KeyCode();
-        if key >= ord('A') and key <= ord('Z'):
-            key = key + ord('a') - ord('A')
-        key = chr(key)
-        if key < 'a' or key > 'z':
-            event.Skip()
-            return
-        res = self.wnd.HandleKey(key)
-        if res == 0:
-            self.SetStatusText(self.wnd.message)
-        elif res == 1:
-            self.UpdateAverages(0)
-            self.SetStatusText("Too bad, you're dead!",0)
-            self.in_progress = 0
-        elif res == 2:
-            self.in_progress = 0
-            self.UpdateAverages(1)
-            self.SetStatusText("Congratulations!",0)
-        if self.played:
-            percent = (100.*self.won)/self.played
-        else:
-            percent = 0.0
-        self.SetStatusText("p %d, w %d (%g %%), av %g" % (self.played,self.won, percent, self.average),1)
-
-    def OnWindowClose(self, event):
-        self.Destroy()
-
-class MyApp(wxApp):
-    def OnInit(self):
-        if wxPlatform == '__WXGTK__':
-            defaultfile = "/usr/share/games/hangman-words"
-        elif wxPlatform == '__WXMSW__':
-            defaultfile = "c:\\windows\\hardware.txt"
-        else:
-            defaultfile = ""
-        wf = WordFetcher(defaultfile)
-        frame = MyFrame(wf)
-        self.SetTopWindow(frame)
-        frame.Show(TRUE)
-        return TRUE
-
-if __name__ == '__main__':
-    app = MyApp(0)
-    app.MainLoop()
diff --git a/wxPython/tests/hook.py b/wxPython/tests/hook.py
deleted file mode 100644
index 990e9bafe4..0000000000
--- a/wxPython/tests/hook.py
+++ /dev/null
@@ -1,45 +0,0 @@
-from wxPython.wx import *
-
-class MyFrame(wxFrame):
-    def __init__(self, parent, id, title):
-        wxFrame.__init__(self, parent, id, title,
-                         wxDefaultPosition, wxSize(400, 400))
-        self.panel = wxPanel(self, -1)
-        wxStaticText(self.panel, -1, "wxTextCtrl", wxPoint(5, 25),
-                     wxSize(75, 20))
-        self.tc = wxTextCtrl(self.panel, 10, "", wxPoint(80, 25),
-                             wxSize(200, 30))
-        EVT_CHAR_HOOK(self, self.OnCharHook)
-        #EVT_CHAR_HOOK(self.tc, self.OnCharHook)
-        EVT_CHAR(self, self.OnChar)
-        self.panel.Layout()
-        return
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-        return
-
-    def OnChar(self, event):
-        print "OnChar: %d '%c'" % (event.KeyCode(), chr(event.KeyCode()))
-        event.Skip()
-        return
-
-    def OnCharHook(self, event):
-        print "OnCharHook: %d" % event.KeyCode()
-        event.Skip()
-        return
-
-
-class MyApp(wxApp):
-    def OnInit(self):
-        frame = MyFrame(None, -1, 'CharHook Test')
-        frame.Show(1)
-        self.SetTopWindow(frame)
-        return 1
-
-
-app = MyApp(0)
-app.MainLoop()
-
-
-
diff --git a/wxPython/tests/info.bmp b/wxPython/tests/info.bmp
deleted file mode 100644
index 709cd923361c94d42f4a4d040908eb961bcb6a07..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 370
zcmZ9HJqp4=5QRq&l2QvVU}f(GL<Z6*xrMbzkaVs;=u?E$UcnPs<^Uc?a0_95vq}(W
zcOGBfzGSlF>7pgEmec{e_wAOnqyLKfk<Jf`xVXhRBQ}>=l)A3zgt#RHBQ}>=6g0IR
z5)X4pO5k`Q7OJBJINt#xA5!dRfT5~@`KM~`p`&u$#g3+@q(EhH<K%p=h><fV4JSYR
z@AKU}JXFo+Ct{UOY?j(=kUcXTn0Yco`E92wZ2I8AB+$m`%D?c1X5o9iigzV4-;|R#
DAS8o;

diff --git a/wxPython/tests/leave.py b/wxPython/tests/leave.py
deleted file mode 100644
index bd2cca3509..0000000000
--- a/wxPython/tests/leave.py
+++ /dev/null
@@ -1,26 +0,0 @@
-from wxPython.wx import *
-
-class TestFrame(wxFrame):
-
-    def __init__(self):
-        wxFrame.__init__(self,NULL,-1,"Test Frame",wxPoint(200,200))
-        win = wxWindow(self, -1)
-        self.Show(true)
-        EVT_LEAVE_WINDOW(win, self.onLeave)
-        EVT_ENTER_WINDOW(win, self.onEnter)
-
-    def onLeave(self, event):
-        print("out")
-
-    def onEnter(self, event):
-        print('in')
-
-class MyApp(wxApp):
-
-    def OnInit(self):
-        self.mainFrame = TestFrame()
-        return true
-
-app = MyApp(0)
-app.MainLoop()
-
diff --git a/wxPython/tests/listGetItem.py b/wxPython/tests/listGetItem.py
deleted file mode 100644
index 1db340fa51..0000000000
--- a/wxPython/tests/listGetItem.py
+++ /dev/null
@@ -1,61 +0,0 @@
-from wxPython.wx import *
-
-LIST_ID = 101
-
-class MyFrame(wxFrame):
-    def __init__(self, parent, id, title):
-        wxFrame.__init__(self, parent, id, title,
-                         wxDefaultPosition, wxSize(400, 400))
-        self.panel = wxPanel(self, -1)
-        self.list = wxListCtrl(self.panel, LIST_ID,
-                               wxPoint(10, 10), wxSize(370, 330),
-                               wxLC_REPORT|wxSUNKEN_BORDER)
-        self.list.InsertColumn(0, "Id")
-        self.list.InsertColumn(1, "Type")
-        self.list.InsertColumn(2, "Description")
-
-        self.insertRow(self.list, 0, 'CD', 'Dark Side of the Moon')
-        self.insertRow(self.list, 1, 'DVD', 'The Matrix')
-        self.insertRow(self.list, 2, 'Book', 'Crime and Punishment')
-
-        self.list.SetColumnWidth(0, wxLIST_AUTOSIZE_USEHEADER)
-        self.list.SetColumnWidth(1, wxLIST_AUTOSIZE)
-        self.list.SetColumnWidth(2, wxLIST_AUTOSIZE_USEHEADER)
-
-        EVT_LIST_ITEM_SELECTED(self.panel, LIST_ID, self.OnListSelect)
-
-        self.panel.Layout()
-        return
-
-    def OnListSelect(self, event):
-        item = self.list.GetItem(event.m_itemIndex, 1)
-        print item.m_itemId, item.m_col, item.m_state
-        type = self.list.GetItem(event.m_itemIndex, col=1).m_text
-        desc = self.list.GetItem(event.m_itemIndex, col=2).m_text
-        print ('Row Selected: Id: %d, Type: %s, Desc: %s' %
-               (event.m_itemIndex, `type`, `desc`))
-        return
-
-    def insertRow(self, list, row, type, desc):
-        list.InsertStringItem(row, 'label' + `row`)
-        list.SetStringItem(row, 0, `row`)
-        list.SetStringItem(row, 1, type)
-        list.SetStringItem(row, 2, desc)
-        return
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-        return
-
-
-
-class MyApp(wxApp):
-    def OnInit(self):
-        frame = MyFrame(None, -1, 'ListCtrl Test')
-        frame.Show(1)
-        self.SetTopWindow(frame)
-        return 1
-
-
-app = MyApp(0)
-app.MainLoop()
diff --git a/wxPython/tests/memleak.py b/wxPython/tests/memleak.py
deleted file mode 100644
index 2e62181e19..0000000000
--- a/wxPython/tests/memleak.py
+++ /dev/null
@@ -1,157 +0,0 @@
-
-from wxPython.wx import *
-
-#-------------------------------------------------------------------
-# class MyWindow(wxScrolledWindow):
-#----------------------------------
-# Copes with the drawing of the main scrolled window.
-#
-# Data members:
-#  num - <int> number of list entries
-#  ostart - <int> line number of the top line of the previous redraw
-#  vw - <int> width of the viewing window
-#  vh - <int> height of the viewing window
-#  smalltext - <int> 0 = size 12pt, 1 = size 9pt text
-#
-# Method members:
-#  OnPaint(evt) - basic draw handler
-#  OnDraw(dc) - called by OnPaint, redraws the screen if required
-#  update(updatelist) - called every 3 seconds if updates are needed.
-
-class MyWindow(wxScrolledWindow):
-  def __init__(self,num,parent,id,pos,size,style):
-    wxScrolledWindow.__init__(self,parent,id,pos,size,style)
-    self.SetBackgroundColour(wxWHITE)
-
-    self.num=num
-    self.ostart=0
-    self.smalltext = 0
-    self.vw,self.vh=self.GetClientSizeTuple()
-
-    # calculate font pt size needed: a bit of a kludge to get round
-    # font compatibility problems of X and Windows.
-    dc=wxClientDC(self)
-
-    dc.SetFont(wxFont(12,wxDEFAULT,wxNORMAL,wxNORMAL,FALSE))
-    if dc.GetTextExtent("XXXXXXXXXX")[0] > 100:
-      self.smalltext = 1
-
-  def OnPaint(self,evt):
-    """ overriding OnPaint to give handler. """
-    dc = wxPaintDC(self)
-    self.PrepareDC(dc)
-    self.OnDraw(dc)
-
-  def update(self,updlist):
-    """ handles line by line updating of list entries. """
-    dc = wxClientDC(self)
-    self.PrepareDC(dc)
-    dc.SetBrush(wxWHITE_BRUSH)
-    dc.SetPen(wxWHITE_PEN)
-
-    if self.smalltext == 1:
-      dc.SetFont(wxFont(9,wxDEFAULT,wxNORMAL,wxNORMAL,FALSE))
-    else:
-      dc.SetFont(wxFont(12,wxDEFAULT,wxNORMAL,wxNORMAL,FALSE))
-
-    dc.BeginDrawing()
-
-    for i in updlist:
-      if i >= self.ostart and i < self.ostart+self.vh/17+1:
-        dc.DrawRectangle(0,i*17,self.vw,17)
-        dc.DrawText("This is a simple test.Line "+str(i)+".",
-                    10,i*17+2)
-    dc.EndDrawing()
-
-  def OnDraw(self,dc):
-    """ Main redraw function. """
-
-    if self.smalltext == 1:
-      dc.SetFont(wxFont(9,wxDEFAULT,wxNORMAL,wxNORMAL,FALSE))
-    else:
-      dc.SetFont(wxFont(12,wxDEFAULT,wxNORMAL,wxNORMAL,FALSE))
-
-    vx,vstart=self.ViewStart()
-    self.vw,self.vh=self.GetClientSizeTuple()
-    vend=vstart+(self.vh/17) + 1
-    if vend > self.num: vend = self.num
-
-    dc.BeginDrawing()
-    if vstart > self.ostart: # if moving downwards...
-      for i in range(vend-(vstart-self.ostart+1),vend):
-        dc.DrawText("This is a simple test. Line "+str(i)+".",
-                    10,i*17+2)
-
-    elif vstart < self.ostart: # if moving upwards...
-      for i in range(vstart,self.ostart):
-        dc.DrawText("This is a simple test. Line "+str(i)+".",
-                    10,i*17+2)
-
-    elif vstart == self.ostart: # if not moving (redraw)...
-      #dc.Clear()
-      for i in range(vstart,vend):
-        dc.DrawText("This is a simple test. Line "+str(i)+".",
-                    10,i*17+2)
-
-    dc.EndDrawing()
-    self.ostart=vstart
-
-#--------------------------------------------------------------------
-
-class MyTimer(wxTimer):
-  def __init__(self,frame):
-    wxTimer.__init__(self)
-    self.frame_ = frame
-
-  def Notify(self):
-    self.frame_.idle()
-
-
-class MyFrame(wxFrame):
-  def __init__(self, parent, id, title):
-    wxFrame.__init__(self, parent, id, title,
-                     wxPoint(100, 100), wxSize(500, 300))
-
-    # number of entries
-    self.num = 30
-
-    # set up the scrolling window...
-    self.sw = MyWindow(self.num,self, -1,
-                       wxDefaultPosition, wxDefaultSize,
-                       wxVSCROLL|wxSUNKEN_BORDER)
-
-    self.sw.SetScrollbars(1,17,0,self.num+1)
-
-    lc = wxLayoutConstraints()
-    lc.top.SameAs(self, wxTop, 5)
-    lc.left.SameAs(self, wxLeft, 5)
-    lc.bottom.SameAs(self, wxBottom, 5)
-    lc.right.SameAs(self, wxRight,5)
-    self.sw.SetConstraints(lc)
-
-    self.timer=MyTimer(self)
-    # stupidly short interval time to accelerate memory leak problem:
-    self.timer.Start(80)
-
-  def idle(self):
-    #usually just update one or two lines; to accelerate problem,
-    #every line is updated here.
-    self.sw.update(range(self.num))
-
-
-######################################################################
-# Main procedure....
-
-if __name__ == "__main__":
-  class MyApp(wxApp):
-    def OnInit(self):
-
-      self.frame = MyFrame(NULL, -1, "Memory Leak Tester")
-      self.frame.Show(true)
-
-      self.exiting = FALSE;
-      return true
-
-  app = MyApp(0)     # Create an instance of the application class
-  app.MainLoop()     # Tell it to start processing events
-
diff --git a/wxPython/tests/menu_replace.py b/wxPython/tests/menu_replace.py
deleted file mode 100644
index aa5deba997..0000000000
--- a/wxPython/tests/menu_replace.py
+++ /dev/null
@@ -1,43 +0,0 @@
-
-from wxPython.wx import *
-
-class MainWindowFrame(wxFrame):
-
-    def __init__(self, parentframe, title):
-
-        wxFrame.__init__(self, parentframe, -1,
-                         title, size=wxSize(500, 200))
-
-        self.mb = wxMenuBar()
-        self.SetMenuBar(self.mb)
-        self.sbut = wxButton(self, -1,
-                             'switch menu (push twice and then use menu)')
-        EVT_BUTTON(self, self.sbut.GetId(), self.switch)
-
-        #help menu
-        self.helpmenu = wxMenu()
-        self.othermenu = wxMenu()
-
-        self.mb.Append(self.helpmenu, '&Help')
-
-
-    def switch(self, event):
-
-        lastmenu = self.mb.GetMenuCount() - 1
-        self.mb.Replace(lastmenu, self.othermenu, 'Other')
-
-
-
-class TheApp(wxApp):
-
-    def OnInit(self):
-
-        mainwin = MainWindowFrame(NULL, 'menutest')
-        mainwin.Show(true)
-        self.SetTopWindow(mainwin)
-        return true
-
-app = TheApp(0)
-app.MainLoop()
-
-
diff --git a/wxPython/tests/og.py b/wxPython/tests/og.py
deleted file mode 100644
index d11968e73d..0000000000
--- a/wxPython/tests/og.py
+++ /dev/null
@@ -1,69 +0,0 @@
-from wxPython.wx import *
-#from Lib.Gui.PlainWidgets import *
-
-class TestLayoutConstraints(wxPanel):
-    def __init__(self, parent):
-        wxPanel.__init__(self, parent, -1)
-        #
-        nb = wxNotebook(self, -1)
-        page = wxPanel(nb, -1)
-        page.SetBackgroundColour(wxBLUE)
-        button = wxButton(page, -1, 'press me')
-        #
-        nb.AddPage(page, 'testpage')
-        #
-        lc = wxLayoutConstraints()
-        lc.top.PercentOf(parent, wxBottom, 0)
-        lc.bottom.PercentOf(parent, wxBottom, 100)
-        lc.left.PercentOf(parent, wxRight, 0)
-        lc.right.PercentOf(parent, wxRight, 100)
-        self.SetConstraints(lc)
-        self.SetAutoLayout(true)
-        #
-        lc = wxLayoutConstraints()
-        lc.top.PercentOf(self, wxBottom, 0)
-        lc.bottom.PercentOf(self, wxBottom, 100)
-        lc.left.PercentOf(self, wxRight, 0)
-        lc.right.PercentOf(self, wxRight, 100)
-        nb.SetConstraints(lc)
-#        nb.SetAutoLayout(true)
-        #
-#        lc = wxLayoutConstraints()
-#        lc.top.PercentOf(nb, wxBottom, 0)
-#        lc.bottom.PercentOf(nb, wxBottom, 100)
-#        lc.left.PercentOf(nb, wxRight, 0)
-#        lc.right.PercentOf(nb, wxRight, 100)
-#        page.SetConstraints(lc)
-        page.SetAutoLayout(true)
-
-        # this should center "button" on "page":
-        lc = wxLayoutConstraints()
-        lc.centreY.PercentOf(page, wxBottom, 50)
-        lc.centreX.PercentOf(page, wxRight, 50)
-        lc.width.AsIs()
-        lc.height.AsIs()
-        button.SetConstraints(lc)
-#        button.SetAutoLayout(true)
-        #
-        button.Layout()
-        page.Layout()
-        nb.Layout()
-        self.Layout()
-
-
-if __name__ == "__main__":
-    class MyFrame(wxFrame):
-        def __init__(self, *argT, **optionD):
-            apply(wxFrame.__init__, (self,) + argT, optionD)
-            self.SetAutoLayout(true)
-            TestLayoutConstraints(self)
-
-    class MyApp(wxApp):
-        def OnInit(self):
-            frame = MyFrame(None, -1, "TestLayoutConstraints",
-                            size=wxSize(400,300))
-            frame.Show(true)
-            return true
-
-    app = MyApp()
-    app.MainLoop()
diff --git a/wxPython/tests/paul.py b/wxPython/tests/paul.py
deleted file mode 100644
index 0341e7eb7d..0000000000
--- a/wxPython/tests/paul.py
+++ /dev/null
@@ -1,28 +0,0 @@
-from wxPython.wx import *
-
-
-class MyFrame(wxFrame):
-    def __init__(self, parent, id, title='A pxFrame!'):
-        wxFrame.__init__(self, parent, id, title,
-            wxPyDefaultPosition, wxSize(50, 50))
-
-    def get_filename(self):
-        dlg = wxFileDialog(self, "Choose a file", ".", "", "*.*", wxOPEN)
-        dlg.ShowModal()
-        self.file = dlg.GetPath()
-        dlg.Destroy()
-        self.Iconize(true)
-        return self.file
-
-
-class FilePicker(wxApp):
-    def OnInit(self):
-        return true
-
-    def get_filename(self):
-        dlg = wxFileDialog(NULL, "Choose a file", ".", "", "*.*", wxOPEN)
-        dlg.ShowModal()
-        self.file = dlg.GetPath()
-        dlg.Destroy()
-        return self.file
-
diff --git a/wxPython/tests/popup.py b/wxPython/tests/popup.py
deleted file mode 100644
index 5cc08d4529..0000000000
--- a/wxPython/tests/popup.py
+++ /dev/null
@@ -1,123 +0,0 @@
-# popup.py:
-# Illustrates how to create a wxListCtrl with an associated pop-up menu, which is
-# activated when the right mouse button is clicked.
-
-from wxPython.wx import *
-
-
-class cPopupHandler(wxEvtHandler):
-
-    def __init__(self, this):
-        wxEvtHandler.__init__(self, this)
-
-
-    def ProcessEvent(self, event):
-        print "G"
-        #wxEvtHandler.ProcessEvent(self, event)
-
-        if event.GetEventClass() != wxTYPE_MOUSE_EVENT:
-            return
-
-        if not event.ButtonUp(3):
-            return
-
-        if event.ButtonDown(1):
-            print "left down"
-        elif event.ButtonUp(1):
-            print "left up"
-        elif event.ButtonDown(3):
-            print "right down"
-        elif event.ButtonUp(3):
-            print "right up"
-
-
-    def xProcessEvent(self, event):
-        # I tried to pass this one in as the Connect() handler,
-        # but all I got from that was that the icons disappeared
-        # from the wxListCtrl.
-        print "H"
-        pass
-
-
-
-class cMyFrame(wxFrame):
-
-    def __init__(self, parent, id, title):
-        wxFrame.__init__(self, parent, -1, title, wxDefaultPosition, wxSize(800, 600))
-
-        self.Centre(wxBOTH)
-
-        # create a dummy icon; can't seem to get the wxListCtrl to work without an icon
-        #self.imagelist = wxImageList(16, 16)
-        #self.image = self.imagelist.Add(wxNoRefBitmap('smile.bmp', wxBITMAP_TYPE_BMP))
-
-        # create a ListCtrl
-        id = NewId()
-        self.listctrl = wxListCtrl(self, id, wxDefaultPosition, wxDefaultSize, wxLC_REPORT)
-        #self.listctrl.SetImageList(self.imagelist, wxIMAGE_LIST_SMALL)
-
-        if 1:
-            # install a handler for mouse right button up events
-            #EVT_RIGHT_DOWN(self.listctrl, self.OnListMouseEvent)
-            #EVT_RIGHT_UP(self.listctrl, self.OnListMouseEvent)
-
-            #EVT_RIGHT_DOWN(self.listctrl, self.OnSaveMousePos)
-
-            EVT_LIST_ITEM_SELECTED(self, id, self.OnSaveSelection)
-            EVT_COMMAND_RIGHT_CLICK(self, id, self.OnListRightClick)
-        else:
-            # create an wxEvtHandler and connect it to the wxListCtrl
-            print "A"
-            self.listctrl.handler = cPopupHandler(self.listctrl)
-            print "B"
-            id = NewId()
-            self.listctrl.Connect(id, id, wxEVT_RIGHT_DOWN, self.OnListMouseEvent)
-            print "C"
-
-        # define the ListCtrl column
-        self.listctrl.InsertColumn(0, "Name")
-
-        # create a set of dummy ListCtrl entries
-        for Index in range(20):
-            self.listctrl.InsertStringItem(Index, "Item number %d" % Index)
-
-        # re-adjust the width of the column
-        self.listctrl.SetColumnWidth(0, wxLIST_AUTOSIZE_USEHEADER)
-
-
-    def OnSaveSelection(self, event):
-        self.lastSelection = event.m_itemIndex
-        print self.lastSelection
-
-
-    def OnListRightClick(self, event):
-        menu = wxPyMenu()
-        menu.Append(0, "One")
-        menu.Append(1, "Two")
-        menu.Append(2, "Three")
-
-        pos = self.listctrl.GetItemPosition(self.lastSelection)
-        self.listctrl.PopupMenu(menu, pos.x, pos.y)
-
-
-class cMyApp(wxApp):
-
-    def OnInit(self):
-        frame = cMyFrame(NULL, -1, "Popup Sample")
-        frame.Show(true)
-        self.SetTopWindow(frame)
-        return true
-
-
-def main():
-    App = cMyApp(0)
-    App.MainLoop()
-
-
-if __name__ == "__main__":
-    main()
-
-
-
-
-
diff --git a/wxPython/tests/pytree.py b/wxPython/tests/pytree.py
deleted file mode 100644
index 10deb1859d..0000000000
--- a/wxPython/tests/pytree.py
+++ /dev/null
@@ -1,203 +0,0 @@
-"""
-Hello, and welcome to this test of the wxTreeItemData class.
-
-The wxTreeItemData class can be used to associate a python object with
-a wxTreeCtrl item. In this sample, its use is demonstrated via a tree
-control that shows the contents of a python namespace according to the
-standard dir() command. Every item in the tree has its label taken
-from the dir() output, and 'behind it' a reference to the python
-object is stored in a wxTreeItemData object.
-
-As you may have guessed by now, this sample automatically displays
-'__doc__' strings if the selected python object happens to have
-one. Please expand the pyTree object to learn more about the
-implementation.
-
-Version 1.0, April 4 1999.
-Harm van der Heijden (H.v.d.Heijden@phys.tue.nl)
-
-P.S. Check out the string module. It's imported in this sample not
-because it's used, but because it's so beautifully documented...
-"""
-
-from wxPython import wx
-import string # Don't use it, but it's fun expanding :-)
-
-#----------------------------------------------------------------------
-
-def _getindent(line):
-    """Returns the indentation level of the given line."""
-    indent = 0
-    for c in line:
-        if c == ' ': indent = indent + 1
-        elif c == '\t': indent = indent + 8
-        else: break
-    return indent
-
-def _sourcefinder(func):
-    """Given a func_code object, this function tries to find and return
-    the python source code of the function."""
-    try:
-        f = open(func.co_filename,"r")
-    except:
-        return "(could not open file %s)" % (func.co_filename,)
-
-    for i in range(func.co_firstlineno):
-        line = f.readline()
-    ind = _getindent(line)
-    msg = ""
-    while line:
-        msg = msg + line
-        line = f.readline()
-        # the following should be <= ind, but then we get
-        # confused by multiline docstrings. Using == works most of
-        # the time... but not always!
-        if _getindent(line) == ind: break
-    return msg
-
-#----------------------------------------------------------------------
-
-class pyTree(wx.wxTreeCtrl):
-    """
-    This wxTreeCtrl derivative displays a tree view of a Python namespace.
-    Anything from which the dir() command returns a non-empty list is a branch
-    in this tree.
-    """
-
-    def __init__(self, parent, id, root):
-        """
-        Initialize function; because we insert branches into the tree
-        as needed, we use the ITEM_EXPANDING event handler. The
-        ITEM_COLLAPSED handler removes the stuff afterwards. The
-        SEL_CHANGED handler attempts to display interesting
-        information about the selected object.
-        """
-        wx.wxTreeCtrl.__init__(self, parent, id)
-        self.root = self.AddRoot(str(root), -1, -1, wx.wxTreeItemData(root))
-        if dir(root):
-            self.SetItemHasChildren(self.root, wx.TRUE)
-        wx.EVT_TREE_ITEM_EXPANDING(self, self.GetId(), self.OnItemExpanding)
-        wx.EVT_TREE_ITEM_COLLAPSED(self, self.GetId(), self.OnItemCollapsed)
-        wx.EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged)
-        self.output = None
-
-
-    def SetOutput(self, output):
-        """
-        Set output function (accepts single string). Used to display string
-        representation of the selected object by OnSelChanged.
-        """
-        self.output = output
-
-
-    def OnItemExpanding(self,event):
-        """
-        The real workhorse of this class. First we retrieve the object
-        (parent) belonging to the branch that is to be expanded. This
-        is done by calling GetPyData(parent), which is a short-cut for
-        GetPyItemData(parent).Get().
-
-        Then we get the dir() list of that object. For each item in
-        this list, a tree item is created with associated
-        wxTreeItemData referencing the child object. We get this
-        object using child = getattr(parent, item).
-
-        Finally, we check wether the child returns a non-empty dir()
-        list. If so, it is labeled as 'having children', so that it
-        may be expanded. When it actually is expanded, this function
-        will again figure out what the offspring is.
-        """
-        item = event.GetItem()
-        obj = self.GetPyData( item )
-        lst = dir(obj)
-        for key in lst:
-            new_obj = getattr(obj,key)
-            new_item = self.AppendItem( item, key, -1, -1,
-                                        wx.wxTreeItemData(new_obj) )
-            if dir(new_obj):
-                self.SetItemHasChildren(new_item, wx.TRUE)
-
-    def OnItemCollapsed(self, event):
-        """
-        We need to remove all children here, otherwise we'll see all
-        that old rubbish again after the next expansion.
-        """
-        item = event.GetItem()
-        self.DeleteChildren(item)
-
-    def OnSelChanged(self, event):
-        """
-        If an output function is defined, we try to print some
-        informative, interesting and thought-provoking stuff to it.
-        If it has a __doc__ string, we print it. If it's a function or
-        unbound class method, we attempt to find the python source.
-        """
-        if not self.output:
-            return
-        obj = self.GetPyData( event.GetItem() )
-        msg = str(obj)
-        if hasattr(obj, '__doc__'):
-            msg = msg+"\n\nDocumentation string:\n\n%s" % ( getattr(obj, '__doc__'),)
-        # Is it a function?
-        func = None
-        if hasattr(obj, "func_code"): # normal function
-            func = getattr(obj, "func_code")
-        elif hasattr(obj, "im_func"): # unbound class method
-            func = getattr(getattr(obj, "im_func"), "func_code")
-        if func: # if we found one, let's try to print the source
-            msg = msg+"\n\nFunction source:\n\n" + _sourcefinder(func)
-
-        apply(self.output, (msg,))
-
-#----------------------------------------------------------------------
-
-overview = __doc__
-
-def runTest(frame, nb, log):
-    split = wx.wxSplitterWindow(nb, -1)
-    tree = pyTree(split, -1, __main__)
-    text = wx.wxTextCtrl(split, -1, "", wx.wxDefaultPosition,
-                         wx.wxDefaultSize, wx.wxTE_MULTILINE)
-    split.SplitVertically(tree, text, 200)
-    tree.SetOutput(text.SetValue)
-    tree.SelectItem(tree.root)
-    text.SetBackgroundColour(wxNamedColour("LIGHT BLUE"))
-    tree.SetBackgroundColour(wxNamedColour("LIGHT BLUE"))
-
-    return split
-
-
-
-#----------------------------------------------------------------------
-if __name__ == '__main__':
-
-    class MyFrame(wx.wxFrame):
-        """Very standard Frame class. Nothing special here!"""
-
-        def __init__(self):
-            """Make a splitter window; left a tree, right a textctrl. Wow."""
-            import __main__
-            wx.wxFrame.__init__(self, wx.NULL, -1, "PyTreeItemData Test",
-                                wx.wxDefaultPosition, wx.wxSize(800,500))
-            split = wx.wxSplitterWindow(self, -1)
-            tree = pyTree(split, -1, __main__)
-            text = wx.wxTextCtrl(split, -1, "", wx.wxDefaultPosition,
-                                 wx.wxDefaultSize, wx.wxTE_MULTILINE)
-            split.SplitVertically(tree, text, 200)
-            tree.SetOutput(text.SetValue)
-            tree.SelectItem(tree.root)
-
-    class MyApp(wx.wxApp):
-        """This class is even less interesting than MyFrame."""
-
-        def OnInit(self):
-            """OnInit. Boring, boring, boring!"""
-            frame = MyFrame()
-            frame.Show(wx.TRUE)
-            self.SetTopWindow(frame)
-            return wx.TRUE
-
-    app = MyApp(0)
-    app.MainLoop()
-
-
diff --git a/wxPython/tests/query.bmp b/wxPython/tests/query.bmp
deleted file mode 100644
index f8022181a68437db918d73c7e461a0658b7da0a0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 630
zcmaKpF;2rU6o!8z29TmOU69I9b!6rU-8lpoC`@(PGMded+{P#H8QR4Xk|lehObPGB
zX=5YQKX%^x{n^i!y?)wW0V~`;ZUH<{UyWVhnlcjc|J4H2(6%YipHdiOC^G1WhQ8;F
zI(<CE{(|DHgrX^YT$EmX6!R})%nFQ8ov)4y^{!9F>A*rt`9_gX8+S?xN^ftJQnX<_
z%Gc$Fq@~=k{{ilTb4~-v*Jk<BbsKF>@|72^|Ng4{e&klr^5=Tu`?)(be&QDMrnVFJ
y9+l6z9dxcwj1<oG6YfeL{_w8kA!Pd(_4y)_()sBgMh!lDqa#1aX)?!*jp;8BmVbT#

diff --git a/wxPython/tests/runner.py b/wxPython/tests/runner.py
deleted file mode 100644
index ef3fae6f16..0000000000
--- a/wxPython/tests/runner.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from wxPython.wx import *
-import sys, time
-
-class WaitingProcess(wxProcess):
-    def __init__(self):
-        wxProcess.__init__(self, None)
-        self.terminated = false
-    def OnTerminate(self, pid, status):
-        print pid, status
-        self.terminated = true
-    def wait(self):
-        while not self.terminated:
-            stream = self.GetInputStream()
-            if not stream.eof():
-                sys.stdout.write(stream.read())
-            stream = self.GetErrorStream()
-            if not stream.eof():
-                sys.stderr.write(stream.read())
-            wxYield()
-
-try:
-    #raw_input("ready...")
-    if 1:
-        process = WaitingProcess()
-        process.Redirect()
-        pid = wxExecute('python -u wxFrame1.py', false, process)
-        process.wait()
-    else:
-        wxExecute('python -u wxFrame1.py')
-
-finally:
-    #raw_input("done...")
-    pass
-
-
-
diff --git a/wxPython/tests/scroll_paint.py b/wxPython/tests/scroll_paint.py
deleted file mode 100644
index fdf85b1262..0000000000
--- a/wxPython/tests/scroll_paint.py
+++ /dev/null
@@ -1,38 +0,0 @@
-from wxPython.wx import *
-
-class MyWindow(wxScrolledWindow):
-    def __init__(self,parent,id,pos,size,style):
-        wxScrolledWindow.__init__(self,parent,id,pos,size,style)
-        self.SetBackgroundColour(wxWHITE)
-
-    def OnPaint(self,evt):
-        dc = wxPaintDC(self)
-        # normally call a redraw/draw function here.
-        # this time, print 'redraw!'
-        print "redraw!"
-
-
-class MyFrame(wxFrame):
-    def __init__(self, parent, id, title):
-        wxFrame.__init__(self, parent, id, title,
-                         wxPoint(100, 100), wxSize(500, 300))
-
-        self.sw = MyWindow(self, -1,
-                           wxDefaultPosition, wxDefaultSize,
-                           wxVSCROLL|wxSUNKEN_BORDER)
-
-        self.sw.SetScrollbars(1,20,0,30)
-
-
-if __name__ == "__main__":
-    class MyApp(wxApp):
-        def OnInit(self):
-
-            self.frame = MyFrame(NULL, -1, "Scrolling Test App")
-            self.frame.Show(true)
-            self.exiting = FALSE;
-            return true
-
-    app = MyApp(0)     # Create an instance of the app class
-    app.MainLoop()     # Tell it to start processing events
-
diff --git a/wxPython/tests/spies.py b/wxPython/tests/spies.py
deleted file mode 100644
index 88234155b4..0000000000
--- a/wxPython/tests/spies.py
+++ /dev/null
@@ -1,136 +0,0 @@
-## import all of the wxPython GUI package
-from wxPython.wx import *
-
-"""
-I am trying to write a routine which will produce an entryform which I can
-later use to write GUI entryforms for databasis work.  When you run this
-program and chose option 150 (Invoer) under "L=EAers" the following error
-appears (repeated 6 times):
-
-Gtk-CRITICAL **: file gtkwidget.c: line 1592 (gtk_widget_map): assertion
-`GTK_WIDGET_VISIBLE (widget) == TRUE' failed.=20
-"""
-
-class ToetsInvoer(wxPanel):
-    def __init__(self, parent):
-        wxPanel.__init__(self, parent, -1)
-
-        wxStaticText(self, -1, "wxTextCtrl", wxPoint(5, 25), wxSize(75, 20))
-        wxTextCtrl(self, 10, "", wxPoint(80, 25), wxSize(150, 20))
-        EVT_TEXT(self, 10, self.EvtText)
-
-        wxStaticText(self, -1, "Passsword", wxPoint(5, 50), wxSize(75, 20))
-        wxTextCtrl(self, 20, "", wxPoint(80, 50), wxSize(150, 20), wxTE_PASSWORD)
-        EVT_TEXT(self, 20, self.EvtText)
-
-        wxStaticText(self, -1, "Multi-line", wxPoint(5, 75), wxSize(75, 20))
-        wxTextCtrl(self, 30, "", wxPoint(80, 75), wxSize(200, 150), wxTE_MULTILINE)
-        EVT_TEXT(self, 30, self.EvtText)
-
-        self.Show(true)
-
-    def EvtText(self, event):
-        self.log.WriteText('EvtText: %s\n' % event.GetString())
-
-#---------------------------------------------------------------------------
-
-## Create a new frame class, derived from the wxPython Frame.
-class HoofRaam(wxFrame):
-
-    def __init__(self, pa, id, titel):
-        # First, call the base class' __init__ method to create the frame
-        wxFrame.__init__(self, pa, id, titel,wxPyDefaultPosition,
-                         wxSize(420, 200))
-
-        self.CreateStatusBar(2)
-        mainmenu = wxMenuBar()
-        menu = wxMenu()
-        menu.Append(100, '&Kopieer', 'Maak rugsteun')
-        menu.Append(101, '&Nuwe stel', 'Begin nuwe databasis')
-        menu.Append(150, '&Invoer', 'Toets invoervorm')
-        menu.AppendSeparator()
-        menu.Append(200, 'Kl&aar', 'Gaan uit die program uit!')
-        mainmenu.Append(menu, "&L=EAers")
-        self.SetMenuBar(mainmenu)
-#         if wxPlatform == '__WXMSW__':
-#             print menu.GetHelpString(100)
-#             print mainmenu.GetHelpString(101)
-#             print mainmenu.GetHelpString(200)
-#             self.DragAcceptFiles(true)
-
-
-
-        # Associate some events with methods of this class
-        self.Connect(-1, -1, wxEVT_SIZE, self.OnSize)
-        self.Connect(-1, -1, wxEVT_MOVE, self.OnMove)
-        self.Connect(-1, -1, wxEVT_COMMAND_MENU_SELECTED, self.OnMenuCommand)
-        self.Connect(-1, -1, wxEVT_DROP_FILES, self.OnDropFiles)
-
-        self.child = None
-        #self.child = ToetsInvoer(self)
-
-    # This method is called automatically when the CLOSE event is
-    # sent to this window
-    def OnCloseWindow(self, event):
-        # tell the window to kill itself
-        self.Destroy()
-
-
-    # This method is called by the System when the window is resized,
-    # because of the association above.
-    def OnSize(self, event):
-        size = event.GetSize()
-        print "grootte:", size.width, size.height
-        event.Skip()
-
-    # This method is called by the System when the window is moved,
-    # because of the association above.
-    def OnMove(self, event):
-        pos = event.GetPosition()
-        print "pos:", pos.x, pos.y
-
-    def OnMenuCommand(self, event):
-        # why isn't this a wxMenuEvent???
-        print event, event.GetInt()
-        if event.GetInt() == 200:
-            self.Close()
-        if event.GetInt() == 150:
-            x = ToetsInvoer(self)
-        if event.GetInt() == 101:
-            print "Nommer 101 is gekies"
-
-    def OnDropFiles(self, event): #werk net in windows
-        fileList = event.GetFiles()
-        for file in fileList:
-            print file
-
-    def OnCloseWindow(self, event):
-        print 'Klaar'
-        self.Destroy()
-
-#---------------------------------------------------------------------------
-
-# Every wxWindows application must have a class derived from wxApp
-class MyProg(wxApp):
-
-    # wxWindows calls this method to initialize the application
-    def OnInit(self):
-
-        # Create an instance of our customized Frame class
-        raam = HoofRaam(NULL, -1, "Taalunie")
-        raam.Show(true)
-
-        # Tell wxWindows that this is our main window
-        self.SetTopWindow(raam)
-
-        # Return a success flag
-        return true
-
-#---------------------------------------------------------------------------
-
-
-app = MyProg(0)     # Create an instance of the application class
-app.MainLoop()     # Tell it to start processing events
-
-
-
diff --git a/wxPython/tests/spies2.py b/wxPython/tests/spies2.py
deleted file mode 100644
index 1467de1c52..0000000000
--- a/wxPython/tests/spies2.py
+++ /dev/null
@@ -1,69 +0,0 @@
-from wxPython.wx import *
-
-#---------------------------------------------------------------------------
-
-class TestComboBox(wxDialog):
-    def __init__(self, parent):
-
-        wxDialog.__init__(self, parent, -1, "This is a test",
-                          wxDefaultPosition, wxSize(550, 250))
-        self.s = ['aaaaaaaaaaaaaa',
-                  'bbbbbbb',
-                  'cccccccccccccccccccccccccccccccccccc',
-                  'ddddddddddd',
-                  'eeeeeeeeeee',
-                  'ffffffff',
-                  'gggggggggggggggggggggggg',
-                  'hhhhhhhhhhhhhhhhhh',
-                  'iiiiiiiiii']
-
-
-        wxStaticText(self, -1, "This example uses the wxListBox control.",
-                               wxPoint(45, 10))
-        xwaarde = 35*12
-        wxStaticText(self, -1, "Select one:", wxPoint(15, 50), wxSize(65, -1))
-
-        dv = self.s[4]
-        self.lb= wxComboBox(self, 50, dv, wxPoint(80, 50), wxSize(xwaarde, -1),
-                            self.s, wxCB_DROPDOWN)
-
-        wxButton(self, wxID_OK, "Okay", wxPoint(10,90)).SetDefault()
-        wxButton(self, wxID_CANCEL, "Cancel", wxPoint(60, 90))
-
-
-    def GetSelection(self,leer):
-
-        val1 = self.lb.GetStringSelection()
-        #leer.commit()
-        return val1
-
-
-
-class MyApp(wxApp):
-    def OnInit(self):
-
-        frame = wxFrame(NULL, -1, "")
-        wxButton(frame, 101, "test it", wxDefaultPosition, wxSize(50, 25))
-        EVT_BUTTON(frame, 101, self.OnClick)
-        frame.Fit()
-        frame.Show(true)
-
-        self.SetTopWindow(frame)
-        return true
-
-    def OnClick(self, event):
-
-        dlg = TestComboBox(NULL)
-
-        if dlg.ShowModal() == wxID_OK:
-            values = dlg.GetSelection(NULL)
-            print "Your values are: %s" % str(values)
-        else:
-            print "You canceled!"
-
-        dlg.Destroy()
-
-app = MyApp(0)
-app.MainLoop()
-
-
diff --git a/wxPython/tests/ste.py b/wxPython/tests/ste.py
deleted file mode 100644
index 08c5e27732..0000000000
--- a/wxPython/tests/ste.py
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-from wxPython.wx import *
-from wxPython.ste import wxStyledTextCtrl
-
-
-app = wxPySimpleApp()
-frame = wxFrame(None, -1, "Testing...", (0,0), (320,480))
-ed = wxStyledTextCtrl(frame, -1)
-ed.AddText(open('test7.py').read())
-
-#ed.AddText("This is a test\nThis is only a test.\n\nHere we go cowboys, here we go!!!\nThe End")
-#ed.SetBufferedDraw(false)
-
-#ed.StyleSetFontAttr(1, 14, "Times New Roman", true, false)
-#ed.StyleSetForeground(1, wxBLUE)
-#ed.StyleSetFont(2, wxFont(12, wxMODERN, wxNORMAL, wxNORMAL, false))
-
-#ed.StartStyling(48, 0xff)
-#ed.SetStyleFor(7, 1)
-
-
-frame.Show(true)
-app.MainLoop()
diff --git a/wxPython/tests/table.bmp b/wxPython/tests/table.bmp
deleted file mode 100644
index 24e310ceb5d2b91bc0263a6975de2306c55a190c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 630
zcmd6kI~Kwq5JjIJ&zT|xy;VwUmtgN+sI<+JvIDZD=~Li)d?JMlkc2REFOv{>JYQ#E
z#`XRJaATiaKjFfNjsACA0Nz-ZI`GL5+qQ9($mK@Pir9GxDeuigkILv1M&KdY0DRha
z`vTgO%&b+&%D24O!52Gt6_54*;r&>DS>I{|_5ZX!w@6TP`SmR@_(;$;xA-VfcevDp
rplw(61nmIm-8`b_A+36OY}50kj}!FsLQr~W9;!f}tyu(PD$t8R&mwid

diff --git a/wxPython/tests/tabs.py b/wxPython/tests/tabs.py
deleted file mode 100644
index 46d946bc62..0000000000
--- a/wxPython/tests/tabs.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from wxPython.wx import *
-
-class Test:
-     def __init__(self):
-          self.panel = wxPanel(frame, -1)
-          self.box = wxListBox(self.panel, 100, wxPoint(10,10),
-                               wxSize(300,100), [], wxLB_SINGLE|wxLB_SORT)
-          self.text = wxTextCtrl(self.panel, 110,'', wxPoint(310,10),
-                                 wxSize(300,100),wxTE_MULTILINE|wxTE_READONLY)
-          self.FillList()
-
-     def FillList(self):
-          line = 'This   is   a   test'
-          self.box.Append(line)
-          self.text.AppendText(line)
-
-     def OnCloseWindow(self, event):
-          self.panel.Close(true)
-
-class MyApp(wxApp):
-     def OnInit(self):
-          global frame
-          frame = wxFrame(NULL,-1,'Main',wxDefaultPosition,wxSize(630,150))
-          test = Test()
-          frame.Show(true)
-          self.SetTopWindow(frame)
-          return true
-
-     def OnCloseWindow(self, event):
-          self.Destroy()
-
-if __name__ == '__main__':
-     app = MyApp(0)
-     app.MainLoop()
-
-
-
diff --git a/wxPython/tests/test1.py b/wxPython/tests/test1.py
deleted file mode 100644
index 5cc269d636..0000000000
--- a/wxPython/tests/test1.py
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/bin/env python
-#----------------------------------------------------------------------------
-# Name:         test1.py
-# Purpose:      A minimal wxPython program
-#
-# Author:       Robin Dunn
-#
-# Created:      A long time ago, in a galaxy far, far away...
-# RCS-ID:       $Id$
-# Copyright:    (c) 1998 by Total Control Software
-# Licence:      wxWindows license
-#----------------------------------------------------------------------------
-
-
-from wxPython.wx import *
-
-#---------------------------------------------------------------------------
-
-## Create a new frame class, derived from the wxPython Frame.
-class MyFrame(wxFrame):
-
-    def __init__(self, parent, id, title):
-        # First, call the base class' __init__ method to create the frame
-        wxFrame.__init__(self, parent, id, title,
-                         wxPoint(100, 100), wxSize(160, 100))
-
-        # Associate some events with methods of this class
-        EVT_SIZE(self, self.OnSize)
-        EVT_MOVE(self, self.OnMove)
-
-
-    # This method is called automatically when the CLOSE event is
-    # sent to this window
-    def OnCloseWindow(self, event):
-        # tell the window to kill itself
-        self.Destroy()
-
-
-    # This method is called by the System when the window is resized,
-    # because of the association above.
-    def OnSize(self, event):
-        size = event.GetSize()
-        print "size:", size.width, size.height
-
-    # This method is called by the System when the window is moved,
-    # because of the association above.
-    def OnMove(self, event):
-        pos = event.GetPosition()
-        print "pos:", pos.x, pos.y
-
-
-
-#---------------------------------------------------------------------------
-
-
-# Every wxWindows application must have a class derived from wxApp
-class MyApp(wxApp):
-
-    # wxWindows calls this method to initialize the application
-    def OnInit(self):
-
-        # Create an instance of our customized Frame class
-        frame = MyFrame(NULL, -1, "This is a test")
-        frame.Show(true)
-
-        # Tell wxWindows that this is our main window
-        self.SetTopWindow(frame)
-
-        # Return a success flag
-        return true
-
-#---------------------------------------------------------------------------
-
-
-app = MyApp(1)     # Create an instance of the application class
-app.MainLoop()     # Tell it to start processing events
-
-print 'done!'
-
-
-#----------------------------------------------------------------------------
-
-
diff --git a/wxPython/tests/test2.py b/wxPython/tests/test2.py
deleted file mode 100644
index 47ecaea47f..0000000000
--- a/wxPython/tests/test2.py
+++ /dev/null
@@ -1,212 +0,0 @@
-#!/bin/env python
-#----------------------------------------------------------------------------
-# Name:         test2.py
-# Purpose:      Testing GDI stuff and events.
-#
-# Author:       Robin Dunn
-#
-# Created:
-# RCS-ID:       $Id$
-# Copyright:    (c) 1998 by Total Control Software
-# Licence:      wxWindows license
-#----------------------------------------------------------------------------
-
-
-from wxPython.wx import *
-
-
-#---------------------------------------------------------------------------
-
-
-
-class MyCanvas(wxScrolledWindow):
-    def __init__(self, parent):
-        wxScrolledWindow.__init__(self, parent, -1, wxPoint(0, 0), wxPyDefaultSize, wxSUNKEN_BORDER)
-
-        self.SetBackgroundColour(wxNamedColor("WHITE"))
-        self.Connect(-1, -1, wxEVT_LEFT_DOWN, self.OnLeftButtonEvent)
-        self.Connect(-1, -1, wxEVT_LEFT_UP,   self.OnLeftButtonEvent)
-        self.Connect(-1, -1, wxEVT_MOTION,    self.OnLeftButtonEvent)
-
-        self.SetCursor(wxStockCursor(wxCURSOR_PENCIL))
-        bmp = wxBitmap('bitmaps/test2.bmp', wxBITMAP_TYPE_BMP)
-        self.bmp = bmp
-
-        self.SetScrollbars(20, 20, 50, 50)
-
-        self.lines = []
-
-
-
-    def OnPaint(self, event):
-        dc = wxPaintDC(self)
-        self.PrepareDC(dc)
-        self.DoDrawing(dc)
-
-
-
-    def DoDrawing(self, dc):
-        dc.BeginDrawing()
-        #dc.Clear()
-        pen1 = wxPen(wxNamedColour('RED'))
-        dc.SetPen(pen1)
-        dc.DrawRectangle(5, 5, 50, 50)
-
-        dc.SetBrush(wxLIGHT_GREY_BRUSH)
-        dc.SetPen(wxPen(wxNamedColour('BLUE'), 4))
-        dc.DrawRectangle(15, 15, 50, 50)
-
-        font = wxFont(14, wxSWISS, wxNORMAL, wxNORMAL)
-        dc.SetFont(font)
-        dc.SetTextForeground(wxColour(0xFF, 0x20, 0xFF))
-        te = dc.GetTextExtent("Hello World")
-        dc.DrawText("Hello World", 60, 65)
-
-        dc.SetPen(wxPen(wxNamedColour('VIOLET'), 4))
-        dc.DrawLine(5, 65+te[1], 60+te[0], 65+te[1])
-
-        lst = [(100,110), (150,110), (150,160), (100,160)]
-        dc.DrawLines(lst, -60)
-        dc.SetPen(wxGREY_PEN)
-        dc.DrawPolygon(lst, 75)
-        dc.SetPen(wxGREEN_PEN)
-        dc.DrawSpline(lst+[(100,100)])
-
-        dc.DrawBitmap(self.bmp, 200, 20)
-        dc.SetTextForeground(wxColour(0, 0xFF, 0x80))
-        dc.DrawText("a bitmap", 200, 80)
-
-        self.DrawSavedLines(dc)
-        dc.EndDrawing()
-
-
-    def DrawSavedLines(self, dc):
-        dc.SetPen(wxPen(wxNamedColour('MEDIUM FOREST GREEN'), 4))
-        for line in self.lines:
-            for coords in line:
-                apply(dc.DrawLine, coords)
-
-
-
-    def OnLeftButtonEvent(self, event):
-        if event.LeftDown():
-            self.x, self.y = event.GetX(), event.GetY()
-            self.curLine = []
-        elif event.Dragging():
-            dc = wxClientDC(self)
-            dc.BeginDrawing()
-            dc.SetPen(wxPen(wxNamedColour('MEDIUM FOREST GREEN'), 4))
-            coords = (self.x, self.y, event.GetX(), event.GetY())
-            self.curLine.append(coords)
-            apply(dc.DrawLine, coords)
-            self.x, self.y = event.GetX(), event.GetY()
-            dc.EndDrawing()
-        elif event.LeftUp():
-            self.lines.append(self.curLine)
-            self.curLine = []
-
-
-
-
-
-#---------------------------------------------------------------------------
-
-class MyFrame(wxFrame):
-    def __init__(self, parent, id, title):
-        wxFrame.__init__(self, parent, id, title, wxPyDefaultPosition, wxSize(320, 200))
-        self.canvas = MyCanvas(self)
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-
-    def OnSize(self, event):
-        size = self.GetClientSize()
-        self.canvas.SetDimensions(5, 5, size.width-10, size.height-10)
-
-
-#---------------------------------------------------------------------------
-
-
-class MyApp(wxApp):
-    def OnInit(self):
-        frame = MyFrame(NULL, -1, "Test 2")
-        frame.Show(true)
-        self.SetTopWindow(frame)
-        return true
-
-
-#---------------------------------------------------------------------------
-
-
-def main():
-    app = MyApp(0)
-    app.MainLoop()
-
-
-def t():
-    import pdb
-    pdb.run('main()')
-
-if __name__ == '__main__':
-    main()
-
-
-#----------------------------------------------------------------------------
-#
-# $Log$
-# Revision 1.4  2001/02/16 08:19:38  robind
-# Copied/merged from the 2.2 branch.
-#
-# Changes needed to build with new event system
-#
-# Revision 1.1.2.2  2001/01/30 20:54:16  robind
-#
-# Gobs of changes move from the main trunk to the 2.2 branch in
-# preparataion for 2.2.5 release.  See CHANGES.txt for details.
-#
-# Revision 1.3  2000/10/30 21:05:22  robind
-#
-# Merged wxPython 2.2.2 over to the main branch
-#
-# Revision 1.1.2.1  2000/05/16 02:07:01  RD
-#
-# Moved and reorganized wxPython directories
-#
-# Now builds into an intermediate wxPython package directory before
-# installing
-#
-# Revision 1.3  1999/04/30 03:29:53  RD
-#
-# wxPython 2.0b9, first phase (win32)
-# Added gobs of stuff, see wxPython/README.txt for details
-#
-# Revision 1.2.4.1  1999/03/27 23:30:00  RD
-#
-# wxPython 2.0b8
-#     Python thread support
-#     various minor additions
-#     various minor fixes
-#
-# Revision 1.2  1998/12/15 20:44:34  RD
-# Changed the import semantics from "from wxPython import *" to "from
-# wxPython.wx import *"  This is for people who are worried about
-# namespace pollution, they can use "from wxPython import wx" and then
-# prefix all the wxPython identifiers with "wx."
-#
-# Added wxTaskbarIcon for wxMSW.
-#
-# Made the events work for wxGrid.
-#
-# Added wxConfig.
-#
-# Added wxMiniFrame for wxGTK, (untested.)
-#
-# Changed many of the args and return values that were pointers to gdi
-# objects to references to reflect changes in the wxWindows API.
-#
-# Other assorted fixes and additions.
-#
-# Revision 1.1  1998/08/09 08:28:05  RD
-# Initial version
-#
-#
diff --git a/wxPython/tests/test3.py b/wxPython/tests/test3.py
deleted file mode 100644
index dec9670a24..0000000000
--- a/wxPython/tests/test3.py
+++ /dev/null
@@ -1,216 +0,0 @@
-#!/bin/env python
-#----------------------------------------------------------------------------
-# Name:         test3.py
-# Purpose:      Testing menus and status lines
-#
-# Author:       Robin Dunn
-#
-# Created:
-# RCS-ID:       $Id$
-# Copyright:    (c) 1998 by Total Control Software
-# Licence:      wxWindows license
-#----------------------------------------------------------------------------
-
-
-from wxPython.wx import *
-
-
-#---------------------------------------------------------------------------
-
-class MyCanvas(wxWindow):
-    def __init__(self, parent, ID):
-        wxWindow.__init__(self, parent, ID)
-        self.SetBackgroundColour(wxNamedColor("WHITE"))
-
-    def OnPaint(self, event):
-        dc = wxPaintDC(self)
-        dc.BeginDrawing()
-        size = self.GetClientSize()
-        font = wxFont(42, wxSWISS, wxNORMAL, wxNORMAL)
-        dc.SetFont(font)
-        st = "Python Rules!"
-        tw,th = dc.GetTextExtent(st)
-        dc.DrawText(st, (size.width-tw)/2, (size.height-th)/2)
-        dc.EndDrawing()
-
-#---------------------------------------------------------------------------
-
-#if wxPlatform == '__WXMSW__':
-class MyMiniFrame(wxMiniFrame):
-    def __init__(self, parent, ID, title, pos, size, style):
-        wxMiniFrame.__init__(self, parent, ID, title, pos, size, style)
-        panel = wxPanel(self, -1)
-        ID = NewId()
-        button = wxButton(panel, ID, "Close Me")
-        button.SetPosition(wxPoint(15, 15))
-        self.Connect(ID, -1, wxEVT_COMMAND_BUTTON_CLICKED, self.OnCloseMe)
-
-    def OnCloseMe(self, event):
-        self.Close(true)
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-#---------------------------------------------------------------------------
-
-class MyFrame(wxFrame):
-    def __init__(self, parent, id, title):
-        wxFrame.__init__(self, parent, id, title, wxPyDefaultPosition,
-                         wxSize(420, 200))
-        self.canvas = MyCanvas(self, -1)
-        self.CreateStatusBar(2)
-        mainmenu = wxMenuBar()
-        menu = wxMenu()
-        menu.Append(100, 'A &Menu Item', 'the help text')
-        menu.Append(101, '&Another', 'Grok!')
-        menu.AppendSeparator()
-        menu.Append(200, 'E&xit', 'Get the heck outta here!')
-        mainmenu.Append(menu, "&It's a menu!")
-        self.SetMenuBar(mainmenu)
-        if wxPlatform == '__WXMSW__':
-            print menu.GetHelpString(100)
-            print mainmenu.GetHelpString(101)
-            print mainmenu.GetHelpString(200)
-            self.DragAcceptFiles(true)
-
-        self.Connect(-1, -1, wxEVT_COMMAND_MENU_SELECTED, self.OnMenuCommand)
-        self.Connect(-1, -1, wxEVT_DROP_FILES, self.OnDropFiles)
-
-
-
-    def OnCloseWindow(self, event):
-        print 'OnCloseWindow'
-        self.Destroy()
-
-
-    def OnSize(self, event):
-        size = self.GetClientSize()
-        self.canvas.SetSize(size)
-        self.SetStatusText("hello, this is a test: (%d, %d)" % (size.width, size.height), 1)
-
-##     def OnMenuHighlight(self, event):
-##         mainmenu = self.GetMenuBar()
-##         st = mainmenu.GetHelpString(event.GetMenuId())
-##         self.SetStatusText('['+st+']', 0)
-
-    def OnMenuCommand(self, event):
-        # why isn't this a wxMenuEvent???
-        print event, event.GetInt()
-        if event.GetInt() == 200:
-            self.Close()
-        elif event.GetInt() == 101:
-            #if wxPlatform == '__WXMSW__':
-                win = MyMiniFrame(self, -1, "This is a Mini...",
-                              wxPoint(-1, -1), #wxPyDefaultPosition,
-                              wxSize(150, 150),
-                              wxMINIMIZE_BOX | wxMAXIMIZE_BOX |
-                              wxTHICK_FRAME | wxSYSTEM_MENU |
-                              wxTINY_CAPTION_HORIZ)
-                win.Show(true)
-            #else:
-            #    print 'Sorry, can\'t do mini\'s...'
-
-
-
-    def OnDropFiles(self, event):
-        fileList = event.GetFiles()
-        for file in fileList:
-            print file
-
-
-#---------------------------------------------------------------------------
-
-
-class MyApp(wxApp):
-    def OnInit(self):
-        frame = MyFrame(NULL, -1, "Test 3")
-        frame.Show(true)
-        self.SetTopWindow(frame)
-        return true
-
-#---------------------------------------------------------------------------
-
-
-def main():
-    app = MyApp(0)
-    app.MainLoop()
-
-
-def t():
-    import pdb
-    pdb.run('main()')
-
-if __name__ == '__main__':
-    main()
-
-
-#----------------------------------------------------------------------------
-#
-# $Log$
-# Revision 1.4  2001/02/16 08:19:38  robind
-# Copied/merged from the 2.2 branch.
-#
-# Changes needed to build with new event system
-#
-# Revision 1.1.2.2  2001/01/30 20:54:16  robind
-#
-# Gobs of changes move from the main trunk to the 2.2 branch in
-# preparataion for 2.2.5 release.  See CHANGES.txt for details.
-#
-# Revision 1.3  2000/10/30 21:05:22  robind
-#
-# Merged wxPython 2.2.2 over to the main branch
-#
-# Revision 1.1.2.1  2000/05/16 02:07:01  RD
-#
-# Moved and reorganized wxPython directories
-#
-# Now builds into an intermediate wxPython package directory before
-# installing
-#
-# Revision 1.6  1999/04/30 03:29:53  RD
-#
-# wxPython 2.0b9, first phase (win32)
-# Added gobs of stuff, see wxPython/README.txt for details
-#
-# Revision 1.5  1999/02/20 09:04:43  RD
-# Added wxWindow_FromHWND(hWnd) for wxMSW to construct a wxWindow from a
-# window handle.  If you can get the window handle into the python code,
-# it should just work...  More news on this later.
-#
-# Added wxImageList, wxToolTip.
-#
-# Re-enabled wxConfig.DeleteAll() since it is reportedly fixed for the
-# wxRegConfig class.
-#
-# As usual, some bug fixes, tweaks, etc.
-#
-# Revision 1.4  1998/12/16 22:12:46  RD
-#
-# Tweaks needed to be able to build wxPython with wxGTK.
-#
-# Revision 1.3  1998/12/15 20:44:35  RD
-# Changed the import semantics from "from wxPython import *" to "from
-# wxPython.wx import *"  This is for people who are worried about
-# namespace pollution, they can use "from wxPython import wx" and then
-# prefix all the wxPython identifiers with "wx."
-#
-# Added wxTaskbarIcon for wxMSW.
-#
-# Made the events work for wxGrid.
-#
-# Added wxConfig.
-#
-# Added wxMiniFrame for wxGTK, (untested.)
-#
-# Changed many of the args and return values that were pointers to gdi
-# objects to references to reflect changes in the wxWindows API.
-#
-# Other assorted fixes and additions.
-#
-# Revision 1.2  1998/08/22 19:51:17  RD
-# some tweaks for wxGTK
-#
-# Revision 1.1  1998/08/09 08:28:05  RD
-# Initial version
-#
-#
diff --git a/wxPython/tests/test4.py b/wxPython/tests/test4.py
deleted file mode 100644
index 469e14f497..0000000000
--- a/wxPython/tests/test4.py
+++ /dev/null
@@ -1,1121 +0,0 @@
-#!/bin/env python
-#----------------------------------------------------------------------------
-# Name:         test4.py
-# Purpose:      Testing lots of stuff, controls, window types, etc.
-#
-# Author:       Robin Dunn
-#
-# Created:
-# RCS-ID:       $Id$
-# Copyright:    (c) 1998 by Total Control Software
-# Licence:      wxWindows license
-#----------------------------------------------------------------------------
-
-
-from wxPython.wx import *
-
-import time
-
-#---------------------------------------------------------------------------
-
-class TestSimpleControlsDlg(wxDialog):
-    def __init__(self, parent, log):
-        self.log = log
-        wxDialog.__init__(self, parent, -1, "Test Simple Controls",
-                          wxDefaultPosition, wxSize(350, 400))
-
-
-        sampleList = ["zero", "one", "two", "three", "four", "five",
-                      "six", "seven", "eight", "nine", "ten"]
-
-        y_pos = 5
-        delta = 25
-
-        wxStaticText(self, -1, "wxTextCtrl", wxPoint(5, y_pos), wxSize(75, 20))
-        wxTextCtrl(self, 10, "", wxPoint(80, y_pos), wxSize(150, 20))
-        EVT_TEXT(self, 10, self.EvtText)
-        y_pos = y_pos + delta
-
-        wxCheckBox(self, 20, "wxCheckBox", wxPoint(80, y_pos), wxSize(150, 20), wxNO_BORDER)
-        EVT_CHECKBOX(self, 20, self.EvtCheckBox)
-        y_pos = y_pos + delta
-
-        rb = wxRadioBox(self, 30, "wxRadioBox", wxPoint(80, y_pos), wxDefaultSize,
-                        sampleList, 3, wxRA_SPECIFY_COLS | wxNO_BORDER)
-        EVT_RADIOBOX(self, 30, self.EvtRadioBox)
-        width, height = rb.GetSizeTuple()
-        y_pos = y_pos + height + 5
-
-        wxStaticText(self, -1, "wxChoice", wxPoint(5, y_pos), wxSize(75, 20))
-        wxChoice(self, 40, wxPoint(80, y_pos), wxSize(95, 20), #wxDefaultSize,
-                 sampleList)
-        EVT_CHOICE(self, 40, self.EvtChoice)
-        y_pos = y_pos + delta
-
-        wxStaticText(self, -1, "wxComboBox", wxPoint(5, y_pos), wxSize(75, 18))
-        wxComboBox(self, 50, "default value", wxPoint(80, y_pos), wxSize(95, -1),
-                   sampleList, wxCB_DROPDOWN)
-        EVT_COMBOBOX(self, 50, self.EvtComboBox)
-        y_pos = y_pos + delta
-
-        wxStaticText(self, -1, "wxListBox", wxPoint(5, y_pos), wxSize(75, 18))
-        lb = wxListBox(self, 60, wxPoint(80, y_pos), wxSize(95, 80),
-                       sampleList, wxLB_SINGLE)
-        EVT_LISTBOX(self, 60, self.EvtListBox)
-        EVT_LISTBOX_DCLICK(self, 60, self.EvtListBoxDClick)
-        lb.SetSelection(0)
-        width, height = lb.GetSizeTuple()
-        y_pos = y_pos + height + 5
-
-
-
-        y_pos = y_pos + 15
-        wxButton(self, wxID_OK, ' OK ', wxPoint(80, y_pos), wxDefaultSize).SetDefault()
-        wxButton(self, wxID_CANCEL, ' Cancel ', wxPoint(140, y_pos))
-
-
-    def EvtText(self, event):
-        self.log.WriteText('EvtText: %s\n' % event.GetString())
-
-    def EvtCheckBox(self, event):
-        self.log.WriteText('EvtCheckBox: %d\n' % event.GetInt())
-
-    def EvtRadioBox(self, event):
-        self.log.WriteText('EvtRadioBox: %d\n' % event.GetInt())
-
-    def EvtChoice(self, event):
-        self.log.WriteText('EvtChoice: %s\n' % event.GetString())
-
-    def EvtComboBox(self, event):
-        self.log.WriteText('EvtComboBox: %s\n' % event.GetString())
-
-    def EvtListBox(self, event):
-        self.log.WriteText('EvtListBox: %s\n' % event.GetString())
-
-    def EvtListBoxDClick(self, event):
-        self.log.WriteText('EvtListBoxDClick:\n')
-
-
-
-#---------------------------------------------------------------------------
-
-class TestTimer(wxTimer):
-    def __init__(self, log):
-        wxTimer.__init__(self)
-        self.log = log
-
-    def Notify(self):
-        wxBell()
-        self.log.WriteText('beep!\n')
-
-
-#---------------------------------------------------------------------------
-
-class TestLayoutConstraints(wxFrame):
-    def __init__(self, parent):
-        wxFrame.__init__(self, parent, -1, 'Test Layout Constraints',
-                         wxDefaultPosition, wxSize(500, 300))
-
-        self.SetAutoLayout(true)
-        EVT_BUTTON(self, 100, self.OnButton)
-
-        self.panelA = wxWindow(self, -1, wxDefaultPosition, wxDefaultSize,
-                               wxSIMPLE_BORDER)
-        self.panelA.SetBackgroundColour(wxBLUE)
-        lc = wxLayoutConstraints()
-        lc.top.SameAs(self, wxTop, 10)
-        lc.left.SameAs(self, wxLeft, 10)
-        lc.bottom.SameAs(self, wxBottom, 10)
-        lc.right.PercentOf(self, wxRight, 50)
-        self.panelA.SetConstraints(lc)
-
-        self.panelB = wxWindow(self, -1, wxDefaultPosition, wxDefaultSize,
-                               wxSIMPLE_BORDER)
-        self.panelB.SetBackgroundColour(wxRED)
-        lc = wxLayoutConstraints()
-        lc.top.SameAs(self, wxTop, 10)
-        lc.right.SameAs(self, wxRight, 10)
-        lc.bottom.PercentOf(self, wxBottom, 30)
-        lc.left.RightOf(self.panelA, 10)
-        self.panelB.SetConstraints(lc)
-
-        self.panelC = wxWindow(self, -1, wxDefaultPosition, wxDefaultSize,
-                               wxSIMPLE_BORDER)
-        self.panelC.SetBackgroundColour(wxWHITE)
-        lc = wxLayoutConstraints()
-        lc.top.Below(self.panelB, 10)
-        lc.right.SameAs(self, wxRight, 10)
-        lc.bottom.SameAs(self, wxBottom, 10)
-        lc.left.RightOf(self.panelA, 10)
-        self.panelC.SetConstraints(lc)
-
-        b = wxButton(self.panelA, 100, ' Panel A ')
-        lc = wxLayoutConstraints()
-        lc.centreX.SameAs   (self.panelA, wxCentreX)
-        lc.centreY.SameAs   (self.panelA, wxCentreY)
-        lc.height.AsIs      ()
-        lc.width.PercentOf  (self.panelA, wxWidth, 50)
-        b.SetConstraints(lc);
-
-        b = wxButton(self.panelB, 100, ' Panel B ')
-        lc = wxLayoutConstraints()
-        lc.top.SameAs       (self.panelB, wxTop, 2)
-        lc.right.SameAs     (self.panelB, wxRight, 4)
-        lc.height.AsIs      ()
-        lc.width.AsIs       ()
-        b.SetConstraints(lc);
-
-        self.panelD = wxWindow(self.panelC, -1, wxDefaultPosition, wxDefaultSize,
-                            wxSIMPLE_BORDER)
-        self.panelD.SetBackgroundColour(wxGREEN)
-        wxStaticText(self.panelD, -1, "Panel D", wxPoint(4, 4)).SetBackgroundColour(wxGREEN)
-
-        b = wxButton(self.panelC, 100, ' Panel C ')
-        lc = wxLayoutConstraints()
-        lc.top.Below        (self.panelD)
-        lc.left.RightOf     (self.panelD)
-        lc.height.AsIs      ()
-        lc.width.AsIs       ()
-        b.SetConstraints(lc);
-
-        lc = wxLayoutConstraints()
-        lc.bottom.PercentOf (self.panelC, wxHeight, 50)
-        lc.right.PercentOf  (self.panelC, wxWidth, 50)
-        lc.height.SameAs    (b, wxHeight)
-        lc.width.SameAs     (b, wxWidth)
-        self.panelD.SetConstraints(lc);
-
-
-    def OnButton(self, event):
-        self.Close(true)
-
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-
-
-#---------------------------------------------------------------------------
-
-class TestGrid(wxFrame):
-    def __init__(self, parent, log):
-        wxFrame.__init__(self, parent, -1, 'Test Grid',
-                         wxDefaultPosition, wxSize(500, 300))
-        self.log = log
-
-        grid = wxGrid(self, -1)
-
-        grid.CreateGrid(16, 16)
-        grid.SetColumnWidth(3, 200)
-        grid.SetRowHeight(4, 45)
-        grid.SetCellValue("First cell", 0, 0)
-        grid.SetCellValue("Another cell", 1, 1)
-        grid.SetCellValue("Yet another cell", 2, 2)
-        grid.SetCellTextFont(wxFont(12, wxROMAN, wxITALIC, wxNORMAL), 0, 0)
-        grid.SetCellTextColour(wxRED, 1, 1)
-        grid.SetCellBackgroundColour(wxCYAN, 2, 2)
-        grid.UpdateDimensions()
-        grid.AdjustScrollbars()
-
-        EVT_GRID_SELECT_CELL(grid, self.OnSelectCell)
-        EVT_GRID_CELL_CHANGE(grid, self.OnCellChange)
-        EVT_GRID_CELL_LCLICK(grid, self.OnCellClick)
-        EVT_GRID_LABEL_LCLICK(grid, self.OnLabelClick)
-
-
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-
-    def OnSelectCell(self, event):
-        self.log.WriteText("OnSelectCell: (%d, %d)\n" % (event.m_row, event.m_col))
-
-    def OnCellChange(self, event):
-        self.log.WriteText("OnCellChange: (%d, %d)\n" % (event.m_row, event.m_col))
-
-    def OnCellClick(self, event):
-        self.log.WriteText("OnCellClick: (%d, %d)\n" % (event.m_row, event.m_col))
-
-    def OnLabelClick(self, event):
-        self.log.WriteText("OnLabelClick: (%d, %d)\n" % (event.m_row, event.m_col))
-
-#---------------------------------------------------------------------------
-
-
-class ColoredPanel(wxWindow):
-    def __init__(self, parent, color):
-        wxWindow.__init__(self, parent, -1,
-                          wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER)
-        self.SetBackgroundColour(color)
-
-
-class TestNotebookWindow(wxFrame):
-    def __init__(self, parent, log):
-        wxFrame.__init__(self, parent, -1, 'Test wxNotebook')
-
-        nb = wxNotebook(self, -1, wxPoint(0,0), self.GetClientSize())
-
-        win = ColoredPanel(nb, wxBLUE)
-        nb.AddPage(win, "Blue")
-        st = wxStaticText(win, -1,
-                          "You can put nearly any type of window here!",
-                          wxPoint(10, 10))
-        st.SetForegroundColour(wxWHITE)
-        st.SetBackgroundColour(wxBLUE)
-        st = wxStaticText(win, -1,
-                          "Check the next tab for an example...",
-                          wxPoint(10, 30))
-        st.SetForegroundColour(wxWHITE)
-        st.SetBackgroundColour(wxBLUE)
-
-        win = TestTreeCtrlPanel(nb, log)
-        nb.AddPage(win, "TreeCtrl")
-
-        win = TestListCtrlPanel(nb, log)
-        nb.AddPage(win, "ListCtrl")
-
-        win = ColoredPanel(nb, wxRED)
-        nb.AddPage(win, "Red")
-
-        win = ColoredPanel(nb, wxGREEN)
-        nb.AddPage(win, "Green")
-
-        win = ColoredPanel(nb, wxCYAN)
-        nb.AddPage(win, "Cyan")
-
-        win = ColoredPanel(nb, wxWHITE)
-        nb.AddPage(win, "White")
-
-        win = ColoredPanel(nb, wxBLACK)
-        nb.AddPage(win, "Black")
-
-        win = ColoredPanel(nb, wxNamedColour('MIDNIGHT BLUE'))
-        nb.AddPage(win, "MIDNIGHT BLUE")
-
-        win = ColoredPanel(nb, wxNamedColour('INDIAN RED'))
-        nb.AddPage(win, "INDIAN RED")
-
-        nb.SetSelection(0)
-        self.SetSize(wxSize(350, 300))
-
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-
-#---------------------------------------------------------------------------
-
-class TestSplitterWindow(wxFrame):
-    def __init__(self, parent):
-        wxFrame.__init__(self, parent, -1, 'Test wxSplitterWindow',
-                         wxDefaultPosition, wxSize(500, 300))
-
-        splitter = wxSplitterWindow(self, -1)
-
-        p1 = ColoredPanel(splitter, wxRED)
-        wxStaticText(p1, -1, "Panel One", wxPoint(5,5)).SetBackgroundColour(wxRED)
-
-        p2 = ColoredPanel(splitter, wxBLUE)
-        wxStaticText(p2, -1, "Panel Two", wxPoint(5,5)).SetBackgroundColour(wxBLUE)
-
-        splitter.SplitVertically(p1, p2)
-
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-
-
-#---------------------------------------------------------------------------
-
-class CustomStatusBar(wxStatusBar):
-    def __init__(self, parent):
-        wxStatusBar.__init__(self, parent, -1)
-        self.SetFieldsCount(3)
-
-        self.SetStatusText("A Custom StatusBar...", 0)
-
-        self.cb = wxCheckBox(self, 1001, "toggle clock")
-        EVT_CHECKBOX(self, 1001, self.OnToggleClock)
-        self.cb.SetValue(true)
-
-        # figure out how tall to make it.
-        dc = wxClientDC(self)
-        dc.SetFont(self.GetFont())
-        (w,h) = dc.GetTextExtent('X')
-        h = int(h * 1.8)
-        self.SetSize(wxSize(100, h))
-
-        # start our timer
-        self.timer = wxPyTimer(self.Notify)
-        self.timer.Start(1000)
-        self.Notify()
-
-
-    # Time-out handler
-    def Notify(self):
-        t = time.localtime(time.time())
-        st = time.strftime("%d-%b-%Y   %I:%M:%S", t)
-        self.SetStatusText(st, 2)
-
-    # the checkbox was clicked
-    def OnToggleClock(self, event):
-        if self.cb.GetValue():
-            self.timer.Start(1000)
-            self.Notify()
-        else:
-            self.timer.Stop()
-
-    # reposition the checkbox
-    def OnSize(self, event):
-        rect = self.GetFieldRect(1)
-        print "%s, %s" % (rect.x, rect.y)
-        self.cb.SetPosition(wxPoint(rect.x+2, rect.y+2))
-        self.cb.SetSize(wxSize(rect.width-4, rect.height-4))
-
-
-
-class TestCustomStatusBar(wxFrame):
-    def __init__(self, parent):
-        wxFrame.__init__(self, parent, -1, 'Test Custom StatusBar',
-                         wxDefaultPosition, wxSize(500, 300))
-        wxWindow(self, -1).SetBackgroundColour(wxNamedColour("WHITE"))
-
-        self.sb = CustomStatusBar(self)
-        self.SetStatusBar(self.sb)
-
-    def OnCloseWindow(self, event):
-        self.sb.timer.Stop()
-        self.Destroy()
-
-
-#---------------------------------------------------------------------------
-
-class TestToolBar(wxFrame):
-    def __init__(self, parent, log):
-        wxFrame.__init__(self, parent, -1, 'Test ToolBar',
-                         wxDefaultPosition, wxSize(500, 300))
-        self.log = log
-
-        wxWindow(self, -1).SetBackgroundColour(wxNamedColour("WHITE"))
-
-        tb = self.CreateToolBar(wxTB_HORIZONTAL|wxNO_BORDER)
-        #tb = wxToolBar(self, -1, wxDefaultPosition, wxDefaultSize,
-        #               wxTB_HORIZONTAL | wxNO_BORDER | wxTB_FLAT)
-        #self.SetToolBar(tb)
-
-        self.CreateStatusBar()
-
-        tb.AddTool(10, wxNoRefBitmap('bitmaps/new.bmp',   wxBITMAP_TYPE_BMP),
-                        wxNullBitmap, false, -1, -1, "New", "Long help for 'New'")
-        EVT_TOOL(self, 10, self.OnToolClick)
-        EVT_TOOL_RCLICKED(self, 10, self.OnToolRClick)
-
-        tb.AddTool(20, wxNoRefBitmap('bitmaps/open.bmp',  wxBITMAP_TYPE_BMP),
-                        wxNullBitmap, false, -1, -1, "Open")
-        EVT_TOOL(self, 20, self.OnToolClick)
-        EVT_TOOL_RCLICKED(self, 20, self.OnToolRClick)
-
-        tb.AddSeparator()
-        tb.AddTool(30, wxNoRefBitmap('bitmaps/copy.bmp',  wxBITMAP_TYPE_BMP),
-                        wxNullBitmap, false, -1, -1, "Copy")
-        EVT_TOOL(self, 30, self.OnToolClick)
-        EVT_TOOL_RCLICKED(self, 30, self.OnToolRClick)
-
-        tb.AddTool(40, wxNoRefBitmap('bitmaps/paste.bmp', wxBITMAP_TYPE_BMP),
-                        wxNullBitmap, false, -1, -1, "Paste")
-        EVT_TOOL(self, 40, self.OnToolClick)
-        EVT_TOOL_RCLICKED(self, 40, self.OnToolRClick)
-
-        tb.AddSeparator()
-
-        tb.AddTool(50, wxNoRefBitmap('bitmaps/tog1.bmp', wxBITMAP_TYPE_BMP),
-                        wxNullBitmap, true, -1, -1, "Toggle this")
-        EVT_TOOL(self, 50, self.OnToolClick)
-        EVT_TOOL_RCLICKED(self, 50, self.OnToolRClick)
-
-        tb.AddTool(60, wxNoRefBitmap('bitmaps/tog1.bmp', wxBITMAP_TYPE_BMP),
-                        wxNoRefBitmap('bitmaps/tog2.bmp', wxBITMAP_TYPE_BMP),
-                        true, -1, -1, "Toggle with 2 bitmaps")
-        EVT_TOOL(self, 60, self.OnToolClick)
-        EVT_TOOL_RCLICKED(self, 60, self.OnToolRClick)
-
-        tb.Realize()
-
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-
-    def OnToolClick(self, event):
-        self.log.WriteText("tool %s clicked\n" % event.GetId())
-
-    def OnToolRClick(self, event):
-        self.log.WriteText("tool %s right-clicked\n" % event.GetId())
-
-
-#---------------------------------------------------------------------------
-
-class TestTreeCtrlPanel(wxPanel):
-    def __init__(self, parent, log):
-        wxPanel.__init__(self, parent, -1)
-
-        self.log = log
-        tID = 1101
-
-        self.tree = wxTreeCtrl(self, tID)
-        root = self.tree.AddRoot("The Root Item")
-        for x in range(10):
-            child = self.tree.AppendItem(root, "Item %d" % x)
-            for y in range(5):
-                last = self.tree.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)))
-
-        self.tree.Expand(root)
-        EVT_TREE_ITEM_EXPANDED  (self, tID, self.OnItemExpanded)
-        EVT_TREE_ITEM_COLLAPSED (self, tID, self.OnItemCollapsed)
-        EVT_TREE_SEL_CHANGED    (self, tID, self.OnSelChanged)
-
-
-    def OnSize(self, event):
-        w,h = self.GetClientSizeTuple()
-        self.tree.SetDimensions(0, 0, w, h)
-
-
-    def OnItemExpanded(self, event):
-        item = event.GetItem()
-        self.log.WriteText("OnItemExpanded: %s\n" % self.tree.GetItemText(item))
-
-    def OnItemCollapsed(self, event):
-        item = event.GetItem()
-        self.log.WriteText("OnItemCollapsed: %s\n" % self.tree.GetItemText(item))
-
-    def OnSelChanged(self, event):
-        item = event.GetItem()
-        self.log.WriteText("OnSelChanged: %s\n" % self.tree.GetItemText(item))
-
-
-
-
-class TestTreeCtrl(wxFrame):
-    def __init__(self, parent, log):
-        wxFrame.__init__(self, parent, -1, 'Test TreeCtrl',
-                         wxDefaultPosition, wxSize(250, 300))
-
-        p = TestTreeCtrlPanel(self, log)
-
-
-#---------------------------------------------------------------------------
-
-class TestListCtrlPanel(wxPanel):
-    def __init__(self, parent, log):
-        wxPanel.__init__(self, parent, -1)
-
-        self.log = log
-        tID = 1101
-
-        self.il = wxImageList(16, 16)
-        idx1 = self.il.Add(wxNoRefBitmap('bitmaps/smiles.bmp', wxBITMAP_TYPE_BMP))
-
-        self.list = wxListCtrl(self, tID, wxDefaultPosition, wxDefaultSize,
-                               wxLC_REPORT|wxSUNKEN_BORDER)
-        self.list.SetImageList(self.il, wxIMAGE_LIST_SMALL)
-
-        #self.list.SetToolTip(wxToolTip("This is a ToolTip!"))
-        #wxToolTip_Enable(true)
-
-        self.list.InsertColumn(0, "Column 0")
-        self.list.InsertColumn(1, "Column 1")
-        self.list.InsertColumn(2, "One More Column (2)")
-        for x in range(50):
-            self.list.InsertImageStringItem(x, "This is item %d" % x, idx1)
-            self.list.SetStringItem(x, 1, "Col 1, item %d" % x)
-            self.list.SetStringItem(x, 2, "item %d in column 2" % x)
-
-        self.list.SetColumnWidth(0, wxLIST_AUTOSIZE)
-        self.list.SetColumnWidth(1, wxLIST_AUTOSIZE)
-        self.list.SetColumnWidth(2, wxLIST_AUTOSIZE)
-
-
-    def OnSize(self, event):
-        w,h = self.GetClientSizeTuple()
-        self.list.SetDimensions(0, 0, w, h)
-
-
-
-
-class TestListCtrl(wxFrame):
-    def __init__(self, parent, log):
-        wxFrame.__init__(self, parent, -1, 'Test ListCtrl',
-                         wxDefaultPosition, wxSize(250, 300))
-
-        p = TestListCtrlPanel(self, log)
-
-
-#---------------------------------------------------------------------------
-
-class TestSashWindow(wxMDIParentFrame):
-    NEW_WINDOW       = 5000
-    TOGGLE_WINDOW    = 5001
-    QUIT             = 5002
-    ID_WINDOW_TOP    = 5100
-    ID_WINDOW_LEFT1  = 5101
-    ID_WINDOW_LEFT2  = 5102
-    ID_WINDOW_BOTTOM = 5103
-
-
-    def __init__(self, parent, log):
-        wxMDIParentFrame.__init__(self, parent, -1, 'Test Sash Window',
-                                  wxDefaultPosition, wxSize(250, 300))
-
-        self.log = log
-        menu = wxMenu()
-        menu.Append(self.NEW_WINDOW, "&New Window")
-        menu.Append(self.TOGGLE_WINDOW, "&Toggle window")
-        menu.Append(self.QUIT, "E&xit")
-
-        menubar = wxMenuBar()
-        menubar.Append(menu, "&File")
-
-        self.SetMenuBar(menubar)
-        self.CreateStatusBar()
-
-        EVT_MENU(self, self.NEW_WINDOW,    self.OnNewWindow)
-        EVT_MENU(self, self.TOGGLE_WINDOW, self.OnToggleWindow)
-        EVT_MENU(self, self.QUIT,          self.OnQuit)
-
-        EVT_SASH_DRAGGED_RANGE(self, self.ID_WINDOW_TOP,
-                               self.ID_WINDOW_BOTTOM, self.OnSashDrag)
-
-
-        # Create some layout windows
-        # A window like a toolbar
-        win = wxSashLayoutWindow(self, self.ID_WINDOW_TOP, wxDefaultPosition,
-                                 wxSize(200, 30), wxNO_BORDER|wxSW_3D)
-        win.SetDefaultSize(wxSize(1000, 30))
-        win.SetOrientation(wxLAYOUT_HORIZONTAL)
-        win.SetAlignment(wxLAYOUT_TOP)
-        win.SetBackgroundColour(wxColour(255, 0, 0))
-        win.SetSashVisible(wxSASH_BOTTOM, true)
-
-        self.topWindow = win
-
-
-        # A window like a statusbar
-        win = wxSashLayoutWindow(self, self.ID_WINDOW_BOTTOM,
-                                 wxDefaultPosition, wxSize(200, 30),
-                                 wxNO_BORDER|wxSW_3D)
-        win.SetDefaultSize(wxSize(1000, 30))
-        win.SetOrientation(wxLAYOUT_HORIZONTAL)
-        win.SetAlignment(wxLAYOUT_BOTTOM)
-        win.SetBackgroundColour(wxColour(0, 0, 255))
-        win.SetSashVisible(wxSASH_TOP, true)
-
-        self.bottomWindow = win
-
-
-        # A window to the left of the client window
-        win =  wxSashLayoutWindow(self, self.ID_WINDOW_LEFT1,
-                                  wxDefaultPosition, wxSize(200, 30),
-                                  wxNO_BORDER|wxSW_3D)
-        win.SetDefaultSize(wxSize(120, 1000))
-        win.SetOrientation(wxLAYOUT_VERTICAL)
-        win.SetAlignment(wxLAYOUT_LEFT)
-        win.SetBackgroundColour(wxColour(0, 255, 0))
-        win.SetSashVisible(wxSASH_RIGHT, TRUE)
-        win.SetExtraBorderSize(10)
-
-        textWindow = wxTextCtrl(win, -1, "", wxDefaultPosition, wxDefaultSize,
-                                wxTE_MULTILINE|wxSUNKEN_BORDER)
-        textWindow.SetValue("A help window")
-
-        self.leftWindow1 = win
-
-
-        # Another window to the left of the client window
-        win = wxSashLayoutWindow(self, self.ID_WINDOW_LEFT2,
-                                 wxDefaultPosition, wxSize(200, 30),
-                                 wxNO_BORDER|wxSW_3D)
-        win.SetDefaultSize(wxSize(120, 1000))
-        win.SetOrientation(wxLAYOUT_VERTICAL)
-        win.SetAlignment(wxLAYOUT_LEFT)
-        win.SetBackgroundColour(wxColour(0, 255, 255))
-        win.SetSashVisible(wxSASH_RIGHT, TRUE)
-
-        self.leftWindow2 = win
-
-
-    def OnNewWindow(self, event):
-        pass
-
-    def OnToggleWindow(self, event):
-        pass
-
-    def OnQuit(self, event):
-        self.Close(true)
-
-    def OnSashDrag(self, event):
-        if event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE:
-            return
-
-        eID = event.GetId()
-        if eID == self.ID_WINDOW_TOP:
-            self.topWindow.SetDefaultSize(wxSize(1000, event.GetDragRect().height))
-
-        elif eID == self.ID_WINDOW_LEFT1:
-            self.leftWindow1.SetDefaultSize(wxSize(event.GetDragRect().width, 1000))
-
-
-        elif eID == self.ID_WINDOW_LEFT2:
-            self.leftWindow2.SetDefaultSize(wxSize(event.GetDragRect().width, 1000))
-
-        elif eID == self.ID_WINDOW_BOTTOM:
-            self.bottomWindow.SetDefaultSize(wxSize(1000, event.GetDragRect().height))
-
-        wxLayoutAlgorithm().LayoutMDIFrame(self)
-
-        # Leaves bits of itself behind sometimes
-        self.GetClientWindow().Refresh()
-
-
-    def OnSize(self, event):
-        wxLayoutAlgorithm().LayoutMDIFrame(self)
-
-#---------------------------------------------------------------------------
-#---------------------------------------------------------------------------
-#---------------------------------------------------------------------------
-
-class AppFrame(wxFrame):
-    def __init__(self, parent, id, title):
-        wxFrame.__init__(self, parent, id, title, wxDefaultPosition,
-                         wxSize(420, 200))
-        if wxPlatform == '__WXMSW__':
-            self.icon = wxIcon('bitmaps/mondrian.ico', wxBITMAP_TYPE_ICO)
-            self.SetIcon(self.icon)
-
-        self.mainmenu = wxMenuBar()
-        menu = wxMenu()
-        menu.Append(200, 'E&xit', 'Get the heck outta here!')
-        EVT_MENU(self, 200, self.OnFileExit)
-        self.mainmenu.Append(menu, '&File')
-
-        menu = self.MakeTestsMenu()
-        self.mainmenu.Append(menu, '&Tests')
-        self.SetMenuBar(self.mainmenu)
-
-        self.log = wxTextCtrl(self, -1, '', wxDefaultPosition, wxDefaultSize,
-                              wxTE_MULTILINE|wxTE_READONLY)
-        self.log.WriteText('Test 4:\n')
-        (w, self.charHeight) = self.log.GetTextExtent('X')
-
-
-    def MakeTestsMenu(self):
-        menu = wxMenu()
-
-        mID = NewId()
-        menu.Append(mID, '&Simple Controls')
-        EVT_MENU(self, mID, self.OnTestSimpleControls)
-
-        mID = NewId()
-        menu.Append(mID, '&Timer', '', true)
-        EVT_MENU(self, mID, self.OnTestTimer)
-        self.timerID = mID
-        self.timer = None
-
-        mID = NewId()
-        menu.Append(mID, '&Layout Constraints')
-        EVT_MENU(self, mID, self.OnTestLayoutConstraints)
-
-        mID = NewId()
-        menu.Append(mID, '&Grid')
-        EVT_MENU(self, mID, self.OnTestGrid)
-
-
-        smenu = wxMenu()   # make a sub-menu
-
-        mID = NewId()
-        smenu.Append(mID, '&Colour')
-        EVT_MENU(self, mID, self.OnTestColourDlg)
-
-        mID = NewId()
-        smenu.Append(mID, '&Directory')
-        EVT_MENU(self, mID, self.OnTestDirDlg)
-
-        mID = NewId()
-        smenu.Append(mID, '&File')
-        EVT_MENU(self, mID, self.OnTestFileDlg)
-
-        mID = NewId()
-        smenu.Append(mID, '&Single Choice')
-        EVT_MENU(self, mID, self.OnTestSingleChoiceDlg)
-
-        mID = NewId()
-        smenu.Append(mID, '&TextEntry')
-        EVT_MENU(self, mID, self.OnTestTextEntryDlg)
-
-        mID = NewId()
-        smenu.Append(mID, '&Font')
-        EVT_MENU(self, mID, self.OnTestFontDlg)
-
-        mID = NewId()
-        smenu.Append(mID, '&PageSetup')
-        EVT_MENU(self, mID, self.OnTestPageSetupDlg)
-
-        mID = NewId()
-        smenu.Append(mID, '&Print')
-        EVT_MENU(self, mID, self.OnTestPrintDlg)
-
-        mID = NewId()
-        smenu.Append(mID, '&Message')
-        EVT_MENU(self, mID, self.OnTestMessageDlg)
-
-
-        menu.AppendMenu(NewId(), '&Common Dialogs', smenu)
-
-
-        mID = NewId()
-        menu.Append(mID, '&Notebook')
-        EVT_MENU(self, mID, self.OnTestNotebook)
-
-        mID = NewId()
-        menu.Append(mID, '&Splitter Window')
-        EVT_MENU(self, mID, self.OnTestSplitter)
-
-        mID = NewId()
-        menu.Append(mID, '&Custom StatusBar')
-        EVT_MENU(self, mID, self.OnTestCustomStatusBar)
-
-        mID = NewId()
-        menu.Append(mID, '&ToolBar')
-        EVT_MENU(self, mID, self.OnTestToolBar)
-
-        mID = NewId()
-        menu.Append(mID, 'T&ree Control')
-        EVT_MENU(self, mID, self.OnTestTreeCtrl)
-
-        mID = NewId()
-        menu.Append(mID, '&List Control')
-        EVT_MENU(self, mID, self.OnTestListCtrl)
-
-        mID = NewId()
-        menu.Append(mID, 'S&ash Window and Layout Algorithm')
-        EVT_MENU(self, mID, self.OnTestSashWindow)
-
-        return menu
-
-
-
-
-    def WriteText(self, str):
-        self.log.WriteText(str)
-        if wxPlatform == '__WXMSW__':
-            w, h = self.log.GetClientSizeTuple()
-            numLines = h/self.charHeight
-            x, y = self.log.PositionToXY(self.log.GetLastPosition())
-            self.log.ShowPosition(self.log.XYToPosition(x, y-numLines+1))
-
-    def OnFileExit(self, event):
-        self.Close()
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-
-
-
-
-    def OnTestSimpleControls(self, event):
-        dlg = TestSimpleControlsDlg(self, self)
-        dlg.Centre()
-        dlg.ShowModal()
-        dlg.Destroy()
-
-    def OnTestTimer(self, event):
-        if self.timer:
-            self.mainmenu.Check(self.timerID, false)
-            self.timer.Stop()
-            self.timer = None
-        else:
-            self.mainmenu.Check(self.timerID, true)
-            self.timer = TestTimer(self)
-            self.timer.Start(1000)
-
-    def OnTestLayoutConstraints(self, event):
-        win = TestLayoutConstraints(self)
-        win.Show(true)
-
-    def OnTestGrid(self, event):
-        win = TestGrid(self, self)
-        win.Show(true)
-        win.SetSize(wxSize(505, 300))  # have to force a resize, or the grid doesn't
-                                       # show up for some reason....
-
-    def OnTestColourDlg(self, event):
-        data = wxColourData()
-        data.SetChooseFull(true)
-        dlg = wxColourDialog(self, data)
-        if dlg.ShowModal() == wxID_OK:
-            data = dlg.GetColourData()
-            self.log.WriteText('You selected: %s\n' % str(data.GetColour().Get()))
-        dlg.Destroy()
-
-    def OnTestDirDlg(self, event):
-        dlg = wxDirDialog(self)
-        if dlg.ShowModal() == wxID_OK:
-            self.log.WriteText('You selected: %s\n' % dlg.GetPath())
-        dlg.Destroy()
-
-    def OnTestFileDlg(self, event):
-        dlg = wxFileDialog(self, "Choose a file", ".", "", "*.*", wxOPEN)
-        if dlg.ShowModal() == wxID_OK:
-            self.log.WriteText('You selected: %s\n' % dlg.GetPath())
-        dlg.Destroy()
-
-    def OnTestSingleChoiceDlg(self, event):
-        dlg = wxSingleChoiceDialog(self, 'Test Single Choice', 'The Caption',
-                                   ['zero', 'one', 'two', 'three', 'four', 'five',
-                                    'six', 'seven', 'eight'])
-        if dlg.ShowModal() == wxID_OK:
-            self.log.WriteText('You selected: %s\n' % dlg.GetStringSelection())
-        dlg.Destroy()
-
-    def OnTestTextEntryDlg(self, event):
-        dlg = wxTextEntryDialog(self, 'What is your favorite programming language?',
-                                'Duh??', 'Python')
-        #dlg.SetValue("Python is the best!")  #### this doesn't work?
-        if dlg.ShowModal() == wxID_OK:
-            self.log.WriteText('You entered: %s\n' % dlg.GetValue())
-        dlg.Destroy()
-
-
-    def OnTestFontDlg(self, event):
-        dlg = wxFontDialog(self)
-        if dlg.ShowModal() == wxID_OK:
-            data = dlg.GetFontData()
-            font = data.GetChosenFont()
-            self.log.WriteText('You selected: "%s", %d points, color %s\n' %
-                               (font.GetFaceName(), font.GetPointSize(),
-                                data.GetColour().Get()))
-        dlg.Destroy()
-
-
-    def OnTestPageSetupDlg(self, event):
-        data = wxPageSetupDialogData()
-        data.SetMarginTopLeft(wxPoint(50,50))
-        data.SetMarginBottomRight(wxPoint(50,50))
-        dlg = wxPageSetupDialog(self, data)
-        if dlg.ShowModal() == wxID_OK:
-            data = dlg.GetPageSetupData()
-            tl = data.GetMarginTopLeft()
-            br = data.GetMarginBottomRight()
-            self.log.WriteText('Margins are: %s %s\n' % (str(tl), str(br)))
-        dlg.Destroy()
-
-    def OnTestPrintDlg(self, event):
-        data = wxPrintDialogData()
-        data.EnablePrintToFile(true)
-        data.EnablePageNumbers(true)
-        data.EnableSelection(true)
-        dlg = wxPrintDialog(self, data)
-        if dlg.ShowModal() == wxID_OK:
-            self.log.WriteText('\n')
-        dlg.Destroy()
-
-    def OnTestMessageDlg(self, event):
-        dlg = wxMessageDialog(self, 'Hello from Python and wxWindows!',
-                              'A Message Box', wxOK | wxICON_INFORMATION)
-        dlg.ShowModal()
-        dlg.Destroy()
-
-
-    def OnTestNotebook(self, event):
-        win = TestNotebookWindow(self, self)
-        win.Show(true)
-
-    def OnTestSplitter(self, event):
-        win = TestSplitterWindow(self)
-        win.Show(true)
-
-    def OnTestCustomStatusBar(self, event):
-        win = TestCustomStatusBar(self)
-        win.Show(true)
-
-    def OnTestToolBar(self, event):
-        win = TestToolBar(self, self)
-        win.Show(true)
-
-    def OnTestTreeCtrl(self, event):
-        win = TestTreeCtrl(self, self)
-        win.Show(true)
-
-    def OnTestListCtrl(self, event):
-        win = TestListCtrl(self, self)
-        win.Show(true)
-
-    def OnTestSashWindow(self, event):
-        win = TestSashWindow(self, self)
-        win.Show(true)
-
-#---------------------------------------------------------------------------
-
-
-class MyApp(wxApp):
-    def OnInit(self):
-        frame = AppFrame(NULL, -1, "Test 4: (lots of little tests...)")
-        frame.Show(true)
-        self.SetTopWindow(frame)
-        return true
-
-#---------------------------------------------------------------------------
-
-
-def main():
-    app = MyApp(0)
-    app.MainLoop()
-
-
-def t():
-    import pdb
-    pdb.run('main()')
-
-
-# for focused testing...
-def main2():
-    class T2App(wxApp):
-        def OnInit(self):
-            frame = TestLayoutConstraints(NULL)
-            frame.Show(true)
-            self.SetTopWindow(frame)
-            return true
-
-    app = T2App(0)
-    app.MainLoop()
-
-def t2():
-    import pdb
-    pdb.run('main2()')
-
-
-
-if __name__ == '__main__':
-    main()
-
-
-#----------------------------------------------------------------------------
-#
-# $Log$
-# Revision 1.4  2001/02/16 08:19:38  robind
-# Copied/merged from the 2.2 branch.
-#
-# Changes needed to build with new event system
-#
-# Revision 1.1.2.2  2001/01/30 20:54:16  robind
-#
-# Gobs of changes move from the main trunk to the 2.2 branch in
-# preparataion for 2.2.5 release.  See CHANGES.txt for details.
-#
-# Revision 1.3  2000/10/30 21:05:22  robind
-#
-# Merged wxPython 2.2.2 over to the main branch
-#
-# Revision 1.1.2.1  2000/05/16 02:07:02  RD
-#
-# Moved and reorganized wxPython directories
-#
-# Now builds into an intermediate wxPython package directory before
-# installing
-#
-# Revision 1.17  1999/08/05 05:06:50  RD
-#
-# Some minor tweaks
-#
-# Revision 1.16  1999/04/30 03:29:54  RD
-#
-# wxPython 2.0b9, first phase (win32)
-# Added gobs of stuff, see wxPython/README.txt for details
-#
-# Revision 1.15.2.1  1999/03/16 06:05:50  RD
-#
-# wxPython 2.0b7
-#
-# Revision 1.15  1999/03/05 07:23:42  RD
-#
-# Minor wxPython changes for wxWin 2.0
-#
-# Revision 1.14  1999/02/27 04:20:50  RD
-#
-# minor tweaks for testing
-#
-# Revision 1.13  1999/02/20 09:04:44  RD
-# Added wxWindow_FromHWND(hWnd) for wxMSW to construct a wxWindow from a
-# window handle.  If you can get the window handle into the python code,
-# it should just work...  More news on this later.
-#
-# Added wxImageList, wxToolTip.
-#
-# Re-enabled wxConfig.DeleteAll() since it is reportedly fixed for the
-# wxRegConfig class.
-#
-# As usual, some bug fixes, tweaks, etc.
-#
-# Revision 1.12  1999/01/30 07:31:33  RD
-#
-# Added wxSashWindow, wxSashEvent, wxLayoutAlgorithm, etc.
-#
-# Various cleanup, tweaks, minor additions, etc. to maintain
-# compatibility with the current wxWindows.
-#
-# Revision 1.11  1999/01/29 16:17:59  HH
-# In test4's toolbar sample, changed NULL to wxNullBitmap to prevent SIGSEVS
-# with wxGTK. The sample works now.
-#
-# Revision 1.10  1998/12/16 22:12:47  RD
-#
-# Tweaks needed to be able to build wxPython with wxGTK.
-#
-# Revision 1.9  1998/12/15 20:44:35  RD
-# Changed the import semantics from "from wxPython import *" to "from
-# wxPython.wx import *"  This is for people who are worried about
-# namespace pollution, they can use "from wxPython import wx" and then
-# prefix all the wxPython identifiers with "wx."
-#
-# Added wxTaskbarIcon for wxMSW.
-#
-# Made the events work for wxGrid.
-#
-# Added wxConfig.
-#
-# Added wxMiniFrame for wxGTK, (untested.)
-#
-# Changed many of the args and return values that were pointers to gdi
-# objects to references to reflect changes in the wxWindows API.
-#
-# Other assorted fixes and additions.
-#
-# Revision 1.8  1998/11/25 08:47:11  RD
-#
-# Added wxPalette, wxRegion, wxRegionIterator, wxTaskbarIcon
-# Added events for wxGrid
-# Other various fixes and additions
-#
-# Revision 1.7  1998/11/11 03:13:19  RD
-#
-# Additions for wxTreeCtrl
-#
-# Revision 1.6  1998/10/20 06:45:33  RD
-# New wxTreeCtrl wrappers (untested)
-# some changes in helpers
-# etc.
-#
-# Revision 1.5  1998/10/02 06:42:28  RD
-#
-# Version 0.4 of wxPython for MSW.
-#
-# Revision 1.4  1998/08/27 21:59:51  RD
-# Some chicken-and-egg problems solved for wxPython on wxGTK
-#
-# Revision 1.3  1998/08/27 00:01:17  RD
-# - more tweaks
-# - have discovered some problems but not yet discovered solutions...
-#
-# Revision 1.2  1998/08/22 19:51:18  RD
-# some tweaks for wxGTK
-#
-# Revision 1.1  1998/08/09 08:28:05  RD
-# Initial version
-#
-#
diff --git a/wxPython/tests/test5.py b/wxPython/tests/test5.py
deleted file mode 100644
index f81ddbb515..0000000000
--- a/wxPython/tests/test5.py
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/bin/env python
-#----------------------------------------------------------------------------
-# Name:         test5.py
-# Purpose:      Testing wxTaskBarIcon for win32 systems
-#
-# Author:       Robin Dunn
-#
-# Created:      17-Nov-1998
-# RCS-ID:       $Id$
-# Copyright:    (c) 1998 by Total Control Software
-# Licence:      wxWindows license
-#----------------------------------------------------------------------------
-
-
-from wxPython.wx import *
-
-
-#---------------------------------------------------------------------------
-
-class MyDialog(wxDialog):
-    def __init__(self):
-        wxDialog.__init__(self, NULL, -1, "wxTaskBarIcon Test",
-                          wxPoint(-1,-1), wxSize(380,250),
-                          wxDIALOG_MODELESS|wxDEFAULT_DIALOG_STYLE)
-
-        # build the contents of the Dialog
-        wxStaticText(self, -1,
-                     "Press OK to hide me, Exit to quit.",
-                     wxPoint(10, 20))
-        wxStaticText(self, -1,
-                     "Double-click on the taskbar icon to show me again.",
-                     wxPoint(10, 40))
-
-        okButton = wxButton(self, wxID_OK, "OK", wxPoint(100, 180), wxSize(80, 25))
-        exitButton = wxButton(self, wxID_EXIT, "Exit", wxPoint(185, 180), wxSize(80, 25))
-        okButton.SetDefault()
-        self.Centre(wxBOTH)
-
-        EVT_BUTTON(self, wxID_OK, self.OnOK)
-        EVT_BUTTON(self, wxID_EXIT, self.OnExit)
-
-
-        # make the TaskBar icon
-        self.tbIcon = wxTaskBarIcon()
-        icon = wxIcon('bitmaps/smiles.ico', wxBITMAP_TYPE_ICO)
-        self.tbIcon.SetIcon(icon, "Test ToolTip")
-        EVT_TASKBAR_LEFT_DCLICK(self.tbIcon, self.OnTaskBarActivate)
-
-
-
-    def OnTaskBarActivate(self, event):
-        self.Show(true)
-
-    def OnOK(self, event):
-        self.Show(false)
-
-    def OnExit(self, event):
-        self.Close(true)
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-        del self.tbIcon  # ensure the tbIcon is cleaned up...
-
-
-
-#---------------------------------------------------------------------------
-
-class MyApp(wxApp):
-    def OnInit(self):
-        self.dlg = MyDialog()
-        self.dlg.Show(true)
-        self.SetTopWindow(self.dlg)
-        return true
-
-#---------------------------------------------------------------------------
-
-
-def main():
-    app = MyApp(0)
-    app.MainLoop()
-
-
-def t():
-    import pdb
-    pdb.run('main()')
-
-if __name__ == '__main__':
-    main()
-
-
-#----------------------------------------------------------------------------
diff --git a/wxPython/tests/test6.py b/wxPython/tests/test6.py
deleted file mode 100644
index 4f325d8a70..0000000000
--- a/wxPython/tests/test6.py
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/bin/env python
-#----------------------------------------------------------------------------
-# Name:         test6.py
-# Purpose:      Testing wxConfig
-#
-# Author:       Robin Dunn
-#
-# Created:      26-Nov-1998
-# RCS-ID:       $Id$
-# Copyright:    (c) 1998 by Total Control Software
-# Licence:      wxWindows license
-#----------------------------------------------------------------------------
-
-import sys
-from wxPython.utils import wxConfig
-
-
-#----------------------------------------------------------------------------
-
-def main():
-
-    cfg = wxConfig('test6', 'TCS', ".testconfig")
-
-    cmd = ''
-    if len(sys.argv) > 1:
-        cmd = sys.argv[1]
-
-    if cmd == 'add':
-        cfg.SetPath('one/two/three')
-        cfg.Flush()
-
-        cfg.Write('aaa', 'The quick brown fox jummped over the lazy dog.')
-        cfg.Write('bbb', 'This is a test of the emergency broadcast system')
-
-        aList = ['one', 'two', 'buckle', 'my', 'shoe', 1966]
-        cfg.Write('ccc', str(aList))
-
-        cfg.Write('zzz/yyy', 'foobar')
-        cfg.Write('zzz/xxx', 'spam and eggs')
-
-        cfg.Flush()
-
-    elif cmd == 'enum':
-        traverse(cfg, '/')
-
-    elif cmd == 'del':
-        cfg.DeleteAll()
-
-    else:
-        print 'Specify command:  add, enum, or del.'
-
-
-
-def traverse(cfg, path):
-    print path
-    cont, val, idx = cfg.GetFirstEntry()
-    while cont:
-        print "%s/%s = %s" % (path, val, cfg.Read(val))
-        cont, val, idx = cfg.GetNextEntry(idx)
-
-    cont, val, idx = cfg.GetFirstGroup()
-    while cont:
-        if path == '/':
-            newpath = path+val
-        else:
-            newpath = path+'/'+val
-
-        cfg.SetPath(newpath)
-        traverse(cfg, newpath)
-        cfg.SetPath(path)
-        cont, val, idx = cfg.GetNextGroup(idx)
-
-
-
-if __name__ == '__main__':
-    #import pdb
-    #pdb.run('main()')
-    main()
-
-
-#----------------------------------------------------------------------------
diff --git a/wxPython/tests/test7.py b/wxPython/tests/test7.py
deleted file mode 100644
index 11b786e19f..0000000000
--- a/wxPython/tests/test7.py
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/bin/env python
-#----------------------------------------------------------------------------
-# Name:         test7.py
-# Purpose:      A minimal wxPython program that is a bit smarter than test1.
-#
-# Author:       Robin Dunn
-#
-# Created:      A long time ago, in a galaxy far, far away...
-# RCS-ID:       $Id$
-# Copyright:    (c) 1998 by Total Control Software
-# Licence:      wxWindows license
-#----------------------------------------------------------------------------
-
-
-## import all of the wxPython GUI package
-from wxPython.wx import *
-
-
-#---------------------------------------------------------------------------
-
-## Create a new frame class, derived from the wxPython Frame.
-class MyFrame(wxFrame):
-
-    def __init__(self, parent, id, title):
-        # First, call the base class' __init__ method to create the frame
-        wxFrame.__init__(self, parent, id, title,
-                         wxPoint(100, 100), wxSize(160, 100))
-
-        # Associate some events with methods of this class
-        EVT_SIZE(self, self.OnSize)
-        EVT_MOVE(self, self.OnMove)
-
-        # Add a panel and some controls to display the size and position
-        panel = wxPanel(self, -1)
-        wxStaticText(panel, -1, "Size:",
-                     wxDLG_PNT(panel, wxPoint(4, 4)),  wxDefaultSize)
-        wxStaticText(panel, -1, "Pos:",
-                     wxDLG_PNT(panel, wxPoint(4, 18)), wxDefaultSize)
-        wxStaticText(panel, -1, "ScreenPos:",
-                     wxDLG_PNT(panel, wxPoint(4, 32)), wxDefaultSize)
-        self.sizeCtrl = wxTextCtrl(panel, -1, "",
-                                   wxDLG_PNT(panel, wxPoint(36, 4)),
-                                   wxDLG_SZE(panel, wxSize(36, -1)),
-                                   wxTE_READONLY)
-
-        self.posCtrl = wxTextCtrl(panel, -1, "",
-                                  wxDLG_PNT(panel, wxPoint(36, 18)),
-                                  wxDLG_SZE(panel, wxSize(36, -1)),
-                                  wxTE_READONLY)
-
-        self.sposCtrl = wxTextCtrl(panel, -1, "",
-                                  wxDLG_PNT(panel, wxPoint(36, 32)),
-                                  wxDLG_SZE(panel, wxSize(36, -1)),
-                                  wxTE_READONLY)
-
-        panel.Fit()
-        self.Fit()
-
-    # This method is called automatically when the CLOSE event is
-    # sent to this window
-    def OnCloseWindow(self, event):
-        # tell the window to kill itself
-        self.Destroy()
-
-
-    # This method is called by the System when the window is resized,
-    # because of the association above.
-    def OnSize(self, event):
-        size = event.GetSize()
-        self.sizeCtrl.SetValue("%s, %s" % (size.width, size.height))
-        p = self.ClientToScreen((0,0))
-        self.sposCtrl.SetValue("%s, %s" % (p.x, p.y))
-
-        # tell the event system to continue looking for an event handler,
-        # so the default handler will get called.
-        event.Skip()
-
-    # This method is called by the System when the window is moved,
-    # because of the association above.
-    def OnMove(self, event):
-        pos = event.GetPosition()
-        self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y))
-        p = self.ClientToScreen((0,0))
-        self.sposCtrl.SetValue("%s, %s" % (p.x, p.y))
-
-
-
-#---------------------------------------------------------------------------
-
-# Every wxWindows application must have a class derived from wxApp
-class MyApp(wxApp):
-
-    # wxWindows calls this method to initialize the application
-    def OnInit(self):
-
-        # Create an instance of our customized Frame class
-        frame = MyFrame(NULL, -1, "This is a test")
-        frame.Show(true)
-
-        # Tell wxWindows that this is our main window
-        self.SetTopWindow(frame)
-
-        # Return a success flag
-        return true
-
-#---------------------------------------------------------------------------
-
-
-app = MyApp(0)     # Create an instance of the application class
-app.MainLoop()     # Tell it to start processing events
-
-
-#----------------------------------------------------------------------------
-#
-
-
-
-
-
-
-
-
-
diff --git a/wxPython/tests/test8.py b/wxPython/tests/test8.py
deleted file mode 100644
index 34cd268791..0000000000
--- a/wxPython/tests/test8.py
+++ /dev/null
@@ -1,85 +0,0 @@
-# Thread testing example. Harm van der Heijden, March 26 1999.
-#
-# Rule One in threading: make sure only one thread interacts with the
-# user interface. See the wxTextCtrlQueue class for an example of how
-# to accomplish this
-
-import thread
-import time
-from   whrandom import random
-
-from wxPython.wx import *
-
-# Set this to zero to prevent entering the wxApp mainloop
-# (for testing whether threads work at all in the absense of wxWindows)
-use_wxpython = 1
-
-# write a message to stdout every second
-def DoThread(mesg):
-    while 1:
-        sleeptime = (random() * 3) + 0.5
-        print "Hello from %s (%1.3f)" % (mesg, sleeptime)
-        time.sleep(sleeptime)
-
-# the same, but write it to a textctrl.
-def DoTextCtrlThread(text, mesg):
-    while 1:
-        sleeptime = (random() * 3) + 0.5
-        text.WriteText("Hello from %s (%1.3f)\n" % (mesg, sleeptime))
-        time.sleep(sleeptime)
-
-# A very simple queue for textctrls.
-# Nice demonstration of the power of OO programming too (at least I think so!)
-# WriteText puts text in the queue, rather than writing it immediately.
-# The main (UI) thread must call Flush to force output. (see MyFrame::OnIdle)
-class wxTextCtrlQueue(wxTextCtrl):
-    def __init__(self, parent, id, value, pos, size, flags):
-        wxTextCtrl.__init__(self,parent, id, value, pos, size, flags)
-        self.queue = []
-    def WriteText(self, value):
-        self.queue.append(value)
-    def Flush(self):
-        queue = self.queue
-        self.queue = []
-        for value in queue:
-            wxTextCtrl.WriteText(self,value)
-
-# MyFrame and MyApp are very simple classes to test python threads in
-# wxPython.
-class MyFrame(wxFrame):
-    def __init__(self):
-        wxFrame.__init__(self, NULL, -1, "test threads", wxDefaultPosition, wxSize(300,200))
-        self.text = wxTextCtrlQueue(self, -1, "thread output\n", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE)
-        menu = wxMenu()
-        menu.Append(1001, "Start thread")
-        self.cnt = 0;
-        menubar = wxMenuBar()
-        menubar.Append(menu, "Action")
-        self.SetMenuBar(menubar)
-        EVT_MENU(self, 1001, self.StartThread)
-    def StartThread(self, event):
-        self.cnt = self.cnt + 1
-        thread.start_new_thread(DoTextCtrlThread, (self.text, "thread %d" % self.cnt))
-    def OnIdle(self, event):
-        self.text.Flush()
-
-class MyApp(wxApp):
-    def OnInit(self):
-        frame = MyFrame()
-        self.SetTopWindow(frame)
-        frame.Show(TRUE)
-        return TRUE
-
-# Start two threads that print a message every second
-thread.start_new_thread(DoThread, ("thread A",))
-thread.start_new_thread(DoThread, ("thread B",))
-
-# if using wxpython, open a frame. Otherwise, just hang in while 1
-if use_wxpython:
-    app = MyApp(0)
-    app.MainLoop()
-else:
-    while 1:
-        print "main loop"
-        time.sleep(4)
-print 'done!'
diff --git a/wxPython/tests/testDlg.py b/wxPython/tests/testDlg.py
deleted file mode 100644
index 5bad5eb49a..0000000000
--- a/wxPython/tests/testDlg.py
+++ /dev/null
@@ -1,49 +0,0 @@
-## import all of the wxPython GUI package
-from wxPython.wx import *
-
-
-## Create a new frame class, derived from the wxPython Frame.
-class Dialog(wxDialog):
-
-        def __init__(self, parent, title):
-                # First, call the base class' __init__ method to create the frame
-                wxDialog.__init__( self, parent, -1, title, wxDefaultPosition, wxDefaultSize )
-
-                wxButton(self, wxID_OK, "OK", (10, 10))
-                wxButton(self, wxID_CANCEL, "Cancel", (50,50))
-                self.Centre( wxBOTH )
-
-
-        # This method is called automatically when the CLOSE event is
-        # sent to this window
-        #def OnCloseWindow(self, event):
-        #       self.Destroy()
-
-        #def OnCloseMe(self, event):
-                #self.Close(true)
-
-
-def main():
-        # Every wxWindows application must have a class derived from wxApp
-        class App(wxApp):
-
-                # wxWindows calls this method to initialize the application
-                def OnInit(self):
-
-                        # Create an instance of our customized Frame class
-                        dialog = Dialog( NULL, 'test' )
-                        dialog.ShowModal()
-                        print "got here"
-                        dialog.Destroy()
-
-                        # Tell wxWindows that this is our main window
-                        # Return a success flag
-                        return true
-
-        app = App(0)     # Create an instance of the application class
-        app.MainLoop()   # Tell it to start processing events
-
-
-
-if __name__ == '__main__':
-        main()
diff --git a/wxPython/tests/testTree.py b/wxPython/tests/testTree.py
deleted file mode 100644
index 1b91ffd427..0000000000
--- a/wxPython/tests/testTree.py
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/usr/bin/env python
-
-from wxPython import wx
-import sys, os
-from stat import *
-
-GlobalObjList = []
-
-class Obj:
-        def __init__(self, obj):
-                self.obj = obj
-                # Uncomment next line to eliminate crash.
-                # GlobalObjList.append(self)
-
-        def Name(self):
-                head, tail = os.path.split(self.obj)
-                if tail:
-                        return tail
-                else:
-                        return head
-
-        def HasChildren(self):
-                return os.path.isdir(self.obj)
-
-        def Children(self):
-                objList = os.listdir(self.obj)
-                objList.sort()
-                objList = map(lambda obj,parent=self.obj: os.path.join(parent,obj),
-                                          objList)
-                objectList = map(Obj, objList)
-                return objectList
-
-        def __str__(self):
-                return self.obj
-
-        def __repr__(self):
-                return self.obj
-
-        def __del__(self):
-                print 'del', self.obj
-
-
-#----------------------------------------------------------------------
-
-class pyTree(wx.wxTreeCtrl):
-
-        def __init__(self, parent, id, obj):
-                wx.wxTreeCtrl.__init__(self, parent, id)
-                self.root = self.AddRoot(obj.Name(), -1, -1, wx.wxTreeItemData(''))
-                self.SetPyData(self.root, obj)
-                if obj.HasChildren():
-                        self.SetItemHasChildren(self.root, wx.TRUE)
-                wx.EVT_TREE_ITEM_EXPANDING(self, self.GetId(), self.OnItemExpanding)
-                wx.EVT_TREE_ITEM_COLLAPSED(self, self.GetId(), self.OnItemCollapsed)
-                wx.EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged)
-                self.output = None
-
-        def SetOutput(self, output):
-                self.output = output
-
-        def OnItemExpanding(self,event):
-                item = event.GetItem()
-                obj = self.GetPyData(item)
-                children = obj.Children()
-                for child in children:
-                        new_item = self.AppendItem(item, child.Name(), -1, -1,
-                                                                           wx.wxTreeItemData(''))
-                        self.SetPyData(new_item, child)
-                        if child.HasChildren():
-                                self.SetItemHasChildren(new_item, wx.TRUE)
-
-        def OnItemCollapsed(self, event):
-                item = event.GetItem()
-                self.DeleteChildren(item)
-
-        def OnSelChanged(self, event):
-                if not self.output:
-                        return
-                obj = self.GetPyData( event.GetItem() )
-                apply(self.output, (`obj`,))
-
-
-
-#----------------------------------------------------------------------
-if __name__ == '__main__':
-
-        class MyFrame(wx.wxFrame):
-
-                def __init__(self):
-                        wx.wxFrame.__init__(self, wx.NULL, -1, 'PyTreeItemData Test',
-                                                                wx.wxDefaultPosition, wx.wxSize(600,500))
-                        split = wx.wxSplitterWindow(self, -1)
-
-                        if sys.platform == 'win32':
-                                tree = pyTree(split, -1, Obj('C:\\'))
-                        else:
-                                tree = pyTree(split, -1, Obj('/'))
-
-                        text = wx.wxTextCtrl(split, -1, '', wx.wxDefaultPosition,
-                                                                 wx.wxDefaultSize, wx.wxTE_MULTILINE)
-                        split.SplitVertically(tree, text, 200)
-                        tree.SetOutput(text.SetValue)
-                        tree.SelectItem(tree.root)
-
-        class MyApp(wx.wxApp):
-
-                def OnInit(self):
-                        frame = MyFrame()
-                        frame.Show(wx.TRUE)
-                        self.SetTopWindow(frame)
-                        return wx.TRUE
-
-        app = MyApp(0)
-        app.MainLoop()
-
-
diff --git a/wxPython/tests/testi.py b/wxPython/tests/testi.py
deleted file mode 100644
index 5fb4fced9c..0000000000
--- a/wxPython/tests/testi.py
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-from wxPython.wx import *
-
-def t():
-    r1 = wxRect(0,0, 25, 500)
-    r2 = wxRect(10, 10, 50, 100)
-
-    r = wxIntersectRect(r1, r2)
-    print r
-
-    r = wxIntersectRect(r1, (50, 10, 50, 100))
-    print r
-
-
-
-
-
-class MyApp(wxApp):
-    def OnInit(self):
-        t()
-        return false
-
-app = MyApp(0)
-
diff --git a/wxPython/tests/thrtest.py b/wxPython/tests/thrtest.py
deleted file mode 100644
index b47cdfc82e..0000000000
--- a/wxPython/tests/thrtest.py
+++ /dev/null
@@ -1,39 +0,0 @@
-
-from wxPython.wx import *
-from wxPython.lib.grids import wxFlexGridSizer
-
-import time
-from threading import Thread
-def foo():
-    for x in range(20):
-        print x, "Fooing!"
-        time.sleep(0.5)
-Thread(target=foo).start()
-
-class MyFrame(wxFrame):
-    def __init__(self, parent, ID, title, pos, size):
-        wxFrame.__init__(self, parent, ID, title, pos, size)
-        panel = wxPanel(self, -1)
-        self.panel=panel
-        box = wxFlexGridSizer(1, 2, 10, 10)
-        box.Add(wxButton(panel, 11211, "Foo"), 0, wxCENTER)
-        box.Add(wxButton(panel, 11211, "Bar"), 0, wxCENTER)
-        box.AddGrowableCol(1)
-        panel.SetSizer(box)
-        panel.SetAutoLayout(true)
-        #EVT_SIZE(panel, lambda e, p=panel: p.Layout())
-        EVT_BUTTON(self, 11211, self.Click)
-
-    def Click(self, event):
-        print "Click"
-
-
-class MyApp(wxApp):
-    def OnInit(self):
-        win = MyFrame(None, -1, "Bummer", wxDefaultPosition, (200, 100))
-        win.Show(true)
-        self.SetTopWindow(win)
-        return true
-
-MyApp(0).MainLoop()
-
diff --git a/wxPython/tests/thtest.py b/wxPython/tests/thtest.py
deleted file mode 100644
index dccbf0e35a..0000000000
--- a/wxPython/tests/thtest.py
+++ /dev/null
@@ -1,29 +0,0 @@
-
-from wxPython.wx import *
-
-class someData:
-    def __init__(self, data="spam"):
-        self.data = data
-
-class errApp(wxApp):
-    def OnInit(self):
-        frame = wxFrame(NULL, -1, "Close to get an error", wxDefaultPosition,
-                        wxSize(200,200))
-
-        tree = wxTreeCtrl(frame, -1, wxDefaultPosition, wxDefaultSize)
-
-        root = tree.AddRoot("Spam")
-        tree.SetPyData(root, someData())
-        #tree.SetPyData(root, "A string")
-        #tree.SetPyData(root, ["a list", "A string"])
-
-        frame.Show(true)
-        self.SetTopWindow(frame)
-        self.frame = frame
-        return true
-
-
-app = errApp(0)
-app.MainLoop()
-print "got to the end"
-
diff --git a/wxPython/tests/txml.py b/wxPython/tests/txml.py
deleted file mode 100644
index c8ea85f53c..0000000000
--- a/wxPython/tests/txml.py
+++ /dev/null
@@ -1,87 +0,0 @@
-"""
-Build a GUI Tree (wxWindows) from an XML file
-using pyExpat
-"""
-
-import sys
-from xml.parsers import pyexpat
-
-from wxPython.wx import *
-
-class MyFrame(wxFrame):
-        def __init__(self, parent, id, title):
-                wxFrame.__init__(self, parent, id, title, wxPoint(100, 100), wxSize(160,100))
-                menu = wxMenu()
-                menu.Append (1001,"Open")
-                menu.Append (1002,"Close")
-                menu.Append (1003,"Exit")
-                menubar = wxMenuBar()
-                menubar.Append (menu,"File")
-                self.SetMenuBar(menubar)
-
-class MyApp(wxApp):
-        def OnInit(self):
-                self.frame = MyFrame(NULL, -1, "Tree View of XML")
-                self.tree = wx.wxTreeCtrl(self.frame, -1)
-                EVT_MENU(self, 1001, self.OnOpen)
-                EVT_MENU(self, 1002, self.OnClose)
-                EVT_MENU(self, 1003, self.OnExit)
-                self.frame.Show(true)
-                self.SetTopWindow(self.frame)
-                return true
-
-        def OnOpen(self,event):
-                f = wxFileDialog(self.frame,"Select a file",".","","*.xml",wxOPEN)
-                if f.ShowModal() == wxID_OK:
-                        LoadTree(f.GetPath())
-
-        def OnClose(self,event):
-                self.tree = wx.wxTreeCtrl(self.frame, -1)
-                pass
-
-        def OnExit(self,event):
-                self.OnCloseWindow(event)
-
-        def OnCloseWindow(self, event):
-                self.frame.Destroy()
-
-
-NodeStack = []
-
-# Define a handler for start element events
-def StartElement( name, attrs ):
-        global NodeStack
-        NodeStack.append(app.tree.AppendItem(NodeStack[-1],name))
-
-def EndElement( name ):
-        global NodeStack
-        NodeStack = NodeStack[:-1]
-
-def CharacterData ( data ):
-        global NodeStack
-        if data.strip():
-                app.tree.AppendItem(NodeStack[-1],data)
-
-
-def LoadTree (f):
-        print f
-        # Create a parser
-        Parser = pyexpat.ParserCreate()
-
-        # Tell the parser what the start element handler is
-        Parser.StartElementHandler = StartElement
-        Parser.EndElementHandler = EndElement
-        Parser.CharacterDataHandler = CharacterData
-
-        # Parse the XML File
-        ParserStatus = Parser.Parse(open(f,'r').read(), 1)
-        if ParserStatus == 0:
-                print "oops!"
-                raise SystemExit
-
-app = MyApp(0)
-NodeStack = [app.tree.AddRoot("Root")]
-
-
-app.MainLoop()
-raise SystemExit
diff --git a/wxPython/tests/val.py b/wxPython/tests/val.py
deleted file mode 100644
index d36f0c092c..0000000000
--- a/wxPython/tests/val.py
+++ /dev/null
@@ -1,107 +0,0 @@
-from wxPython.wx import *
-
-
-class floatValidator(wxPyValidator):
-
-    def __init__(self, obj=None, attrName=""):
-        wxPyValidator.__init__(self)
-        self.numList = ['1','2','3','4','5','6','7','8','9','0','.']
-        EVT_CHAR(self, self.OnChar)
-        self.obj = obj
-        self.attrName = attrName
-
-    def Clone(self):
-        return floatValidator(self.obj, self.attrName)
-
-    def TransferToWindow(self):
-        if self.obj and hasattr(self.obj, self.attrName):
-            tc = wxPyTypeCast(self.GetWindow(), "wxTextCtrl")
-            tc.SetValue(str(getattr(self.obj, self.attrName)))
-        return true
-
-    def TransferFromWindow(self):
-        if self.obj and self.attrName:
-            tc = wxPyTypeCast(self.GetWindow(), "wxTextCtrl")
-            text = tc.GetValue()
-            setattr(self.obj, self.attrName, float(text))
-        return true
-
-
-    def Validate(self, win):
-        tc = wxPyTypeCast(self.GetWindow(), "wxTextCtrl")
-        val = tc.GetValue()
-
-        for x in val:
-            if x not in self.numList:
-                return false
-
-        return true
-
-    def OnChar(self, event):
-        key = event.KeyCode()
-        if key < WXK_SPACE or key == WXK_DELETE or key > 255:
-            event.Skip()
-            return
-
-        if chr(key) in self.numList:
-            event.Skip()
-            return
-
-        if not wxValidator_IsSilent():
-            wxBell()
-
-        # Returning without calling even.Skip eats the event before it
-        # gets to the text control
-        return
-
-
-
-class MyDialog(wxDialog):
-    def __init__(self, parent):
-        wxDialog.__init__(self, parent, -1, "hello")
-
-        self.theValue =  555.12
-        fltValidator = floatValidator(self, "theValue")
-
-        Vbox = wxBoxSizer(wxVERTICAL)
-        Tbox = wxBoxSizer(wxHORIZONTAL)
-        Tbox.Add(wxStaticText(self, -1, "Initial Balance"), 0, wxALL,5)
-        Tbox.Add(wxTextCtrl(self, 13, "123.45", validator = fltValidator,
-                            size=(100, -1)), 0, wxALL,5)
-
-        Vbox.Add(Tbox, 0, 0)
-
-        Tbox = wxBoxSizer(wxHORIZONTAL)
-        Tbox.Add(wxButton(self, wxID_OK, "Ok"), 0, wxALL,5)
-        Tbox.Add(wxButton(self, wxID_CANCEL, "Cancel"), 0, wxALL,5)
-
-        Vbox.Add(Tbox, 0, 0)
-
-        self.SetAutoLayout(true)
-        self.SetSizer(Vbox)
-        Vbox.Fit(self)
-
-
-class TestFrame(wxFrame):
-    def __init__(self, parent):
-        wxFrame.__init__(self, parent, -1, "Testing...", size=(150,75))
-        wxButton(self, 25, "Click Me")
-        EVT_BUTTON(self, 25, self.OnClick)
-
-
-    def OnClick(self, event):
-        dlg = MyDialog(self)
-        dlg.ShowModal()
-        print dlg.theValue
-        dlg.Destroy()
-
-
-
-app = wxPySimpleApp()
-frame = TestFrame(None)
-frame.Show(true)
-app.MainLoop()
-
-
-
-
diff --git a/wxPython/tests/wxFrame1.py b/wxPython/tests/wxFrame1.py
deleted file mode 100644
index 442a9f620e..0000000000
--- a/wxPython/tests/wxFrame1.py
+++ /dev/null
@@ -1,81 +0,0 @@
-#Boa:Frame:wxFrame1
-
-from wxPython.wx import *
-
-import sys
-
-
-def create(parent):
-    return wxFrame1(parent)
-
-frame_count = 0
-
-[wxID_WXFRAME1BUTTON1, wxID_WXFRAME1] = map(lambda _init_ctrls: wxNewId(), range(2))
-
-class wxFrame1(wxFrame):
-    def _init_utils(self):
-        pass
-
-    def _init_ctrls(self, prnt):
-        wxFrame.__init__(self, size = wxSize(960, 662), id = wxID_WXFRAME1, title = 'wxFrame1', parent = prnt, name = '', style = wxDEFAULT_FRAME_STYLE, pos = (-1, -1))
-        self._init_utils()
-
-        self.button1 = wxButton(label = 'button1', id = wxID_WXFRAME1BUTTON1, parent = self, name = 'button1', size = wxSize(75, 23), style = 0, pos = wxPoint(216, 152))
-        EVT_BUTTON(self.button1, wxID_WXFRAME1BUTTON1, self.OnButton1Button)
-
-    def __init__(self, parent):
-        self._init_ctrls(parent)
-        global frame_count
-        frame_count += 1
-        self.SetTitle('Frame %d' % frame_count)
-        print 'Frame %d' % frame_count
-        self.shown = 0
-        EVT_IDLE(self, self.OnIdle)
-
-    def OnButton1Button(self, event):
-        print 'Closing %s' % self.GetTitle()
-        self.Close()
-
-    def OnIdle(self, evt):
-        if not self.shown:
-            #print self.GetTitle(), "shown"
-            #print self.Show(false), self.Show(true)
-            #import win32gui, win32con
-            #win32gui.ShowWindow(self.GetHandle(), win32con.SW_SHOW)
-            self.shown = 1
-
-
-class BoaApp(wxApp):
-    def OnInit(self):
-        frame1 = create(None)
-
-##         import win32gui, win32con
-##         win32gui.ShowWindow(frame1.GetHandle(), win32con.SW_SHOW)
-##         frame1.Show(true)
-
-        frame1.Show(true)
-        frame1.Show(false)
-        frame1.Show(true)
-
-        frame2 = create(None)
-        print frame2.Show(true)
-        return true
-
-def main():
-    application = BoaApp(0)
-    application.MainLoop()
-
-if __name__ == '__main__':
-    main()
-
-##if __name__ == '__main__':
-##    app = wxPySimpleApp()
-##
-##    frame1 = create(None)
-##    frame1.Show(true)
-##
-##    frame2 = create(None)
-##    frame2.Show(true)
-##
-##    app.MainLoop()
-##
diff --git a/wxPython/tests/wxPlotCanvas.py b/wxPython/tests/wxPlotCanvas.py
deleted file mode 100644
index c65e7011fb..0000000000
--- a/wxPython/tests/wxPlotCanvas.py
+++ /dev/null
@@ -1,459 +0,0 @@
-"""
-This is a port of Konrad Hinsen's tkPlotCanvas.py plotting module.
-After thinking long and hard I came up with the name "wxPlotCanvas.py".
-
-This file contains two parts; first the re-usable library stuff, then, after
-a "if __name__=='__main__'" test, a simple frame and a few default plots
-for testing.
-
-Harm van der Heijden, feb 1999
-
-Original comment follows below:
-# This module defines a plot widget for Tk user interfaces.
-# It supports only elementary line plots at the moment.
-# See the example at the end for documentation...
-#
-# Written by Konrad Hinsen <hinsen@cnrs-orleans.fr>
-# With contributions from RajGopal Srinivasan <raj@cherubino.med.jhmi.edu>
-# Last revision: 1998-7-28
-#
-"""
-
-from wxPython import wx
-
-# Not everybody will have Numeric, so let's be cool about it...
-try:
-    import Numeric
-except:
-    # bummer!
-    d = wx.wxMessageDialog(wx.NULL,
-    """This module requires the Numeric module, which could not be imported.
-It probably is not installed (it's not part of the standard Python
-distribution). See the Python site (http://www.python.org) for
-information on downloading source or binaries.""",
-    "Numeric not found")
-    if d.ShowModal() == wx.wxID_CANCEL:
-        d = wx.wxMessageDialog(wx.NULL, "I kid you not! Pressing Cancel won't help you!", "Not a joke", wx.wxOK)
-        d.ShowModal()
-    import sys
-    sys.exit()
-
-#
-# Plotting classes...
-#
-class PolyPoints:
-
-    def __init__(self, points, attr):
-        self.points = Numeric.array(points)
-        self.scaled = self.points
-        self.attributes = {}
-        for name, value in self._attributes.items():
-            try:
-                value = attr[name]
-            except KeyError: pass
-            self.attributes[name] = value
-
-    def boundingBox(self):
-        return Numeric.minimum.reduce(self.points), \
-               Numeric.maximum.reduce(self.points)
-
-    def scaleAndShift(self, scale=1, shift=0):
-        self.scaled = scale*self.points+shift
-
-
-class PolyLine(PolyPoints):
-
-    def __init__(self, points, **attr):
-        PolyPoints.__init__(self, points, attr)
-
-    _attributes = {'color': 'black',
-                   'width': 1}
-
-    def draw(self, dc):
-        color = self.attributes['color']
-        width = self.attributes['width']
-        arguments = []
-        dc.SetPen(wx.wxPen(wx.wxNamedColour(color), width))
-        dc.DrawLines(map(tuple,self.scaled))
-
-
-class PolyMarker(PolyPoints):
-
-    def __init__(self, points, **attr):
-
-        PolyPoints.__init__(self, points, attr)
-
-    _attributes = {'color': 'black',
-                   'width': 1,
-                   'fillcolor': None,
-                   'size': 2,
-                   'fillstyle': wx.wxSOLID,
-                   'outline': 'black',
-                   'marker': 'circle'}
-
-    def draw(self, dc):
-        color = self.attributes['color']
-        width = self.attributes['width']
-        size = self.attributes['size']
-        fillcolor = self.attributes['fillcolor']
-        fillstyle = self.attributes['fillstyle']
-        marker = self.attributes['marker']
-
-        dc.SetPen(wx.wxPen(wx.wxNamedColour(color),width))
-        if fillcolor:
-            dc.SetBrush(wx.wxBrush(wx.wxNamedColour(fillcolor),fillstyle))
-        else:
-            dc.SetBrush(wx.wxBrush(wx.wxNamedColour('black'), wx.wxTRANSPARENT))
-
-        self._drawmarkers(dc, self.scaled, marker, size)
-
-    def _drawmarkers(self, dc, coords, marker,size=1):
-        f = eval('self._' +marker)
-        for xc, yc in coords:
-            f(dc, xc, yc, size)
-
-    def _circle(self, dc, xc, yc, size=1):
-        dc.DrawEllipse(xc-2.5*size,yc-2.5*size,5.*size,5.*size)
-
-    def _dot(self, dc, xc, yc, size=1):
-        dc.DrawPoint(xc,yc)
-
-    def _square(self, dc, xc, yc, size=1):
-        dc.DrawRectangle(xc-2.5*size,yc-2.5*size,5.*size,5.*size)
-
-    def _triangle(self, dc, xc, yc, size=1):
-        dc.DrawPolygon([(-0.5*size*5,0.2886751*size*5),
-                       (0.5*size*5,0.2886751*size*5),
-                       (0.0,-0.577350*size*5)],xc,yc)
-
-    def _triangle_down(self, dc, xc, yc, size=1):
-        dc.DrawPolygon([(-0.5*size*5,-0.2886751*size*5),
-                       (0.5*size*5,-0.2886751*size*5),
-                       (0.0,0.577350*size*5)],xc,yc)
-
-    def _cross(self, dc, xc, yc, size=1):
-        dc.DrawLine(xc-2.5*size,yc-2.5*size,xc+2.5*size,yc+2.5*size)
-        dc.DrawLine(xc-2.5*size,yc+2.5*size,xc+2.5*size,yc-2.5*size)
-
-    def _plus(self, dc, xc, yc, size=1):
-        dc.DrawLine(xc-2.5*size,yc,xc+2.5*size,yc)
-        dc.DrawLine(xc,yc-2.5*size,xc,yc+2.5*size)
-
-class PlotGraphics:
-
-    def __init__(self, objects):
-        self.objects = objects
-
-    def boundingBox(self):
-        p1, p2 = self.objects[0].boundingBox()
-        for o in self.objects[1:]:
-            p1o, p2o = o.boundingBox()
-            p1 = Numeric.minimum(p1, p1o)
-            p2 = Numeric.maximum(p2, p2o)
-        return p1, p2
-
-    def scaleAndShift(self, scale=1, shift=0):
-        for o in self.objects:
-            o.scaleAndShift(scale, shift)
-
-    def draw(self, canvas):
-        for o in self.objects:
-            o.draw(canvas)
-
-    def __len__(self):
-        return len(self.objects)
-
-    def __getitem__(self, item):
-        return self.objects[item]
-
-
-class PlotCanvas(wx.wxWindow):
-
-    def __init__(self, parent, id = -1):
-        wx.wxWindow.__init__(self, parent, id, wx.wxPyDefaultPosition, wx.wxPyDefaultSize)
-        self.border = (1,1)
-        self.SetClientSizeWH(400,400)
-        self.SetBackgroundColour(wx.wxNamedColour("white"))
-
-        wx.EVT_SIZE(self,self.reconfigure)
-        self._setsize()
-        self.last_draw = None
-#       self.font = self._testFont(font)
-
-    def OnPaint(self, event):
-        pdc = wx.wxPaintDC(self)
-        if self.last_draw is not None:
-            apply(self.draw, self.last_draw + (pdc,))
-
-    def reconfigure(self, event):
-        (new_width,new_height) = self.GetClientSizeTuple()
-        if new_width == self.width and new_height == self.height:
-            return
-        self._setsize()
-        # self.redraw()
-
-    def _testFont(self, font):
-        if font is not None:
-            bg = self.canvas.cget('background')
-            try:
-                item = CanvasText(self.canvas, 0, 0, anchor=NW,
-                                  text='0', fill=bg, font=font)
-                self.canvas.delete(item)
-            except TclError:
-                font = None
-        return font
-
-    def _setsize(self):
-        (self.width,self.height) = self.GetClientSizeTuple();
-        self.plotbox_size = 0.97*Numeric.array([self.width, -self.height])
-        xo = 0.5*(self.width-self.plotbox_size[0])
-        yo = self.height-0.5*(self.height+self.plotbox_size[1])
-        self.plotbox_origin = Numeric.array([xo, yo])
-
-    def draw(self, graphics, xaxis = None, yaxis = None, dc = None):
-        if dc == None: dc = wx.wxClientDC(self)
-        dc.BeginDrawing()
-        dc.Clear()
-        self.last_draw = (graphics, xaxis, yaxis)
-        p1, p2 = graphics.boundingBox()
-        xaxis = self._axisInterval(xaxis, p1[0], p2[0])
-        yaxis = self._axisInterval(yaxis, p1[1], p2[1])
-        text_width = [0., 0.]
-        text_height = [0., 0.]
-        if xaxis is not None:
-            p1[0] = xaxis[0]
-            p2[0] = xaxis[1]
-            xticks = self._ticks(xaxis[0], xaxis[1])
-            bb = dc.GetTextExtent(xticks[0][1])
-            text_height[1] = bb[1]
-            text_width[0] = 0.5*bb[0]
-            bb = dc.GetTextExtent(xticks[-1][1])
-            text_width[1] = 0.5*bb[0]
-        else:
-            xticks = None
-        if yaxis is not None:
-            p1[1] = yaxis[0]
-            p2[1] = yaxis[1]
-            yticks = self._ticks(yaxis[0], yaxis[1])
-            for y in yticks:
-                bb = dc.GetTextExtent(y[1])
-                text_width[0] = max(text_width[0],bb[0])
-            h = 0.5*bb[1]
-            text_height[0] = h
-            text_height[1] = max(text_height[1], h)
-        else:
-            yticks = None
-        text1 = Numeric.array([text_width[0], -text_height[1]])
-        text2 = Numeric.array([text_width[1], -text_height[0]])
-        scale = (self.plotbox_size-text1-text2) / (p2-p1)
-        shift = -p1*scale + self.plotbox_origin + text1
-        self._drawAxes(dc, xaxis, yaxis, p1, p2,
-                       scale, shift, xticks, yticks)
-        graphics.scaleAndShift(scale, shift)
-        graphics.draw(dc)
-        dc.EndDrawing()
-
-    def _axisInterval(self, spec, lower, upper):
-        if spec is None:
-            return None
-        if spec == 'minimal':
-            if lower == upper:
-                return lower-0.5, upper+0.5
-            else:
-                return lower, upper
-        if spec == 'automatic':
-            range = upper-lower
-            if range == 0.:
-                return lower-0.5, upper+0.5
-            log = Numeric.log10(range)
-            power = Numeric.floor(log)
-            fraction = log-power
-            if fraction <= 0.05:
-                power = power-1
-            grid = 10.**power
-            lower = lower - lower % grid
-            mod = upper % grid
-            if mod != 0:
-                upper = upper - mod + grid
-            return lower, upper
-        if type(spec) == type(()):
-            lower, upper = spec
-            if lower <= upper:
-                return lower, upper
-            else:
-                return upper, lower
-        raise ValueError, str(spec) + ': illegal axis specification'
-
-    def _drawAxes(self, dc, xaxis, yaxis,
-                  bb1, bb2, scale, shift, xticks, yticks):
-        dc.SetPen(wx.wxPen(wx.wxNamedColour('BLACK'),1))
-        if xaxis is not None:
-            lower, upper = xaxis
-            text = 1
-            for y, d in [(bb1[1], -3), (bb2[1], 3)]:
-                p1 = scale*Numeric.array([lower, y])+shift
-                p2 = scale*Numeric.array([upper, y])+shift
-                dc.DrawLine(p1[0],p1[1],p2[0],p2[1])
-                for x, label in xticks:
-                    p = scale*Numeric.array([x, y])+shift
-                    dc.DrawLine(p[0],p[1],p[0],p[1]+d)
-                    if text:
-                        dc.DrawText(label,p[0],p[1])
-                text = 0
-
-        if yaxis is not None:
-            lower, upper = yaxis
-            text = 1
-            h = dc.GetCharHeight()
-            for x, d in [(bb1[0], -3), (bb2[0], 3)]:
-                p1 = scale*Numeric.array([x, lower])+shift
-                p2 = scale*Numeric.array([x, upper])+shift
-                dc.DrawLine(p1[0],p1[1],p2[0],p2[1])
-                for y, label in yticks:
-                    p = scale*Numeric.array([x, y])+shift
-                    dc.DrawLine(p[0],p[1],p[0]-d,p[1])
-                    if text:
-                        dc.DrawText(label,p[0]-dc.GetTextExtent(label)[0],
-                                    p[1]-0.5*h)
-                text = 0
-
-    def _ticks(self, lower, upper):
-        ideal = (upper-lower)/7.
-        log = Numeric.log10(ideal)
-        power = Numeric.floor(log)
-        fraction = log-power
-        factor = 1.
-        error = fraction
-        for f, lf in self._multiples:
-            e = Numeric.fabs(fraction-lf)
-            if e < error:
-                error = e
-                factor = f
-        grid = factor * 10.**power
-        if power > 3 or power < -3:
-            format = '%+7.0e'
-        elif power >= 0:
-            digits = max(1, int(power))
-            format = '%' + `digits`+'.0f'
-        else:
-            digits = -int(power)
-            format = '%'+`digits+2`+'.'+`digits`+'f'
-        ticks = []
-        t = -grid*Numeric.floor(-lower/grid)
-        while t <= upper:
-            ticks.append(t, format % (t,))
-            t = t + grid
-        return ticks
-
-    _multiples = [(2., Numeric.log10(2.)), (5., Numeric.log10(5.))]
-
-    def redraw(self,dc=None):
-        if self.last_draw is not None:
-            apply(self.draw, self.last_draw + (dc,))
-
-    def clear(self):
-        self.canvas.delete('all')
-
-#
-# Now a sample implementation using the above...
-#
-
-if __name__ == '__main__':
-
-    class AppFrame(wx.wxFrame):
-        def __init__(self, parent, id, title):
-            wx.wxFrame.__init__(self, parent, id, title,
-                                wx.wxPyDefaultPosition, wx.wxSize(400, 400))
-
-            # Now Create the menu bar and items
-            self.mainmenu = wx.wxMenuBar()
-
-            menu = wx.wxMenu()
-            menu.Append(200, '&Print...', 'Print the current plot')
-            wx.EVT_MENU(self, 200, self.OnFilePrint)
-            menu.Append(209, 'E&xit', 'Enough of this already!')
-            wx.EVT_MENU(self, 209, self.OnFileExit)
-            self.mainmenu.Append(menu, '&File')
-
-            menu = wx.wxMenu()
-            menu.Append(210, '&Draw', 'Draw plots')
-            wx.EVT_MENU(self,210,self.OnPlotDraw)
-            menu.Append(211, '&Redraw', 'Redraw plots')
-            wx.EVT_MENU(self,211,self.OnPlotRedraw)
-            menu.Append(212, '&Clear', 'Clear canvas')
-            wx.EVT_MENU(self,212,self.OnPlotClear)
-            self.mainmenu.Append(menu, '&Plot')
-
-            menu = wx.wxMenu()
-            menu.Append(220, '&About', 'About this thing...')
-            wx.EVT_MENU(self, 220, self.OnHelpAbout)
-            self.mainmenu.Append(menu, '&Help')
-
-            self.SetMenuBar(self.mainmenu)
-
-            # A status bar to tell people what's happening
-            self.CreateStatusBar(1)
-
-            self.client = PlotCanvas(self)
-
-        def OnFilePrint(self, event):
-            d = wx.wxMessageDialog(self,
-"""As of this writing, printing support in wxPython is shaky at best.
-Are you sure you want to do this?""", "Danger!", wx.wxYES_NO)
-            if d.ShowModal() == wx.wxID_YES:
-                psdc = wx.wxPostScriptDC("out.ps", wx.TRUE, self)
-                self.client.redraw(psdc)
-
-        def OnFileExit(self, event):
-            self.Close()
-
-        def OnPlotDraw(self, event):
-            self.client.draw(InitObjects(),'automatic','automatic');
-
-        def OnPlotRedraw(self,event):
-            self.client.redraw()
-
-        def OnPlotClear(self,event):
-            self.client.last_draw = None
-            dc = wx.wxClientDC(self.client)
-            dc.Clear()
-
-        def OnHelpAbout(self, event):
-            about = wx.wxMessageDialog(self, __doc__, "About...", wx.wxOK)
-            about.ShowModal()
-
-        def OnCloseWindow(self, event):
-            self.Destroy()
-
-    def InitObjects():
-        # 100 points sin function, plotted as green circles
-        data1 = 2.*Numeric.pi*Numeric.arange(200)/200.
-        data1.shape = (100, 2)
-        data1[:,1] = Numeric.sin(data1[:,0])
-        markers1 = PolyMarker(data1, color='green', marker='circle',size=1)
-
-        # 50 points cos function, plotted as red line
-        data1 = 2.*Numeric.pi*Numeric.arange(100)/100.
-        data1.shape = (50,2)
-        data1[:,1] = Numeric.cos(data1[:,0])
-        lines = PolyLine(data1, color='red')
-
-        # A few more points...
-        pi = Numeric.pi
-        markers2 = PolyMarker([(0., 0.), (pi/4., 1.), (pi/2, 0.),
-                              (3.*pi/4., -1)], color='blue',
-                              fillcolor='green', marker='cross')
-
-        return PlotGraphics([markers1, lines, markers2])
-
-
-    class MyApp(wx.wxApp):
-        def OnInit(self):
-            frame = AppFrame(wx.NULL, -1, "wxPlotCanvas")
-            frame.Show(wx.TRUE)
-            self.SetTopWindow(frame)
-            return wx.TRUE
-
-
-    app = MyApp(0)
-    app.MainLoop()
diff --git a/wxPython/tests/wxSlash.py b/wxPython/tests/wxSlash.py
deleted file mode 100644
index c98148a028..0000000000
--- a/wxPython/tests/wxSlash.py
+++ /dev/null
@@ -1,359 +0,0 @@
-#!/usr/bin/python
-"""This is wxSlash 1.1
-
-    It's the obligatory Slashdot.org headlines reader that any modern
-widget set/library must have in order to be taken seriously :-)
-
-    Usage is quite simple; wxSlash attempts to download the 'ultramode.txt'
-file from http://slashdot.org, which contains the headlines in a computer
-friendly format. It then displays said headlines in a wxWindows list control.
-
-    You can read articles using either Python's html library or an external
-browser. Uncheck the 'browser->internal' menu item to use the latter option.
-Use the settings dialog box to set which external browser is started.
-
-    This code is available under the wxWindows license, see elsewhere. If you
-modify this code, be aware of the fact that slashdot.org's maintainer,
-CmdrTaco, explicitly asks 'ultramode.txt' downloaders not to do this
-automatically more than twice per hour. If this feature is abused, CmdrTaco
-may remove the ultramode file completely and that will make a *lot* of people
-unhappy.
-
-    I want to thank Alex Shnitman whose slashes.pl (Perl/GTK) script gave me
-the idea for this applet.
-
-    Have fun with it,
-
-    Harm van der Heijden (H.v.d.Heijden@phys.tue.nl)
-"""
-
-from wxPython.wx import *
-from httplib import HTTP
-from htmllib import HTMLParser
-import os
-import re
-import formatter
-
-class HTMLTextView(wxFrame):
-    def __init__(self, parent, id, title='HTMLTextView', url=None):
-        wxFrame.__init__(self, parent, id, title, wxPyDefaultPosition,
-                         wxSize(600,400))
-
-        self.mainmenu = wxMenuBar()
-
-        menu = wxMenu()
-        menu.Append(201, '&Open URL...', 'Open URL')
-        EVT_MENU(self, 201, self.OnFileOpen)
-        menu.Append(209, 'E&xit', 'Exit viewer')
-        EVT_MENU(self, 209, self.OnFileExit)
-
-        self.mainmenu.Append(menu, '&File')
-        self.SetMenuBar(self.mainmenu)
-        self.CreateStatusBar(1)
-
-        self.text = wxTextCtrl(self, -1, "", wxPyDefaultPosition,
-                               wxPyDefaultSize, wxTE_MULTILINE | wxTE_READONLY)
-
-        if (url):
-            self.OpenURL(url)
-
-    def logprint(self, x):
-        self.SetStatusText(x)
-
-    def OpenURL(self, url):
-        self.url = url
-        m = re.match('file:(\S+)\s*', url)
-        if m:
-            f = open(m.groups()[0],'r')
-        else:
-            m = re.match('http://([^/]+)(/\S*)\s*', url)
-            if m:
-                host = m.groups()[0]
-                path = m.groups()[1]
-            else:
-                m = re.match('http://(\S+)\s*', url)
-                if not m:
-                    # Invalid URL
-                    self.logprint("Invalid or unsupported URL: %s" % (url))
-                    return
-                host = m.groups()[0]
-                path = ''
-            f = RetrieveAsFile(host,path,self.logprint)
-        if not f:
-            self.logprint("Could not open %s" % (url))
-            return
-        self.logprint("Receiving data...")
-        data = f.read()
-        tmp = open('tmphtml.txt','w')
-        fmt = formatter.AbstractFormatter(formatter.DumbWriter(tmp))
-        p = HTMLParser(fmt)
-        self.logprint("Parsing data...")
-        p.feed(data)
-        p.close()
-        tmp.close()
-        tmp = open('tmphtml.txt', 'r')
-        self.text.SetValue(tmp.read())
-        self.SetTitle(url)
-        self.logprint(url)
-
-    def OnFileOpen(self, event):
-        dlg = wxTextEntryDialog(self, "Enter URL to open:", "")
-        if dlg.ShowModal() == wxID_OK:
-            url = dlg.GetValue()
-        else:
-            url = None
-        if url:
-            self.OpenURL(url)
-
-    def OnFileExit(self, event):
-        self.Close()
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-
-
-def ParseSlashdot(f):
-    art_sep = re.compile('%%\r?\n')
-    line_sep = re.compile('\r?\n')
-    data = f.read()
-    list = art_sep.split(data)
-    art_list = []
-    for i in range(1,len(list)-1):
-        art_list.append(line_sep.split(list[i]))
-    return art_list
-
-def myprint(x):
-    print x
-
-def RetrieveAsFile(host, path='', logprint = myprint):
-    try:
-        h = HTTP(host)
-    except:
-        logprint("Failed to create HTTP connection to %s... is the network available?" % (host))
-        return None
-    h.putrequest('GET',path)
-    h.putheader('Accept','text/html')
-    h.putheader('Accept','text/plain')
-    h.endheaders()
-    errcode, errmsg, headers = h.getreply()
-    if errcode != 200:
-        logprint("HTTP error code %d: %s" % (errcode, errmsg))
-        return None
-    f = h.getfile()
-#    f = open('/home/harm/ultramode.txt','r')
-    return f
-
-
-class AppStatusBar(wxStatusBar):
-    def __init__(self, parent):
-        wxStatusBar.__init__(self,parent, -1)
-        self.SetFieldsCount(2)
-        self.SetStatusWidths([-1, 100])
-        self.but = wxButton(self, 1001, "Refresh")
-        EVT_BUTTON(self, 1001, parent.OnViewRefresh)
-        self.OnSize(None)
-
-    def logprint(self,x):
-        self.SetStatusText(x,0)
-
-    def OnSize(self, event):
-        rect = self.GetFieldRect(1)
-        self.but.SetPosition(wxPoint(rect.x+2, rect.y+2))
-        self.but.SetSize(wxSize(rect.width-4, rect.height-4))
-
-# This is a simple timer class to start a function after a short delay;
-class QuickTimer(wxTimer):
-    def __init__(self, func, wait=100):
-        wxTimer.__init__(self)
-        self.callback = func
-        self.Start(wait); # wait .1 second (.001 second doesn't work. why?)
-    def Notify(self):
-        self.Stop();
-        apply(self.callback, ());
-
-class AppFrame(wxFrame):
-    def __init__(self, parent, id, title):
-        wxFrame.__init__(self, parent, id, title, wxPyDefaultPosition,
-                         wxSize(650, 250))
-
-        # if the window manager closes the window:
-        EVT_CLOSE(self, self.OnCloseWindow);
-
-        # Now Create the menu bar and items
-        self.mainmenu = wxMenuBar()
-
-        menu = wxMenu()
-        menu.Append(209, 'E&xit', 'Enough of this already!')
-        EVT_MENU(self, 209, self.OnFileExit)
-        self.mainmenu.Append(menu, '&File')
-        menu = wxMenu()
-        menu.Append(210, '&Refresh', 'Refresh headlines')
-        EVT_MENU(self, 210, self.OnViewRefresh)
-        menu.Append(211, '&Slashdot Index', 'View Slashdot index')
-        EVT_MENU(self, 211, self.OnViewIndex)
-        menu.Append(212, 'Selected &Article', 'View selected article')
-        EVT_MENU(self, 212, self.OnViewArticle)
-        self.mainmenu.Append(menu, '&View')
-        menu = wxMenu()
-        menu.Append(220, '&Internal', 'Use internal text browser',TRUE)
-        menu.Check(220, true)
-        self.UseInternal = 1;
-        EVT_MENU(self, 220, self.OnBrowserInternal)
-        menu.Append(222, '&Settings...', 'External browser Settings')
-        EVT_MENU(self, 222, self.OnBrowserSettings)
-        self.mainmenu.Append(menu, '&Browser')
-        menu = wxMenu()
-        menu.Append(230, '&About', 'Some documentation');
-        EVT_MENU(self, 230, self.OnAbout)
-        self.mainmenu.Append(menu, '&Help')
-
-        self.SetMenuBar(self.mainmenu)
-
-        if wxPlatform == '__WXGTK__':
-            # I like lynx. Also Netscape 4.5 doesn't react to my cmdline opts
-            self.BrowserSettings = "xterm -e lynx %s &"
-        elif wxPlatform == '__WXMSW__':
-            # netscape 4.x likes to hang out here...
-            self.BrowserSettings = '\\progra~1\\Netscape\\Communicator\\Program\\netscape.exe %s'
-        else:
-            # a wild guess...
-            self.BrowserSettings = 'netscape %s'
-
-        # A status bar to tell people what's happening
-        self.sb = AppStatusBar(self)
-        self.SetStatusBar(self.sb)
-
-        self.list = wxListCtrl(self, 1100)
-        self.list.SetSingleStyle(wxLC_REPORT)
-        self.list.InsertColumn(0, 'Subject')
-        self.list.InsertColumn(1, 'Date')
-        self.list.InsertColumn(2, 'Posted by')
-        self.list.InsertColumn(3, 'Comments')
-        self.list.SetColumnWidth(0, 300)
-        self.list.SetColumnWidth(1, 150)
-        self.list.SetColumnWidth(2, 100)
-        self.list.SetColumnWidth(3, 100)
-
-        EVT_LIST_ITEM_SELECTED(self, 1100, self.OnItemSelected)
-        EVT_LEFT_DCLICK(self.list, self.OnLeftDClick)
-
-        self.logprint("Connecting to slashdot... Please wait.")
-        # wxYield doesn't yet work here. That's why we use a timer
-        # to make sure that we see some GUI stuff before the slashdot
-        # file is transfered.
-        self.timer = QuickTimer(self.DoRefresh, 1000)
-
-    def logprint(self, x):
-        self.sb.logprint(x)
-
-    def OnFileExit(self, event):
-        self.Destroy()
-
-    def DoRefresh(self):
-        f = RetrieveAsFile('slashdot.org','/ultramode.txt',self.sb.logprint)
-        art_list = ParseSlashdot(f)
-        self.list.DeleteAllItems()
-        self.url = []
-        self.current = -1
-        i = 0;
-        for article in art_list:
-            self.list.InsertStringItem(i, article[0])
-            self.list.SetStringItem(i, 1, article[2])
-            self.list.SetStringItem(i, 2, article[3])
-            self.list.SetStringItem(i, 3, article[6])
-            self.url.append(article[1])
-            i = i + 1
-        self.logprint("File retrieved OK.")
-
-    def OnViewRefresh(self, event):
-        self.logprint("Connecting to slashdot... Please wait.");
-        wxYield()
-        self.DoRefresh()
-
-    def DoViewIndex(self):
-        if self.UseInternal:
-            self.view = HTMLTextView(self, -1, 'slashdot.org',
-                                     'http://slashdot.org')
-            self.view.Show(true)
-        else:
-            self.logprint(self.BrowserSettings % ('http://slashdot.org'))
-            os.system(self.BrowserSettings % ('http://slashdot.org'))
-        self.logprint("OK")
-
-    def OnViewIndex(self, event):
-        self.logprint("Starting browser... Please wait.")
-        wxYield()
-        self.DoViewIndex()
-
-    def DoViewArticle(self):
-        if self.current<0: return
-        url = self.url[self.current]
-        if self.UseInternal:
-            self.view = HTMLTextView(self, -1, url, url)
-            self.view.Show(true)
-        else:
-            self.logprint(self.BrowserSettings % (url))
-            os.system(self.BrowserSettings % (url))
-        self.logprint("OK")
-
-    def OnViewArticle(self, event):
-        self.logprint("Starting browser... Please wait.")
-        wxYield()
-        self.DoViewArticle()
-
-    def OnBrowserInternal(self, event):
-        if self.mainmenu.Checked(220):
-            self.UseInternal = 1
-        else:
-            self.UseInternal = 0
-
-    def OnBrowserSettings(self, event):
-        dlg = wxTextEntryDialog(self, "Enter command to view URL.\nUse %s as a placeholder for the URL.", "", self.BrowserSettings);
-        if dlg.ShowModal() == wxID_OK:
-            self.BrowserSettings = dlg.GetValue()
-
-    def OnAbout(self, event):
-        dlg = wxMessageDialog(self, __doc__, "wxSlash", wxOK | wxICON_INFORMATION)
-        dlg.ShowModal()
-
-    def OnItemSelected(self, event):
-        self.current = event.m_itemIndex
-        self.logprint("URL: %s" % (self.url[self.current]))
-
-    def OnLeftDClick(self, event):
-        (x,y) = event.Position();
-        # Actually, we should convert x,y to logical coords using
-        # a dc, but only for a wxScrolledWindow widget.
-        # Now wxGTK derives wxListCtrl from wxScrolledWindow,
-        # and wxMSW from wxControl... So that doesn't work.
-        #dc = wxClientDC(self.list)
-        ##self.list.PrepareDC(dc)
-        #x = dc.DeviceToLogicalX( event.GetX() )
-        #y = dc.DeviceToLogicalY( event.GetY() )
-        id = self.list.HitTest(wxPoint(x,y))
-        #print "Double click at %d %d" % (x,y), id
-        # Okay, we got a double click. Let's assume it's the current selection
-        wxYield()
-        self.OnViewArticle(event)
-
-    def OnCloseWindow(self, event):
-        self.Destroy()
-
-class MyApp(wxApp):
-    def OnInit(self):
-        frame = AppFrame(NULL, -1, "Slashdot Breaking News")
-        frame.Show(true)
-        self.SetTopWindow(frame)
-        return true
-
-#
-# main thingy
-#
-if __name__ == '__main__':
-    app = MyApp(0)
-    app.MainLoop()
-
-
-
-
-
diff --git a/wxPython/tests/zigron.py b/wxPython/tests/zigron.py
deleted file mode 100644
index 7a6c89d380..0000000000
--- a/wxPython/tests/zigron.py
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/bin/env python
-#----------------------------------------------------------------------------
-## import all of the wxPython GUI package
-from wxPython.wx import *
-
-
-#---------------------------------------------------------------------------
-class GeneralTab(wxWindow):
-    def __init__(self,parent,id):
-        wxWindow.__init__(self,parent,id,wxPoint(5,25))
-        self.Opts = {}
-        hdr = wxStaticText(self,-1,"This space left intentionally blank.",wxPoint(5,10))
-    def GetOpts(self):
-        return self.Opts
-
-class ServersTab(wxWindow):
-    def __init__(self,parent,id):
-        wxWindow.__init__(self,parent,id,wxPoint(5,25))
-        hdr = wxStaticText(self,-1,"This is also blank on purpose.",wxPoint(5,10))
-        self.Opts = {}
-    def GetOpts(self):
-        return self.Opts
-
-class OptionsTab(wxWindow):
-    def __init__(self,parent,id):
-        wxWindow.__init__(self,parent,id,wxPoint(5,25))
-        hdr = wxStaticText(self,-1,"Quit bugging me!.",wxPoint(5,10))
-        self.Opts = {}
-    def GetOpts(self):
-        return self.Opts
-
-class SettingsWindow(wxFrame):
-    NOTEBOOK   = 3201
-    GENERAL_TAB  = 3210
-    OPTIONS_TAB  = 3211
-    SERVERS_TAB  = 3212
-
-    def __init__(self,parent,id):
-        self.id = id
-        self.parent = parent
-        wxFrame.__init__(self,parent,id,'Pyces  Settings',
-                          wxPoint(50,50), wxSize(350,475),
-                          wxDIALOG_MODAL|wxSTATIC_BORDER|wxCAPTION|wxSYSTEM_MENU)
-        nb = wxNotebook(self, self.NOTEBOOK)
-        self.GeneralTab = GeneralTab(self,-1)
-        self.OptionsTab = OptionsTab(self,-1)
-        self.ServersTab = ServersTab(self,-1)
-        nb.AddPage(self.GeneralTab,'General')
-        nb.AddPage(self.OptionsTab,'Options')
-        nb.AddPage(self.ServersTab,'Servers')
-        nb.SetSelection(0)
-        nb.SetSize(wxSize(350,420))
-
-
-
-#---------------------------------------------------------------------------
-
-class MyApp(wxApp):
-    def OnInit(self):
-        frame = SettingsWindow(NULL, -1)
-        #frame.ShowModal()
-        #return false
-        frame.Show(true)
-        self.SetTopWindow(frame)
-        return true
-
-#---------------------------------------------------------------------------
-
-
-app = MyApp(0)     # Create an instance of the application class
-app.MainLoop()     # Tell it to start processing events
-
-#----------------------------------------------------------------------------
-#
-
diff --git a/wxPython/wx/__init__.py b/wxPython/wx/__init__.py
new file mode 100644
index 0000000000..a334633f8d
--- /dev/null
+++ b/wxPython/wx/__init__.py
@@ -0,0 +1,73 @@
+"""wx package
+
+Provides a way to drop the wx prefix from wxPython objects by
+dynamically loading and renaming objects from the real wxPython
+package.  This is the first phase of a transition to a new style of
+using wxPython.  For example:
+
+    import wx
+    class MyFrame(wx.Frame):
+        ...
+
+instead of:
+
+    from wxPython.wx import *
+    class MyFrame(wxFrame):
+        ...
+
+or:
+
+    from wxPython import wx
+    class MyFrame(wx.wxFrame):
+        ...
+
+
+Internally, this package contains only one function, called _rename,
+and one dictionary, called _newnames.  These are used by wx itself and
+by its sub-modules whenever they are imported.  The _rename function
+changes the names in the real wxPython module being imported according
+to the rules that have been decided, e.g. most wx prefixes are
+removed, and the new names are made visible in the wx package or
+sub-packages.
+
+The _newnames dictionary holds the set of new names (from wx and ALL
+sub-modules), keyed by the original name. This serves two purposes,
+duplicate old names in different modules are eliminated, the survivor
+being the name in wx itself; and the dictionary is accessible to
+external scripts whose purpose is to change occurrences of the
+corresponding names in application programs that use wx.
+
+"""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wxPython import wx
+
+_newnames = {}
+
+def _rename(d_new, d_old, modulename=None):
+    " copy the names from d_old to d_new according to the rules"
+    global _newnames
+    import types
+    prefix = 'wx.'
+    if modulename:
+        prefix += modulename + '.'
+    for old, obj in d_old.items():
+        if type(obj) is types.ModuleType or old.startswith('_'):
+            # Skip modules and private names.
+            continue
+        if old.startswith('wx') and not old.startswith('wxEVT_'):
+            # remove all wx prefixes except wxEVT_
+            new = old[2:]
+        else:
+            # add everything else unchanged
+            new = old
+        if not _newnames.has_key(old):
+            d_new[new] = obj
+            _newnames[old] = prefix + new      # add fully qualified new name to lookup using old name as key
+
+# rename the wx namespace itself
+_rename(globals(), wx.__dict__)
+del wx
+
diff --git a/wxPython/wx/calendar.py b/wxPython/wx/calendar.py
new file mode 100644
index 0000000000..fbc543e4da
--- /dev/null
+++ b/wxPython/wx/calendar.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython import calendar
+_rename(globals(), calendar.__dict__, modulename='calendar')
+del calendar
+del _rename
diff --git a/wxPython/wx/dllwidget.py b/wxPython/wx/dllwidget.py
new file mode 100644
index 0000000000..fc1ed89706
--- /dev/null
+++ b/wxPython/wx/dllwidget.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython import dllwidget
+_rename(globals(), dllwidget.__dict__, modulename='dllwidget')
+del dllwidget
+del _rename
diff --git a/wxPython/wx/gizmos.py b/wxPython/wx/gizmos.py
new file mode 100644
index 0000000000..24714962c5
--- /dev/null
+++ b/wxPython/wx/gizmos.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython import gizmos
+_rename(globals(), gizmos.__dict__, modulename='gizmos')
+del gizmos
+del _rename
diff --git a/wxPython/wx/glcanvas.py b/wxPython/wx/glcanvas.py
new file mode 100644
index 0000000000..9807814a81
--- /dev/null
+++ b/wxPython/wx/glcanvas.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython import glcanvas
+_rename(globals(), glcanvas.__dict__, modulename='glcanvas')
+del glcanvas
+del _rename
diff --git a/wxPython/wx/grid.py b/wxPython/wx/grid.py
new file mode 100644
index 0000000000..2b196ab084
--- /dev/null
+++ b/wxPython/wx/grid.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython import grid
+_rename(globals(), grid.__dict__, modulename='grid')
+del grid
+del _rename
diff --git a/wxPython/wx/help.py b/wxPython/wx/help.py
new file mode 100644
index 0000000000..0a5923faf0
--- /dev/null
+++ b/wxPython/wx/help.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython import help
+_rename(globals(), help.__dict__, modulename='help')
+del help
+del _rename
diff --git a/wxPython/wx/html.py b/wxPython/wx/html.py
new file mode 100644
index 0000000000..5627c53709
--- /dev/null
+++ b/wxPython/wx/html.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython import html
+_rename(globals(), html.__dict__, modulename='html')
+del html
+del _rename
diff --git a/wxPython/wx/iewin.py b/wxPython/wx/iewin.py
new file mode 100644
index 0000000000..b593683e5a
--- /dev/null
+++ b/wxPython/wx/iewin.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython import iewin
+_rename(globals(), iewin.__dict__, modulename='iewin')
+del iewin
+del _rename
diff --git a/wxPython/wx/lib/CDate.py b/wxPython/wx/lib/CDate.py
new file mode 100644
index 0000000000..54b6434903
--- /dev/null
+++ b/wxPython/wx/lib/CDate.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import CDate
+_rename(globals(), CDate.__dict__, modulename='lib.CDate')
+del CDate
+del _rename
diff --git a/wxPython/wx/lib/ClickableHtmlWindow.py b/wxPython/wx/lib/ClickableHtmlWindow.py
new file mode 100644
index 0000000000..dabee04345
--- /dev/null
+++ b/wxPython/wx/lib/ClickableHtmlWindow.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import ClickableHtmlWindow
+_rename(globals(), ClickableHtmlWindow.__dict__, modulename='lib.ClickableHtmlWindow')
+del ClickableHtmlWindow
+del _rename
diff --git a/wxPython/wx/lib/ErrorDialogs.py b/wxPython/wx/lib/ErrorDialogs.py
new file mode 100644
index 0000000000..eb20380b30
--- /dev/null
+++ b/wxPython/wx/lib/ErrorDialogs.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import ErrorDialogs
+_rename(globals(), ErrorDialogs.__dict__, modulename='lib.ErrorDialogs')
+del ErrorDialogs
+del _rename
diff --git a/wxPython/wx/lib/ErrorDialogs_wdr.py b/wxPython/wx/lib/ErrorDialogs_wdr.py
new file mode 100644
index 0000000000..ae07431b30
--- /dev/null
+++ b/wxPython/wx/lib/ErrorDialogs_wdr.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import ErrorDialogs_wdr
+_rename(globals(), ErrorDialogs_wdr.__dict__, modulename='lib.ErrorDialogs_wdr')
+del ErrorDialogs_wdr
+del _rename
diff --git a/wxPython/wx/lib/PythonBitmaps.py b/wxPython/wx/lib/PythonBitmaps.py
new file mode 100644
index 0000000000..d54dbbef07
--- /dev/null
+++ b/wxPython/wx/lib/PythonBitmaps.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import PythonBitmaps
+_rename(globals(), PythonBitmaps.__dict__, modulename='lib.PythonBitmaps')
+del PythonBitmaps
+del _rename
diff --git a/wxPython/wx/lib/__init__.py b/wxPython/wx/lib/__init__.py
new file mode 100644
index 0000000000..717d76b577
--- /dev/null
+++ b/wxPython/wx/lib/__init__.py
@@ -0,0 +1 @@
+# Python package
diff --git a/wxPython/wx/lib/activexwrapper.py b/wxPython/wx/lib/activexwrapper.py
new file mode 100644
index 0000000000..b92e6ed3b1
--- /dev/null
+++ b/wxPython/wx/lib/activexwrapper.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import activexwrapper
+_rename(globals(), activexwrapper.__dict__, modulename='lib.activexwrapper')
+del activexwrapper
+del _rename
diff --git a/wxPython/wx/lib/analogclock.py b/wxPython/wx/lib/analogclock.py
new file mode 100644
index 0000000000..f83fe1a29c
--- /dev/null
+++ b/wxPython/wx/lib/analogclock.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import analogclock
+_rename(globals(), analogclock.__dict__, modulename='lib.analogclock')
+del analogclock
+del _rename
diff --git a/wxPython/wx/lib/anchors.py b/wxPython/wx/lib/anchors.py
new file mode 100644
index 0000000000..779cb6f043
--- /dev/null
+++ b/wxPython/wx/lib/anchors.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import anchors
+_rename(globals(), anchors.__dict__, modulename='lib.anchors')
+del anchors
+del _rename
diff --git a/wxPython/wx/lib/buttons.py b/wxPython/wx/lib/buttons.py
new file mode 100644
index 0000000000..aa4f3742b0
--- /dev/null
+++ b/wxPython/wx/lib/buttons.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import buttons
+_rename(globals(), buttons.__dict__, modulename='lib.buttons')
+del buttons
+del _rename
diff --git a/wxPython/wx/lib/calendar.py b/wxPython/wx/lib/calendar.py
new file mode 100644
index 0000000000..8b5a466e1c
--- /dev/null
+++ b/wxPython/wx/lib/calendar.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import calendar
+_rename(globals(), calendar.__dict__, modulename='lib.calendar')
+del calendar
+del _rename
diff --git a/wxPython/wx/lib/colourchooser/__init__.py b/wxPython/wx/lib/colourchooser/__init__.py
new file mode 100644
index 0000000000..717d76b577
--- /dev/null
+++ b/wxPython/wx/lib/colourchooser/__init__.py
@@ -0,0 +1 @@
+# Python package
diff --git a/wxPython/wx/lib/colourchooser/canvas.py b/wxPython/wx/lib/colourchooser/canvas.py
new file mode 100644
index 0000000000..829909b48e
--- /dev/null
+++ b/wxPython/wx/lib/colourchooser/canvas.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib.colourchooser import canvas
+_rename(globals(), canvas.__dict__, modulename='lib.colourchooser.canvas')
+del canvas
+del _rename
diff --git a/wxPython/wx/lib/colourchooser/intl.py b/wxPython/wx/lib/colourchooser/intl.py
new file mode 100644
index 0000000000..2004276cad
--- /dev/null
+++ b/wxPython/wx/lib/colourchooser/intl.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib.colourchooser import intl
+_rename(globals(), intl.__dict__, modulename='lib.colourchooser.intl')
+del intl
+del _rename
diff --git a/wxPython/wx/lib/colourchooser/pycolourbox.py b/wxPython/wx/lib/colourchooser/pycolourbox.py
new file mode 100644
index 0000000000..d240cb83c9
--- /dev/null
+++ b/wxPython/wx/lib/colourchooser/pycolourbox.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib.colourchooser import pycolourbox
+_rename(globals(), pycolourbox.__dict__, modulename='lib.colourchooser.pycolourbox')
+del pycolourbox
+del _rename
diff --git a/wxPython/wx/lib/colourchooser/pycolourchooser.py b/wxPython/wx/lib/colourchooser/pycolourchooser.py
new file mode 100644
index 0000000000..4b1049ef3b
--- /dev/null
+++ b/wxPython/wx/lib/colourchooser/pycolourchooser.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib.colourchooser import pycolourchooser
+_rename(globals(), pycolourchooser.__dict__, modulename='lib.colourchooser.pycolourchooser')
+del pycolourchooser
+del _rename
diff --git a/wxPython/wx/lib/colourchooser/pycolourslider.py b/wxPython/wx/lib/colourchooser/pycolourslider.py
new file mode 100644
index 0000000000..b737da9cbc
--- /dev/null
+++ b/wxPython/wx/lib/colourchooser/pycolourslider.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib.colourchooser import pycolourslider
+_rename(globals(), pycolourslider.__dict__, modulename='lib.colourchooser.pycolourslider')
+del pycolourslider
+del _rename
diff --git a/wxPython/wx/lib/colourchooser/pypalette.py b/wxPython/wx/lib/colourchooser/pypalette.py
new file mode 100644
index 0000000000..e420d09a59
--- /dev/null
+++ b/wxPython/wx/lib/colourchooser/pypalette.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib.colourchooser import pypalette
+_rename(globals(), pypalette.__dict__, modulename='lib.colourchooser.pypalette')
+del pypalette
+del _rename
diff --git a/wxPython/wx/lib/colourdb.py b/wxPython/wx/lib/colourdb.py
new file mode 100644
index 0000000000..ca11238ac9
--- /dev/null
+++ b/wxPython/wx/lib/colourdb.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import colourdb
+_rename(globals(), colourdb.__dict__, modulename='lib.colourdb')
+del colourdb
+del _rename
diff --git a/wxPython/wx/lib/colourselect.py b/wxPython/wx/lib/colourselect.py
new file mode 100644
index 0000000000..ac24ba0cb4
--- /dev/null
+++ b/wxPython/wx/lib/colourselect.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import colourselect
+_rename(globals(), colourselect.__dict__, modulename='lib.colourselect')
+del colourselect
+del _rename
diff --git a/wxPython/wx/lib/dialogs.py b/wxPython/wx/lib/dialogs.py
new file mode 100644
index 0000000000..851f36ae06
--- /dev/null
+++ b/wxPython/wx/lib/dialogs.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import dialogs
+_rename(globals(), dialogs.__dict__, modulename='lib.dialogs')
+del dialogs
+del _rename
diff --git a/wxPython/wx/lib/editor/__init__.py b/wxPython/wx/lib/editor/__init__.py
new file mode 100644
index 0000000000..717d76b577
--- /dev/null
+++ b/wxPython/wx/lib/editor/__init__.py
@@ -0,0 +1 @@
+# Python package
diff --git a/wxPython/wx/lib/editor/editor.py b/wxPython/wx/lib/editor/editor.py
new file mode 100644
index 0000000000..22ecac2614
--- /dev/null
+++ b/wxPython/wx/lib/editor/editor.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib.editor import editor
+_rename(globals(), editor.__dict__, modulename='lib.editor.editor')
+del editor
+del _rename
diff --git a/wxPython/wx/lib/editor/images.py b/wxPython/wx/lib/editor/images.py
new file mode 100644
index 0000000000..8bbd370706
--- /dev/null
+++ b/wxPython/wx/lib/editor/images.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib.editor import images
+_rename(globals(), images.__dict__, modulename='lib.editor.images')
+del images
+del _rename
diff --git a/wxPython/wx/lib/editor/selection.py b/wxPython/wx/lib/editor/selection.py
new file mode 100644
index 0000000000..cf3cebedc0
--- /dev/null
+++ b/wxPython/wx/lib/editor/selection.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib.editor import selection
+_rename(globals(), selection.__dict__, modulename='lib.editor.selection')
+del selection
+del _rename
diff --git a/wxPython/wx/lib/evtmgr.py b/wxPython/wx/lib/evtmgr.py
new file mode 100644
index 0000000000..c010bf13f3
--- /dev/null
+++ b/wxPython/wx/lib/evtmgr.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import evtmgr
+_rename(globals(), evtmgr.__dict__, modulename='lib.evtmgr')
+del evtmgr
+del _rename
diff --git a/wxPython/wx/lib/fancytext.py b/wxPython/wx/lib/fancytext.py
new file mode 100644
index 0000000000..dfabeb8610
--- /dev/null
+++ b/wxPython/wx/lib/fancytext.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import fancytext
+_rename(globals(), fancytext.__dict__, modulename='lib.fancytext')
+del fancytext
+del _rename
diff --git a/wxPython/wx/lib/filebrowsebutton.py b/wxPython/wx/lib/filebrowsebutton.py
new file mode 100644
index 0000000000..b8f48bd212
--- /dev/null
+++ b/wxPython/wx/lib/filebrowsebutton.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import filebrowsebutton
+_rename(globals(), filebrowsebutton.__dict__, modulename='lib.filebrowsebutton')
+del filebrowsebutton
+del _rename
diff --git a/wxPython/wx/lib/floatbar.py b/wxPython/wx/lib/floatbar.py
new file mode 100644
index 0000000000..34c334b635
--- /dev/null
+++ b/wxPython/wx/lib/floatbar.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import floatbar
+_rename(globals(), floatbar.__dict__, modulename='lib.floatbar')
+del floatbar
+del _rename
diff --git a/wxPython/wx/lib/gridmovers.py b/wxPython/wx/lib/gridmovers.py
new file mode 100644
index 0000000000..55a3fa1baa
--- /dev/null
+++ b/wxPython/wx/lib/gridmovers.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import gridmovers
+_rename(globals(), gridmovers.__dict__, modulename='lib.gridmovers')
+del gridmovers
+del _rename
diff --git a/wxPython/wx/lib/grids.py b/wxPython/wx/lib/grids.py
new file mode 100644
index 0000000000..010c1b972a
--- /dev/null
+++ b/wxPython/wx/lib/grids.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import grids
+_rename(globals(), grids.__dict__, modulename='lib.grids')
+del grids
+del _rename
diff --git a/wxPython/wx/lib/imagebrowser.py b/wxPython/wx/lib/imagebrowser.py
new file mode 100644
index 0000000000..9009641090
--- /dev/null
+++ b/wxPython/wx/lib/imagebrowser.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import imagebrowser
+_rename(globals(), imagebrowser.__dict__, modulename='lib.imagebrowser')
+del imagebrowser
+del _rename
diff --git a/wxPython/wx/lib/imageutils.py b/wxPython/wx/lib/imageutils.py
new file mode 100644
index 0000000000..be7de7e57b
--- /dev/null
+++ b/wxPython/wx/lib/imageutils.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import imageutils
+_rename(globals(), imageutils.__dict__, modulename='lib.imageutils')
+del imageutils
+del _rename
diff --git a/wxPython/wx/lib/infoframe.py b/wxPython/wx/lib/infoframe.py
new file mode 100644
index 0000000000..196bfabd66
--- /dev/null
+++ b/wxPython/wx/lib/infoframe.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import infoframe
+_rename(globals(), infoframe.__dict__, modulename='lib.infoframe')
+del infoframe
+del _rename
diff --git a/wxPython/wx/lib/intctrl.py b/wxPython/wx/lib/intctrl.py
new file mode 100644
index 0000000000..f201a6fc74
--- /dev/null
+++ b/wxPython/wx/lib/intctrl.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import intctrl
+_rename(globals(), intctrl.__dict__, modulename='lib.intctrl')
+del intctrl
+del _rename
diff --git a/wxPython/wx/lib/layoutf.py b/wxPython/wx/lib/layoutf.py
new file mode 100644
index 0000000000..f1492446e7
--- /dev/null
+++ b/wxPython/wx/lib/layoutf.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import layoutf
+_rename(globals(), layoutf.__dict__, modulename='lib.layoutf')
+del layoutf
+del _rename
diff --git a/wxPython/wx/lib/maskededit.py b/wxPython/wx/lib/maskededit.py
new file mode 100644
index 0000000000..61f751cd6c
--- /dev/null
+++ b/wxPython/wx/lib/maskededit.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import maskededit
+_rename(globals(), maskededit.__dict__, modulename='lib.maskededit')
+del maskededit
+del _rename
diff --git a/wxPython/wx/lib/mixins/__init__.py b/wxPython/wx/lib/mixins/__init__.py
new file mode 100644
index 0000000000..717d76b577
--- /dev/null
+++ b/wxPython/wx/lib/mixins/__init__.py
@@ -0,0 +1 @@
+# Python package
diff --git a/wxPython/wx/lib/mixins/grid.py b/wxPython/wx/lib/mixins/grid.py
new file mode 100644
index 0000000000..a5d5c8cdf2
--- /dev/null
+++ b/wxPython/wx/lib/mixins/grid.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib.mixins import grid
+_rename(globals(), grid.__dict__, modulename='lib.mixins.grid')
+del grid
+del _rename
diff --git a/wxPython/wx/lib/mixins/imagelist.py b/wxPython/wx/lib/mixins/imagelist.py
new file mode 100644
index 0000000000..1275fe2f03
--- /dev/null
+++ b/wxPython/wx/lib/mixins/imagelist.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib.mixins import imagelist
+_rename(globals(), imagelist.__dict__, modulename='lib.mixins.imagelist')
+del imagelist
+del _rename
diff --git a/wxPython/wx/lib/mixins/listctrl.py b/wxPython/wx/lib/mixins/listctrl.py
new file mode 100644
index 0000000000..88cc8860f7
--- /dev/null
+++ b/wxPython/wx/lib/mixins/listctrl.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib.mixins import listctrl
+_rename(globals(), listctrl.__dict__, modulename='lib.mixins.listctrl')
+del listctrl
+del _rename
diff --git a/wxPython/wx/lib/mixins/rubberband.py b/wxPython/wx/lib/mixins/rubberband.py
new file mode 100644
index 0000000000..de0614becf
--- /dev/null
+++ b/wxPython/wx/lib/mixins/rubberband.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib.mixins import rubberband
+_rename(globals(), rubberband.__dict__, modulename='lib.mixins.rubberband')
+del rubberband
+del _rename
diff --git a/wxPython/wx/lib/multisash.py b/wxPython/wx/lib/multisash.py
new file mode 100644
index 0000000000..b586275f73
--- /dev/null
+++ b/wxPython/wx/lib/multisash.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import multisash
+_rename(globals(), multisash.__dict__, modulename='lib.multisash')
+del multisash
+del _rename
diff --git a/wxPython/wx/lib/mvctree.py b/wxPython/wx/lib/mvctree.py
new file mode 100644
index 0000000000..cc1b6c94a7
--- /dev/null
+++ b/wxPython/wx/lib/mvctree.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import mvctree
+_rename(globals(), mvctree.__dict__, modulename='lib.mvctree')
+del mvctree
+del _rename
diff --git a/wxPython/wx/lib/popupctl.py b/wxPython/wx/lib/popupctl.py
new file mode 100644
index 0000000000..860d3202fe
--- /dev/null
+++ b/wxPython/wx/lib/popupctl.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import popupctl
+_rename(globals(), popupctl.__dict__, modulename='lib.popupctl')
+del popupctl
+del _rename
diff --git a/wxPython/wx/lib/printout.py b/wxPython/wx/lib/printout.py
new file mode 100644
index 0000000000..c927f0659d
--- /dev/null
+++ b/wxPython/wx/lib/printout.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import printout
+_rename(globals(), printout.__dict__, modulename='lib.printout')
+del printout
+del _rename
diff --git a/wxPython/wx/lib/pubsub.py b/wxPython/wx/lib/pubsub.py
new file mode 100644
index 0000000000..c2275bf65d
--- /dev/null
+++ b/wxPython/wx/lib/pubsub.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import pubsub
+_rename(globals(), pubsub.__dict__, modulename='lib.pubsub')
+del pubsub
+del _rename
diff --git a/wxPython/wx/lib/pyshell.py b/wxPython/wx/lib/pyshell.py
new file mode 100644
index 0000000000..cdfca52db3
--- /dev/null
+++ b/wxPython/wx/lib/pyshell.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import pyshell
+_rename(globals(), pyshell.__dict__, modulename='lib.pyshell')
+del pyshell
+del _rename
diff --git a/wxPython/wx/lib/rcsizer.py b/wxPython/wx/lib/rcsizer.py
new file mode 100644
index 0000000000..b59b4c2876
--- /dev/null
+++ b/wxPython/wx/lib/rcsizer.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import rcsizer
+_rename(globals(), rcsizer.__dict__, modulename='lib.rcsizer')
+del rcsizer
+del _rename
diff --git a/wxPython/wx/lib/rightalign.py b/wxPython/wx/lib/rightalign.py
new file mode 100644
index 0000000000..e47e353d55
--- /dev/null
+++ b/wxPython/wx/lib/rightalign.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import rightalign
+_rename(globals(), rightalign.__dict__, modulename='lib.rightalign')
+del rightalign
+del _rename
diff --git a/wxPython/wx/lib/rpcMixin.py b/wxPython/wx/lib/rpcMixin.py
new file mode 100644
index 0000000000..8f4b66de98
--- /dev/null
+++ b/wxPython/wx/lib/rpcMixin.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import rpcMixin
+_rename(globals(), rpcMixin.__dict__, modulename='lib.rpcMixin')
+del rpcMixin
+del _rename
diff --git a/wxPython/wx/lib/scrolledpanel.py b/wxPython/wx/lib/scrolledpanel.py
new file mode 100644
index 0000000000..5c1d6a2648
--- /dev/null
+++ b/wxPython/wx/lib/scrolledpanel.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import scrolledpanel
+_rename(globals(), scrolledpanel.__dict__, modulename='lib.scrolledpanel')
+del scrolledpanel
+del _rename
diff --git a/wxPython/wx/lib/sheet.py b/wxPython/wx/lib/sheet.py
new file mode 100644
index 0000000000..b22fa83d62
--- /dev/null
+++ b/wxPython/wx/lib/sheet.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import sheet
+_rename(globals(), sheet.__dict__, modulename='lib.sheet')
+del sheet
+del _rename
diff --git a/wxPython/wx/lib/shell.py b/wxPython/wx/lib/shell.py
new file mode 100644
index 0000000000..b95f0e8041
--- /dev/null
+++ b/wxPython/wx/lib/shell.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import shell
+_rename(globals(), shell.__dict__, modulename='lib.shell')
+del shell
+del _rename
diff --git a/wxPython/wx/lib/splashscreen.py b/wxPython/wx/lib/splashscreen.py
new file mode 100644
index 0000000000..2c14a2fa1a
--- /dev/null
+++ b/wxPython/wx/lib/splashscreen.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import splashscreen
+_rename(globals(), splashscreen.__dict__, modulename='lib.splashscreen')
+del splashscreen
+del _rename
diff --git a/wxPython/wx/lib/stattext.py b/wxPython/wx/lib/stattext.py
new file mode 100644
index 0000000000..4c152232d4
--- /dev/null
+++ b/wxPython/wx/lib/stattext.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import stattext
+_rename(globals(), stattext.__dict__, modulename='lib.stattext')
+del stattext
+del _rename
diff --git a/wxPython/wx/lib/throbber.py b/wxPython/wx/lib/throbber.py
new file mode 100644
index 0000000000..1ee8406b2f
--- /dev/null
+++ b/wxPython/wx/lib/throbber.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import throbber
+_rename(globals(), throbber.__dict__, modulename='lib.throbber')
+del throbber
+del _rename
diff --git a/wxPython/wx/lib/timectrl.py b/wxPython/wx/lib/timectrl.py
new file mode 100644
index 0000000000..d410de7d5b
--- /dev/null
+++ b/wxPython/wx/lib/timectrl.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import timectrl
+_rename(globals(), timectrl.__dict__, modulename='lib.timectrl')
+del timectrl
+del _rename
diff --git a/wxPython/wx/lib/vtk.py b/wxPython/wx/lib/vtk.py
new file mode 100644
index 0000000000..be31f4a23f
--- /dev/null
+++ b/wxPython/wx/lib/vtk.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import vtk
+_rename(globals(), vtk.__dict__, modulename='lib.vtk')
+del vtk
+del _rename
diff --git a/wxPython/wx/lib/wxPlotCanvas.py b/wxPython/wx/lib/wxPlotCanvas.py
new file mode 100644
index 0000000000..02c1d8f3d4
--- /dev/null
+++ b/wxPython/wx/lib/wxPlotCanvas.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import wxPlotCanvas
+_rename(globals(), wxPlotCanvas.__dict__, modulename='lib.wxPlotCanvas')
+del wxPlotCanvas
+del _rename
diff --git a/wxPython/wx/lib/wxpTag.py b/wxPython/wx/lib/wxpTag.py
new file mode 100644
index 0000000000..03fca45e9e
--- /dev/null
+++ b/wxPython/wx/lib/wxpTag.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.lib import wxpTag
+_rename(globals(), wxpTag.__dict__, modulename='lib.wxpTag')
+del wxpTag
+del _rename
diff --git a/wxPython/wx/ogl.py b/wxPython/wx/ogl.py
new file mode 100644
index 0000000000..1ac54fd4dc
--- /dev/null
+++ b/wxPython/wx/ogl.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython import ogl
+_rename(globals(), ogl.__dict__, modulename='ogl')
+del ogl
+del _rename
diff --git a/wxPython/wx/py/PyAlaCarte.py b/wxPython/wx/py/PyAlaCarte.py
new file mode 100644
index 0000000000..64c8b6304e
--- /dev/null
+++ b/wxPython/wx/py/PyAlaCarte.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import PyAlaCarte
+_rename(globals(), PyAlaCarte.__dict__, modulename='py.PyAlaCarte')
+del PyAlaCarte
+del _rename
diff --git a/wxPython/wx/py/PyAlaMode.py b/wxPython/wx/py/PyAlaMode.py
new file mode 100644
index 0000000000..6acf8f83e0
--- /dev/null
+++ b/wxPython/wx/py/PyAlaMode.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import PyAlaMode
+_rename(globals(), PyAlaMode.__dict__, modulename='py.PyAlaMode')
+del PyAlaMode
+del _rename
diff --git a/wxPython/wx/py/PyCrust.py b/wxPython/wx/py/PyCrust.py
new file mode 100644
index 0000000000..26b64d239d
--- /dev/null
+++ b/wxPython/wx/py/PyCrust.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import PyCrust
+_rename(globals(), PyCrust.__dict__, modulename='py.PyCrust')
+del PyCrust
+del _rename
diff --git a/wxPython/wx/py/PyFilling.py b/wxPython/wx/py/PyFilling.py
new file mode 100644
index 0000000000..e1c068b282
--- /dev/null
+++ b/wxPython/wx/py/PyFilling.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import PyFilling
+_rename(globals(), PyFilling.__dict__, modulename='py.PyFilling')
+del PyFilling
+del _rename
diff --git a/wxPython/wx/py/PyShell.py b/wxPython/wx/py/PyShell.py
new file mode 100644
index 0000000000..08a2ae9329
--- /dev/null
+++ b/wxPython/wx/py/PyShell.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import PyShell
+_rename(globals(), PyShell.__dict__, modulename='py.PyShell')
+del PyShell
+del _rename
diff --git a/wxPython/wx/py/PyWrap.py b/wxPython/wx/py/PyWrap.py
new file mode 100644
index 0000000000..7adba6c479
--- /dev/null
+++ b/wxPython/wx/py/PyWrap.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import PyWrap
+_rename(globals(), PyWrap.__dict__, modulename='py.PyWrap')
+del PyWrap
+del _rename
diff --git a/wxPython/wx/py/__init__.py b/wxPython/wx/py/__init__.py
new file mode 100644
index 0000000000..7efc5e89c1
--- /dev/null
+++ b/wxPython/wx/py/__init__.py
@@ -0,0 +1,3 @@
+# Py is really located in the old namespace, but it doesn't need any
+# renaming done.
+from wxPython.py import *
diff --git a/wxPython/wx/py/buffer.py b/wxPython/wx/py/buffer.py
new file mode 100644
index 0000000000..2ce26d4bcf
--- /dev/null
+++ b/wxPython/wx/py/buffer.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import buffer
+_rename(globals(), buffer.__dict__, modulename='py.buffer')
+del buffer
+del _rename
diff --git a/wxPython/wx/py/crust.py b/wxPython/wx/py/crust.py
new file mode 100644
index 0000000000..b0337c5ba2
--- /dev/null
+++ b/wxPython/wx/py/crust.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import crust
+_rename(globals(), crust.__dict__, modulename='py.crust')
+del crust
+del _rename
diff --git a/wxPython/wx/py/dispatcher.py b/wxPython/wx/py/dispatcher.py
new file mode 100644
index 0000000000..9ce9935b8e
--- /dev/null
+++ b/wxPython/wx/py/dispatcher.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import dispatcher
+_rename(globals(), dispatcher.__dict__, modulename='py.dispatcher')
+del dispatcher
+del _rename
diff --git a/wxPython/wx/py/document.py b/wxPython/wx/py/document.py
new file mode 100644
index 0000000000..93f4d87cc9
--- /dev/null
+++ b/wxPython/wx/py/document.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import document
+_rename(globals(), document.__dict__, modulename='py.document')
+del document
+del _rename
diff --git a/wxPython/wx/py/editor.py b/wxPython/wx/py/editor.py
new file mode 100644
index 0000000000..02cb8f1f91
--- /dev/null
+++ b/wxPython/wx/py/editor.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import editor
+_rename(globals(), editor.__dict__, modulename='py.editor')
+del editor
+del _rename
diff --git a/wxPython/wx/py/editwindow.py b/wxPython/wx/py/editwindow.py
new file mode 100644
index 0000000000..f2b8ea7791
--- /dev/null
+++ b/wxPython/wx/py/editwindow.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import editwindow
+_rename(globals(), editwindow.__dict__, modulename='py.editwindow')
+del editwindow
+del _rename
diff --git a/wxPython/wx/py/filling.py b/wxPython/wx/py/filling.py
new file mode 100644
index 0000000000..db99a47f47
--- /dev/null
+++ b/wxPython/wx/py/filling.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import filling
+_rename(globals(), filling.__dict__, modulename='py.filling')
+del filling
+del _rename
diff --git a/wxPython/wx/py/frame.py b/wxPython/wx/py/frame.py
new file mode 100644
index 0000000000..deefe71e62
--- /dev/null
+++ b/wxPython/wx/py/frame.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import frame
+_rename(globals(), frame.__dict__, modulename='py.frame')
+del frame
+del _rename
diff --git a/wxPython/wx/py/images.py b/wxPython/wx/py/images.py
new file mode 100644
index 0000000000..d877918209
--- /dev/null
+++ b/wxPython/wx/py/images.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import images
+_rename(globals(), images.__dict__, modulename='py.images')
+del images
+del _rename
diff --git a/wxPython/wx/py/interpreter.py b/wxPython/wx/py/interpreter.py
new file mode 100644
index 0000000000..b92a9870bf
--- /dev/null
+++ b/wxPython/wx/py/interpreter.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import interpreter
+_rename(globals(), interpreter.__dict__, modulename='py.interpreter')
+del interpreter
+del _rename
diff --git a/wxPython/wx/py/introspect.py b/wxPython/wx/py/introspect.py
new file mode 100644
index 0000000000..132b4fe32e
--- /dev/null
+++ b/wxPython/wx/py/introspect.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import introspect
+_rename(globals(), introspect.__dict__, modulename='py.introspect')
+del introspect
+del _rename
diff --git a/wxPython/wx/py/pseudo.py b/wxPython/wx/py/pseudo.py
new file mode 100644
index 0000000000..2d296bbd85
--- /dev/null
+++ b/wxPython/wx/py/pseudo.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import pseudo
+_rename(globals(), pseudo.__dict__, modulename='py.pseudo')
+del pseudo
+del _rename
diff --git a/wxPython/wx/py/shell.py b/wxPython/wx/py/shell.py
new file mode 100644
index 0000000000..e6422e31fc
--- /dev/null
+++ b/wxPython/wx/py/shell.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import shell
+_rename(globals(), shell.__dict__, modulename='py.shell')
+del shell
+del _rename
diff --git a/wxPython/wx/py/version.py b/wxPython/wx/py/version.py
new file mode 100644
index 0000000000..008691a6b1
--- /dev/null
+++ b/wxPython/wx/py/version.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.py import version
+_rename(globals(), version.__dict__, modulename='py.version')
+del version
+del _rename
diff --git a/wxPython/wx/stc.py b/wxPython/wx/stc.py
new file mode 100644
index 0000000000..50a0e58d0e
--- /dev/null
+++ b/wxPython/wx/stc.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython import stc
+_rename(globals(), stc.__dict__, modulename='stc')
+del stc
+del _rename
diff --git a/wxPython/wx/tools/XRCed/__init__.py b/wxPython/wx/tools/XRCed/__init__.py
new file mode 100644
index 0000000000..717d76b577
--- /dev/null
+++ b/wxPython/wx/tools/XRCed/__init__.py
@@ -0,0 +1 @@
+# Python package
diff --git a/wxPython/wx/tools/XRCed/encode_bitmaps.py b/wxPython/wx/tools/XRCed/encode_bitmaps.py
new file mode 100644
index 0000000000..5ddbb9836a
--- /dev/null
+++ b/wxPython/wx/tools/XRCed/encode_bitmaps.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools.XRCed import encode_bitmaps
+_rename(globals(), encode_bitmaps.__dict__, modulename='tools.XRCed.encode_bitmaps')
+del encode_bitmaps
+del _rename
diff --git a/wxPython/wx/tools/XRCed/globals.py b/wxPython/wx/tools/XRCed/globals.py
new file mode 100644
index 0000000000..c0a4fe93aa
--- /dev/null
+++ b/wxPython/wx/tools/XRCed/globals.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools.XRCed import globals
+_rename(globals(), globals.__dict__, modulename='tools.XRCed.globals')
+del globals
+del _rename
diff --git a/wxPython/wx/tools/XRCed/images.py b/wxPython/wx/tools/XRCed/images.py
new file mode 100644
index 0000000000..29c98de0b0
--- /dev/null
+++ b/wxPython/wx/tools/XRCed/images.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools.XRCed import images
+_rename(globals(), images.__dict__, modulename='tools.XRCed.images')
+del images
+del _rename
diff --git a/wxPython/wx/tools/XRCed/panel.py b/wxPython/wx/tools/XRCed/panel.py
new file mode 100644
index 0000000000..3d0c4e4066
--- /dev/null
+++ b/wxPython/wx/tools/XRCed/panel.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools.XRCed import panel
+_rename(globals(), panel.__dict__, modulename='tools.XRCed.panel')
+del panel
+del _rename
diff --git a/wxPython/wx/tools/XRCed/params.py b/wxPython/wx/tools/XRCed/params.py
new file mode 100644
index 0000000000..6f3e37bae7
--- /dev/null
+++ b/wxPython/wx/tools/XRCed/params.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools.XRCed import params
+_rename(globals(), params.__dict__, modulename='tools.XRCed.params')
+del params
+del _rename
diff --git a/wxPython/wx/tools/XRCed/tools.py b/wxPython/wx/tools/XRCed/tools.py
new file mode 100644
index 0000000000..87f9f1eee8
--- /dev/null
+++ b/wxPython/wx/tools/XRCed/tools.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools.XRCed import tools
+_rename(globals(), tools.__dict__, modulename='tools.XRCed.tools')
+del tools
+del _rename
diff --git a/wxPython/wx/tools/XRCed/tree.py b/wxPython/wx/tools/XRCed/tree.py
new file mode 100644
index 0000000000..5f05f2ef5e
--- /dev/null
+++ b/wxPython/wx/tools/XRCed/tree.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools.XRCed import tree
+_rename(globals(), tree.__dict__, modulename='tools.XRCed.tree')
+del tree
+del _rename
diff --git a/wxPython/wx/tools/XRCed/undo.py b/wxPython/wx/tools/XRCed/undo.py
new file mode 100644
index 0000000000..f8a9893f4d
--- /dev/null
+++ b/wxPython/wx/tools/XRCed/undo.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools.XRCed import undo
+_rename(globals(), undo.__dict__, modulename='tools.XRCed.undo')
+del undo
+del _rename
diff --git a/wxPython/wx/tools/XRCed/xrced.py b/wxPython/wx/tools/XRCed/xrced.py
new file mode 100644
index 0000000000..47b754b3ba
--- /dev/null
+++ b/wxPython/wx/tools/XRCed/xrced.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools.XRCed import xrced
+_rename(globals(), xrced.__dict__, modulename='tools.XRCed.xrced')
+del xrced
+del _rename
diff --git a/wxPython/wx/tools/XRCed/xxx.py b/wxPython/wx/tools/XRCed/xxx.py
new file mode 100644
index 0000000000..acb17c15b4
--- /dev/null
+++ b/wxPython/wx/tools/XRCed/xxx.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools.XRCed import xxx
+_rename(globals(), xxx.__dict__, modulename='tools.XRCed.xxx')
+del xxx
+del _rename
diff --git a/wxPython/wx/tools/__init__.py b/wxPython/wx/tools/__init__.py
new file mode 100644
index 0000000000..717d76b577
--- /dev/null
+++ b/wxPython/wx/tools/__init__.py
@@ -0,0 +1 @@
+# Python package
diff --git a/wxPython/wx/tools/dbg.py b/wxPython/wx/tools/dbg.py
new file mode 100644
index 0000000000..6cc262f8de
--- /dev/null
+++ b/wxPython/wx/tools/dbg.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools import dbg
+_rename(globals(), dbg.__dict__, modulename='tools.dbg')
+del dbg
+del _rename
diff --git a/wxPython/wx/tools/helpviewer.py b/wxPython/wx/tools/helpviewer.py
new file mode 100644
index 0000000000..98bd0e24ba
--- /dev/null
+++ b/wxPython/wx/tools/helpviewer.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools import helpviewer
+_rename(globals(), helpviewer.__dict__, modulename='tools.helpviewer')
+del helpviewer
+del _rename
diff --git a/wxPython/wx/tools/img2img.py b/wxPython/wx/tools/img2img.py
new file mode 100644
index 0000000000..f155a65450
--- /dev/null
+++ b/wxPython/wx/tools/img2img.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools import img2img
+_rename(globals(), img2img.__dict__, modulename='tools.img2img')
+del img2img
+del _rename
diff --git a/wxPython/wx/tools/img2png.py b/wxPython/wx/tools/img2png.py
new file mode 100644
index 0000000000..5967f8a7ec
--- /dev/null
+++ b/wxPython/wx/tools/img2png.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools import img2png
+_rename(globals(), img2png.__dict__, modulename='tools.img2png')
+del img2png
+del _rename
diff --git a/wxPython/wx/tools/img2py.py b/wxPython/wx/tools/img2py.py
new file mode 100644
index 0000000000..de1d5e2a58
--- /dev/null
+++ b/wxPython/wx/tools/img2py.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools import img2py
+_rename(globals(), img2py.__dict__, modulename='tools.img2py')
+del img2py
+del _rename
diff --git a/wxPython/wx/tools/img2xpm.py b/wxPython/wx/tools/img2xpm.py
new file mode 100644
index 0000000000..ec59eb7a76
--- /dev/null
+++ b/wxPython/wx/tools/img2xpm.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython.tools import img2xpm
+_rename(globals(), img2xpm.__dict__, modulename='tools.img2xpm')
+del img2xpm
+del _rename
diff --git a/wxPython/wx/wizard.py b/wxPython/wx/wizard.py
new file mode 100644
index 0000000000..393b30775a
--- /dev/null
+++ b/wxPython/wx/wizard.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython import wizard
+_rename(globals(), wizard.__dict__, modulename='wizard')
+del wizard
+del _rename
diff --git a/wxPython/wx/xrc.py b/wxPython/wx/xrc.py
new file mode 100644
index 0000000000..c775d49810
--- /dev/null
+++ b/wxPython/wx/xrc.py
@@ -0,0 +1,11 @@
+
+"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
+
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wx import _rename
+from wxPython import xrc
+_rename(globals(), xrc.__dict__, modulename='xrc')
+del xrc
+del _rename
diff --git a/wxPython/wxPython/lib/PyCrust/.cvsignore b/wxPython/wxPython/lib/PyCrust/.cvsignore
deleted file mode 100644
index 9020783b5e..0000000000
--- a/wxPython/wxPython/lib/PyCrust/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*.pyc
-*.BAK
-*.$$$
\ No newline at end of file
diff --git a/wxPython/wxPython/lib/PyCrust/CHANGES.txt b/wxPython/wxPython/lib/PyCrust/CHANGES.txt
deleted file mode 100644
index 1e2bdafe8e..0000000000
--- a/wxPython/wxPython/lib/PyCrust/CHANGES.txt
+++ /dev/null
@@ -1,512 +0,0 @@
-=============
- CHANGES.txt 
-=============
-
------------------------------------------
- Changes made to each release of PyCrust
------------------------------------------
-
-
-0.9 (2/27/2003 to 3/20/2003)
-============================
-
-Added fontIncrease, fontDecrease, fontDefault signals, receivers and
-keybindings:
-
-    Ctrl+]            Increase font size.
-    Ctrl+[            Decrease font size.
-    Ctrl+=            Default font size.
-
-Continued enhancement of the decorator capability to provide better
-documentation and docstrings for wxPython classes and functions.
-
-Introduced new tabbed interface:
-
-* Namespace
-* Calltip
-* Session
-* Dispatcher
-* wxPython Docs
-* wxSTC Docs
-
-Filling.tree now expands tuples as well as lists. (It should have done
-this all along, I just never noticed this omission before.)
-
-Added this True/False test to all modules:
-
-    try:
-        True
-    except NameError:
-        True = 1==1
-        False = 1==0
-
-Added wxd directory with decoration classes.
-
-
-0.8.2 (1/5/2003 to 2/26/2003)
-=============================
-
-Wrapped sys.ps1, sys.ps2, and sys.ps3 in str(). (Thanks, Kieran
-Holland.)
-
-Fixed minor things found by PyChecker.
-
-Changed locals to use __main__.__dict__ and added code to clean up the
-namespace, making it as close to the regular Python environment as
-possible. This solves the problem of pickling and unpickling instances
-of classes defined in the shell.
-
-Made shell.PasteAndRun() a little more forgiving when it finds a ps2
-prompt line with no trailing space, such when you copy code from a web
-page.
-
-Improved autocomplete behavior by adding these to shell:
-    self.AutoCompSetAutoHide(False)
-    self.AutoCompStops(' .,;:([)]}\'"\\<>%^&+-=*/|`')
-
-Added decor directory, decorator.py, stcDecor.py, and
-stcConstants.py. These all serve the purpose of adding docstrings to
-existing wxPython classes, in particular the wxStyledTextControl.
-
-Added wrap.py, a command line utility for running a wxPython app with
-additional runtime-tools loaded, such as PyCrust (the only tool at
-this point).
-
-Flushed the clipboard Cut/Copy operations so that selections will
-exist in the clipboard even after PyCrust has been closed.
-
-Improved the suppression of docstrings for simple data types appearing
-in the namespace viewer.
-
-Better handling of autocompletion with numeric types; no
-autocompletion when typing a dot after an integer. If the
-autocompletion is desired, type a space before the dot:
-
-    func = 3 .
-
-More Filling!!! The namespace tree is now dynamically updated.
-
-
-0.8.1 (12/20/2002 to 12/25/2002)
-================================
-
-Improved keyboard handling with Autocomplete active. You can now use
-Enter as well as Tab to select an item from the list.
-
-Disabled autocomplete for lists of 2000 items or more. The current
-implementation of wxSTC can't handle lists this big.
-
-Changed filling to always display docstrings for objects. This is
-useful for objects whose docstrings have been decorated, rather than
-coming directly from the source code. (Hmmm. Sounds like someone is
-doing some decorating. I wonder where that would be helpful? ;-)
-
-Fixed handling of icon. Added images.py file.
-
-
-0.8 (10/29/2002 to 12/16/2002)
-==============================
-
-Added "help" to startup banner info.
-
-Made all wx and stc imports explicit. No more import *.
-
-Replaced use of wx's true and false with Python's True and False.
-
-Changed introspect.getRoot() to use tokenize module. This does a
-slightly better job than the previous parsing routine and the code is
-clearer.
-
-Improved handling of whitespace and empty types during introspection.
-
-Fixed cut/copy clipboard problem under Linux. (Robin Dunn rocks!!!)
-
-Added shell.about() which works like this:
-
-    >>> shell.about()
-    PyCrust Version: 0.8
-    Shell Revision: 1.80
-    Interpreter Revision: 1.15
-    Python Version: 2.2.2
-    wxPython Version: 2.3.3.1
-    Platform: linux2
-
-Added copy plus and paste plus to shell menu.
-
-Moved shell menu from shell.py to shellmenu.py.
-
-Added sys.stdin.readlines() support.
-
-Added time.sleep() in readline() and OnIdle() event handler to free up
-the CPU.
-
-
-0.7.2 (2/22/2002 to 8/27/2002)
-==============================
-
-Tweaked getAttributeNames() to pick up a few more attributes:
-
-    '__bases__', '__class__', '__dict__', '__name__', 'func_closure',
-    'func_code', 'func_defaults', 'func_dict', 'func_doc',
-    'func_globals', 'func_name'
-
-Added a tests directory and unit tests.
-
-Improved support for empty types in the shell: [], () and {} as far as
-when call tips and autocompletion are available.
-
-Added support for the other triple string - ''''''.
-
-Refactored introspect.py to improve testability.
-
-Improved call tips for unbound methods by leaving the "self"
-parameter, since unbound methods require an instance be passed.
-
-Fixed call tip bug where a tip was displayed when a "(" was typed
-after an object that wasn't callable.
-
-Fixed getAllAttributeNames when str(object) fails.
-
-Added brace highlighting. (Thank you, Kevin Altis.)
-
-Fixed problem displaying unicode objects in PyFilling.
-
-Changed how filling.py checks for expandable objects.  Lists are now
-expandable objects.
-
-Made the key handling more robust when there is an active text
-selection that includes text prior to the last primary prompt.  Thanks
-to Raul Cota for pointing this out.
-
-Fixed wxSTC problem with brace highlighting and non-us keyboards.
-(Thank you for the patch, Jean-Michel Fauth.)
-
-Added busy = wxBusyCursor() to key point in shell and filling.
-
-Added OnCloseWindow handler to ShellFrame and CrustFrame.
-
-Default to SetWrapMode(1) for shell and namespace viewer.
-
-Added shell.wrap() and shell.zoom().
-
-Added Raul Cota autoCompleteKeys hooks.
-
-Cleaned up various little key handling bugs.
-
-Changed input methods to get values from shell, rather than dialog
-boxes. Renamed readIn to readline and readRaw to raw_input.
-
-
-0.7.1 (12/12/2001 to 2/21/2002)
-===============================
-
-Fixed OnChar() issues effecting European keyboards, as reported by
-Jean-Michel Fauth.
-
-Fixed introspect.py issue with xmlrpc objects reported by Kevin Altis.
-
-Fixed some introspect/PyFilling issues with regard to Python 2.2.
-
-Fixed font background color as reported by Keith J. Farmer. (Thanks)
-
-Fixed problem with call tips and autocompletion inside multiline
-commands as report by Kevin Altis.
-
-Improved OnKeyDown handling of cut/copy/paste operations based on
-feedback from Syver Enstad. (Thanks)
-
-Added a shell.help() method to display some help info.
-
-Changed sort of items in the namespace viewer to case insensitive.
-
-Changed attributes.sort(lambda x, y: cmp(x.upper(), y.upper())) in
-advance of an upcoming fix to an autocompletion matching bug in wxSTC.
-
-Improved support for ZODB by allowing namespace drilldown into BTrees.
-
-Added shell.PasteAndRun() to support pasting multiple commands into
-the shell from the clipboard. Ctrl+Shift+V or v.
-
-Enter now always processes a command (or copies down a previous one.)
-To insert a line break, press Ctrl+Enter.
-
-Escape key clears the current, unexecuted command.
-
-History retrieval changed to replace current command. Added new keys
-to insert from history - Shift+Up and Shift+Down.
-
-Better call tips on objects with __call__ methods.
-
-Improved call tip positioning calculation.
-
-
-0.7 (10/15/2001 to 12/11/2001)
-==============================
-
-Changed how command history retrieval functions work.  Added Alt-P,
-Alt-N as keybindings for Retrieve-Previous, Retrieve-Next.
-
-Added full support for mult-line commands, similar to IDLE.
-
-Changed introspect.getAttributeNames() to do a case insensitive sort.
-
-Changed Cut/Copy/Paste to deal with prompts intelligently. Cut and
-Copy remove all prompts. Paste can handle prompted or not-prompted
-text.
-
-Added CopyWithPrompts() method attached to Ctrl-Shift-C for those
-times when you really do want all the prompts left intact.
-
-Improved handling of the shell's read-only zone.
-
-Changed CrustFrame.__init__ parameter spec to include all parameters
-allowed by a wxFrame.
-
-Changed FillingText to be read-only.
-
-Renamed PyCrust.py to PyCrustApp.py to eliminate package/module name
-conflicts that kept you from doing "from PyCrust import shell" inside
-files located in the PyCrust directory.
-
-Renamed PyFilling.py to PyFillingApp.py and PyShell.py to
-PyShellApp.py to maintain consistency.
-
-Removed the __date__ property from all modules.
-
-Fixed bug in introspect.getCallTip(), reported by Kevin Altis.
-
-
-0.6.1 (9/19/2001 to 10/12/2001)
-===============================
-
-Changed Shell.run() to always position to the end of existing text, as
-suggested by Raul Cota.
-
-Changed introspect.getAllAttributeNames() to break circular references
-in object.__class__, which occurs in Zope/ZODB extension classes.
-
-Changed filling.FillingTree.getChildren() to introspect extension
-classes.
-
-Fixed minor bugs in introspect.getCallTip() that were interfering with
-call tips for Zope/ZODB extension class methods.
-
-In preparation for wxPython 2.3.2, added code to fix a font sizing
-problem.  Versions of wxPython prior to 2.3.2 had a sizing bug on Win
-platform where the font was 2 points larger than what was specified.
-
-Added a hack to introspect.getAllAttributeNames() to "wake up" ZODB
-objects that are asleep - in a "ghost" state. Otherwise it returns
-incomplete info.
-
-
-0.6 (8/21/2001 to 9/12/2001)
-============================
-
-Added PyFilling.py and filling.py.
-
-PyShell.py and PyFilling.py can now be run standalone, as well as
-PyCrust.py.
-
-Added crust.py and moved some code from PyCrust.py to it.
-
-Added command history retrieval features submitted by Richie Hindle.
-
-Changed shell.write() to replace line endings with OS-specific
-endings.  Changed shell.py and interpreter.py to use os.linesep in
-strings having hardcoded line endings.
-
-Added shell.redirectStdin(), shell.redirectStdout() and
-shell.redirectStderr() to allow the surrounding app to toggle requests
-that the specified sys.std* be redirected to the shell. These can also
-be run from within the shell itself, of course.
-
-The shell now adds the current working directory "." to the search
-path:
-
-    sys.path.insert(0, os.curdir)
-
-Added support for distutils installations.
-
-
-0.5.4 (8/17/2001 to 8/20/2001)
-==============================
-
-Changed default font size under *nix to:
-
-    'size'   : 12,
-    'lnsize' : 10,
-
-Changed Shell to expect a parameter referencing an Interpreter class,
-rather than an intepreter instance, to facilitate subclassing of
-Interpreter, which effectively broke when the Editor class was
-eliminated.
-
-Fixed PyCrustAlaCarte.py, which had been broken by previous changes.
-
-Created InterpreterAlaCarte class as an example for use in the demo.
-
-Split PyCrust.py into PyCrust.py and PyShell.py in anticipation of
-PyFilling.
-
-
-0.5.3 (8/16/2001)
-=================
-
-Added patch to PyCrust.py to fix wxPython bug:
-
-    wxID_SELECTALL = NewId() # This *should* be defined by wxPython.
-
-
-0.5.2 (8/14/2001 to 8/15/2001)
-==============================
-
-Shortened module names by dropping "PyCrust" as a prefix.
-
-Changed version to VERSION in version module.
-
-Added Options menu to PyCrust application.
-
-Eliminated the Editor class (and editor module) by merging with Shell.
-This means that Shell "is a" wxStyledTextCtrl rather than "has a".
-There just wasn't enough non-gui code to justify the separation. Plus,
-Shell will be much easier for gui toolkits/designers to deal with now.
-
-
-0.5.1 (8/10/2001 to 8/14/2001)
-==============================
-
-Added introspect module.
-
-Moved some functionality from PyCrustInterp to introspect.
-
-Changed introspect.getRoot() to no longer remove whitespace from the
-command.  This was a remnant of a previous approach that, when left as
-part of the current approach, turned out to be a really bad thing.
-
-Changed introspect.getRoot() to allow commands of '', "", """""", [],
-(), and {} to pass through. This allows you to type them, followed by
-a dot, and get autocomplete options on them.
-
-Changed introspect.getRoot() to identify some situations where strings
-shouldn't be considered roots. For example:
-
-    >>> import PyCrust  # To illustrate the potential problem.
-    >>> len('PyCrust.py')
-
-Typing the dot at the end of "PyCrust" in the second line above should
-NOT result in an autocompletion list because "PyCrust" is part of a
-string in this context, not a reference to the PyCrust module
-object. Similar reasoning applies to call tips. For example:
-
-    >>> len('dir(')
-
-Typing the left paren at the end of "dir" should NOT result in a call
-tip.
-
-Both features now behave properly in the examples given. However,
-there is still the case where whitespace precedes the potential root
-and that is NOT handled properly. For example:
-
-    >>> len('this is a dir(')
-
-and
-
-    >>> len('This is PyCrust.py')
-
-More code needs to be written to handle more complex situations.
-
-Added locals=None parameter to Shell.__init__().
-
-Added support for magic attribute retrieval. Users can change this
-with:
-
-    >>> shell.editor.autoCompleteIncludeMagic = 0
-
-Added the ability to set filters on auto completion to exclude
-attributes prefixed with a single or double underscore. Users can
-exclude one or the other or both with:
-
-    >>> shell.editor.autoCompleteExcludeSingle = 1
-    >>> shell.editor.autoCompleteExcludeDouble = 1
-
-
-0.5 (8/8/2001)
-==============
-
-Mostly just a final version change before creating a release.
-
-
-0.4 (8/4/2001 to 8/7/2001)
-==========================
-
-Changed version/revision handling.
-
-Fixed bugs.
-
-
-0.3 (8/2/2001 to 8/3/2001)
-==========================
-
-Removed lots of cruft.
-
-Added lots of docstrings.
-
-Imported to CVS repository at SourceForge.
-
-Added call tips.
-
-
-0.2 (7/30/2001 to 8/2/2001)
-===========================
-
-Renamed several files.
-
-Added command autocompletion.
-
-Added menus to PyCrust.py: File, Edit and Help
-
-Added sample applications: PyCrustAlaCarte.py, PyCrustAlaMode.py, and
-PyCrustMinimus.py.
-
-
-0.1 (7/1/2001 to 7/19/2001)
-===========================
-
-Added basic syntax coloring much like Boa.
-
-Added read-only logging much like IDLE.
-
-Can retrieve a previous command by putting the cursor back on that
-line and hitting enter.
-
-Stdin and raw_input operate properly so you can now do help() and
-license() without hanging.
-
-Redefined "quit", "exit", and "close" to display a better-than-nothing
-response.
-
-Home key honors the prompt.
-
-Created SourceForge account, but nothing was posted.
-
-
-In the beginning, there was pie... (7/1/2001)
-=============================================
-
-Blame it all on IDLE, Boa and PythonWin. I was using all three, got
-frustrated with their dissimilarities, and began to let everyone know
-how I felt. At the same time, Scintilla looked like an interesting
-tool to build a shell around.  And while I didn't receive much in the
-way of positive feedback, let alone encouragement, I just couldn't let
-go of the idea of a Scintilla-based Python shell. Then the PythonCard
-project got to the point where they were talking about including a
-shell in their development environment. That was all the incentive I
-needed. PyCrust had to happen...
-
-
-CVS Information
-===============
-$Date$
-$Revision$
-$Id$
diff --git a/wxPython/wxPython/lib/PyCrust/PyCrustApp.py b/wxPython/wxPython/lib/PyCrust/PyCrustApp.py
index 036e368002..a661288346 100755
--- a/wxPython/wxPython/lib/PyCrust/PyCrustApp.py
+++ b/wxPython/wxPython/lib/PyCrust/PyCrustApp.py
@@ -1,70 +1,6 @@
 
-"""PyCrustApp is a python shell and namespace browser application."""
+from wxPython.py.PyCrust import *
 
-# The next two lines, and the other code below that makes use of
-# ``__main__`` and ``original``, serve the purpose of cleaning up the
-# main namespace to look as much as possible like the regular Python
-# shell environment.
-import __main__
-original = __main__.__dict__.keys()
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-from wxPython import wx
-
-try:
-    True
-except NameError:
-    True = 1==1
-    False = 1==0
-
-
-class App(wx.wxApp):
-    """PyCrust standalone application."""
-
-    def OnInit(self):
-        from wxPython import wx
-        wx.wxInitAllImageHandlers()
-        locals = __main__.__dict__
-        from crust import CrustFrame
-        self.frame = CrustFrame(locals=locals)
-        self.frame.SetSize((800, 600))
-        self.frame.Show()
-        self.SetTopWindow(self.frame)
-        # Add the application object to the sys module's namespace.
-        # This allows a shell user to do:
-        # >>> import sys
-        # >>> sys.app.whatever
-        import sys
-        sys.app = self
-        return 1
-
-'''
-The main() function needs to handle being imported, such as with the
-pycrust script that wxPython installs:
-
-    #!/usr/bin/env python
-
-    from wxPython.lib.PyCrust.PyCrustApp import main
-    main()
-'''
-
-def main():
-    import __main__
-    md = __main__.__dict__
-    keepers = original
-    keepers.append('App')
-    for key in md.keys():
-        if key not in keepers:
-            del md[key]
-    app = App(0)
-    if md.has_key('App') and md['App'] is App:
-        del md['App']
-    if md.has_key('__main__') and md['__main__'] is __main__:
-        del md['__main__']
-    app.MainLoop()
 
 if __name__ == '__main__':
     main()
diff --git a/wxPython/wxPython/lib/PyCrust/PyFillingApp.py b/wxPython/wxPython/lib/PyCrust/PyFillingApp.py
index b204210a80..0d8b321982 100755
--- a/wxPython/wxPython/lib/PyCrust/PyFillingApp.py
+++ b/wxPython/wxPython/lib/PyCrust/PyFillingApp.py
@@ -1,44 +1,5 @@
 
-"""PyFillingApp is a python namespace inspection application."""
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-# We use this object to get more introspection when run standalone.
-app = None
-
-import filling
-
-# These are imported just to have something interesting to inspect.
-import crust
-import interpreter
-import introspect
-import pseudo
-import shell
-
-import sys
-from wxPython import wx
-
-try:
-    True
-except NameError:
-    True = 1==1
-    False = 1==0
-
-
-class App(filling.App):
-    def OnInit(self):
-        filling.App.OnInit(self)
-        self.root = self.fillingFrame.filling.tree.root
-        return True
-
-def main():
-    """Create and run the application."""
-    global app
-    app = App(0)
-    app.fillingFrame.filling.tree.Expand(app.root)
-    app.MainLoop()
+from wxPython.py.PyFilling import *
 
 
 if __name__ == '__main__':
diff --git a/wxPython/wxPython/lib/PyCrust/PyShellApp.py b/wxPython/wxPython/lib/PyCrust/PyShellApp.py
index 2ef7aae07f..674a451528 100755
--- a/wxPython/wxPython/lib/PyCrust/PyShellApp.py
+++ b/wxPython/wxPython/lib/PyCrust/PyShellApp.py
@@ -1,71 +1,6 @@
 
-"""PyShellApp is a python shell application."""
+from wxPython.py.PyShell import *
 
-# The next two lines, and the other code below that makes use of
-# ``__main__`` and ``original``, serve the purpose of cleaning up the
-# main namespace to look as much as possible like the regular Python
-# shell environment.
-import __main__
-original = __main__.__dict__.keys()
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-from wxPython import wx
-
-try:
-    True
-except NameError:
-    True = 1==1
-    False = 1==0
-
-
-class App(wx.wxApp):
-    """PyShell standalone application."""
-
-    def OnInit(self):
-        from wxPython import wx
-        wx.wxInitAllImageHandlers()
-        locals = __main__.__dict__
-        from shell import ShellFrame
-        self.frame = ShellFrame(locals=locals)
-        self.frame.SetSize((750, 525))
-        self.frame.Show()
-        self.SetTopWindow(self.frame)
-        self.frame.shell.SetFocus()
-        # Add the application object to the sys module's namespace.
-        # This allows a shell user to do:
-        # >>> import sys
-        # >>> sys.app.whatever
-        import sys
-        sys.app = self
-        return 1
-
-'''
-The main() function needs to handle being imported, such as with the
-pycrust script that wxPython installs:
-
-    #!/usr/bin/env python
-
-    from wxPython.lib.PyCrust.PyCrustApp import main
-    main()
-'''
-
-def main():
-    import __main__
-    md = __main__.__dict__
-    keepers = original
-    keepers.append('App')
-    for key in md.keys():
-        if key not in keepers:
-            del md[key]
-    app = App(0)
-    if md.has_key('App') and md['App'] is App:
-        del md['App']
-    if md.has_key('__main__') and md['__main__'] is __main__:
-        del md['__main__']
-    app.MainLoop()
 
 if __name__ == '__main__':
     main()
diff --git a/wxPython/wxPython/lib/PyCrust/__init__.py b/wxPython/wxPython/lib/PyCrust/__init__.py
index db6003cf3b..cf7736acd1 100644
--- a/wxPython/wxPython/lib/PyCrust/__init__.py
+++ b/wxPython/wxPython/lib/PyCrust/__init__.py
@@ -1 +1,5 @@
-# Orbtech python package.
\ No newline at end of file
+
+# Change this to an ImportError after the next release
+import warnings
+warnings.warn("PyCrust has been renamed to Py.  Use 'from wx import py'", stacklevel=2)
+
diff --git a/wxPython/wxPython/lib/PyCrust/crust.py b/wxPython/wxPython/lib/PyCrust/crust.py
index caeb20f6db..fc1360461d 100644
--- a/wxPython/wxPython/lib/PyCrust/crust.py
+++ b/wxPython/wxPython/lib/PyCrust/crust.py
@@ -1,169 +1,2 @@
-"""PyCrust Crust combines the shell and filling into one control."""
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-from wxPython import wx
-from filling import Filling
-import os
-from shell import Shell
-from shellmenu import ShellMenu
-from version import VERSION
-
-try:
-    True
-except NameError:
-    True = 1==1
-    False = 1==0
-
-
-class Crust(wx.wxSplitterWindow):
-    """PyCrust Crust based on wxSplitterWindow."""
-
-    name = 'PyCrust Crust'
-    revision = __revision__
-
-    def __init__(self, parent, id=-1, pos=wx.wxDefaultPosition, 
-                 size=wx.wxDefaultSize, style=wx.wxSP_3D,
-                 name='Crust Window', rootObject=None, rootLabel=None,
-                 rootIsNamespace=True, intro='', locals=None, 
-                 InterpClass=None, *args, **kwds):
-        """Create a PyCrust Crust instance."""
-        wx.wxSplitterWindow.__init__(self, parent, id, pos, size, style, name)
-        self.shell = Shell(parent=self, introText=intro, 
-                           locals=locals, InterpClass=InterpClass, 
-                           *args, **kwds)
-        if rootObject is None:
-            rootObject = self.shell.interp.locals
-        self.notebook = wx.wxNotebook(parent=self, id=-1)
-        self.shell.interp.locals['notebook'] = self.notebook
-        self.filling = Filling(parent=self.notebook, 
-                               rootObject=rootObject, 
-                               rootLabel=rootLabel, 
-                               rootIsNamespace=rootIsNamespace)
-        # Add 'filling' to the interpreter's locals.
-        self.shell.interp.locals['filling'] = self.filling
-        self.notebook.AddPage(page=self.filling, text='Namespace', select=True)
-        self.calltip = Calltip(parent=self.notebook)
-        self.notebook.AddPage(page=self.calltip, text='Calltip')
-        self.sessionlisting = SessionListing(parent=self.notebook)
-        self.notebook.AddPage(page=self.sessionlisting, text='Session')
-        self.dispatcherlisting = DispatcherListing(parent=self.notebook)
-        self.notebook.AddPage(page=self.dispatcherlisting, text='Dispatcher')
-        from wxd import wx_
-        self.wxdocs = Filling(parent=self.notebook, 
-                              rootObject=wx_,
-                              rootLabel='wx', 
-                              rootIsNamespace=False,
-                              static=True)
-        self.notebook.AddPage(page=self.wxdocs, text='wxPython Docs')
-        from wxd import stc_
-        self.stcdocs = Filling(parent=self.notebook, 
-                               rootObject=stc_.StyledTextCtrl,
-                               rootLabel='StyledTextCtrl', 
-                               rootIsNamespace=False,
-                               static=True)
-        self.notebook.AddPage(page=self.stcdocs, text='StyledTextCtrl Docs')
-        self.SplitHorizontally(self.shell, self.notebook, 300)
-        self.SetMinimumPaneSize(1)
-
-
-class Calltip(wx.wxTextCtrl):
-    """Text control containing the most recent shell calltip."""
-
-    def __init__(self, parent=None, id=-1):
-        import dispatcher
-        style = wx.wxTE_MULTILINE | wx.wxTE_READONLY | wx.wxTE_RICH2
-        wx.wxTextCtrl.__init__(self, parent=parent, id=id, style=style)
-        self.SetBackgroundColour(wx.wxColour(255, 255, 232))
-        dispatcher.connect(receiver=self.display, signal='Shell.calltip')
-
-    def display(self, calltip):
-        """Receiver for Shell.calltip signal."""
-        self.SetValue(calltip)
-
-
-class SessionListing(wx.wxTextCtrl):
-    """Text control containing all commands for session."""
-
-    def __init__(self, parent=None, id=-1):
-        import dispatcher
-        style = wx.wxTE_MULTILINE | wx.wxTE_READONLY | \
-                wx.wxTE_RICH2 | wx.wxTE_DONTWRAP
-        wx.wxTextCtrl.__init__(self, parent=parent, id=id, style=style)
-        dispatcher.connect(receiver=self.push, signal='Interpreter.push')
-
-    def push(self, command, more):
-        """Receiver for Interpreter.push signal."""
-        if command and not more:
-            self.SetInsertionPointEnd()
-            start, end = self.GetSelection()
-            if start != end:
-                self.SetSelection(0, 0)
-            self.AppendText(command + '\n')
-
-
-class DispatcherListing(wx.wxTextCtrl):
-    """Text control containing all dispatches for session."""
-
-    def __init__(self, parent=None, id=-1):
-        import dispatcher
-        style = wx.wxTE_MULTILINE | wx.wxTE_READONLY | \
-                wx.wxTE_RICH2 | wx.wxTE_DONTWRAP
-        wx.wxTextCtrl.__init__(self, parent=parent, id=id, style=style)
-        dispatcher.connect(receiver=self.spy)
-
-    def spy(self, signal, sender):
-        """Receiver for Any signal from Any sender."""
-        text = '%r from %s' % (signal, sender)
-        self.SetInsertionPointEnd()
-        start, end = self.GetSelection()
-        if start != end:
-            self.SetSelection(0, 0)
-        self.AppendText(text + '\n')
-
-
-class CrustFrame(wx.wxFrame, ShellMenu):
-    """Frame containing all the PyCrust components."""
-
-    name = 'PyCrust Frame'
-    revision = __revision__
-
-    def __init__(self, parent=None, id=-1, title='PyCrust', 
-                 pos=wx.wxDefaultPosition, size=wx.wxDefaultSize, 
-                 style=wx.wxDEFAULT_FRAME_STYLE, 
-                 rootObject=None, rootLabel=None, rootIsNamespace=True, 
-                 locals=None, InterpClass=None, *args, **kwds):
-        """Create a PyCrust CrustFrame instance."""
-        wx.wxFrame.__init__(self, parent, id, title, pos, size, style)
-        intro = 'PyCrust %s - The Flakiest Python Shell' % VERSION
-        intro += '\nSponsored by Orbtech - '
-        intro += 'Your source for Python programming expertise.'
-        self.CreateStatusBar()
-        self.SetStatusText(intro.replace('\n', ', '))
-        import images
-        self.SetIcon(images.getPyCrustIcon())
-        self.crust = Crust(parent=self, intro=intro, 
-                           rootObject=rootObject, 
-                           rootLabel=rootLabel, 
-                           rootIsNamespace=rootIsNamespace, 
-                           locals=locals, 
-                           InterpClass=InterpClass, *args, **kwds)
-        # Override the filling so that status messages go to the status bar.
-        self.crust.filling.tree.setStatusText = self.SetStatusText
-        # Override the shell so that status messages go to the status bar.
-        self.crust.shell.setStatusText = self.SetStatusText
-        # Fix a problem with the sash shrinking to nothing.
-        self.crust.filling.SetSashPosition(200)
-        self.shell = self.crust.shell
-        self.createMenus()
-        wx.EVT_CLOSE(self, self.OnCloseWindow)
-        # Set focus to the shell editor.
-        self.crust.shell.SetFocus()
-
-    def OnCloseWindow(self, event):
-        self.crust.shell.destroy()
-        self.Destroy()
-
 
+from wxPython.py.crust import *
diff --git a/wxPython/wxPython/lib/PyCrust/filling.py b/wxPython/wxPython/lib/PyCrust/filling.py
index 9a846b4def..a8fa098f3b 100644
--- a/wxPython/wxPython/lib/PyCrust/filling.py
+++ b/wxPython/wxPython/lib/PyCrust/filling.py
@@ -1,436 +1,3 @@
-"""PyCrust Filling is the gui tree control through which a user can
-navigate the local namespace or any object."""
 
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
+from wxPython.py.filling import *
 
-from wxPython import wx
-from wxPython import stc
-from version import VERSION
-import dispatcher
-import inspect
-import introspect
-import keyword
-import sys
-import types
-
-try:
-    True
-except NameError:
-    True = 1==1
-    False = 1==0
-
-COMMONTYPES = [getattr(types, t) for t in dir(types) \
-               if not t.startswith('_') \
-               and t not in ('ClassType', 'InstanceType', 'ModuleType')]
-
-DOCTYPES = ('BuiltinFunctionType', 'BuiltinMethodType', 'ClassType',
-            'FunctionType', 'GeneratorType', 'InstanceType',
-            'LambdaType', 'MethodType', 'ModuleType',
-            'UnboundMethodType', 'method-wrapper')
-
-SIMPLETYPES = [getattr(types, t) for t in dir(types) \
-               if not t.startswith('_') and t not in DOCTYPES]
-
-try:
-    COMMONTYPES.append(type(''.__repr__))  # Method-wrapper in version 2.2.x.
-except AttributeError:
-    pass
-
-
-class FillingTree(wx.wxTreeCtrl):
-    """PyCrust FillingTree based on wxTreeCtrl."""
-    
-    name = 'PyCrust Filling Tree'
-    revision = __revision__
-
-    def __init__(self, parent, id=-1, pos=wx.wxDefaultPosition, 
-                 size=wx.wxDefaultSize, style=wx.wxTR_DEFAULT_STYLE, 
-                 rootObject=None, rootLabel=None, rootIsNamespace=0,
-                 static=False):
-        """Create a PyCrust FillingTree instance."""
-        wx.wxTreeCtrl.__init__(self, parent, id, pos, size, style)
-        self.rootIsNamespace = rootIsNamespace
-        import __main__
-        if rootObject is None:
-            rootObject = __main__.__dict__
-            self.rootIsNamespace = 1
-        if rootObject is __main__.__dict__ and rootLabel is None:
-            rootLabel = 'locals()'
-        if not rootLabel:
-            rootLabel = 'Ingredients'
-        rootData = wx.wxTreeItemData(rootObject)
-        self.item = self.root = self.AddRoot(rootLabel, -1, -1, rootData)
-        self.SetItemHasChildren(self.root, self.hasChildren(rootObject))
-        wx.EVT_TREE_ITEM_EXPANDING(self, self.GetId(), self.OnItemExpanding)
-        wx.EVT_TREE_ITEM_COLLAPSED(self, self.GetId(), self.OnItemCollapsed)
-        wx.EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged)
-        wx.EVT_TREE_ITEM_ACTIVATED(self, self.GetId(), self.OnItemActivated)
-        if not static:
-            dispatcher.connect(receiver=self.push, signal='Interpreter.push')
-
-    def push(self, command, more):
-        """Receiver for Interpreter.push signal."""
-        self.display()
-
-    def OnItemExpanding(self, event):
-        """Add children to the item."""
-        busy = wx.wxBusyCursor()
-        item = event.GetItem()
-        if self.IsExpanded(item):
-            return
-        self.addChildren(item)
-#        self.SelectItem(item)
-
-    def OnItemCollapsed(self, event):
-        """Remove all children from the item."""
-        busy = wx.wxBusyCursor()
-        item = event.GetItem()
-#        self.CollapseAndReset(item)
-#        self.DeleteChildren(item)
-#        self.SelectItem(item)
-
-    def OnSelChanged(self, event):
-        """Display information about the item."""
-        busy = wx.wxBusyCursor()
-        self.item = event.GetItem()
-        self.display()
-
-    def OnItemActivated(self, event):
-        """Launch a DirFrame."""
-        item = event.GetItem()
-        text = self.getFullName(item)
-        obj = self.GetPyData(item)
-        frame = FillingFrame(parent=self, size=(600, 100), rootObject=obj,
-                             rootLabel=text, rootIsNamespace=False)
-        frame.Show()
-
-    def hasChildren(self, obj):
-        """Return true if object has children."""
-        if self.getChildren(obj):
-            return True
-        else:
-            return False
-
-    def getChildren(self, obj):
-        """Return dictionary with attributes or contents of object."""
-        busy = wx.wxBusyCursor()
-        otype = type(obj)
-        if otype is types.DictType \
-        or str(otype)[17:23] == 'BTrees' and hasattr(obj, 'keys'):
-            return obj
-        d = {}
-        if otype is types.ListType or otype is types.TupleType:
-            for n in range(len(obj)):
-                key = '[' + str(n) + ']'
-                d[key] = obj[n]
-        if otype not in COMMONTYPES:
-            for key in introspect.getAttributeNames(obj):
-                # Believe it or not, some attributes can disappear,
-                # such as the exc_traceback attribute of the sys
-                # module. So this is nested in a try block.
-                try:
-                    d[key] = getattr(obj, key)
-                except:
-                    pass
-        return d
-
-    def addChildren(self, item):
-        self.DeleteChildren(item)
-        obj = self.GetPyData(item)
-        children = self.getChildren(obj)
-        if not children:
-            return
-        keys = children.keys()
-        keys.sort(lambda x, y: cmp(x.lower(), y.lower()))
-        for key in keys:
-            itemtext = str(key)
-            # Show string dictionary items with single quotes, except
-            # for the first level of items, if they represent a
-            # namespace.
-            if type(obj) is types.DictType \
-            and type(key) is types.StringType \
-            and (item != self.root \
-                 or (item == self.root and not self.rootIsNamespace)):
-                itemtext = repr(key)
-            child = children[key]
-            data = wx.wxTreeItemData(child)
-            branch = self.AppendItem(parent=item, text=itemtext, data=data)
-            self.SetItemHasChildren(branch, self.hasChildren(child))
-
-    def display(self):
-        item = self.item
-        if self.IsExpanded(item):
-            self.addChildren(item)
-        self.setText('')
-        obj = self.GetPyData(item)
-        if obj is None: # Windows bug fix.
-            return
-        self.SetItemHasChildren(item, self.hasChildren(obj))
-        otype = type(obj)
-        text = ''
-        text += self.getFullName(item)
-        text += '\n\nType: ' + str(otype)
-        try:
-            value = str(obj)
-        except:
-            value = ''
-        if otype is types.StringType or otype is types.UnicodeType:
-            value = repr(obj)
-        text += '\n\nValue: ' + value
-        if otype not in SIMPLETYPES:
-            try:
-                text += '\n\nDocstring:\n\n"""' + \
-                        inspect.getdoc(obj).strip() + '"""'
-            except:
-                pass
-        if otype is types.InstanceType:
-            try:
-                text += '\n\nClass Definition:\n\n' + \
-                        inspect.getsource(obj.__class__)
-            except:
-                pass
-        else:
-            try:
-                text += '\n\nSource Code:\n\n' + \
-                        inspect.getsource(obj)
-            except:
-                pass
-        self.setText(text)
-
-    def getFullName(self, item, partial=''):
-        """Return a syntactically proper name for item."""
-        name = self.GetItemText(item)
-        parent = None
-        obj = None
-        if item != self.root:
-            parent = self.GetItemParent(item)
-            obj = self.GetPyData(parent)
-        # Apply dictionary syntax to dictionary items, except the root
-        # and first level children of a namepace.
-        if (type(obj) is types.DictType \
-            or str(type(obj))[17:23] == 'BTrees' \
-            and hasattr(obj, 'keys')) \
-        and ((item != self.root and parent != self.root) \
-            or (parent == self.root and not self.rootIsNamespace)):
-            name = '[' + name + ']'
-        # Apply dot syntax to multipart names.
-        if partial:
-            if partial[0] == '[':
-                name += partial
-            else:
-                name += '.' + partial
-        # Repeat for everything but the root item
-        # and first level children of a namespace.
-        if (item != self.root and parent != self.root) \
-        or (parent == self.root and not self.rootIsNamespace):
-            name = self.getFullName(parent, partial=name)
-        return name
-
-    def setText(self, text):
-        """Display information about the current selection."""
-
-        # This method will likely be replaced by the enclosing app to
-        # do something more interesting, like write to a text control.
-        print text
-
-    def setStatusText(self, text):
-        """Display status information."""
-        
-        # This method will likely be replaced by the enclosing app to
-        # do something more interesting, like write to a status bar.
-        print text
-
-
-if wx.wxPlatform == '__WXMSW__':
-    faces = { 'times'  : 'Times New Roman',
-              'mono'   : 'Courier New',
-              'helv'   : 'Lucida Console',
-              'lucida' : 'Lucida Console',
-              'other'  : 'Comic Sans MS',
-              'size'   : 10,
-              'lnsize' : 9,
-              'backcol': '#FFFFFF',
-            }
-else:  # GTK
-    faces = { 'times'  : 'Times',
-              'mono'   : 'Courier',
-              'helv'   : 'Helvetica',
-              'other'  : 'new century schoolbook',
-              'size'   : 12,
-              'lnsize' : 10,
-              'backcol': '#FFFFFF',
-            }
-
-
-class FillingText(stc.wxStyledTextCtrl):
-    """PyCrust FillingText based on wxStyledTextCtrl."""
-    
-    name = 'PyCrust Filling Text'
-    revision = __revision__
-
-    def __init__(self, parent, id=-1, pos=wx.wxDefaultPosition, 
-                 size=wx.wxDefaultSize, style=wx.wxCLIP_CHILDREN,
-                 static=False):
-        """Create a PyCrust FillingText instance."""
-        stc.wxStyledTextCtrl.__init__(self, parent, id, pos, size, style)
-        # Configure various defaults and user preferences.
-        self.config()
-        dispatcher.connect(receiver=self.fontsizer, signal='FontIncrease')
-        dispatcher.connect(receiver=self.fontsizer, signal='FontDecrease')
-        dispatcher.connect(receiver=self.fontsizer, signal='FontDefault')
-        if not static:
-            dispatcher.connect(receiver=self.push, signal='Interpreter.push')
-
-    def push(self, command, more):
-        """Receiver for Interpreter.push signal."""
-        self.Refresh()
-
-    def fontsizer(self, signal):
-        """Receiver for Font* signals."""
-        size = self.GetZoom()
-        if signal == 'FontIncrease':
-            size += 1
-        elif signal == 'FontDecrease':
-            size -= 1
-        elif signal == 'FontDefault':
-            size = 0
-        self.SetZoom(size)
-
-    def config(self):
-        """Configure shell based on user preferences."""
-        self.SetMarginWidth(1, 0)
-        
-        self.SetLexer(stc.wxSTC_LEX_PYTHON)
-        self.SetKeyWords(0, ' '.join(keyword.kwlist))
-
-        self.setStyles(faces)
-        self.SetViewWhiteSpace(0)
-        self.SetTabWidth(4)
-        self.SetUseTabs(0)
-        self.SetReadOnly(1)
-        try:
-            self.SetWrapMode(1)
-        except AttributeError:
-            pass
-
-    def setStyles(self, faces):
-        """Configure font size, typeface and color for lexer."""
-        
-        # Default style
-        self.StyleSetSpec(stc.wxSTC_STYLE_DEFAULT,
-                          "face:%(mono)s,size:%(size)d" % faces)
-
-        self.StyleClearAll()
-
-        # Built in styles
-        self.StyleSetSpec(stc.wxSTC_STYLE_LINENUMBER,
-                          "back:#C0C0C0,face:%(mono)s,size:%(lnsize)d" % faces)
-        self.StyleSetSpec(stc.wxSTC_STYLE_CONTROLCHAR,
-                          "face:%(mono)s" % faces)
-        self.StyleSetSpec(stc.wxSTC_STYLE_BRACELIGHT,
-                          "fore:#0000FF,back:#FFFF88")
-        self.StyleSetSpec(stc.wxSTC_STYLE_BRACEBAD,
-                          "fore:#FF0000,back:#FFFF88")
-
-        # Python styles
-        self.StyleSetSpec(stc.wxSTC_P_DEFAULT,
-                          "face:%(mono)s" % faces)
-        self.StyleSetSpec(stc.wxSTC_P_COMMENTLINE,
-                          "fore:#007F00,face:%(mono)s" % faces)
-        self.StyleSetSpec(stc.wxSTC_P_NUMBER,
-                          "")
-        self.StyleSetSpec(stc.wxSTC_P_STRING,
-                          "fore:#7F007F,face:%(mono)s" % faces)
-        self.StyleSetSpec(stc.wxSTC_P_CHARACTER,
-                          "fore:#7F007F,face:%(mono)s" % faces)
-        self.StyleSetSpec(stc.wxSTC_P_WORD,
-                          "fore:#00007F,bold")
-        self.StyleSetSpec(stc.wxSTC_P_TRIPLE,
-                          "fore:#7F0000")
-        self.StyleSetSpec(stc.wxSTC_P_TRIPLEDOUBLE,
-                          "fore:#000033,back:#FFFFE8")
-        self.StyleSetSpec(stc.wxSTC_P_CLASSNAME,
-                          "fore:#0000FF,bold")
-        self.StyleSetSpec(stc.wxSTC_P_DEFNAME,
-                          "fore:#007F7F,bold")
-        self.StyleSetSpec(stc.wxSTC_P_OPERATOR,
-                          "")
-        self.StyleSetSpec(stc.wxSTC_P_IDENTIFIER,
-                          "")
-        self.StyleSetSpec(stc.wxSTC_P_COMMENTBLOCK,
-                          "fore:#7F7F7F")
-        self.StyleSetSpec(stc.wxSTC_P_STRINGEOL,
-                          "fore:#000000,face:%(mono)s,back:#E0C0E0,eolfilled" % faces)
-
-    def SetText(self, *args, **kwds):
-        self.SetReadOnly(0)
-        stc.wxStyledTextCtrl.SetText(self, *args, **kwds)
-        self.SetReadOnly(1)
-
-
-class Filling(wx.wxSplitterWindow):
-    """PyCrust Filling based on wxSplitterWindow."""
-    
-    name = 'PyCrust Filling'
-    revision = __revision__
-    
-    def __init__(self, parent, id=-1, pos=wx.wxDefaultPosition, 
-                 size=wx.wxDefaultSize, style=wx.wxSP_3D,
-                 name='Filling Window', rootObject=None,
-                 rootLabel=None, rootIsNamespace=0, static=False):
-        """Create a PyCrust Filling instance."""
-        wx.wxSplitterWindow.__init__(self, parent, id, pos, size, style, name)
-        self.tree = FillingTree(parent=self, rootObject=rootObject, 
-                                rootLabel=rootLabel,
-                                rootIsNamespace=rootIsNamespace,
-                                static=static)
-        self.text = FillingText(parent=self, static=static)
-        self.SplitVertically(self.tree, self.text, 200)
-        self.SetMinimumPaneSize(1)
-        # Override the filling so that descriptions go to FillingText.
-        self.tree.setText = self.text.SetText
-        # Display the root item.
-##        self.tree.SelectItem(self.tree.root)
-        self.tree.display()
-
-
-class FillingFrame(wx.wxFrame):
-    """Frame containing the PyCrust filling, or namespace tree component."""
-    
-    name = 'PyCrust Filling Frame'
-    revision = __revision__
-    
-    def __init__(self, parent=None, id=-1, title='PyFilling', 
-                 pos=wx.wxDefaultPosition, size=wx.wxDefaultSize, 
-                 style=wx.wxDEFAULT_FRAME_STYLE, rootObject=None, 
-                 rootLabel=None, rootIsNamespace=0, static=False):
-        """Create a PyCrust FillingFrame instance."""
-        wx.wxFrame.__init__(self, parent, id, title, pos, size, style)
-        intro = 'PyFilling - The Tastiest Namespace Inspector'
-        self.CreateStatusBar()
-        self.SetStatusText(intro)
-        import images
-        self.SetIcon(images.getPyCrustIcon())
-        self.filling = Filling(parent=self, rootObject=rootObject, 
-                               rootLabel=rootLabel, 
-                               rootIsNamespace=rootIsNamespace,
-                               static=static)
-        # Override so that status messages go to the status bar.
-        self.filling.tree.setStatusText = self.SetStatusText
-
-
-class App(wx.wxApp):
-    """PyFilling standalone application."""
-    
-    def OnInit(self):
-        wx.wxInitAllImageHandlers()
-        self.fillingFrame = FillingFrame()
-        self.fillingFrame.Show(True)
-        self.SetTopWindow(self.fillingFrame)
-        return True
-
-
-  
-   
diff --git a/wxPython/wxPython/lib/PyCrust/shell.py b/wxPython/wxPython/lib/PyCrust/shell.py
index f522356f09..2640aac7ec 100644
--- a/wxPython/wxPython/lib/PyCrust/shell.py
+++ b/wxPython/wxPython/lib/PyCrust/shell.py
@@ -1,1187 +1,3 @@
-"""The PyCrust Shell is an interactive text control in which a user
-types in commands to be sent to the interpreter. This particular shell
-is based on wxPython's wxStyledTextCtrl. The latest files are always
-available at the SourceForge project page at
-http://sourceforge.net/projects/pycrust/.
 
-Sponsored by Orbtech - Your source for Python programming expertise."""
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-import keyword
-import os
-import sys
-import time
-from pseudo import PseudoFileIn
-from pseudo import PseudoFileOut
-from pseudo import PseudoFileErr
-from shellmenu import ShellMenu
-from version import VERSION
-import dispatcher
-
-try:
-    import wxd.d_wx
-except ImportError:
-    from wxPython import wx
-else:
-    from wxd.d_wx import wx
-
-try:
-    import wxd.d_stc
-except ImportError:
-    from wxPython import stc
-else:
-    from wxd.d_stc import stc
-
-try:
-    True
-except NameError:
-    True = 1==1
-    False = 1==0
-
-sys.ps3 = '<-- '  # Input prompt.
-
-NAVKEYS = (wx.WXK_END, wx.WXK_LEFT, wx.WXK_RIGHT, 
-           wx.WXK_UP, wx.WXK_DOWN, wx.WXK_PRIOR, wx.WXK_NEXT)
-
-if wx.wxPlatform == '__WXMSW__':
-    faces = { 'times'  : 'Times New Roman',
-              'mono'   : 'Courier New',
-              'helv'   : 'Lucida Console',
-              'lucida' : 'Lucida Console',
-              'other'  : 'Comic Sans MS',
-              'size'   : 10,
-              'lnsize' : 9,
-              'backcol': '#FFFFFF',
-            }
-else:  # GTK
-    faces = { 'times'  : 'Times',
-              'mono'   : 'Courier',
-              'helv'   : 'Helvetica',
-              'other'  : 'new century schoolbook',
-              'size'   : 12,
-              'lnsize' : 10,
-              'backcol': '#FFFFFF',
-            }
-
-
-class ShellFrame(wx.wxFrame, ShellMenu):
-    """Frame containing the PyCrust shell component."""
-
-    name = 'PyCrust Shell Frame'
-    revision = __revision__
-
-    def __init__(self, parent=None, id=-1, title='PyShell', 
-                 pos=wx.wxDefaultPosition, size=wx.wxDefaultSize, 
-                 style=wx.wxDEFAULT_FRAME_STYLE, locals=None, 
-                 InterpClass=None, *args, **kwds):
-        """Create a PyCrust ShellFrame instance."""
-        wx.wxFrame.__init__(self, parent, id, title, pos, size, style)
-        intro = 'PyCrust %s - The Flakiest Python Shell' % VERSION
-        intro += '\nSponsored by Orbtech - ' + \
-                 'Your source for Python programming expertise.'
-        self.CreateStatusBar()
-        self.SetStatusText(intro.replace('\n', ', '))
-        import images
-        self.SetIcon(images.getPyCrustIcon())
-        self.shell = Shell(parent=self, id=-1, introText=intro, 
-                           locals=locals, InterpClass=InterpClass, 
-                           *args, **kwds)
-        # Override the shell so that status messages go to the status bar.
-        self.shell.setStatusText = self.SetStatusText
-        self.createMenus()
-        wx.EVT_CLOSE(self, self.OnCloseWindow)
-
-    def OnCloseWindow(self, event):
-        """Event handler for closing."""
-        # This isn't working the way I want, but I'll leave it for now.
-        if self.shell.waiting:
-            event.Veto(True)
-        else:
-            self.shell.destroy()
-            self.Destroy()
-
-
-class ShellFacade:
-    """Simplified interface to all shell-related functionality.
-
-    This is a semi-transparent facade, in that all attributes of other
-    are accessible, even though only some are visible to the user."""
-
-    name = 'PyCrust Shell Interface'
-    revision = __revision__
-
-    def __init__(self, other):
-        """Create a ShellFacade instance."""
-        methods = [
-            'about',
-            'ask',
-            'clear',
-            'pause',
-            'prompt',
-            'quit',
-            'redirectStderr',
-            'redirectStdin',
-            'redirectStdout',
-            'run',
-            'runfile',
-            'wrap',
-            'zoom',
-            ]
-        for method in methods:
-            self.__dict__[method] = getattr(other, method)
-        d = self.__dict__
-        d['other'] = other
-        d['helpText'] = \
-"""
-* Key bindings:
-Home              Go to the beginning of the command or line.
-Shift+Home        Select to the beginning of the command or line.
-Shift+End         Select to the end of the line.
-End               Go to the end of the line.
-Ctrl+C            Copy selected text, removing prompts.
-Ctrl+Shift+C      Copy selected text, retaining prompts.
-Ctrl+X            Cut selected text.
-Ctrl+V            Paste from clipboard.
-Ctrl+Shift+V      Paste and run multiple commands from clipboard.
-Ctrl+Up Arrow     Retrieve Previous History item.
-Alt+P             Retrieve Previous History item.
-Ctrl+Down Arrow   Retrieve Next History item.
-Alt+N             Retrieve Next History item.
-Shift+Up Arrow    Insert Previous History item.
-Shift+Down Arrow  Insert Next History item.
-F8                Command-completion of History item.
-                  (Type a few characters of a previous command and press F8.)
-Ctrl+Enter        Insert new line into multiline command.
-Ctrl+]            Increase font size.
-Ctrl+[            Decrease font size.
-Ctrl+=            Default font size.
-"""
-
-    def help(self):
-        """Display some useful information about how to use the shell."""
-        self.write(self.helpText)
-
-    def __getattr__(self, name):
-        if hasattr(self.other, name):
-            return getattr(self.other, name)
-        else:
-            raise AttributeError, name
-
-    def __setattr__(self, name, value):
-        if self.__dict__.has_key(name):
-            self.__dict__[name] = value
-        elif hasattr(self.other, name):
-            setattr(self.other, name, value)
-        else:
-            raise AttributeError, name
-
-    def _getAttributeNames(self):
-        """Return list of magic attributes to extend introspection."""
-        list = ['autoCallTip',
-                'autoComplete',
-                'autoCompleteCaseInsensitive',
-                'autoCompleteIncludeDouble',
-                'autoCompleteIncludeMagic',
-                'autoCompleteIncludeSingle',
-               ]
-        list.sort()
-        return list
-
-
-class Shell(stc.wxStyledTextCtrl):
-    """PyCrust Shell based on wxStyledTextCtrl."""
-
-    name = 'PyCrust Shell'
-    revision = __revision__
-
-    def __init__(self, parent, id=-1, pos=wx.wxDefaultPosition, 
-                 size=wx.wxDefaultSize, style=wx.wxCLIP_CHILDREN,
-                 introText='', locals=None, InterpClass=None, *args, **kwds):
-        """Create a PyCrust Shell instance."""
-        stc.wxStyledTextCtrl.__init__(self, parent, id, pos, size, style)
-        if locals is None:
-            locals = {}
-        # Grab these so they can be restored by self.redirect* methods.
-        self.stdin = sys.stdin
-        self.stdout = sys.stdout
-        self.stderr = sys.stderr
-        # Add the current working directory "." to the search path.
-        sys.path.insert(0, os.curdir)
-        # Import a default interpreter class if one isn't provided.
-        if InterpClass == None:
-            from interpreter import Interpreter
-        else:
-            Interpreter = InterpClass
-        # Create a replacement for stdin.
-        self.reader = PseudoFileIn(self.readline, self.readlines)
-        self.reader.input = ''
-        self.reader.isreading = 0
-        # Set up the interpreter.
-        self.interp = Interpreter(locals=locals, 
-                                  rawin=self.raw_input, 
-                                  stdin=self.reader, 
-                                  stdout=PseudoFileOut(self.writeOut), 
-                                  stderr=PseudoFileErr(self.writeErr), 
-                                  *args, **kwds)
-        # Find out for which keycodes the interpreter will autocomplete.
-        self.autoCompleteKeys = self.interp.getAutoCompleteKeys()
-        # Keep track of the last non-continuation prompt positions.
-        self.promptPosStart = 0
-        self.promptPosEnd = 0
-        # Keep track of multi-line commands.
-        self.more = 0
-        # Create the command history.  Commands are added into the
-        # front of the list (ie. at index 0) as they are entered.
-        # self.historyIndex is the current position in the history; it
-        # gets incremented as you retrieve the previous command,
-        # decremented as you retrieve the next, and reset when you hit
-        # Enter.  self.historyIndex == -1 means you're on the current
-        # command, not in the history.
-        self.history = []
-        self.historyIndex = -1
-        # Assign handlers for keyboard events.
-        wx.EVT_KEY_DOWN(self, self.OnKeyDown)
-        wx.EVT_CHAR(self, self.OnChar)
-        # Assign handlers for wxSTC events.
-        stc.EVT_STC_UPDATEUI(self, id, self.OnUpdateUI)
-        # Assign handler for idle time.
-        self.waiting = False
-        wx.EVT_IDLE(self, self.OnIdle)
-        dispatcher.connect(receiver=self.fontsizer, signal='FontIncrease')
-        dispatcher.connect(receiver=self.fontsizer, signal='FontDecrease')
-        dispatcher.connect(receiver=self.fontsizer, signal='FontDefault')
-        # Configure various defaults and user preferences.
-        self.config()
-        # Display the introductory banner information.
-        self.showIntro(introText)
-        # Assign some pseudo keywords to the interpreter's namespace.
-        self.setBuiltinKeywords()
-        # Add 'shell' to the interpreter's local namespace.
-        self.setLocalShell()
-        # Do this last so the user has complete control over their
-        # environment.  They can override anything they want.
-        self.execStartupScript(self.interp.startupScript)
-        wx.wxCallAfter(self.ScrollToLine, 0)
-
-    def fontsizer(self, signal):
-        """Receiver for Font* signals."""
-        size = self.GetZoom()
-        if signal == 'FontIncrease':
-            size += 1
-        elif signal == 'FontDecrease':
-            size -= 1
-        elif signal == 'FontDefault':
-            size = 0
-        self.SetZoom(size)
-
-    def destroy(self):
-        del self.interp
-        pass
-
-    def config(self):
-        """Configure shell based on user preferences."""
-        self.SetMarginType(1, stc.wxSTC_MARGIN_NUMBER)
-        self.SetMarginWidth(1, 40)
-
-        self.SetLexer(stc.wxSTC_LEX_PYTHON)
-        self.SetKeyWords(0, ' '.join(keyword.kwlist))
-
-        self.setStyles(faces)
-        self.SetViewWhiteSpace(0)
-        self.SetTabWidth(4)
-        self.SetUseTabs(0)
-        # Do we want to automatically pop up command completion options?
-        self.autoComplete = 1
-        self.autoCompleteIncludeMagic = 1
-        self.autoCompleteIncludeSingle = 1
-        self.autoCompleteIncludeDouble = 1
-        self.autoCompleteCaseInsensitive = 1
-        self.AutoCompSetIgnoreCase(self.autoCompleteCaseInsensitive)
-        self.AutoCompSetAutoHide(False)
-        self.AutoCompStops(' .,;:([)]}\'"\\<>%^&+-=*/|`')
-        # Do we want to automatically pop up command argument help?
-        self.autoCallTip = 1
-        self.CallTipSetBackground(wx.wxColour(255, 255, 232))
-        self.wrap()
-        try:
-            self.SetEndAtLastLine(False)
-        except AttributeError:
-            pass
-
-    def showIntro(self, text=''):
-        """Display introductory text in the shell."""
-        if text:
-            if not text.endswith(os.linesep):
-                text += os.linesep
-            self.write(text)
-        try:
-            self.write(self.interp.introText)
-        except AttributeError:
-            pass
-
-    def setBuiltinKeywords(self):
-        """Create pseudo keywords as part of builtins.
-
-        This sets `close`, `exit` and `quit` to a helpful string.
-        """
-        import __builtin__
-        __builtin__.close = __builtin__.exit = __builtin__.quit = \
-            'Click on the close button to leave the application.'
-
-    def quit(self):
-        """Quit the application."""
-
-        # XXX Good enough for now but later we want to send a close event.
-
-        # In the close event handler we can make sure they want to
-        # quit.  Other applications, like PythonCard, may choose to
-        # hide rather than quit so we should just post the event and
-        # let the surrounding app decide what it wants to do.
-        self.write('Click on the close button to leave the application.')
-
-    def setLocalShell(self):
-        """Add 'shell' to locals as reference to ShellFacade instance."""
-        self.interp.locals['shell'] = ShellFacade(other=self)
-
-    def execStartupScript(self, startupScript):
-        """Execute the user's PYTHONSTARTUP script if they have one."""
-        if startupScript and os.path.isfile(startupScript):
-            text = 'Startup script executed: ' + startupScript
-            self.push('print %r; execfile(%r)' % (text, startupScript))
-        else:
-            self.push('')
-
-    def setStyles(self, faces):
-        """Configure font size, typeface and color for lexer."""
-
-        # Default style
-        self.StyleSetSpec(stc.wxSTC_STYLE_DEFAULT,
-                          "face:%(mono)s,size:%(size)d,back:%(backcol)s" % \
-                          faces)
-
-        self.StyleClearAll()
-
-        # Built in styles
-        self.StyleSetSpec(stc.wxSTC_STYLE_LINENUMBER,
-                          "back:#C0C0C0,face:%(mono)s,size:%(lnsize)d" % faces)
-        self.StyleSetSpec(stc.wxSTC_STYLE_CONTROLCHAR,
-                          "face:%(mono)s" % faces)
-        self.StyleSetSpec(stc.wxSTC_STYLE_BRACELIGHT,
-                          "fore:#0000FF,back:#FFFF88")
-        self.StyleSetSpec(stc.wxSTC_STYLE_BRACEBAD,
-                          "fore:#FF0000,back:#FFFF88")
-
-        # Python styles
-        self.StyleSetSpec(stc.wxSTC_P_DEFAULT,
-                          "face:%(mono)s" % faces)
-        self.StyleSetSpec(stc.wxSTC_P_COMMENTLINE,
-                          "fore:#007F00,face:%(mono)s" % faces)
-        self.StyleSetSpec(stc.wxSTC_P_NUMBER,
-                          "")
-        self.StyleSetSpec(stc.wxSTC_P_STRING,
-                          "fore:#7F007F,face:%(mono)s" % faces)
-        self.StyleSetSpec(stc.wxSTC_P_CHARACTER,
-                          "fore:#7F007F,face:%(mono)s" % faces)
-        self.StyleSetSpec(stc.wxSTC_P_WORD,
-                          "fore:#00007F,bold")
-        self.StyleSetSpec(stc.wxSTC_P_TRIPLE,
-                          "fore:#7F0000")
-        self.StyleSetSpec(stc.wxSTC_P_TRIPLEDOUBLE,
-                          "fore:#000033,back:#FFFFE8")
-        self.StyleSetSpec(stc.wxSTC_P_CLASSNAME,
-                          "fore:#0000FF,bold")
-        self.StyleSetSpec(stc.wxSTC_P_DEFNAME,
-                          "fore:#007F7F,bold")
-        self.StyleSetSpec(stc.wxSTC_P_OPERATOR,
-                          "")
-        self.StyleSetSpec(stc.wxSTC_P_IDENTIFIER,
-                          "")
-        self.StyleSetSpec(stc.wxSTC_P_COMMENTBLOCK,
-                          "fore:#7F7F7F")
-        self.StyleSetSpec(stc.wxSTC_P_STRINGEOL,
-                          "fore:#000000,face:%(mono)s,back:#E0C0E0,eolfilled" % faces)
-
-    def about(self):
-        """Display information about PyCrust."""
-        text = """
-Author: %r
-PyCrust Version: %s
-Shell Revision: %s
-Interpreter Revision: %s
-Python Version: %s
-wxPython Version: %s
-Platform: %s""" % \
-        (__author__, VERSION, self.revision, self.interp.revision,
-         sys.version.split()[0], wx.__version__, sys.platform)
-        self.write(text.strip())
-
-    def OnIdle(self, event):
-        """Free the CPU to do other things."""
-        if self.waiting:
-            time.sleep(0.05)
-
-    def OnUpdateUI(self, event):
-        """Check for matching braces."""
-        # If the auto-complete window is up let it do its thing.
-        if self.AutoCompActive():
-            return
-        braceAtCaret = -1
-        braceOpposite = -1
-        charBefore = None
-        caretPos = self.GetCurrentPos()
-        if caretPos > 0:
-            charBefore = self.GetCharAt(caretPos - 1)
-            styleBefore = self.GetStyleAt(caretPos - 1)
-
-        # Check before.
-        if charBefore and chr(charBefore) in '[]{}()' \
-        and styleBefore == stc.wxSTC_P_OPERATOR:
-            braceAtCaret = caretPos - 1
-
-        # Check after.
-        if braceAtCaret < 0:
-            charAfter = self.GetCharAt(caretPos)
-            styleAfter = self.GetStyleAt(caretPos)
-            if charAfter and chr(charAfter) in '[]{}()' \
-            and styleAfter == stc.wxSTC_P_OPERATOR:
-                braceAtCaret = caretPos
-
-        if braceAtCaret >= 0:
-            braceOpposite = self.BraceMatch(braceAtCaret)
-
-        if braceAtCaret != -1  and braceOpposite == -1:
-            self.BraceBadLight(braceAtCaret)
-        else:
-            self.BraceHighlight(braceAtCaret, braceOpposite)
-
-    def OnChar(self, event):
-        """Keypress event handler.
-        
-        Only receives an event if OnKeyDown calls event.Skip() for the
-        corresponding event."""
-
-        # Prevent modification of previously submitted
-        # commands/responses.
-        if not self.CanEdit():
-            return
-        key = event.KeyCode()
-        currpos = self.GetCurrentPos()
-        stoppos = self.promptPosEnd
-        # Return (Enter) needs to be ignored in this handler.
-        if key == wx.WXK_RETURN:
-            pass
-        elif key in self.autoCompleteKeys:
-            # Usually the dot (period) key activates auto completion.
-            # Get the command between the prompt and the cursor.  Add
-            # the autocomplete character to the end of the command.
-            if self.AutoCompActive(): 
-                self.AutoCompCancel()
-            command = self.GetTextRange(stoppos, currpos) + chr(key)
-            self.write(chr(key))
-            if self.autoComplete: 
-                self.autoCompleteShow(command)
-        elif key == ord('('):
-            # The left paren activates a call tip and cancels an
-            # active auto completion.
-            if self.AutoCompActive(): 
-                self.AutoCompCancel()
-            # Get the command between the prompt and the cursor.  Add
-            # the '(' to the end of the command.
-            self.ReplaceSelection('')
-            command = self.GetTextRange(stoppos, currpos) + '('
-            self.write('(')
-            if self.autoCallTip: 
-                self.autoCallTipShow(command)
-        else:
-            # Allow the normal event handling to take place.
-            event.Skip()
-
-    def OnKeyDown(self, event):
-        """Key down event handler."""
-
-        key = event.KeyCode()
-        # If the auto-complete window is up let it do its thing.
-        if self.AutoCompActive():
-            event.Skip()
-            return
-        # Prevent modification of previously submitted
-        # commands/responses.
-        controlDown = event.ControlDown()
-        altDown = event.AltDown()
-        shiftDown = event.ShiftDown()
-        currpos = self.GetCurrentPos()
-        endpos = self.GetTextLength()
-        selecting = self.GetSelectionStart() != self.GetSelectionEnd()
-        # Return (Enter) is used to submit a command to the
-        # interpreter.
-        if not controlDown and key == wx.WXK_RETURN:
-            if self.CallTipActive(): 
-                self.CallTipCancel()
-            self.processLine()
-        # Ctrl+Return (Cntrl+Enter) is used to insert a line break.
-        elif controlDown and key == wx.WXK_RETURN:
-            if self.CallTipActive(): 
-                self.CallTipCancel()
-            if currpos == endpos:
-                self.processLine()
-            else:
-                self.insertLineBreak()
-        # Let Ctrl-Alt-* get handled normally.
-        elif controlDown and altDown:
-            event.Skip()
-        # Clear the current, unexecuted command.
-        elif key == wx.WXK_ESCAPE:
-            if self.CallTipActive():
-                event.Skip()
-            else:
-                self.clearCommand()
-        # Increase font size.
-        elif controlDown and key in (ord(']'),):
-            dispatcher.send(signal='FontIncrease')
-        # Decrease font size.
-        elif controlDown and key in (ord('['),):
-            dispatcher.send(signal='FontDecrease')
-        # Default font size.
-        elif controlDown and key in (ord('='),):
-            dispatcher.send(signal='FontDefault')
-        # Cut to the clipboard.
-        elif (controlDown and key in (ord('X'), ord('x'))) \
-        or (shiftDown and key == wx.WXK_DELETE):
-            self.Cut()
-        # Copy to the clipboard.
-        elif controlDown and not shiftDown \
-            and key in (ord('C'), ord('c'), wx.WXK_INSERT):
-            self.Copy()
-        # Copy to the clipboard, including prompts.
-        elif controlDown and shiftDown \
-            and key in (ord('C'), ord('c'), wx.WXK_INSERT):
-            self.CopyWithPrompts()
-        # Copy to the clipboard, including prefixed prompts.
-        elif altDown and not controlDown \
-            and key in (ord('C'), ord('c'), wx.WXK_INSERT):
-            self.CopyWithPromptsPrefixed()
-        # Home needs to be aware of the prompt.
-        elif key == wx.WXK_HOME:
-            home = self.promptPosEnd
-            if currpos > home:
-                self.SetCurrentPos(home)
-                if not selecting and not shiftDown:
-                    self.SetAnchor(home)
-                    self.EnsureCaretVisible()
-            else:
-                event.Skip()
-        #
-        # The following handlers modify text, so we need to see if
-        # there is a selection that includes text prior to the prompt.
-        #
-        # Don't modify a selection with text prior to the prompt.
-        elif selecting and key not in NAVKEYS and not self.CanEdit():
-            pass
-        # Paste from the clipboard.
-        elif (controlDown and not shiftDown and key in (ord('V'), ord('v'))) \
-                 or (shiftDown and not controlDown and key == wx.WXK_INSERT):
-            self.Paste()
-        # Paste from the clipboard, run commands.
-        elif controlDown and shiftDown and key in (ord('V'), ord('v')):
-            self.PasteAndRun()
-        # Replace with the previous command from the history buffer.
-        elif (controlDown and key == wx.WXK_UP) \
-                 or (altDown and key in (ord('P'), ord('p'))):
-            self.OnHistoryReplace(step=+1)
-        # Replace with the next command from the history buffer.
-        elif (controlDown and key == wx.WXK_DOWN) \
-                 or (altDown and key in (ord('N'), ord('n'))):
-            self.OnHistoryReplace(step=-1)
-        # Insert the previous command from the history buffer.
-        elif (shiftDown and key == wx.WXK_UP) and self.CanEdit():
-            self.OnHistoryInsert(step=+1)
-        # Insert the next command from the history buffer.
-        elif (shiftDown and key == wx.WXK_DOWN) and self.CanEdit():
-            self.OnHistoryInsert(step=-1)
-        # Search up the history for the text in front of the cursor.
-        elif key == wx.WXK_F8:
-            self.OnHistorySearch()
-        # Don't backspace over the latest non-continuation prompt.
-        elif key == wx.WXK_BACK:
-            if selecting and self.CanEdit():
-                event.Skip()
-            elif currpos > self.promptPosEnd:
-                event.Skip()
-        # Only allow these keys after the latest prompt.
-        elif key in (wx.WXK_TAB, wx.WXK_DELETE):
-            if self.CanEdit():
-                event.Skip()
-        # Don't toggle between insert mode and overwrite mode.
-        elif key == wx.WXK_INSERT:
-            pass
-        # Don't allow line deletion.
-        elif controlDown and key in (ord('L'), ord('l')):
-            pass
-        # Don't allow line transposition.
-        elif controlDown and key in (ord('T'), ord('t')):
-            pass
-        # Basic navigation keys should work anywhere.
-        elif key in NAVKEYS:
-            event.Skip()
-        # Protect the readonly portion of the shell.
-        elif not self.CanEdit():
-            pass
-        else:
-            event.Skip()
-
-    def clearCommand(self):
-        """Delete the current, unexecuted command."""
-        startpos = self.promptPosEnd
-        endpos = self.GetTextLength()
-        self.SetSelection(startpos, endpos)
-        self.ReplaceSelection('')
-        self.more = 0
-
-    def OnHistoryReplace(self, step):
-        """Replace with the previous/next command from the history buffer."""
-        self.clearCommand()
-        self.replaceFromHistory(step)
-
-    def replaceFromHistory(self, step):
-        """Replace selection with command from the history buffer."""
-        ps2 = str(sys.ps2)
-        self.ReplaceSelection('')
-        newindex = self.historyIndex + step
-        if -1 <= newindex <= len(self.history):
-            self.historyIndex = newindex
-        if 0 <= newindex <= len(self.history)-1:
-            command = self.history[self.historyIndex]
-            command = command.replace('\n', os.linesep + ps2)
-            self.ReplaceSelection(command)
-
-    def OnHistoryInsert(self, step):
-        """Insert the previous/next command from the history buffer."""
-        if not self.CanEdit():
-            return
-        startpos = self.GetCurrentPos()
-        self.replaceFromHistory(step)
-        endpos = self.GetCurrentPos()
-        self.SetSelection(endpos, startpos)
-
-    def OnHistorySearch(self):
-        """Search up the history buffer for the text in front of the cursor."""
-        if not self.CanEdit():
-            return
-        startpos = self.GetCurrentPos()
-        # The text up to the cursor is what we search for.
-        numCharsAfterCursor = self.GetTextLength() - startpos
-        searchText = self.getCommand(rstrip=0)
-        if numCharsAfterCursor > 0:
-            searchText = searchText[:-numCharsAfterCursor]
-        if not searchText:
-            return
-        # Search upwards from the current history position and loop
-        # back to the beginning if we don't find anything.
-        if (self.historyIndex <= -1) \
-        or (self.historyIndex >= len(self.history)-2):
-            searchOrder = range(len(self.history))
-        else:
-            searchOrder = range(self.historyIndex+1, len(self.history)) + \
-                          range(self.historyIndex)
-        for i in searchOrder:
-            command = self.history[i]
-            if command[:len(searchText)] == searchText:
-                # Replace the current selection with the one we found.
-                self.ReplaceSelection(command[len(searchText):])
-                endpos = self.GetCurrentPos()
-                self.SetSelection(endpos, startpos)
-                # We've now warped into middle of the history.
-                self.historyIndex = i
-                break
-
-    def setStatusText(self, text):
-        """Display status information."""
-
-        # This method will likely be replaced by the enclosing app to
-        # do something more interesting, like write to a status bar.
-        print text
-
-    def insertLineBreak(self):
-        """Insert a new line break."""
-        if self.CanEdit():
-            self.write(os.linesep)
-            self.more = 1
-            self.prompt()
-
-    def processLine(self):
-        """Process the line of text at which the user hit Enter."""
-
-        # The user hit ENTER and we need to decide what to do. They
-        # could be sitting on any line in the shell.
-
-        thepos = self.GetCurrentPos()        
-        startpos = self.promptPosEnd
-        endpos = self.GetTextLength()
-        ps2 = str(sys.ps2)
-        # If they hit RETURN inside the current command, execute the
-        # command.
-        if self.CanEdit():
-            self.SetCurrentPos(endpos)
-            self.interp.more = 0
-            command = self.GetTextRange(startpos, endpos)
-            lines = command.split(os.linesep + ps2)
-            lines = [line.rstrip() for line in lines]
-            command = '\n'.join(lines)
-            if self.reader.isreading:
-                if not command:
-                    # Match the behavior of the standard Python shell
-                    # when the user hits return without entering a
-                    # value.
-                    command = '\n'
-                self.reader.input = command
-                self.write(os.linesep)
-            else:
-                self.push(command)
-        # Or replace the current command with the other command.
-        else:
-            # If the line contains a command (even an invalid one).
-            if self.getCommand(rstrip=0):
-                command = self.getMultilineCommand()
-                self.clearCommand()
-                self.write(command)
-            # Otherwise, put the cursor back where we started.
-            else:
-                self.SetCurrentPos(thepos)
-                self.SetAnchor(thepos)
-
-    def getMultilineCommand(self, rstrip=1):
-        """Extract a multi-line command from the editor.
-
-        The command may not necessarily be valid Python syntax."""
-        # XXX Need to extract real prompts here. Need to keep track of
-        # the prompt every time a command is issued.
-        ps1 = str(sys.ps1)
-        ps1size = len(ps1)
-        ps2 = str(sys.ps2)
-        ps2size = len(ps2)
-        # This is a total hack job, but it works.
-        text = self.GetCurLine()[0]
-        line = self.GetCurrentLine()
-        while text[:ps2size] == ps2 and line > 0:
-            line -= 1
-            self.GotoLine(line)
-            text = self.GetCurLine()[0]
-        if text[:ps1size] == ps1:
-            line = self.GetCurrentLine()
-            self.GotoLine(line)
-            startpos = self.GetCurrentPos() + ps1size
-            line += 1
-            self.GotoLine(line)
-            while self.GetCurLine()[0][:ps2size] == ps2:
-                line += 1
-                self.GotoLine(line)
-            stoppos = self.GetCurrentPos()
-            command = self.GetTextRange(startpos, stoppos)
-            command = command.replace(os.linesep + ps2, '\n')
-            command = command.rstrip()
-            command = command.replace('\n', os.linesep + ps2)
-        else:
-            command = ''
-        if rstrip:
-            command = command.rstrip()
-        return command
-
-    def getCommand(self, text=None, rstrip=1):
-        """Extract a command from text which may include a shell prompt.
-
-        The command may not necessarily be valid Python syntax."""
-        if not text:
-            text = self.GetCurLine()[0]
-        # Strip the prompt off the front leaving just the command.
-        command = self.lstripPrompt(text)
-        if command == text:
-            command = ''  # Real commands have prompts.
-        if rstrip:
-            command = command.rstrip()
-        return command
-
-    def lstripPrompt(self, text):
-        """Return text without a leading prompt."""
-        ps1 = str(sys.ps1)
-        ps1size = len(ps1)
-        ps2 = str(sys.ps2)
-        ps2size = len(ps2)
-        # Strip the prompt off the front of text.
-        if text[:ps1size] == ps1:
-            text = text[ps1size:]
-        elif text[:ps2size] == ps2:
-            text = text[ps2size:]
-        return text
-    
-    def push(self, command):
-        """Send command to the interpreter for execution."""
-        self.write(os.linesep)
-        busy = wx.wxBusyCursor()
-        self.waiting = True
-        self.more = self.interp.push(command)
-        self.waiting = False
-        del busy
-        if not self.more:
-            self.addHistory(command.rstrip())
-        self.prompt()
-
-    def addHistory(self, command):
-        """Add command to the command history."""
-        # Reset the history position.
-        self.historyIndex = -1
-        # Insert this command into the history, unless it's a blank
-        # line or the same as the last command.
-        if command != '' \
-        and (len(self.history) == 0 or command != self.history[0]):
-            self.history.insert(0, command)
-
-    def write(self, text):
-        """Display text in the shell.
-
-        Replace line endings with OS-specific endings."""
-        text = self.fixLineEndings(text)
-        self.AddText(text)
-        self.EnsureCaretVisible()
-
-    def fixLineEndings(self, text):
-        """Return text with line endings replaced by OS-specific endings."""
-        lines = text.split('\r\n')
-        for l in range(len(lines)):
-            chunks = lines[l].split('\r')
-            for c in range(len(chunks)):
-                chunks[c] = os.linesep.join(chunks[c].split('\n'))
-            lines[l] = os.linesep.join(chunks)
-        text = os.linesep.join(lines)
-        return text
-
-    def prompt(self):
-        """Display proper prompt for the context: ps1, ps2 or ps3.
-
-        If this is a continuation line, autoindent as necessary."""
-        isreading = self.reader.isreading
-        skip = 0
-        if isreading:
-            prompt = str(sys.ps3)
-        elif self.more:
-            prompt = str(sys.ps2)
-        else:
-            prompt = str(sys.ps1)
-        pos = self.GetCurLine()[1]
-        if pos > 0:
-            if isreading:
-                skip = 1
-            else:
-                self.write(os.linesep)
-        if not self.more:
-            self.promptPosStart = self.GetCurrentPos()
-        if not skip:
-            self.write(prompt)
-        if not self.more:
-            self.promptPosEnd = self.GetCurrentPos()
-            # Keep the undo feature from undoing previous responses.
-            self.EmptyUndoBuffer()
-        # XXX Add some autoindent magic here if more.
-        if self.more:
-            self.write(' '*4)  # Temporary hack indentation.
-        self.EnsureCaretVisible()
-        self.ScrollToColumn(0)
-
-    def readline(self):
-        """Replacement for stdin.readline()."""
-        input = ''
-        reader = self.reader
-        reader.isreading = 1
-        self.prompt()
-        try:
-            while not reader.input:
-                wx.wxYieldIfNeeded()
-            input = reader.input
-        finally:
-            reader.input = ''
-            reader.isreading = 0
-        input = str(input)  # In case of Unicode.
-        return input
-
-    def readlines(self):
-        """Replacement for stdin.readlines()."""
-        lines = []
-        while lines[-1:] != ['\n']:
-            lines.append(self.readline())
-        return lines
-
-    def raw_input(self, prompt=''):
-        """Return string based on user input."""
-        if prompt:
-            self.write(prompt)
-        return self.readline()
-
-    def ask(self, prompt='Please enter your response:'):
-        """Get response from the user using a dialog box."""
-        dialog = wx.wxTextEntryDialog(None, prompt, 
-                                      'Input Dialog (Raw)', '')
-        try:
-            if dialog.ShowModal() == wx.wxID_OK:
-                text = dialog.GetValue()
-                return text
-        finally:
-            dialog.Destroy()
-        return ''
-
-    def pause(self):
-        """Halt execution pending a response from the user."""
-        self.ask('Press enter to continue:')
-
-    def clear(self):
-        """Delete all text from the shell."""
-        self.ClearAll()
-
-    def run(self, command, prompt=1, verbose=1):
-        """Execute command as if it was typed in directly.
-        >>> shell.run('print "this"')
-        >>> print "this"
-        this
-        >>> 
-        """
-        # Go to the very bottom of the text.
-        endpos = self.GetTextLength()
-        self.SetCurrentPos(endpos)        
-        command = command.rstrip()
-        if prompt: self.prompt()
-        if verbose: self.write(command)
-        self.push(command)
-
-    def runfile(self, filename):
-        """Execute all commands in file as if they were typed into the
-        shell."""
-        file = open(filename)
-        try:
-            self.prompt()
-            for command in file.readlines():
-                if command[:6] == 'shell.':
-                    # Run shell methods silently.
-                    self.run(command, prompt=0, verbose=0)
-                else:
-                    self.run(command, prompt=0, verbose=1)
-        finally:
-            file.close()
-
-    def autoCompleteShow(self, command):
-        """Display auto-completion popup list."""
-        list = self.interp.getAutoCompleteList(command, 
-                    includeMagic=self.autoCompleteIncludeMagic, 
-                    includeSingle=self.autoCompleteIncludeSingle, 
-                    includeDouble=self.autoCompleteIncludeDouble)
-        if list and len(list) < 2000:
-            options = ' '.join(list)
-            offset = 0
-            self.AutoCompShow(offset, options)
-
-    def autoCallTipShow(self, command):
-        """Display argument spec and docstring in a popup window."""
-        if self.CallTipActive():
-            self.CallTipCancel()
-        (name, argspec, tip) = self.interp.getCallTip(command)
-        if argspec:
-            startpos = self.GetCurrentPos()
-            self.write(argspec + ')')
-            endpos = self.GetCurrentPos()
-            self.SetSelection(endpos, startpos)
-        if tip:
-            curpos = self.GetCurrentPos()
-            tippos = curpos - (len(name) + 1)
-            fallback = curpos - self.GetColumn(curpos)
-            # In case there isn't enough room, only go back to the
-            # fallback.
-            tippos = max(tippos, fallback)
-            dispatcher.send(signal='Shell.calltip', sender=self, calltip=tip)
-            self.CallTipShow(tippos, tip)
-
-    def writeOut(self, text):
-        """Replacement for stdout."""
-        self.write(text)
-
-    def writeErr(self, text):
-        """Replacement for stderr."""
-        self.write(text)
-
-    def redirectStdin(self, redirect=1):
-        """If redirect is true then sys.stdin will come from the shell."""
-        if redirect:
-            sys.stdin = self.reader
-        else:
-            sys.stdin = self.stdin
-
-    def redirectStdout(self, redirect=1):
-        """If redirect is true then sys.stdout will go to the shell."""
-        if redirect:
-            sys.stdout = PseudoFileOut(self.writeOut)
-        else:
-            sys.stdout = self.stdout
-
-    def redirectStderr(self, redirect=1):
-        """If redirect is true then sys.stderr will go to the shell."""
-        if redirect:
-            sys.stderr = PseudoFileErr(self.writeErr)
-        else:
-            sys.stderr = self.stderr
-
-    def CanCut(self):
-        """Return true if text is selected and can be cut."""
-        if self.GetSelectionStart() != self.GetSelectionEnd() \
-               and self.GetSelectionStart() >= self.promptPosEnd \
-               and self.GetSelectionEnd() >= self.promptPosEnd:
-            return 1
-        else:
-            return 0
-
-    def CanCopy(self):
-        """Return true if text is selected and can be copied."""
-        return self.GetSelectionStart() != self.GetSelectionEnd()
-
-    def CanPaste(self):
-        """Return true if a paste should succeed."""
-        if self.CanEdit() and stc.wxStyledTextCtrl.CanPaste(self):
-            return 1
-        else:
-            return 0
-
-    def CanEdit(self):
-        """Return true if editing should succeed."""
-        if self.GetSelectionStart() != self.GetSelectionEnd():
-            if self.GetSelectionStart() >= self.promptPosEnd \
-                   and self.GetSelectionEnd() >= self.promptPosEnd:
-                return 1
-            else:
-                return 0
-        else:
-            return self.GetCurrentPos() >= self.promptPosEnd
-
-    def Cut(self):
-        """Remove selection and place it on the clipboard."""
-        if self.CanCut() and self.CanCopy():
-            if self.AutoCompActive():
-                self.AutoCompCancel()
-            if self.CallTipActive():
-                self.CallTipCancel()
-            self.Copy()
-            self.ReplaceSelection('')
-
-    def Copy(self):
-        """Copy selection and place it on the clipboard."""
-        if self.CanCopy():
-            ps1 = str(sys.ps1)
-            ps2 = str(sys.ps2)
-            command = self.GetSelectedText()
-            command = command.replace(os.linesep + ps2, os.linesep)
-            command = command.replace(os.linesep + ps1, os.linesep)
-            command = self.lstripPrompt(text=command)
-            data = wx.wxTextDataObject(command)
-            self._clip(data)
-
-    def CopyWithPrompts(self):
-        """Copy selection, including prompts, and place it on the clipboard."""
-        if self.CanCopy():
-            command = self.GetSelectedText()
-            data = wx.wxTextDataObject(command)
-            self._clip(data)
-
-    def CopyWithPromptsPrefixed(self):
-        """Copy selection, including prompts prefixed with four
-        spaces, and place it on the clipboard."""
-        if self.CanCopy():
-            command = self.GetSelectedText()
-            spaces = ' ' * 4
-            command = spaces + command.replace(os.linesep,
-                                               os.linesep + spaces)
-            data = wx.wxTextDataObject(command)
-            self._clip(data)
-
-    def _clip(self, data):
-        if wx.wxTheClipboard.Open():
-            wx.wxTheClipboard.UsePrimarySelection(False)
-            wx.wxTheClipboard.SetData(data)
-            wx.wxTheClipboard.Flush()
-            wx.wxTheClipboard.Close()
-
-    def Paste(self):
-        """Replace selection with clipboard contents."""
-        if self.CanPaste() and wx.wxTheClipboard.Open():
-            ps2 = str(sys.ps2)
-            if wx.wxTheClipboard.IsSupported(wx.wxDataFormat(wx.wxDF_TEXT)):
-                data = wx.wxTextDataObject()
-                if wx.wxTheClipboard.GetData(data):
-                    self.ReplaceSelection('')
-                    command = data.GetText()
-                    command = command.rstrip()
-                    command = self.fixLineEndings(command)
-                    command = self.lstripPrompt(text=command)
-                    command = command.replace(os.linesep + ps2, '\n')
-                    command = command.replace(os.linesep, '\n')
-                    command = command.replace('\n', os.linesep + ps2)
-                    self.write(command)
-            wx.wxTheClipboard.Close()
-
-    def PasteAndRun(self):
-        """Replace selection with clipboard contents, run commands."""
-        if wx.wxTheClipboard.Open():
-            ps1 = str(sys.ps1)
-            ps2 = str(sys.ps2)
-            if wx.wxTheClipboard.IsSupported(wx.wxDataFormat(wx.wxDF_TEXT)):
-                data = wx.wxTextDataObject()
-                if wx.wxTheClipboard.GetData(data):
-                    endpos = self.GetTextLength()
-                    self.SetCurrentPos(endpos)
-                    startpos = self.promptPosEnd
-                    self.SetSelection(startpos, endpos)
-                    self.ReplaceSelection('')
-                    text = data.GetText()
-                    text = text.lstrip()
-                    text = self.fixLineEndings(text)
-                    text = self.lstripPrompt(text)
-                    text = text.replace(os.linesep + ps1, '\n')
-                    text = text.replace(os.linesep + ps2, '\n')
-                    text = text.replace(os.linesep, '\n')
-                    lines = text.split('\n')
-                    commands = []
-                    command = ''
-                    for line in lines:
-                        if line.strip() == ps2.strip():
-                            # If we are pasting from something like a
-                            # web page that drops the trailing space
-                            # from the ps2 prompt of a blank line.
-                            line = ''
-                        if line.strip() != '' and line.lstrip() == line:
-                            # New command.
-                            if command:
-                                # Add the previous command to the list.
-                                commands.append(command)
-                            # Start a new command, which may be multiline.
-                            command = line
-                        else:
-                            # Multiline command. Add to the command.
-                            command += '\n'
-                            command += line
-                    commands.append(command)
-                    for command in commands:    
-                        command = command.replace('\n', os.linesep + ps2)
-                        self.write(command)
-                        self.processLine()
-            wx.wxTheClipboard.Close()
-
-    def wrap(self, wrap=1):
-        """Sets whether text is word wrapped."""
-        try:
-            self.SetWrapMode(wrap)
-        except AttributeError:
-            return 'Wrapping is not available in this version of PyCrust.'
-
-    def zoom(self, points=0):
-        """Set the zoom level.
-        
-        This number of points is added to the size of all fonts.  It
-        may be positive to magnify or negative to reduce."""
-        self.SetZoom(points)
+from wxPython.py.shell import *
 
diff --git a/wxPython/wxPython/lib/PyCrust/shellmenu.py b/wxPython/wxPython/lib/PyCrust/shellmenu.py
deleted file mode 100644
index 1e3175a1f7..0000000000
--- a/wxPython/wxPython/lib/PyCrust/shellmenu.py
+++ /dev/null
@@ -1,226 +0,0 @@
-"""Shell menu mixin shared by shell and crust."""
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-from wxPython import wx
-import sys
-from version import VERSION
-
-try:
-    True
-except NameError:
-    True = 1==1
-    False = 1==0
-
-ID_AUTOCOMP = wx.wxNewId()
-ID_AUTOCOMP_SHOW = wx.wxNewId()
-ID_AUTOCOMP_INCLUDE_MAGIC = wx.wxNewId()
-ID_AUTOCOMP_INCLUDE_SINGLE = wx.wxNewId()
-ID_AUTOCOMP_INCLUDE_DOUBLE = wx.wxNewId()
-ID_CALLTIPS = wx.wxNewId()
-ID_CALLTIPS_SHOW = wx.wxNewId()
-ID_COPY_PLUS = wx.wxNewId()
-ID_PASTE_PLUS = wx.wxNewId()
-ID_WRAP = wx.wxNewId()
-
-
-class ShellMenu:
-    """Mixin class to add standard menu items."""
-
-    def createMenus(self):
-        m = self.fileMenu = wx.wxMenu()
-        m.AppendSeparator()
-        m.Append(wx.wxID_EXIT, 'E&xit', 'Exit PyCrust')
-
-        m = self.editMenu = wx.wxMenu()
-        m.Append(wx.wxID_UNDO, '&Undo \tCtrl+Z',
-                 'Undo the last action')
-        m.Append(wx.wxID_REDO, '&Redo \tCtrl+Y',
-                 'Redo the last undone action')
-        m.AppendSeparator()
-        m.Append(wx.wxID_CUT, 'Cu&t \tCtrl+X',
-                 'Cut the selection')
-        m.Append(wx.wxID_COPY, '&Copy \tCtrl+C',
-                 'Copy the selection - removing prompts')
-        m.Append(ID_COPY_PLUS, 'Cop&y Plus \tCtrl+Shift+C',
-                 'Copy the selection - retaining prompts')
-        m.Append(wx.wxID_PASTE, '&Paste \tCtrl+V', 'Paste')
-        m.Append(ID_PASTE_PLUS, 'Past&e Plus \tCtrl+Shift+V',
-                 'Paste and run commands')
-        m.AppendSeparator()
-        m.Append(wx.wxID_CLEAR, 'Cle&ar',
-                 'Delete the selection')
-        m.Append(wx.wxID_SELECTALL, 'Select A&ll \tCtrl+A',
-                 'Select all text')
-
-        m = self.autocompMenu = wx.wxMenu()
-        m.Append(ID_AUTOCOMP_SHOW, 'Show Auto Completion',
-                 'Show auto completion during dot syntax', 1)
-        m.Append(ID_AUTOCOMP_INCLUDE_MAGIC, 'Include Magic Attributes',
-                 'Include attributes visible to __getattr__ and __setattr__',
-                 1)
-        m.Append(ID_AUTOCOMP_INCLUDE_SINGLE, 'Include Single Underscores',
-                 'Include attibutes prefixed by a single underscore', 1)
-        m.Append(ID_AUTOCOMP_INCLUDE_DOUBLE, 'Include Double Underscores',
-                 'Include attibutes prefixed by a double underscore', 1)
-
-        m = self.calltipsMenu = wx.wxMenu()
-        m.Append(ID_CALLTIPS_SHOW, 'Show Call Tips',
-                 'Show call tips with argument specifications', 1)
-
-        m = self.optionsMenu = wx.wxMenu()
-        m.AppendMenu(ID_AUTOCOMP, '&Auto Completion', self.autocompMenu,
-                     'Auto Completion Options')
-        m.AppendMenu(ID_CALLTIPS, '&Call Tips', self.calltipsMenu,
-                     'Call Tip Options')
-        m.Append(ID_WRAP, '&Wrap Lines',
-                 'Wrap lines at right edge', 1)
-
-        m = self.helpMenu = wx.wxMenu()
-        m.AppendSeparator()
-        m.Append(wx.wxID_ABOUT, '&About...', 'About PyCrust')
-
-        b = self.menuBar = wx.wxMenuBar()
-        b.Append(self.fileMenu, '&File')
-        b.Append(self.editMenu, '&Edit')
-        b.Append(self.optionsMenu, '&Options')
-        b.Append(self.helpMenu, '&Help')
-        self.SetMenuBar(b)
-
-        wx.EVT_MENU(self, wx.wxID_EXIT, self.OnExit)
-        wx.EVT_MENU(self, wx.wxID_UNDO, self.OnUndo)
-        wx.EVT_MENU(self, wx.wxID_REDO, self.OnRedo)
-        wx.EVT_MENU(self, wx.wxID_CUT, self.OnCut)
-        wx.EVT_MENU(self, wx.wxID_COPY, self.OnCopy)
-        wx.EVT_MENU(self, ID_COPY_PLUS, self.OnCopyPlus)
-        wx.EVT_MENU(self, wx.wxID_PASTE, self.OnPaste)
-        wx.EVT_MENU(self, ID_PASTE_PLUS, self.OnPastePlus)
-        wx.EVT_MENU(self, wx.wxID_CLEAR, self.OnClear)
-        wx.EVT_MENU(self, wx.wxID_SELECTALL, self.OnSelectAll)
-        wx.EVT_MENU(self, wx.wxID_ABOUT, self.OnAbout)
-        wx.EVT_MENU(self, ID_AUTOCOMP_SHOW,
-                    self.OnAutoCompleteShow)
-        wx.EVT_MENU(self, ID_AUTOCOMP_INCLUDE_MAGIC,
-                    self.OnAutoCompleteIncludeMagic)
-        wx.EVT_MENU(self, ID_AUTOCOMP_INCLUDE_SINGLE,
-                    self.OnAutoCompleteIncludeSingle)
-        wx.EVT_MENU(self, ID_AUTOCOMP_INCLUDE_DOUBLE,
-                    self.OnAutoCompleteIncludeDouble)
-        wx.EVT_MENU(self, ID_CALLTIPS_SHOW,
-                    self.OnCallTipsShow)
-        wx.EVT_MENU(self, ID_WRAP, self.OnWrap)
-
-        wx.EVT_UPDATE_UI(self, wx.wxID_UNDO, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, wx.wxID_REDO, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, wx.wxID_CUT, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, wx.wxID_COPY, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_COPY_PLUS, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, wx.wxID_PASTE, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_PASTE_PLUS, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, wx.wxID_CLEAR, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_SHOW, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_INCLUDE_MAGIC, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_INCLUDE_SINGLE, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_INCLUDE_DOUBLE, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_CALLTIPS_SHOW, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_WRAP, self.OnUpdateMenu)
-
-    def OnExit(self, event):
-        self.Close(True)
-
-    def OnUndo(self, event):
-        self.shell.Undo()
-
-    def OnRedo(self, event):
-        self.shell.Redo()
-
-    def OnCut(self, event):
-        self.shell.Cut()
-
-    def OnCopy(self, event):
-        self.shell.Copy()
-
-    def OnCopyPlus(self, event):
-        self.shell.CopyWithPrompts()
-
-    def OnPaste(self, event):
-        self.shell.Paste()
-
-    def OnPastePlus(self, event):
-        self.shell.PasteAndRun()
-
-    def OnClear(self, event):
-        self.shell.Clear()
-
-    def OnSelectAll(self, event):
-        self.shell.SelectAll()
-
-    def OnAbout(self, event):
-        """Display an About PyCrust window."""
-        title = 'About PyCrust'
-        text = 'PyCrust %s\n\n' % VERSION + \
-               'Yet another Python shell, only flakier.\n\n' + \
-               'Half-baked by Patrick K. O\'Brien,\n' + \
-               'the other half is still in the oven.\n\n' + \
-               'Shell Revision: %s\n' % self.shell.revision + \
-               'Interpreter Revision: %s\n\n' % self.shell.interp.revision + \
-               'Python Version: %s\n' % sys.version.split()[0] + \
-               'wxPython Version: %s\n' % wx.__version__ + \
-               'Platform: %s\n' % sys.platform
-        dialog = wx.wxMessageDialog(self, text, title,
-                                    wx.wxOK | wx.wxICON_INFORMATION)
-        dialog.ShowModal()
-        dialog.Destroy()
-
-    def OnAutoCompleteShow(self, event):
-        self.shell.autoComplete = event.IsChecked()
-
-    def OnAutoCompleteIncludeMagic(self, event):
-        self.shell.autoCompleteIncludeMagic = event.IsChecked()
-
-    def OnAutoCompleteIncludeSingle(self, event):
-        self.shell.autoCompleteIncludeSingle = event.IsChecked()
-
-    def OnAutoCompleteIncludeDouble(self, event):
-        self.shell.autoCompleteIncludeDouble = event.IsChecked()
-
-    def OnCallTipsShow(self, event):
-        self.shell.autoCallTip = event.IsChecked()
-
-    def OnWrap(self, event):
-        self.shell.SetWrapMode(event.IsChecked())
-
-    def OnUpdateMenu(self, event):
-        """Update menu items based on current status."""
-        id = event.GetId()
-        if id == wx.wxID_UNDO:
-            event.Enable(self.shell.CanUndo())
-        elif id == wx.wxID_REDO:
-            event.Enable(self.shell.CanRedo())
-        elif id == wx.wxID_CUT:
-            event.Enable(self.shell.CanCut())
-        elif id == wx.wxID_COPY:
-            event.Enable(self.shell.CanCopy())
-        elif id == ID_COPY_PLUS:
-            event.Enable(self.shell.CanCopy())
-        elif id == wx.wxID_PASTE:
-            event.Enable(self.shell.CanPaste())
-        elif id == ID_PASTE_PLUS:
-            event.Enable(self.shell.CanPaste())
-        elif id == wx.wxID_CLEAR:
-            event.Enable(self.shell.CanCut())
-        elif id == ID_AUTOCOMP_SHOW:
-            event.Check(self.shell.autoComplete)
-        elif id == ID_AUTOCOMP_INCLUDE_MAGIC:
-            event.Check(self.shell.autoCompleteIncludeMagic)
-        elif id == ID_AUTOCOMP_INCLUDE_SINGLE:
-            event.Check(self.shell.autoCompleteIncludeSingle)
-        elif id == ID_AUTOCOMP_INCLUDE_DOUBLE:
-            event.Check(self.shell.autoCompleteIncludeDouble)
-        elif id == ID_CALLTIPS_SHOW:
-            event.Check(self.shell.autoCallTip)
-        elif id == ID_WRAP:
-            event.Check(self.shell.GetWrapMode())
-
diff --git a/wxPython/wxPython/lib/PyCrust/wrap.py b/wxPython/wxPython/lib/PyCrust/wrap.py
index cdfbfee359..e683be8ef8 100644
--- a/wxPython/wxPython/lib/PyCrust/wrap.py
+++ b/wxPython/wxPython/lib/PyCrust/wrap.py
@@ -1,54 +1,5 @@
 
-"""Wrap is a command line utility that runs a wxPython program with
-additional runtime-tools, such as PyCrust."""
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-import os
-import sys
-from wxPython import wx
-from crust import CrustFrame as Frame
-
-try:
-    True
-except NameError:
-    True = 1==1
-    False = 1==0
-
-
-def wrap(app):
-    wx.wxInitAllImageHandlers()
-    frame = Frame()
-    frame.SetSize((750, 525))
-    frame.Show(True)
-    frame.shell.interp.locals['app'] = app
-    app.MainLoop()
-
-
-def main(argv):
-    if len(argv) < 2:
-        print "Please specify a module name."
-        raise SystemExit
-    name = argv[1]
-    if name[-3:] == '.py':
-        name = name[:-3]
-    module = __import__(name)
-    # Find the App class.
-    App = None
-    d = module.__dict__
-    for item in d.keys():
-        try:
-            if issubclass(d[item], wx.wxApp):
-                App = d[item]
-        except (NameError, TypeError):
-            pass
-    if App is None:
-        print "No App class found."
-        raise SystemExit
-    app = App()
-    wrap(app)
+from wxPython.py.PyWrap import *
 
 
 if __name__ == '__main__':
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Sizers.py b/wxPython/wxPython/lib/PyCrust/wxd/Sizers.py
deleted file mode 100644
index 44446b3d51..0000000000
--- a/wxPython/wxPython/lib/PyCrust/wxd/Sizers.py
+++ /dev/null
@@ -1,488 +0,0 @@
-"""Decorator classes for documentation and shell scripting.
-"""
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-
-# These are not the real wxPython classes. These are Python versions
-# for documentation purposes. They are also used to apply docstrings
-# to the real wxPython classes, which are SWIG-generated wrappers for
-# C-language classes.
-
-
-from Base import Object
-import Parameters as wx
-
-
-class Sizer(Object):
-    """"""
-
-    def Add(self):
-        """"""
-        pass
-
-    def AddMany(self):
-        """"""
-        pass
-
-    def AddSizer(self):
-        """"""
-        pass
-
-    def AddSpacer(self):
-        """"""
-        pass
-
-    def AddWindow(self):
-        """"""
-        pass
-
-    def Clear(self):
-        """"""
-        pass
-
-    def DeleteWindows(self):
-        """"""
-        pass
-
-    def Destroy(self):
-        """"""
-        pass
-
-    def Fit(self):
-        """"""
-        pass
-
-    def FitInside(self):
-        """"""
-        pass
-
-    def GetChildren(self):
-        """"""
-        pass
-
-    def GetMinSize(self):
-        """"""
-        pass
-
-    def GetMinSizeTuple(self):
-        """"""
-        pass
-
-    def GetPosition(self):
-        """"""
-        pass
-
-    def GetPositionTuple(self):
-        """"""
-        pass
-
-    def GetSize(self):
-        """"""
-        pass
-
-    def GetSizeTuple(self):
-        """"""
-        pass
-
-    def Hide(self):
-        """"""
-        pass
-
-    def HideSizer(self):
-        """"""
-        pass
-
-    def HideWindow(self):
-        """"""
-        pass
-
-    def Insert(self):
-        """"""
-        pass
-
-    def InsertSizer(self):
-        """"""
-        pass
-
-    def InsertSpacer(self):
-        """"""
-        pass
-
-    def InsertWindow(self):
-        """"""
-        pass
-
-    def IsShown(self):
-        """"""
-        pass
-
-    def IsShownSizer(self):
-        """"""
-        pass
-
-    def IsShownWindow(self):
-        """"""
-        pass
-
-    def Layout(self):
-        """"""
-        pass
-
-    def Prepend(self):
-        """"""
-        pass
-
-    def PrependSizer(self):
-        """"""
-        pass
-
-    def PrependSpacer(self):
-        """"""
-        pass
-
-    def PrependWindow(self):
-        """"""
-        pass
-
-    def Remove(self):
-        """"""
-        pass
-
-    def RemovePos(self):
-        """"""
-        pass
-
-    def RemoveSizer(self):
-        """"""
-        pass
-
-    def RemoveWindow(self):
-        """"""
-        pass
-
-    def SetDimension(self):
-        """"""
-        pass
-
-    def SetItemMinSize(self):
-        """"""
-        pass
-
-    def SetItemMinSizePos(self):
-        """"""
-        pass
-
-    def SetItemMinSizeSizer(self):
-        """"""
-        pass
-
-    def SetItemMinSizeWindow(self):
-        """"""
-        pass
-
-    def SetMinSize(self):
-        """"""
-        pass
-
-    def SetSizeHints(self):
-        """"""
-        pass
-
-    def SetVirtualSizeHints(self):
-        """"""
-        pass
-
-    def Show(self):
-        """"""
-        pass
-
-    def ShowItems(self):
-        """"""
-        pass
-
-    def ShowSizer(self):
-        """"""
-        pass
-
-    def ShowWindow(self):
-        """"""
-        pass
-
-    def __init__(self):
-        """"""
-        pass
-
-    def _setOORInfo(self):
-        """"""
-        pass
-
-
-class SizerItem(Object):
-    """"""
-
-    def CalcMin(self):
-        """"""
-        pass
-
-    def DeleteWindows(self):
-        """"""
-        pass
-
-    def GetBorder(self):
-        """"""
-        pass
-
-    def GetFlag(self):
-        """"""
-        pass
-
-    def GetOption(self):
-        """"""
-        pass
-
-    def GetPosition(self):
-        """"""
-        pass
-
-    def GetRatio(self):
-        """"""
-        pass
-
-    def GetSize(self):
-        """"""
-        pass
-
-    def GetSizer(self):
-        """"""
-        pass
-
-    def GetUserData(self):
-        """"""
-        pass
-
-    def GetWindow(self):
-        """"""
-        pass
-
-    def IsShown(self):
-        """"""
-        pass
-
-    def IsSizer(self):
-        """"""
-        pass
-
-    def IsSpacer(self):
-        """"""
-        pass
-
-    def IsWindow(self):
-        """"""
-        pass
-
-    def SetBorder(self):
-        """"""
-        pass
-
-    def SetDimension(self):
-        """"""
-        pass
-
-    def SetFlag(self):
-        """"""
-        pass
-
-    def SetInitSize(self):
-        """"""
-        pass
-
-    def SetOption(self):
-        """"""
-        pass
-
-    def SetRatio(self):
-        """"""
-        pass
-
-    def SetRatioSize(self):
-        """"""
-        pass
-
-    def SetRatioWH(self):
-        """"""
-        pass
-
-    def SetSizer(self):
-        """"""
-        pass
-
-    def SetWindow(self):
-        """"""
-        pass
-
-    def Show(self):
-        """"""
-        pass
-
-    def __init__(self):
-        """"""
-        pass
-
-
-class BoxSizer(Sizer):
-    """"""
-
-    def CalcMin(self):
-        """"""
-        pass
-
-    def GetOrientation(self):
-        """"""
-        pass
-
-    def RecalcSizes(self):
-        """"""
-        pass
-
-    def SetOrientation(self):
-        """"""
-        pass
-
-    def __init__(self):
-        """"""
-        pass
-
-
-class GridSizer(Sizer):
-    """"""
-
-    def CalcMin(self):
-        """"""
-        pass
-
-    def GetCols(self):
-        """"""
-        pass
-
-    def GetHGap(self):
-        """"""
-        pass
-
-    def GetRows(self):
-        """"""
-        pass
-
-    def GetVGap(self):
-        """"""
-        pass
-
-    def RecalcSizes(self):
-        """"""
-        pass
-
-    def SetCols(self):
-        """"""
-        pass
-
-    def SetHGap(self):
-        """"""
-        pass
-
-    def SetRows(self):
-        """"""
-        pass
-
-    def SetVGap(self):
-        """"""
-        pass
-
-    def __init__(self):
-        """"""
-        pass
-
-
-class FlexGridSizer(GridSizer):
-    """"""
-
-    def AddGrowableCol(self):
-        """"""
-        pass
-
-    def AddGrowableRow(self):
-        """"""
-        pass
-
-    def CalcMin(self):
-        """"""
-        pass
-
-    def RecalcSizes(self):
-        """"""
-        pass
-
-    def RemoveGrowableCol(self):
-        """"""
-        pass
-
-    def RemoveGrowableRow(self):
-        """"""
-        pass
-
-    def __init__(self):
-        """"""
-        pass
-
-
-class NotebookSizer(Sizer):
-    """"""
-
-    def CalcMin(self):
-        """"""
-        pass
-
-    def GetNotebook(self):
-        """"""
-        pass
-
-    def RecalcSizes(self):
-        """"""
-        pass
-
-    def __init__(self):
-        """"""
-        pass
-
-
-class PySizer(Sizer):
-    """"""
-
-    def __init__(self):
-        """"""
-        pass
-
-    def _setCallbackInfo(self):
-        """"""
-        pass
-
-
-class StaticBoxSizer(BoxSizer):
-    """"""
-
-    def CalcMin(self):
-        """"""
-        pass
-
-    def GetStaticBox(self):
-        """"""
-        pass
-
-    def RecalcSizes(self):
-        """"""
-        pass
-
-    def __init__(self):
-        """"""
-        pass
diff --git a/wxPython/wxPython/lib/analogclock.py b/wxPython/wxPython/lib/analogclock.py
new file mode 100644
index 0000000000..dd83981d5f
--- /dev/null
+++ b/wxPython/wxPython/lib/analogclock.py
@@ -0,0 +1,201 @@
+#----------------------------------------------------------------------
+# Name:        wxPython.lib.analogclock
+# Purpose:     A simple analog clock window
+#
+# Author:      several folks on wxPython-users
+#
+# Created:     16-April-2003
+# RCS-ID:      $Id$
+# Copyright:   (c) 2003 by Total Control Software
+# Licence:     wxWindows license
+#----------------------------------------------------------------------
+
+import math, sys, string, time
+from wxPython.wx import *
+
+
+
+class AnalogClockWindow(wxWindow):
+    """A simple analog clock window"""
+
+    TICKS_NONE   = 0
+    TICKS_SQUARE = 1
+    TICKS_CIRCLE = 2
+
+    def __init__(self, parent, ID=-1, pos=wxDefaultPosition, size=wxDefaultSize,
+                 style=0, name="clock"):
+        # Initialize the wxWindow...
+        wxWindow.__init__(self, parent, ID, pos, size, style, name)
+
+        # Initialize the default clock settings...
+        self.minuteMarks = 60
+        self.hourMarks = 12
+        self.tickMarksBrushC = self.GetForegroundColour()
+        self.tickMarksPenC   = self.GetForegroundColour()
+        self.tickMarkStyle = self.TICKS_SQUARE
+
+        # Make an initial bitmap for the face, it will be updated and
+        # painted at the first EVT_SIZE event.
+        W, H = size
+        self.faceBitmap = wxEmptyBitmap(max(W,1), max(H,1))
+
+        # Initialize the timer that drives the update of the clock
+        # face.  Update every half second to ensure that there is at
+        # least one true update during each realtime second.
+        self.timer = wxTimer(self)
+        self.timer.Start(500)
+
+        # Set event handlers...
+        EVT_PAINT(self, self.OnPaint)
+        EVT_ERASE_BACKGROUND(self, lambda x: None)
+        EVT_SIZE(self, self.OnSize)
+        EVT_TIMER(self, -1, self.OnTimerExpire)
+        EVT_WINDOW_DESTROY(self, self.OnQuit)
+
+
+    def SetTickMarkStyle(self, style):
+        """
+        Set the style of the marks around the edge of the clock.
+        Options are TICKS_NONE, TICKS_SQUARE, and TICKS_CIRCLE
+        """
+        self.tickMarkStyle = style
+
+
+    def SetTickMarkColours(self, brushC, penC="BLACK"):
+        """
+        Set the brush colour and optionally the pen colour of
+        the marks around the edge of the clock.
+        """
+        self.tickMarksBrushC = brushC
+        self.tickMarksPenC   = penC
+
+    SetTickMarkColour = SetTickMarkColours
+
+
+    def SetHandsColour(self, c):
+        """An alias for SetForegroundColour"""
+        self.SetForegroundColour(c)  # the hands just use the foreground colour
+
+
+
+    # Using the current settings, render the points and line endings for the
+    # circle inside the specified device context.  In this case, the DC is
+    # a memory based device context that will be blitted to the actual
+    # display DC inside the OnPaint() event handler.
+    def OnSize(self, event):
+        # The faceBitmap init is done here, to make sure the buffer is always
+        # the same size as the Window
+        size  = self.GetClientSize()
+        self.faceBitmap = wxEmptyBitmap(size.width, size.height)
+        self.DrawFace()
+
+
+    def OnPaint(self, event):
+        self.DrawHands(wxPaintDC(self))
+
+
+    def OnQuit(self, event):
+        self.timer.Stop()
+        del self.timer
+
+
+    def OnTimerExpire(self, event):
+        self.DrawHands(wxClientDC(self))
+
+
+    def DrawHands(self, drawDC):
+        # Start by drawing the face bitmap
+        drawDC.DrawBitmap(self.faceBitmap,0,0)
+
+        currentTime = time.localtime(time.time())
+        hour, minutes, seconds = currentTime[3:6]
+
+        W,H = self.faceBitmap.GetWidth(), self.faceBitmap.GetHeight()
+        centerX = W / 2
+        centerY = H / 2
+
+        radius = min(centerX, centerY)
+        hour += minutes / 60.0 # added so the hour hand moves continuously
+        x, y = self.point(hour, 12, (radius * .65))
+        hourX, hourY = (x + centerX), (centerY - y)
+        x, y = self.point(minutes, 60, (radius * .85))
+        minutesX, minutesY = (x + centerX), (centerY - y)
+        x, y = self.point(seconds, 60, (radius * .85))
+        secondsX, secondsY = (x + centerX), (centerY - y)
+
+        # Draw the hour hand...
+        drawDC.SetPen(wxPen(self.GetForegroundColour(), 5, wxSOLID))
+        drawDC.DrawLine(centerX, centerY, hourX, hourY)
+
+        # Draw the minutes hand...
+        drawDC.SetPen(wxPen(self.GetForegroundColour(), 3, wxSOLID))
+        drawDC.DrawLine(centerX, centerY, minutesX, minutesY)
+
+        # Draw the seconds hand...
+        drawDC.SetPen(wxPen(self.GetForegroundColour(), 1, wxSOLID))
+        drawDC.DrawLine(centerX, centerY, secondsX, secondsY)
+
+
+    # Draw the specified set of line marks inside the clock face for the
+    # hours or minutes...
+    def DrawFace(self):
+        backgroundBrush = wxBrush(self.GetBackgroundColour(), wxSOLID)
+        drawDC = wxMemoryDC()
+        drawDC.SelectObject(self.faceBitmap)
+        drawDC.SetBackground(backgroundBrush)
+        drawDC.Clear()
+
+        W,H = self.faceBitmap.GetWidth(), self.faceBitmap.GetHeight()
+        centerX = W / 2
+        centerY = H / 2
+
+        # Draw the marks for hours and minutes...
+        self.DrawTimeMarks(drawDC, self.minuteMarks, centerX, centerY, 4)
+        self.DrawTimeMarks(drawDC, self.hourMarks, centerX, centerY, 9)
+
+
+    def DrawTimeMarks(self, drawDC, markCount, centerX, centerY, markSize):
+        for i in range(markCount):
+            x, y = self.point(i + 1, markCount, min(centerX,centerY) - 16)
+            scaledX = x + centerX - markSize/2
+            scaledY = centerY - y - markSize/2
+
+            drawDC.SetBrush(wxBrush(self.tickMarksBrushC, wxSOLID))
+            drawDC.SetPen(wxPen(self.tickMarksPenC, 1, wxSOLID))
+            if self.tickMarkStyle != self.TICKS_NONE:
+                if self.tickMarkStyle == self.TICKS_CIRCLE:
+                    drawDC.DrawEllipse(scaledX - 2, scaledY, markSize, markSize)
+                else:
+                    drawDC.DrawRectangle(scaledX - 3, scaledY, markSize, markSize)
+
+
+    def point(self, tick, range, radius):
+        angle = tick * (360.0 / range)
+        radiansPerDegree = math.pi / 180
+        pointX = int(round(radius * math.sin(angle * radiansPerDegree)))
+        pointY = int(round(radius * math.cos(angle * radiansPerDegree)))
+        return wxPoint(pointX, pointY)
+
+
+
+
+if __name__ == "__main__":
+    class App(wxApp):
+        def OnInit(self):
+            frame = wxFrame(None, -1, "AnalogClockWindow Test", size=(375,375))
+
+            clock = AnalogClockWindow(frame)
+            clock.SetTickMarkColours("RED")
+            clock.SetHandsColour("WHITE")
+            clock.SetBackgroundColour("BLUE")
+
+            frame.Centre(wxBOTH)
+            frame.Show(True)
+            self.SetTopWindow(frame)
+            return true
+
+    theApp = App(0)
+    theApp.MainLoop()
+
+
+
diff --git a/wxPython/wxPython/lib/calendar.py b/wxPython/wxPython/lib/calendar.py
index 29ba2c753c..f5247dc2be 100644
--- a/wxPython/wxPython/lib/calendar.py
+++ b/wxPython/wxPython/lib/calendar.py
@@ -716,12 +716,12 @@ class CalenDlg(wxDialog):
         monthlist = GetMonthList()
 
     # select the month
-        mID = NewId()
+        mID = wxNewId()
         self.date = wxComboBox(self, mID, Month[start_month], wxPoint(20, 20), wxSize(90, -1), monthlist, wxCB_DROPDOWN)
         EVT_COMBOBOX(self, mID, self.EvtComboBox)
 
     # alternate spin button to control the month
-        mID = NewId()
+        mID = wxNewId()
         h = self.date.GetSize().height
         self.m_spin = wxSpinButton(self, mID, wxPoint(130, 20), wxSize(h*2, h), wxSP_VERTICAL)
         self.m_spin.SetRange(1, 12)
@@ -730,7 +730,7 @@ class CalenDlg(wxDialog):
         EVT_SPIN(self, mID, self.OnMonthSpin)
 
     # spin button to control the year
-        mID = NewId()
+        mID = wxNewId()
         self.dtext = wxTextCtrl(self, -1, str(start_year), wxPoint(160, 20), wxSize(60, -1))
         h = self.dtext.GetSize().height
 
@@ -746,11 +746,11 @@ class CalenDlg(wxDialog):
         y_pos = 280
         but_size = wxSize(60, 25)
 
-        mID = NewId()
+        mID = wxNewId()
         wxButton(self, mID, ' Ok ', wxPoint(x_pos, y_pos), but_size)
         EVT_BUTTON(self, mID, self.OnOk)
 
-        mID = NewId()
+        mID = wxNewId()
         wxButton(self, mID, ' Close ', wxPoint(x_pos + 120, y_pos), but_size)
         EVT_BUTTON(self, mID, self.OnCancel)
 
diff --git a/wxPython/wxPython/lib/dialogs.py b/wxPython/wxPython/lib/dialogs.py
index 920b659af4..5afbd634a2 100644
--- a/wxPython/wxPython/lib/dialogs.py
+++ b/wxPython/wxPython/lib/dialogs.py
@@ -33,15 +33,16 @@ class wxScrolledMessageDialog(wx.wxDialog):
 
 
 class wxMultipleChoiceDialog(wx.wxDialog):
-    def __init__(self, parent, msg, title, lst, pos = wx.wxDefaultPosition, size = (200,200)):
-        wx.wxDialog.__init__(self, parent, -1, title, pos, size)
+    def __init__(self, parent, msg, title, lst, pos = wx.wxDefaultPosition,
+                 size = (200,200), style = wx.wxDEFAULT_DIALOG_STYLE):
+        wx.wxDialog.__init__(self, parent, -1, title, pos, size, style)
         x, y = pos
         if x == -1 and y == -1:
             self.CenterOnScreen(wx.wxBOTH)
         dc = wx.wxClientDC(self)
         height = 0
         for line in msg.splitlines():
-            height = height + dc.GetTextExtent(msg)[1] + 4
+            height = height + dc.GetTextExtent(line)[1] + 2
         stat = wx.wxStaticText(self, -1, msg)
         self.lbox = wx.wxListBox(self, 100, wx.wxDefaultPosition,
                                  wx.wxDefaultSize, lst, wx.wxLB_MULTIPLE)
diff --git a/wxPython/wxPython/lib/evtmgr.py b/wxPython/wxPython/lib/evtmgr.py
index ef6fab004d..4ea2795342 100644
--- a/wxPython/wxPython/lib/evtmgr.py
+++ b/wxPython/wxPython/lib/evtmgr.py
@@ -8,7 +8,7 @@
 #
 # Created:     12-December-2002
 # RCS-ID:      $Id$
-# Copyright:   (c) 2002 by Robb Shecter <robb@acm.org>
+# Copyright:   (c) 2003 by db-X Corporation
 # Licence:     wxWindows license
 #---------------------------------------------------------------------------
 
@@ -32,7 +32,6 @@ programmer to declare or track control ids or parent containers:
 
 This module is Python 2.1+ compatible.
 
-Author: Robb Shecter
 """
 from wxPython import wx
 import pubsub
@@ -176,7 +175,7 @@ class EventManager:
         Return a dictionary with data about my state.
         """
         stats = {}
-        stats['Adapters: Message'] = reduce(lambda x,y: x+y, map(len, self.messageAdapterDict.values()))
+        stats['Adapters: Message'] = reduce(lambda x,y: x+y, [0] + map(len, self.messageAdapterDict.values()))
         stats['Adapters: Event']   = len(self.eventAdapterDict)
         stats['Topics: Total']     = len(self.__getTopics())
         stats['Topics: Dead']      = len(self.GetDeadTopics())
@@ -193,7 +192,7 @@ class EventManager:
         is a problem.
         """
         for topic in self.GetDeadTopics():
-            self.DeregisterTopic(topic)
+            self.__deregisterTopic(topic)
 
 
     def GetDeadTopics(self):
diff --git a/wxPython/wxPython/lib/imagebrowser.py b/wxPython/wxPython/lib/imagebrowser.py
index 6496bb1a13..b1a9e7b13d 100644
--- a/wxPython/wxPython/lib/imagebrowser.py
+++ b/wxPython/wxPython/lib/imagebrowser.py
@@ -133,6 +133,7 @@ class ImageDialog(wxDialog):
         size = wxSize(80, 25)
 
         self.set_dir = os.getcwd()
+        self.set_file = None
 
         if set_dir != None:
             if os.path.exists(set_dir):     # set to working directory if nothing set
diff --git a/wxPython/wxPython/lib/infoframe.py b/wxPython/wxPython/lib/infoframe.py
index f98b7fc5a4..b6d16fe2eb 100644
--- a/wxPython/wxPython/lib/infoframe.py
+++ b/wxPython/wxPython/lib/infoframe.py
@@ -130,12 +130,12 @@ class _MyStatusBar(wxStatusBar):
 
         self.SetStatusText("",0)
 
-        ID = NewId()
+        ID = wxNewId()
         self.button1 = wxButton(self,ID,"Dismiss",
                                style=wxTAB_TRAVERSAL)
         EVT_BUTTON(self,ID,self.OnButton1)
 
-        ID = NewId()
+        ID = wxNewId()
         if not useopenbutton:
             self.button2 = wxButton(self,ID,"Close File",
                                    style=wxTAB_TRAVERSAL)
diff --git a/wxPython/wxPython/lib/intctrl.py b/wxPython/wxPython/lib/intctrl.py
index cf17abdaa4..7ec40a0d3b 100644
--- a/wxPython/wxPython/lib/intctrl.py
+++ b/wxPython/wxPython/lib/intctrl.py
@@ -338,17 +338,18 @@ class wxIntCtrl(wxTextCtrl):
     wxIntCtrl(
          parent, id = -1,
          value = 0,
+         pos = wxDefaultPosition,
+         size = wxDefaultSize,
+         style = 0,
+         validator = wxDefaultValidator,
+         name = "integer",
          min = None,
          max = None,
          limited = False,
          allow_none = False,
          allow_long = False,
          default_color = wxBLACK,
-         oob_color = wxRED,
-         pos = wxDefaultPosition,
-         size = wxDefaultSize,
-         style = 0,
-         name = "integer")
+         oob_color = wxRED )
 
     value
         If no initial value is set, the default will be zero, or
@@ -390,14 +391,22 @@ class wxIntCtrl(wxTextCtrl):
     oob_color
         Color value used for out-of-bounds values of the control
         when the bounds are set but the control is not limited.
+
+    validator
+        Normally None, wxIntCtrl uses its own validator to do value
+        validation and input control.  However, a validator derived
+        from wxIntValidator can be supplied to override the data
+        transfer methods for the wxIntValidator class.
     """
+
     def __init__ (
                 self, parent, id=-1,
+                pos = wxDefaultPosition, size = wxDefaultSize,
+                style = 0, validator = wxDefaultValidator,
+                name = "integer",
                 value = 0, min=None, max=None,
                 limited = 0, allow_none = 0, allow_long = 0,
                 default_color = wxBLACK, oob_color = wxRED,
-                pos = wxDefaultPosition, size = wxDefaultSize,
-                style = 0, name = "integer",
         ):
 
         # Establish attrs required for any operation on value:
@@ -408,10 +417,14 @@ class wxIntCtrl(wxTextCtrl):
         self.__oob_color = wxRED
         self.__allow_none = 0
         self.__allow_long = 0
+        self.__oldvalue = None
+
+        if validator == wxDefaultValidator:
+            validator = wxIntValidator()
 
         wxTextCtrl.__init__(
                 self, parent, id, self._toGUI(0),
-                pos, size, style, wxIntValidator(), name )
+                pos, size, style, validator, name )
 
         # The following lets us set out our "integer update" events:
         EVT_TEXT( self, self.GetId(), self.OnText )
@@ -424,20 +437,28 @@ class wxIntCtrl(wxTextCtrl):
         self.SetNoneAllowed(allow_none)
         self.SetLongAllowed(allow_long)
         self.SetValue(value)
+        self.__oldvalue = 0
 
 
     def OnText( self, event ):
         """
         Handles an event indicating that the text control's value
         has changed, and issue EVT_INT event.
+        NOTE: using wxTextCtrl.SetValue() to change the control's
+        contents from within a EVT_CHAR handler can cause double
+        text events.  So we check for actual changes to the text
+        before passing the events on.
         """
-        try:
-            self.GetEventHandler().ProcessEvent(
-                wxIntUpdatedEvent( self.GetId(), self.GetValue(), self ) )
-        except ValueError:
-            return
-        # let normal processing of the text continue
-        event.Skip()
+        value = self.GetValue()
+        if value != self.__oldvalue:
+            try:
+                self.GetEventHandler().ProcessEvent(
+                    wxIntUpdatedEvent( self.GetId(), self.GetValue(), self ) )
+            except ValueError:
+                return
+            # let normal processing of the text continue
+            event.Skip()
+        self.__oldvalue = value # record for next event
 
 
     def GetValue(self):
@@ -719,6 +740,13 @@ class wxIntCtrl(wxTextCtrl):
         """
         Conversion function used in getting the value of the control.
         """
+
+        # One or more of the underlying text control implementations
+        # issue an intermediate EVT_TEXT when replacing the control's
+        # value, where the intermediate value is an empty string.
+        # So, to ensure consistency and to prevent spurious ValueErrors,
+        # we make the following test, and react accordingly:
+        #
         if value == '':
             if not self.IsNoneAllowed():
                 return 0
@@ -811,7 +839,7 @@ if __name__ == '__main__':
             style = wxDEFAULT_DIALOG_STYLE ):
             wxDialog.__init__(self, parent, id, title, pos, size, style)
 
-            self.int_ctrl = wxIntCtrl(self, NewId(), size=(55,20))
+            self.int_ctrl = wxIntCtrl(self, wxNewId(), size=(55,20))
             self.OK = wxButton( self, wxID_OK, "OK")
             self.Cancel = wxButton( self, wxID_CANCEL, "Cancel")
 
diff --git a/wxPython/wxPython/lib/maskededit.py b/wxPython/wxPython/lib/maskededit.py
new file mode 100644
index 0000000000..0142fb74df
--- /dev/null
+++ b/wxPython/wxPython/lib/maskededit.py
@@ -0,0 +1,5348 @@
+#----------------------------------------------------------------------------
+# Name:         maskededit.py
+# Authors:      Jeff Childers, Will Sadkin
+# Email:        jchilders_98@yahoo.com, wsadkin@nameconnector.com
+# Created:      02/11/2003
+# Copyright:    (c) 2003 by Jeff Childers, 2003
+# Portions:     (c) 2002 by Will Sadkin, 2002-2003
+# RCS-ID:       $Id$
+# License:      wxWindows license
+#----------------------------------------------------------------------------
+# NOTE:
+#   This was written way it is because of the lack of masked edit controls
+#   in wxWindows/wxPython.
+#
+#   wxMaskedEdit controls are based on a suggestion made on [wxPython-Users] by
+#   Jason Hihn, and borrows liberally from Will Sadkin's original masked edit
+#   control for time entry (wxTimeCtrl).
+#
+#   wxMaskedEdit controls do not normally use validators, because they do
+#   careful manipulation of the cursor in the text window on each keystroke,
+#   and validation is cursor-position specific, so the control intercepts the
+#   key codes before the validator would fire.  However, validators can be
+#   provided to do data transfer to the controls.
+##
+
+"""\
+<b>Masked Edit Overview:
+=====================</b>
+  <b>wxMaskedTextCtrl</b>
+      is a sublassed text control that can carefully control
+      the user's input based on a mask string you provide.
+
+      General usage example:
+          control = wxMaskedTextCtrl( win, -1, '', mask = '(###) ###-####')
+
+  The example above will create a text control that allows only numbers to
+  be entered and then only in the positions indicated in the mask by the #
+  character.
+
+  <b>wxMaskedComboBox</b>
+      is a similar subclass of wxComboBox that allows the
+      same sort of masking, but also can do auto-complete of values, and can
+      require the value typed to be in the list of choices to be colored
+      appropriately.
+
+  <b>wxIpAddrCtrl</b>
+      is a special subclass of wxMaskedTextCtrl that handles
+      cursor movement and natural typing of IP addresses.
+
+
+<b>INITILIZATION PARAMETERS
+========================
+mask=</b>
+Allowed mask characters and function:
+    Character   Function
+            #       Allow numeric only (0-9)
+            N       Allow letters and numbers (0-9)
+            A       Allow uppercase letters only
+            a       Allow lowercase letters only
+            C       Allow any letter, upper or lower
+            X       Allow string.letters, string.punctuation, string.digits
+
+
+    These controls define these sets of characters using string.letters,
+    string.uppercase, etc.  These sets are affected by the system locale
+    setting, so in order to have the masked controls accept characters
+    that are specific to your users' language, your application should
+    set the locale.
+    For example, to allow international characters to be used in the
+    above masks, you can place the following in your code as part of
+    your application's initialization code:
+
+      import locale
+      locale.setlocale(locale.LC_ALL, '')
+
+
+  Using these mask characters, a variety of template masks can be built. See
+  the demo for some other common examples include date+time, social security
+  number, etc.  If any of these characters are needed as template rather
+  than mask characters, they can be escaped with \, ie. \N means "literal N".
+  (use \\ for literal backslash, as in: r'CCC\\NNN'.)
+
+
+  <b>Note:</b>
+      Masks containing only # characters and one optional decimal point
+      character are handled specially, as "numeric" controls.  Such
+      controls have special handling for typing the '-' key, handling
+      the "decimal point" character as truncating the ordinal portion,
+      optionally allowing grouping characters and so forth.
+      There are several parameters and format codes that only make sense
+      when combined with such masks, eg. groupChar, decimalChar, and so
+      forth (see below).  These allow you to construct reasonable
+      numeric entry controls.
+
+  <b>Note:</b>
+      Changing the mask for a control deletes any previous field classes
+      (and any associated validation or formatting constraints) for them.
+
+<b>useFixedWidthFont=</b>
+  By default, masked edit controls use a fixed width font, so that
+  the mask characters are fixed within the control, regardless of
+  subsequent modifications to the value.  Set to False if having
+  the control font be the same as other controls is required.
+
+
+<b>formatcodes=</b>
+  These other properties can be passed to the class when instantiating it:
+    Formatcodes are specified as a string of single character formatting
+    codes that modify  behavior of the control:
+            _  Allow spaces
+            !  Force upper
+            ^  Force lower
+            R  right-align field(s)
+            r  right-insert in field(s) (implies R)
+            &lt;  stay in field until explicit navigation out of it
+            ,  Allow grouping character in integer fields of numeric controls
+               and auto-group/regroup digits (if the result fits) when leaving
+               such a field.  (If specified, .SetValue() will attempt to
+               auto-group as well.)
+               ',' is also the default grouping character.  To change the
+               grouping character and/or decimal character, use the groupChar
+               and decimalChar parameters, respectively.
+               Note: typing the "decimal point" character in such fields will
+               clip the value to that left of the cursor for integer
+               fields of controls with "integer" or "floating point" masks.
+               If the ',' format code is specified, this will also cause the
+               resulting digits to be regrouped properly, using the current
+               grouping character.
+            -  Prepend and reserve leading space for sign to mask and allow
+               signed values (negative #s shown in red by default)
+            0  integer fields get leading zeros
+            D  Date[/time] field
+            T  Time field
+            F  Auto-Fit: the control calulates its size from
+               the length of the template mask
+            V  validate entered chars against validRegex before allowing them
+               to be entered vs. being allowed by basic mask and then having
+               the resulting value just colored as invalid.
+               (See USSTATE autoformat demo for how this can be used.)
+            S  select entire field when navigating to new field
+
+<b>fillChar=
+defaultValue=</b>
+  These controls have two options for the initial state of the control.
+  If a blank control with just the non-editable characters showing
+  is desired, simply leave the constructor variable fillChar as its
+  default (' ').  If you want some other character there, simply
+  change the fillChar to that value.  Note: changing the control's fillChar
+  will implicitly reset all of the fields' fillChars to this value.
+
+  If you need different default characters in each mask position,
+  you can specify a defaultValue parameter in the constructor, or
+  set them for each field individually.
+  This value must satisfy the non-editable characters of the mask,
+  but need not conform to the replaceable characters.
+
+<b>groupChar=
+decimalChar=</b>
+  These parameters govern what character is used to group numbers
+  and is used to indicate the decimal point for numeric format controls.
+  The default groupChar is ',', the default decimalChar is '.'
+  By changing these, you can customize the presentation of numbers
+  for your location.
+  eg: formatcodes = ',', groupChar="'"                   allows  12'345.34
+      formatcodes = ',', groupChar='.', decimalChar=','  allows  12.345,34
+
+<b>shiftDecimalChar=</b>
+  The default "shiftDecimalChar" (used for "backwards-tabbing" until
+  shift-tab is fixed in wxPython) is '>' (for QUERTY keyboards.) for
+  other keyboards, you may want to customize this, eg '?' for shift ',' on
+  AZERTY keyboards, ':' or ';' for other European keyboards, etc.
+
+<b>autoCompleteKeycodes=[]</b>
+  By default, DownArrow, PageUp and PageDown will auto-complete a
+  partially entered field.  Shift-DownArrow, Shift-UpArrow, PageUp
+  and PageDown will also auto-complete, but if the field already
+  contains a matched value, these keys will cycle through the list
+  of choices forward or backward as appropriate.  Shift-Up and
+  Shift-Down also take you to the next/previous field after any
+  auto-complete action.
+
+  Additional auto-complete keys can be specified via this parameter.
+  Any keys so specified will act like PageDown.
+
+
+
+<b>Validating User Input:
+======================</b>
+  There are a variety of initialization parameters that are used to validate
+  user input.  These parameters can apply to the control as a whole, and/or
+  to individual fields:
+
+        excludeChars=   A string of characters to exclude even if otherwise allowed
+        includeChars=   A string of characters to allow even if otherwise disallowed
+        validRegex=     Use a regular expression to validate the contents of the text box
+        validRange=     Pass a rangeas list (low,high) to limit numeric fields/values
+        choiceRequired= value must be member of choices list
+        compareNoCase=  Perform case-insensitive matching when validating against list
+        emptyInvalid=   Boolean indicating whether an empty value should be considered invalid
+
+        validFunc=      A function to call of the form: bool = func(candidate_value)
+                        which will return True if the candidate_value satisfies some
+                        external criteria for the control in addition to the the
+                        other validation, or False if not.  (This validation is
+                        applied last in the chain of validations.)
+
+        validRequired=  Boolean indicating whether or not keys that are allowed by the
+                        mask, but result in an invalid value are allowed to be entered
+                        into the control.  Setting this to True implies that a valid
+                        default value is set for the control.
+
+        retainFieldValidation=
+                        False by default; if True, this allows individual fields to
+                        retain their own validation constraints independently of any
+                        subsequent changes to the control's overall parameters.
+
+        validator=      Validators are not normally needed for masked controls, because
+                        of the nature of the validation and control of input.  However,
+                        you can supply one to provide data transfer routines for the
+                        controls.
+
+
+<b>Coloring Behavior:
+==================</b>
+  The following parameters have been provided to allow you to change the default
+  coloring behavior of the control.   These can be set at construction, or via
+  the .SetCtrlParameters() function.  Pass a color as string e.g. 'Yellow':
+
+        emptyBackgroundColor=       Control Background color when identified as empty. Default=White
+        invalidBackgroundColor=     Control Background color when identified as Not valid. Default=Yellow
+        validBackgroundColor=       Control Background color when identified as Valid. Default=white
+
+
+  The following parameters control the default foreground color coloring behavior of the
+  control. Pass a color as string e.g. 'Yellow':
+        foregroundColor=             Control foreground color when value is not negative.  Default=Black
+        signedForegroundColor=      Control foreground color when value is negative. Default=Red
+
+
+<b>Fields:
+=======</b>
+  Each part of the mask that allows user input is considered a field.  The fields
+  are represented by their own class instances.  You can specify field-specific
+  constraints by constructing or accessing the field instances for the control
+  and then specifying those constraints via parameters.
+
+<b>fields=</b>
+  This parameter allows you to specify Field instances containing
+  constraints for the individual fields of a control, eg: local
+  choice lists, validation rules, functions, regexps, etc.
+  It can be either an ordered list or a dictionary.  If a list,
+  the fields will be applied as fields 0, 1, 2, etc.
+  If a dictionary, it should be keyed by field index.
+  the values should be a instances of maskededit.Field.
+
+  Any field not represented by the list or dictionary will be
+  implicitly created by the control.
+
+  eg:
+    fields = [ Field(formatcodes='_r'), Field('choices=['a', 'b', 'c']) ]
+  or
+    fields = {
+              1: ( Field(formatcodes='_R', choices=['a', 'b', 'c']),
+              3: ( Field(choices=['01', '02', '03'], choiceRequired=True)
+             }
+
+  The following parameters are available for individual fields, with the
+  same semantics as for the whole control but applied to the field in question:
+
+    fillChar        # if set for a field, it will override the control's fillChar for that field
+    groupChar       # if set for a field, it will override the control's default
+    defaultValue    # sets field-specific default value; overrides any default from control
+    compareNoCase   # overrides control's settings
+    emptyInvalid    # determines whether field is required to be filled at all times
+    validRequired   # if set, requires field to contain valid value
+
+  If any of the above parameters are subsequently specified for the control as a
+  whole, that new value will be propagated to each field, unless the
+  retainFieldValidation control-level parameter is set.
+
+    formatcodes     # Augments control's settings
+    excludeChars    #     '       '        '
+    includeChars    #     '       '        '
+    validRegex      #     '       '        '
+    validRange      #     '       '        '
+    choices         #     '       '        '
+    choiceRequired  #     '       '        '
+    validFunc       #     '       '        '
+
+
+
+<b>Control Class Functions:
+========================
+  .GetPlainValue(value=None)</b>
+                    Returns the value specified (or the control's text value
+                    not specified) without the formatting text.
+                    In the example above, might return phone no='3522640075',
+                    whereas control.GetValue() would return '(352) 264-0075'
+  <b>.ClearValue()</b>
+                    Returns the control's value to its default, and places the
+                    cursor at the beginning of the control.
+  <b>.SetValue()</b>
+                    Does "smart replacement" of passed value into the control, as does
+                    the .Paste() method.  As with other text entry controls, the
+                    .SetValue() text replacement begins at left-edge of the control,
+                    with missing mask characters inserted as appropriate.
+                    .SetValue will also adjust integer, float or date mask entry values,
+                    adding commas, auto-completing years, etc. as appropriate.
+                    For "right-aligned" numeric controls, it will also now automatically
+                    right-adjust any value whose length is less than the width of the
+                    control before attempting to set the value.
+                    If a value does not follow the format of the control's mask, or will
+                    not fit into the control, a ValueError exception will be raised.
+                    Eg:
+                      mask = '(###) ###-####'
+                          .SetValue('1234567890')           => '(123) 456-7890'
+                          .SetValue('(123)4567890')         => '(123) 456-7890'
+                          .SetValue('(123)456-7890')        => '(123) 456-7890'
+                          .SetValue('123/4567-890')         => illegal paste; ValueError
+
+                      mask = '#{6}.#{2}', formatcodes = '_,-',
+                          .SetValue('111')                  => ' 111   .  '
+                          .SetValue(' %9.2f' % -111.12345 ) => '   -111.12'
+                          .SetValue(' %9.2f' % 1234.00 )    => '  1,234.00'
+                          .SetValue(' %9.2f' % -1234567.12345 ) => insufficient room; ValueError
+
+                      mask = '#{6}.#{2}', formatcodes = '_,-R'  # will right-adjust value for right-aligned control
+                          .SetValue('111')                  => padded value misalignment ValueError: "       111" will not fit
+                          .SetValue('%.2f' % 111 )          => '    111.00'
+                          .SetValue('%.2f' % -111.12345 )   => '   -111.12'
+
+
+  <b>.IsValid(value=None)</b>
+                    Returns True if the value specified (or the value of the control
+                    if not specified) passes validation tests
+  <b>.IsEmpty(value=None)</b>
+                    Returns True if the value specified (or the value of the control
+                    if not specified) is equal to an "empty value," ie. all
+                    editable characters == the fillChar for their respective fields.
+  <b>.IsDefault(value=None)</b>
+                    Returns True if the value specified (or the value of the control
+                    if not specified) is equal to the initial value of the control.
+
+  <b>.Refresh()</b>
+                    Recolors the control as appropriate to its current settings.
+
+  <b>.SetCtrlParameters(**kwargs)</b>
+                    This function allows you to set up and/or change the control parameters
+                    after construction; it takes a list of key/value pairs as arguments,
+                    where the keys can be any of the mask-specific parameters in the constructor.
+                    Eg:
+                        ctl = wxMaskedTextCtrl( self, -1 )
+                        ctl.SetCtrlParameters( mask='###-####',
+                                               defaultValue='555-1212',
+                                               formatcodes='F')
+
+  <b>.GetCtrlParameter(parametername)</b>
+                    This function allows you to retrieve the current value of a parameter
+                    from the control.
+
+  <b>.SetFieldParameters(field_index, **kwargs)</b>
+                    This function allows you to specify change individual field
+                    parameters after construction. (Indices are 0-based.)
+
+  <b>.GetFieldParameter(field_index, parametername)</b>
+                    Allows the retrieval of field parameters after construction
+
+
+The control detects certain common constructions. In order to use the signed feature
+(negative numbers and coloring), the mask has to be all numbers with optionally one
+decimal. Without a decimal (e.g. '######', the control will treat it as an integer
+value. With a decimal (e.g. '###.##'), the control will act as a decimal control
+(i.e. press decimal to 'tab' to the decimal position). Pressing decimal in the
+integer control truncates the value.
+
+
+Check your controls by calling each control's .IsValid() function and the
+.IsEmpty() function to determine which controls have been a) filled in and
+b) filled in properly.
+
+
+Regular expression validations can be used flexibly and creatively.
+Take a look at the demo; the zip-code validation succeeds as long as the
+first five numerals are entered. the last four are optional, but if
+any are entered, there must be 4 to be valid.
+
+"""
+
+"""
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+DEVELOPER COMMENTS:
+
+Naming Conventions
+------------------
+  All methods of the Mixin that are not meant to be exposed to the external
+  interface are prefaced with '_'.  Those functions that are primarily
+  intended to be internal subroutines subsequently start with a lower-case
+  letter; those that are primarily intended to be used and/or overridden
+  by derived subclasses start with a capital letter.
+
+  The following methods must be used and/or defined when deriving a control
+  from wxMaskedEditMixin.  NOTE: if deriving from a *masked edit* control
+  (eg. class wxIpAddrCtrl(wxMaskedTextCtrl) ), then this is NOT necessary,
+  as it's already been done for you in the base class.
+
+        ._SetInitialValue()
+                        This function must be called after the associated base
+                        control has been initialized in the subclass __init__
+                        function.  It sets the initial value of the control,
+                        either to the value specified if non-empty, the
+                        default value if specified, or the "template" for
+                        the empty control as necessary.  It will also set/reset
+                        the font if necessary and apply formatting to the
+                        control at this time.
+
+        ._GetSelection()
+                        REQUIRED
+                        Each class derived from wxMaskedEditMixin must define
+                        the function for getting the start and end of the
+                        current text selection.  The reason for this is
+                        that not all controls have the same function name for
+                        doing this; eg. wxTextCtrl uses .GetSelection(),
+                        whereas we had to write a .GetMark() function for
+                        wxComboBox, because .GetSelection() for the control
+                        gets the currently selected list item from the combo
+                        box, and the control doesn't (yet) natively provide
+                        a means of determining the text selection.
+        ._SetSelection()
+                        REQUIRED
+                        Similarly to _GetSelection, each class derived from
+                        wxMaskedEditMixin must define the function for setting
+                        the start and end of the current text selection.
+                        (eg. .SetSelection() for wxMaskedTextCtrl, and .SetMark() for
+                        wxMaskedComboBox.
+
+        ._GetInsertionPoint()
+        ._SetInsertionPoint()
+                        REQUIRED
+                        For consistency, and because the mixin shouldn't rely
+                        on fixed names for any manipulations it does of any of
+                        the base controls, we require each class derived from
+                        wxMaskedEditMixin to define these functions as well.
+
+        ._GetValue()
+        ._SetValue()    REQUIRED
+                        Each class derived from wxMaskedEditMixin must define
+                        the functions used to get and set the raw value of the
+                        control.
+                        This is necessary so that recursion doesn't take place
+                        when setting the value, and so that the mixin can
+                        call the appropriate function after doing all its
+                        validation and manipulation without knowing what kind
+                        of base control it was mixed in with.
+
+        .Cut()
+        .Paste()
+        .SetValue()     REQUIRED
+                        Each class derived from wxMaskedEditMixin must redefine
+                        these functions to call the _Cut(), _Paste() and _Paste()
+                        methods, respectively for the control, so as to prevent
+                        programmatic corruption of the control's value.  This
+                        must be done in each derivation, as the mixin cannot
+                        itself override a member of a sibling class.
+
+        ._Refresh()     REQUIRED
+                        Each class derived from wxMaskedEditMixin must define
+                        the function used to refresh the base control.
+
+        .Refresh()      REQUIRED
+                        Each class derived from wxMaskedEditMixin must redefine
+                        this function so that it checks the validity of the
+                        control (via self._CheckValid) and then refreshes
+                        control using the base class method.
+
+        ._IsEditable()  REQUIRED
+                        Each class derived from wxMaskedEditMixin must define
+                        the function used to determine if the base control is
+                        editable or not.  (For wxMaskedComboBox, this has to
+                        be done with code, rather than specifying the proper
+                        function in the base control, as there isn't one...)
+
+
+
+Event Handling
+--------------
+  Event handlers are "chained", and wxMaskedEditMixin usually
+  swallows most of the events it sees, thereby preventing any other
+  handlers from firing in the chain.  It is therefore required that
+  each class derivation using the mixin to have an option to hook up
+  the event handlers itself or forego this operation and let a
+  subclass of the masked control do so.  For this reason, each
+  subclass should probably include the following code:
+
+    if setupEventHandling:
+        ## Setup event handlers
+        EVT_SET_FOCUS( self, self._OnFocus )        ## defeat automatic full selection
+        EVT_KILL_FOCUS( self, self._OnKillFocus )   ## run internal validator
+        EVT_LEFT_DCLICK(self, self._OnDoubleClick)  ## select field under cursor on dclick
+        EVT_KEY_DOWN( self, self._OnKeyDown )       ## capture control events not normally seen, eg ctrl-tab.
+        EVT_CHAR( self, self._OnChar )              ## handle each keypress
+        EVT_TEXT( self, self.GetId(), self._OnTextChange )  ## color control appropriately
+
+  where setupEventHandling is an argument to its constructor.
+
+  These 5 handlers must be "wired up" for the wxMaskedEdit
+  control to provide default behavior.  (The setupEventHandling
+  is an argument to wxMaskedTextCtrl and wxMaskedComboBox, so
+  that controls derived from *them* may replace one of these
+  handlers if they so choose.)
+
+  If your derived control wants to preprocess events before
+  taking action, it should then set up the event handling itself,
+  so it can be first in the event handler chain.
+
+
+  The following routines are available to facilitate changing
+  the default behavior of wxMaskedEdit controls:
+
+        ._SetKeycodeHandler(keycode, func)
+        ._SetKeyHandler(char, func)
+                        Use to replace default handling for any given keycode.
+                        func should take the key event as argument and return
+                        False if no further action is required to handle the
+                        key. Eg:
+                            self._SetKeycodeHandler(WXK_UP, self.IncrementValue)
+                            self._SetKeyHandler('-', self._OnChangeSign)
+
+        "Navigation" keys are assumed to change the cursor position, and
+        therefore don't cause automatic motion of the cursor as insertable
+        characters do.
+
+        ._AddNavKeycode(keycode, handler=None)
+        ._AddNavKey(char, handler=None)
+                        Allows controls to specify other keys (and optional handlers)
+                        to be treated as navigational characters. (eg. '.' in wxIpAddrCtrl)
+
+        ._GetNavKeycodes()  Returns the current list of navigational keycodes.
+
+        ._SetNavKeycodes(key_func_tuples)
+                        Allows replacement of the current list of keycode
+                        processed as navigation keys, and bind associated
+                        optional keyhandlers. argument is a list of key/handler
+                        tuples.  Passing a value of None for the handler in a
+                        given tuple indicates that default processing for the key
+                        is desired.
+
+        ._FindField(pos) Returns the Field object associated with this position
+                        in the control.
+
+        ._FindFieldExtent(pos, getslice=False, value=None)
+                        Returns edit_start, edit_end of the field corresponding
+                        to the specified position within the control, and
+                        optionally also returns the current contents of that field.
+                        If value is specified, it will retrieve the slice the corresponding
+                        slice from that value, rather than the current value of the
+                        control.
+
+        ._AdjustField(pos)
+                        This is, the function that gets called for a given position
+                        whenever the cursor is adjusted to leave a given field.
+                        By default, it adjusts the year in date fields if mask is a date,
+                        It can be overridden by a derived class to
+                        adjust the value of the control at that time.
+                        (eg. wxIpAddrCtrl reformats the address in this way.)
+
+        ._Change()      Called by internal EVT_TEXT handler. Return False to force
+                        skip of the normal class change event.
+        ._Keypress(key) Called by internal EVT_CHAR handler. Return False to force
+                        skip of the normal class keypress event.
+        ._LostFocus()   Called by internal EVT_KILL_FOCUS handler
+
+        ._OnKeyDown(event)
+                        This is the default EVT_KEY_DOWN routine; it just checks for
+                        "navigation keys", and if event.ControlDown(), it fires the
+                        mixin's _OnChar() routine, as such events are not always seen
+                        by the "cooked" EVT_CHAR routine.
+
+        ._OnChar(event) This is the main EVT_CHAR handler for the
+                        wxMaskedEditMixin.
+
+    The following routines are used to handle standard actions
+    for control keys:
+        _OnArrow(event)         used for arrow navigation events
+        _OnCtrl_A(event)        'select all'
+        _OnCtrl_S(event)        'save' (does nothing)
+        _OnCtrl_V(event)        'paste' - calls _Paste() method, to do smart paste
+        _OnCtrl_X(event)        'cut'   - calls _Cut() method, to "erase" selection
+
+        _OnChangeField(event)   primarily used for tab events, but can be
+                                used for other keys (eg. '.' in wxIpAddrCtrl)
+
+        _OnErase(event)         used for backspace and delete
+        _OnHome(event)
+        _OnEnd(event)
+
+"""
+
+from wxPython.wx import *
+import string, re, copy
+
+from wxPython.tools.dbg import Logger
+dbg = Logger()
+dbg(enable=0)
+
+## ---------- ---------- ---------- ---------- ---------- ---------- ----------
+
+## Constants for identifying control keys and classes of keys:
+
+WXK_CTRL_X = (ord('X')+1) - ord('A')   ## These keys are not already defined in wx
+WXK_CTRL_V = (ord('V')+1) - ord('A')
+WXK_CTRL_C = (ord('C')+1) - ord('A')
+WXK_CTRL_S = (ord('S')+1) - ord('A')
+WXK_CTRL_A = (ord('A')+1) - ord('A')
+
+nav =     (WXK_BACK, WXK_LEFT, WXK_RIGHT, WXK_UP, WXK_DOWN, WXK_TAB, WXK_HOME, WXK_END, WXK_RETURN, WXK_PRIOR, WXK_NEXT)
+control = (WXK_BACK, WXK_DELETE, WXK_CTRL_A, WXK_CTRL_C, WXK_CTRL_S, WXK_CTRL_V, WXK_CTRL_X)
+
+
+## ---------- ---------- ---------- ---------- ---------- ---------- ----------
+
+## Constants for masking. This is where mask characters
+## are defined.
+##  maskchars used to identify valid mask characters from all others
+##   #- allow numeric 0-9 only
+##   A- allow uppercase only. Combine with forceupper to force lowercase to upper
+##   a- allow lowercase only. Combine with forcelower to force upper to lowercase
+##   X- allow any character (string.letters, string.punctuation, string.digits)
+## Note: locale settings affect what "uppercase", lowercase, etc comprise.
+##
+maskchars = ("#","A","a","X","C","N")
+
+months = '(01|02|03|04|05|06|07|08|09|10|11|12)'
+charmonths = '(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC|jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)'
+charmonths_dict = {'jan': 1, 'feb': 2, 'mar': 3, 'apr': 4, 'may': 5, 'jun': 6,
+                   'jul': 7, 'aug': 8, 'sep': 9, 'oct': 10, 'nov': 11, 'dec': 12}
+
+days   = '(01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)'
+hours  = '(0\d| \d|1[012])'
+milhours = '(00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23)'
+minutes = """(00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|\
+16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|\
+36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|\
+56|57|58|59)"""
+seconds = minutes
+am_pm_exclude = 'BCDEFGHIJKLMNOQRSTUVWXYZ\x8a\x8c\x8e\x9f\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc\xdd\xde'
+
+states = "AL,AK,AZ,AR,CA,CO,CT,DE,DC,FL,GA,GU,HI,ID,IL,IN,IA,KS,KY,LA,MA,ME,MD,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,OH,OK,OR,PA,PR,RI,SC,SD,TN,TX,UT,VA,VT,VI,WA,WV,WI,WY".split(',')
+
+
+## ---------- ---------- ---------- ---------- ---------- ---------- ----------
+
+## The following table defines the current set of autoformat codes:
+
+masktags = {
+       #  Name: (mask, excludeChars, formatcodes, validRegex, choices, choiceRequired, description)
+       "USPHONEFULLEXT":("(###) ###-#### x:###","",'F^-R',"^\(\d{3}\) \d{3}-\d{4}",[], False, "Phone Number w/opt. ext"),
+       "USPHONETIGHTEXT":("###-###-#### x:###","",'F^-R',"^\d{3}-\d{3}-\d{4}",[], False, "Phone Number\n (w/hyphens and opt. ext)"),
+       "USPHONEFULL":("(###) ###-####","",'F^-R',"^\(\d{3}\) \d{3}-\d{4}",[], False, "Phone Number only"),
+       "USPHONETIGHT":("###-###-####","",'F^-R',"^\d{3}-\d{3}-\d{4}",[], False, "Phone Number\n(w/hyphens)"),
+       "USSTATE":("AA","",'F!V',"([ACDFGHIKLMNOPRSTUVW] |%s)" % string.join(states,'|'), states, True, "US State"),
+
+       "USDATETIMEMMDDYYYY/HHMMSS":("##/##/#### ##:##:## AM",am_pm_exclude,'DF!','^' + months + '/' + days + '/' + '\d{4} ' + hours + ':' + minutes + ':' + seconds + ' (A|P)M',[], False, "US Date + Time"),
+       "USDATETIMEMMDDYYYY-HHMMSS":("##-##-#### ##:##:## AM",am_pm_exclude,'DF!','^' + months + '-' + days + '-' + '\d{4} ' + hours + ':' + minutes + ':' + seconds + ' (A|P)M',[], False, "US Date + Time\n(w/hypens)"),
+       "USDATEMILTIMEMMDDYYYY/HHMMSS":("##/##/#### ##:##:##",'','DF','^' + months + '/' + days + '/' + '\d{4} ' + milhours + ':' + minutes + ':' + seconds,[], False, "US Date + Military Time"),
+       "USDATEMILTIMEMMDDYYYY-HHMMSS":("##-##-#### ##:##:##",'','DF','^' + months + '-' + days + '-' + '\d{4} ' + milhours + ':' + minutes + ':' + seconds,[], False, "US Date + Military Time\n(w/hypens)"),
+       "USDATETIMEMMDDYYYY/HHMM":("##/##/#### ##:## AM",am_pm_exclude,'DF!','^' + months + '/' + days + '/' + '\d{4} ' + hours + ':' + minutes + ' (A|P)M',[], False, "US Date + Time\n(without seconds)"),
+       "USDATEMILTIMEMMDDYYYY/HHMM":("##/##/#### ##:##",'','DF','^' + months + '/' + days + '/' + '\d{4} ' + milhours + ':' + minutes,[], False, "US Date + Military Time\n(without seconds)"),
+       "USDATETIMEMMDDYYYY-HHMM":("##-##-#### ##:## AM",am_pm_exclude,'DF!','^' + months + '-' + days + '-' + '\d{4} ' + hours + ':' + minutes + ' (A|P)M',[], False, "US Date + Time\n(w/hypens and w/o secs)"),
+       "USDATEMILTIMEMMDDYYYY-HHMM":("##-##-#### ##:##",'','DF','^' + months + '-' + days + '-' + '\d{4} ' + milhours + ':' + minutes,[], False, "US Date + Military Time\n(w/hyphens and w/o seconds)"),
+       "USDATEMMDDYYYY/":("##/##/####",'','DF','^' + months + '/' + days + '/' + '\d{4}',[], False, "US Date\n(MMDDYYYY)"),
+       "USDATEMMDDYY/":("##/##/##",'','DF','^' + months + '/' + days + '/\d\d',[], False, "US Date\n(MMDDYY)"),
+       "USDATEMMDDYYYY-":("##-##-####",'','DF','^' + months + '-' + days + '-' +'\d{4}',[], False, "MM-DD-YYYY"),
+
+       "EUDATEYYYYMMDD/":("####/##/##",'','DF','^' + '\d{4}'+ '/' + months + '/' + days,[], False, "YYYY/MM/DD"),
+       "EUDATEYYYYMMDD.":("####.##.##",'','DF','^' + '\d{4}'+ '.' + months + '.' + days,[], False, "YYYY.MM.DD"),
+       "EUDATEDDMMYYYY/":("##/##/####",'','DF','^' + days + '/' + months + '/' + '\d{4}',[], False, "DD/MM/YYYY"),
+       "EUDATEDDMMYYYY.":("##.##.####",'','DF','^' + days + '.' + months + '.' + '\d{4}',[], False, "DD.MM.YYYY"),
+       "EUDATEDDMMMYYYY.":("##.CCC.####",'','DF','^' + days + '.' + charmonths + '.' + '\d{4}',[], False, "DD.Month.YYYY"),
+       "EUDATEDDMMMYYYY/":("##/CCC/####",'','DF','^' + days + '/' + charmonths + '/' + '\d{4}',[], False, "DD/Month/YYYY"),
+
+       "EUDATETIMEYYYYMMDD/HHMMSS":("####/##/## ##:##:## AM",am_pm_exclude,'DF!','^' + '\d{4}'+ '/' + months + '/' + days + ' ' + hours + ':' + minutes + ':' + seconds + ' (A|P)M',[], False, "YYYY/MM/DD HH:MM:SS"),
+       "EUDATETIMEYYYYMMDD.HHMMSS":("####.##.## ##:##:## AM",am_pm_exclude,'DF!','^' + '\d{4}'+ '.' + months + '.' + days + ' ' + hours + ':' + minutes + ':' + seconds + ' (A|P)M',[], False, "YYYY.MM.DD HH:MM:SS"),
+       "EUDATETIMEDDMMYYYY/HHMMSS":("##/##/#### ##:##:## AM",am_pm_exclude,'DF!','^' + days + '/' + months + '/' + '\d{4} ' + hours + ':' + minutes + ':' + seconds + ' (A|P)M',[], False, "DD/MM/YYYY HH:MM:SS"),
+       "EUDATETIMEDDMMYYYY.HHMMSS":("##.##.#### ##:##:## AM",am_pm_exclude,'DF!','^' + days + '.' + months + '.' + '\d{4} ' + hours + ':' + minutes + ':' + seconds + ' (A|P)M',[], False, "DD.MM.YYYY HH:MM:SS"),
+
+       "EUDATETIMEYYYYMMDD/HHMM":("####/##/## ##:## AM",am_pm_exclude,'DF!','^' + '\d{4}'+ '/' + months + '/' + days + ' ' + hours + ':' + minutes + ' (A|P)M',[], False, "YYYY/MM/DD HH:MM"),
+       "EUDATETIMEYYYYMMDD.HHMM":("####.##.## ##:## AM",am_pm_exclude,'DF!','^' + '\d{4}'+ '.' + months + '.' + days + ' ' + hours + ':' + minutes + ' (A|P)M',[], False, "YYYY.MM.DD HH:MM"),
+       "EUDATETIMEDDMMYYYY/HHMM":("##/##/#### ##:## AM",am_pm_exclude,'DF!','^' + days + '/' + months + '/' + '\d{4} ' + hours + ':' + minutes + ' (A|P)M',[], False, "DD/MM/YYYY HH:MM"),
+       "EUDATETIMEDDMMYYYY.HHMM":("##.##.#### ##:## AM",am_pm_exclude,'DF!','^' + days + '.' + months + '.' + '\d{4} ' + hours + ':' + minutes + ' (A|P)M',[], False, "DD.MM.YYYY HH:MM"),
+
+       "EUDATEMILTIMEYYYYMMDD/HHMMSS":("####/##/## ##:##:##",'','DF','^' + '\d{4}'+ '/' + months + '/' + days + ' ' + milhours + ':' + minutes + ':' + seconds,[], False, "YYYY/MM/DD Mil. Time"),
+       "EUDATEMILTIMEYYYYMMDD.HHMMSS":("####.##.## ##:##:##",'','DF','^' + '\d{4}'+ '.' + months + '.' + days + ' ' + milhours + ':' + minutes + ':' + seconds,[], False, "YYYY.MM.DD Mil. Time"),
+       "EUDATEMILTIMEDDMMYYYY/HHMMSS":("##/##/#### ##:##:##",'','DF','^' + days + '/' + months + '/' + '\d{4} ' + milhours + ':' + minutes + ':' + seconds,[], False, "DD/MM/YYYY Mil. Time"),
+       "EUDATEMILTIMEDDMMYYYY.HHMMSS":("##.##.#### ##:##:##",'','DF','^' + days + '.' + months + '.' + '\d{4} ' + milhours + ':' + minutes + ':' + seconds,[], False, "DD.MM.YYYY Mil. Time"),
+       "EUDATEMILTIMEYYYYMMDD/HHMM":("####/##/## ##:##",'','DF','^' + '\d{4}'+ '/' + months + '/' + days + ' ' + milhours + ':' + minutes,[], False, "YYYY/MM/DD Mil. Time\n(w/o seconds)"),
+       "EUDATEMILTIMEYYYYMMDD.HHMM":("####.##.## ##:##",'','DF','^' + '\d{4}'+ '.' + months + '.' + days + ' ' + milhours + ':' + minutes,[], False, "YYYY.MM.DD Mil. Time\n(w/o seconds)"),
+       "EUDATEMILTIMEDDMMYYYY/HHMM":("##/##/#### ##:##",'','DF','^' + days + '/' + months + '/' + '\d{4} ' + milhours + ':' + minutes,[], False, "DD/MM/YYYY Mil. Time\n(w/o seconds)"),
+       "EUDATEMILTIMEDDMMYYYY.HHMM":("##.##.#### ##:##",'','DF','^' + days + '.' + months + '.' + '\d{4} ' + milhours + ':' + minutes,[], False, "DD.MM.YYYY Mil. Time\n(w/o seconds)"),
+
+       "TIMEHHMMSS":("##:##:## AM", am_pm_exclude, 'TF!', '^' + hours + ':' + minutes + ':' + seconds + ' (A|P)M',[], False, "HH:MM:SS (A|P)M\n(see wxTimeCtrl)"),
+       "TIMEHHMM":("##:## AM", am_pm_exclude, 'TF!', '^' + hours + ':' + minutes + ' (A|P)M',[], False, "HH:MM (A|P)M\n(see wxTimeCtrl)"),
+       "MILTIMEHHMMSS":("##:##:##", "", 'TF', '^' + milhours + ':' + minutes + ':' + seconds,[], False, "Military HH:MM:SS\n(see wxTimeCtrl)"),
+       "MILTIMEHHMM":("##:##", "", 'TF', '^' + milhours + ':' + minutes,[], False, "Military HH:MM\n(see wxTimeCtrl)"),
+       "USSOCIALSEC":("###-##-####","",'F',"\d{3}-\d{2}-\d{4}",[], False, "Social Sec#"),
+       "CREDITCARD":("####-####-####-####","",'F',"\d{4}-\d{4}-\d{4}-\d{4}",[], False, "Credit Card"),
+       "EXPDATEMMYY":("##/##", "", "F", "^" + months + "/\d\d",[], False, "Expiration MM/YY"),
+       "USZIP":("#####","",'F',"^\d{5}",[], False, "US 5-digit zip code"),
+       "USZIPPLUS4":("#####-####","",'F',"\d{5}-(\s{4}|\d{4})",[], False, "US zip+4 code"),
+       "PERCENT":("0.##","",'F',"^0.\d\d",[], False, "Percentage"),
+       "AGE":("###","","F","^[1-9]{1}  |[1-9][0-9] |1[0|1|2][0-9]",[], False, "Age"),
+       "EMAIL":("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"," \\/*&%$#!+='\"","F",
+                "[a-zA-Z]\w*(\.\w+)*@\w+\.([a-zA-Z]\w*\.)*(com|org|net|edu|mil|gov|(co\.)?\w\w) *$",[], False, "Email address"),
+       "IPADDR":("###.###.###.###", "", 'F_Sr<',
+                 "(  \d| \d\d|(1\d\d|2[0-4]\d|25[0-5]))(\.(  \d| \d\d|(1\d\d|2[0-4]\d|25[0-5]))){3}",[], False, "IP Address\n(see wxIpAddrCtrl)")
+       }
+
+# build demo-friendly dictionary of descriptions of autoformats
+autoformats = []
+for key, value in masktags.items():
+    autoformats.append((key, value[6]))
+autoformats.sort()
+
+## ---------- ---------- ---------- ---------- ---------- ---------- ----------
+
+class Field:
+    valid_params = {
+              'index': None,                    ## which field of mask; set by parent control.
+              'mask': "",                       ## mask chars for this field
+              'extent': (),                     ## (edit start, edit_end) of field; set by parent control.
+              'formatcodes':  "",               ## codes indicating formatting options for the control
+              'fillChar':     ' ',              ## used as initial value for each mask position if initial value is not given
+              'groupChar':    ',',              ## used with numeric fields; indicates what char groups 3-tuple digits
+              'decimalChar':  '.',              ## used with numeric fields; indicates what char separates ordinal from fraction
+              'shiftDecimalChar': '>',          ## used with numeric fields, indicates what is above the decimal point char on keyboard
+              'defaultValue': "",               ## use if you want different positional defaults vs. all the same fillChar
+              'excludeChars': "",               ## optional string of chars to exclude even if main mask type does
+              'includeChars': "",               ## optional string of chars to allow even if main mask type doesn't
+              'validRegex':   "",               ## optional regular expression to use to validate the control
+              'validRange':   (),               ## Optional hi-low range for numerics
+              'choices':    [],                 ## Optional list for character expressions
+              'choiceRequired': False,          ## If choices supplied this specifies if valid value must be in the list
+              'validFunc': None,                ## Optional function for defining additional, possibly dynamic validation constraints on contrl
+              'compareNoCase': False,           ## Optional flag to indicate whether or not to use case-insensitive list search
+              'validRequired': False,           ## Set to True to disallow input that results in an invalid value
+              'emptyInvalid':  False,           ## Set to True to make EMPTY = INVALID
+              }
+
+
+    def __init__(self, **kwargs):
+        """
+        This is the "constructor" for setting up parameters for fields.
+        a field_index of -1 is used to indicate "the entire control."
+        """
+##        dbg('Field::Field', indent=1)
+        # Validate legitimate set of parameters:
+        for key in kwargs.keys():
+            if key not in Field.valid_params.keys():
+                raise TypeError('invalid parameter "%s"' % (key))
+
+        # Set defaults for each parameter for this instance, and fully
+        # populate initial parameter list for configuration:
+        for key, value in Field.valid_params.items():
+            setattr(self, '_' + key, copy.copy(value))
+            if not kwargs.has_key(key):
+                kwargs[key] = copy.copy(value)
+
+        self._SetParameters(**kwargs)
+
+##        dbg(indent=0)
+
+
+    def _SetParameters(self, **kwargs):
+        """
+        This function can be used to set individual or multiple parameters for
+        a masked edit field parameter after construction.
+        """
+        dbg(suspend=1)
+        dbg('maskededit.Field::_SetParameters', indent=1)
+        # Validate keyword arguments:
+        for key in kwargs.keys():
+            if key not in Field.valid_params.keys():
+                raise AttributeError('invalid keyword argument "%s"' % key)
+
+        if self._index is not None: dbg('field index:', self._index)
+        dbg('parameters:', indent=1)
+        for key, value in kwargs.items():
+            dbg('%s:' % key, value)
+        dbg(indent=0)
+
+        # First, Assign all parameters specified:
+        for key in Field.valid_params.keys():
+            if kwargs.has_key(key):
+                setattr(self, '_' + key, kwargs[key] )
+
+        # Now go do validation, semantic and inter-dependency parameter processing:
+        if kwargs.has_key('choiceRequired'): # (set/changed)
+            if self._choiceRequired:
+                self._choices = [choice.strip() for choice in self._choices]
+
+        if kwargs.has_key('compareNoCase'): # (set/changed)
+            if self._compareNoCase and self._choices:
+                self._choices = [item.lower() for item in self._choices]
+                dbg('modified choices:', self._choices)
+
+        if kwargs.has_key('formatcodes'):   # (set/changed)
+            self._forceupper  = '!' in self._formatcodes
+            self._forcelower  = '^' in self._formatcodes
+            self._groupdigits = ',' in self._formatcodes
+            self._okSpaces    = '_' in self._formatcodes
+            self._padZero     = '0' in self._formatcodes
+            self._autofit     = 'F' in self._formatcodes
+            self._insertRight = 'r' in self._formatcodes
+            self._alignRight  = 'R' in self._formatcodes or 'r' in self._formatcodes
+            self._moveOnFieldFull = not '<' in self._formatcodes
+            self._selectOnFieldEntry = 'S' in self._formatcodes
+
+            if self._groupdigits:
+                if kwargs.has_key('groupChar'):
+                    self._groupChar = kwargs['groupChar']
+            if kwargs.has_key('decimalChar'):
+                self._decimalChar = kwargs['decimalChar']
+            if kwargs.has_key('shiftDecimalChar'):
+                self._shiftDecimalChar = kwargs['shiftDecimalChar']
+
+        if kwargs.has_key('formatcodes') or kwargs.has_key('validRegex'):
+            self._regexMask   = 'V' in self._formatcodes and self._validRegex
+
+        if kwargs.has_key('validRegex'):    # (set/changed)
+            if self._validRegex:
+                try:
+                    if self._compareNoCase:
+                        self._filter = re.compile(self._validRegex, re.IGNORECASE)
+                    else:
+                        self._filter = re.compile(self._validRegex)
+                except:
+                    raise TypeError('%s: validRegex "%s" not a legal regular expression' % (str(self._index), self._validRegex))
+            else:
+                self._filter = None
+
+        if kwargs.has_key('mask') or kwargs.has_key('validRegex'):  # (set/changed)
+            self._isInt = isInteger(self._mask)
+            dbg('isInt?', self._isInt)
+
+        if kwargs.has_key('validRange'):    # (set/changed)
+            self._hasRange  = False
+            self._rangeHigh = 0
+            self._rangeLow  = 0
+            if self._validRange:
+                if type(self._validRange) != type(()) or len( self._validRange )!= 2 or self._validRange[0] >= self._validRange[1]:
+                    raise TypeError('%s: validRange %s parameter must be tuple of form (a,b) where a < b'
+                                    % (str(self._index), repr(self._validRange)) )
+
+                self._hasRange  = True
+                self._rangeLow  = self._validRange[0]
+                self._rangeHigh = self._validRange[1]
+
+        if kwargs.has_key('choices'):       # (set/changed)
+            self._hasList   = False
+            if type(self._choices) not in (type(()), type([])):
+                raise TypeError('%s: choices must be a sequence of strings' % str(self._index))
+            elif len( self._choices) > 0:
+                for choice in self._choices:
+                    if type(choice) != type(''):
+                        raise TypeError('%s: choices must be a sequence of strings' % str(self._index))
+
+                # Verify each choice specified is valid:
+                for choice in self._choices:
+                    if not self.IsValid(choice):
+                        raise ValueError('%s: "%s" is not a valid value for the control as specified.' % (str(self._index), choice))
+                self._hasList = True
+
+        # reset field validity assumption:
+        self._valid = True
+        dbg(indent=0, suspend=0)
+
+
+    def _GetParameter(self, paramname):
+        """
+        Routine for retrieving the value of any given parameter
+        """
+        if Field.valid_params.has_key(paramname):
+            return getattr(self, '_' + paramname)
+        else:
+            TypeError('Field._GetParameter: invalid parameter "%s"' % key)
+
+
+    def IsEmpty(self, slice):
+        """
+        Indicates whether the specified slice is considered empty for the
+        field.
+        """
+        dbg('Field::IsEmpty("%s")' % slice, indent=1)
+        if not hasattr(self, '_template'):
+            raise AttributeError('_template')
+
+        dbg('self._template: "%s"' % self._template)
+        dbg('self._defaultValue: "%s"' % str(self._defaultValue))
+        if slice == self._template and not self._defaultValue:
+            dbg(indent=0)
+            return True
+
+        elif slice == self._template:
+            empty = True
+            for pos in range(len(self._template)):
+##                dbg('slice[%(pos)d] != self._fillChar?' %locals(), slice[pos] != self._fillChar[pos])
+                if slice[pos] not in (' ', self._fillChar):
+                    empty = False
+                    break
+            dbg("IsEmpty? %(empty)d (do all mask chars == fillChar?)" % locals(), indent=0)
+            return empty
+        else:
+            dbg("IsEmpty? 0 (slice doesn't match template)", indent=0)
+            return False
+
+
+    def IsValid(self, slice):
+        """
+        Indicates whether the specified slice is considered a valid value for the
+        field.
+        """
+        dbg(suspend=1)
+        dbg('Field[%s]::IsValid("%s")' % (str(self._index), slice), indent=1)
+        valid = True    # assume true to start
+
+        if self._emptyInvalid and self.IsEmpty(slice):
+            valid = False
+
+        elif self._hasList and self._choiceRequired:
+            dbg("(member of list required)")
+            # do case-insensitive match on list; strip surrounding whitespace from slice (already done for choices):
+            compareStr = slice.strip()
+            if self._compareNoCase:
+                compareStr = compareStr.lower()
+            valid = (compareStr in self._choices)
+
+        elif self._hasRange and not self.IsEmpty(slice):
+            dbg('validating against range')
+            try:
+                valid = self._rangeLow <= int(slice) <= self._rangeHigh
+            except:
+                valid = False
+
+        elif self._validRegex and self._filter:
+            dbg('validating against regex')
+            valid = (re.match( self._filter, slice) is not None)
+
+        if valid and self._validFunc:
+            dbg('validating against supplied function')
+            valid = self._validFunc(slice)
+        dbg('valid?', valid, indent=0, suspend=0)
+        return valid
+
+
+    def _AdjustField(self, slice):
+        """ 'Fixes' an integer field. Right or left-justifies, as required."""
+        dbg('Field::_AdjustField("%s")' % slice, indent=1)
+        length = len(self._mask)
+        if self._isInt:
+            signpos = slice.find('-')
+            intStr = slice.replace( '-', '' )                       # drop sign, if any
+            intStr = intStr.replace(' ', '')                        # drop extra spaces
+            intStr = string.replace(intStr,self._fillChar,"")       # drop extra fillchars
+            intStr = string.replace(intStr,"-","")                  # drop sign, if any
+            intStr = string.replace(intStr, self._groupChar, "")    # lose commas/dots
+            if self._groupdigits:
+                new = ''
+                cnt = 1
+                for i in range(len(intStr)-1, -1, -1):
+                    new = intStr[i] + new
+                    if (cnt) % 3 == 0:
+                        new = self._groupChar + new
+                    cnt += 1
+                if new and new[0] == self._groupChar:
+                    new = new[1:]
+                if len(new) <= length:
+                    # expanded string will still fit and leave room for sign:
+                    intStr = new
+                # else... leave it without the commas...
+
+            dbg('padzero?', self._padZero)
+            dbg('len(intStr):', len(intStr), 'field length:', length)
+            if self._padZero and len(intStr) < length:
+                intStr = '0' * (length - len(intStr)) + intStr
+                if signpos != -1:
+                    intStr = '-' + intStr[1:]
+            elif signpos != -1:
+                intStr = '-' + intStr
+            slice = intStr
+
+        slice = slice.strip() # drop extra spaces
+
+        if self._alignRight:     ## Only if right-alignment is enabled
+            slice = slice.rjust( length )
+        else:
+            slice = slice.ljust( length )
+        dbg('adjusted slice: "%s"' % slice, indent=0)
+        return slice
+
+
+## ---------- ---------- ---------- ---------- ---------- ---------- ----------
+
+class wxMaskedEditMixin:
+    """
+    This class allows us to abstract the masked edit functionality that could
+    be associated with any text entry control. (eg. wxTextCtrl, wxComboBox, etc.)
+    """
+    valid_ctrl_params = {
+              'mask': 'XXXXXXXXXXXXX',          ## mask string for formatting this control
+              'autoformat':   "",               ## optional auto-format code to set format from masktags dictionary
+              'fields': {},                     ## optional list/dictionary of maskededit.Field class instances, indexed by position in mask
+              'datestyle':    'MDY',            ## optional date style for date-type values. Can trigger autocomplete year
+              'autoCompleteKeycodes': [],       ## Optional list of additional keycodes which will invoke field-auto-complete
+              'useFixedWidthFont': True,        ## Use fixed-width font instead of default for base control
+              'retainFieldValidation': False,   ## Set this to true if setting control-level parameters independently,
+                                                ## from field validation constraints
+              'emptyBackgroundColor': "White",
+              'validBackgroundColor': "White",
+              'invalidBackgroundColor': "Yellow",
+              'foregroundColor': "Black",
+              'signedForegroundColor': "Red",
+              'demo': False}
+
+
+    def __init__(self, name = 'wxMaskedEdit', **kwargs):
+        """
+        This is the "constructor" for setting up the mixin variable parameters for the composite class.
+        """
+
+        self.name = name
+
+        # set up flag for doing optional things to base control if possible
+        if not hasattr(self, 'controlInitialized'):
+            self.controlInitialized = False
+
+        # Set internal state var for keeping track of whether or not a character
+        # action results in a modification of the control, since .SetValue()
+        # doesn't modify the base control's internal state:
+        self.modified = False
+
+        # Validate legitimate set of parameters:
+        for key in kwargs.keys():
+            if key not in wxMaskedEditMixin.valid_ctrl_params.keys() + Field.valid_params.keys():
+                raise TypeError('%s: invalid parameter "%s"' % (name, key))
+
+        ## Set up dictionary that can be used by subclasses to override or add to default
+        ## behavior for individual characters.  Derived subclasses needing to change
+        ## default behavior for keys can either redefine the default functions for the
+        ## common keys or add functions for specific keys to this list.  Each function
+        ## added should take the key event as argument, and return False if the key
+        ## requires no further processing.
+        ##
+        ## Initially populated with navigation and function control keys:
+        self._keyhandlers = {
+            # default navigation keys and handlers:
+            WXK_BACK:   self._OnErase,
+            WXK_LEFT:   self._OnArrow,
+            WXK_RIGHT:  self._OnArrow,
+            WXK_UP:     self._OnAutoCompleteField,
+            WXK_DOWN:   self._OnAutoCompleteField,
+            WXK_TAB:    self._OnChangeField,
+            WXK_HOME:   self._OnHome,
+            WXK_END:    self._OnEnd,
+            WXK_RETURN: self._OnReturn,
+            WXK_PRIOR:  self._OnAutoCompleteField,
+            WXK_NEXT:   self._OnAutoCompleteField,
+
+            # default function control keys and handlers:
+            WXK_DELETE: self._OnErase,
+            WXK_CTRL_A: self._OnCtrl_A,
+            WXK_CTRL_C: self._baseCtrlEventHandler,
+            WXK_CTRL_S: self._OnCtrl_S,
+            WXK_CTRL_V: self._OnCtrl_V,
+            WXK_CTRL_X: self._OnCtrl_X,
+            }
+
+        ## bind standard navigational and control keycodes to this instance,
+        ## so that they can be augmented and/or changed in derived classes:
+        self._nav = list(nav)
+        self._control = list(control)
+
+        ## Dynamically evaluate and store string constants for mask chars
+        ## so that locale settings can be made after this module is imported
+        ## and the controls created after that is done can allow the
+        ## appropriate characters:
+        self.maskchardict  = {
+            "#": string.digits,
+            "A": string.uppercase,
+            "a": string.lowercase,
+            "X": string.letters + string.punctuation + string.digits,
+            "C": string.letters,
+            "N": string.letters + string.digits
+        }
+
+        ## self._ignoreChange is used by wxMaskedComboBox, because
+        ## of the hack necessary to determine the selection; it causes
+        ## EVT_TEXT messages from the combobox to be ignored if set.
+        self._ignoreChange = False
+        self._oldvalue  = None
+
+        self._valid     = True
+
+        # Set defaults for each parameter for this instance, and fully
+        # populate initial parameter list for configuration:
+        for key, value in wxMaskedEditMixin.valid_ctrl_params.items():
+            setattr(self, '_' + key, copy.copy(value))
+            if not kwargs.has_key(key):
+##                dbg('%s: "%s"' % (key, repr(value)))
+                kwargs[key] = copy.copy(value)
+
+        # Create a "field" that holds global parameters for control constraints
+        self._ctrl_constraints = self._fields[-1] = Field(index=-1)
+        self.SetCtrlParameters(**kwargs)
+
+
+
+    def SetCtrlParameters(self, **kwargs):
+        """
+        This public function can be used to set individual or multiple masked edit
+        parameters after construction.
+        """
+        dbg('wxMaskedEditMixin::SetCtrlParameters', indent=1)
+        dbg('kwargs:', indent=1)
+        for key, value in kwargs.items():
+            dbg(key, '=', value)
+        dbg(indent=0)
+
+        # Validate keyword arguments:
+        constraint_kwargs = {}
+        ctrl_kwargs = {}
+        for key, value in kwargs.items():
+            if key not in wxMaskedEditMixin.valid_ctrl_params.keys() + Field.valid_params.keys():
+                raise TypeError('%s: invalid keyword argument "%s"' % (self.name, key))
+            elif key in Field.valid_params.keys():
+                constraint_kwargs[key] = value
+            else:
+                ctrl_kwargs[key] = value
+
+        mask = None
+        reset_args = {}
+
+        if ctrl_kwargs.has_key('autoformat'):
+            autoformat = ctrl_kwargs['autoformat']
+        else:
+            autoformat = None
+
+        if autoformat != self._autoformat and autoformat in masktags.keys():
+            dbg('autoformat:', autoformat)
+            self._autoformat                  = autoformat
+            mask                              = masktags[self._autoformat][0]
+            constraint_kwargs['excludeChars'] = masktags[self._autoformat][1]
+            constraint_kwargs['formatcodes']  = masktags[self._autoformat][2]
+            constraint_kwargs['validRegex']   = masktags[self._autoformat][3]
+            constraint_kwargs['choices']      = masktags[self._autoformat][4]
+            if masktags[self._autoformat][4]:
+                constraint_kwargs['choiceRequired'] = masktags[self._autoformat][5]
+
+        else:
+            dbg('autoformat not selected')
+            if kwargs.has_key('mask'):
+                mask = kwargs['mask']
+                dbg('mask:', mask)
+
+        ## Assign style flags
+        if mask is None:
+            dbg('preserving previous mask')
+            mask = self._previous_mask   # preserve previous mask
+        else:
+            dbg('mask (re)set')
+            reset_args['reset_mask'] = mask
+            constraint_kwargs['mask'] = mask
+
+            # wipe out previous fields; preserve new control-level constraints
+            self._fields = {-1: self._ctrl_constraints}
+
+
+        if ctrl_kwargs.has_key('fields'):
+            # do field parameter type validation, and conversion to internal dictionary
+            # as appropriate:
+            fields = ctrl_kwargs['fields']
+            if type(fields) in (types.ListType, types.TupleType):
+                for i in range(len(fields)):
+                    field = fields[i]
+                    if not isinstance(field, Field):
+                        dbg(indent=0)
+                        raise AttributeError('invalid type for field parameter: %s' % repr(field))
+                    self._fields[i] = field
+
+            elif type(fields) == types.DictionaryType:
+                for index, field in fields.items():
+                    if not isinstance(field, Field):
+                        dbg(indent=0)
+                        raise AttributeError('invalid type for field parameter: %s' % repr(field))
+                    self._fields[index] = field
+            else:
+                dbg(indent=0)
+                raise AttributeError('fields parameter must be a list or dictionary; not %s' % repr(fields))
+
+        # Assign constraint parameters for entire control:
+##        dbg('control constraints:', indent=1)
+##        for key, value in constraint_kwargs.items():
+##            dbg('%s:' % key, value)
+##        dbg(indent=0)
+
+        # determine if changing parameters that should affect the entire control:
+        for key in wxMaskedEditMixin.valid_ctrl_params.keys():
+            if key in ( 'mask', 'fields' ): continue    # (processed separately)
+            if ctrl_kwargs.has_key(key):
+                setattr(self, '_' + key, ctrl_kwargs[key])
+
+
+        dbg('self._retainFieldValidation:', self._retainFieldValidation)
+        if not self._retainFieldValidation:
+            # Build dictionary of any changing parameters which should be propagated to the
+            # component fields:
+            for arg in ('fillChar', 'groupChar', 'compareNoCase', 'defaultValue', 'validRequired'):
+                dbg('kwargs.has_key(%s)?' % arg, kwargs.has_key(arg))
+                dbg('getattr(self._ctrl_constraints, _%s)?' % arg, getattr(self._ctrl_constraints, '_'+arg))
+                reset_args[arg] = kwargs.has_key(arg) and kwargs[arg] != getattr(self._ctrl_constraints, '_'+arg)
+                dbg('reset_args[%s]?' % arg, reset_args[arg])
+
+        # Set the control-level constraints:
+        self._ctrl_constraints._SetParameters(**constraint_kwargs)
+
+        # This routine does the bulk of the interdependent parameter processing, determining
+        # the field extents of the mask if changed, resetting parameters as appropriate,
+        # determining the overall template value for the control, etc.
+        self._configure(mask, **reset_args)
+
+        self._autofit = self._ctrl_constraints._autofit
+        self._isNeg      = False
+
+        self._isDate     = 'D' in self._ctrl_constraints._formatcodes and isDateType(mask)
+        self._isTime     = 'T' in self._ctrl_constraints._formatcodes and isTimeType(mask)
+        if self._isDate:
+            # Set _dateExtent, used in date validation to locate date in string;
+            # always set as though year will be 4 digits, even if mask only has
+            # 2 digits, so we can always properly process the intended year for
+            # date validation (leap years, etc.)
+            if self._mask.find('CCC') != -1: self._dateExtent = 11
+            else:                            self._dateExtent = 10
+
+            self._4digityear = len(self._mask) > 8 and self._mask[9] == '#'
+
+        if self._isDate and self._autoformat:
+            # Auto-decide datestyle:
+            if self._autoformat.find('MDDY')    != -1: self._datestyle = 'MDY'
+            elif self._autoformat.find('YMMD')  != -1: self._datestyle = 'YMD'
+            elif self._autoformat.find('YMMMD') != -1: self._datestyle = 'YMD'
+            elif self._autoformat.find('DMMY')  != -1: self._datestyle = 'DMY'
+            elif self._autoformat.find('DMMMY') != -1: self._datestyle = 'DMY'
+
+
+        if self.controlInitialized:
+            # Then the base control is available for configuration;
+            # take action on base control based on new settings, as appropriate.
+            if kwargs.has_key('useFixedWidthFont'):
+                # Set control font - fixed width by default
+                self._setFont()
+
+            if reset_args.has_key('reset_mask') or not self._GetValue().strip():
+                self._SetInitialValue()
+
+            if self._autofit:
+                self.SetClientSize(self._calcSize())
+
+            # Set value/type-specific formatting
+            self._applyFormatting()
+        dbg(indent=0)
+
+    def SetMaskParameters(self, **kwargs):
+        """ old name for this function """
+        return self.SetCtrlParameters(**kwargs)
+
+
+    def GetCtrlParameter(self, paramname):
+        """
+        Routine for retrieving the value of any given parameter
+        """
+        if wxMaskedEditMixin.valid_ctrl_params.has_key(paramname):
+            return getattr(self, '_' + paramname)
+        elif Field.valid_params.has_key(paramname):
+            return self._ctrl_constraints._GetParameter(paramname)
+        else:
+            TypeError('%s.GetCtrlParameter: invalid parameter "%s"' % (self.name, paramname))
+
+    def GetMaskParameter(self, paramname):
+        """ old name for this function """
+        return self.GetCtrlParameter(paramname)
+
+    def SetFieldParameters(self, field_index, **kwargs):
+        """
+        Routine provided to modify the parameters of a given field.
+        Because changes to fields can affect the overall control,
+        direct access to the fields is prevented, and the control
+        is always "reconfigured" after setting a field parameter.
+        """
+        if field_index not in self._field_indices:
+            raise IndexError('%s: %s is not a valid field for this control.' % (self.name, str(field_index)))
+        # set parameters as requested:
+        self._fields[field_index]._SetParameters(**kwargs)
+
+        # Possibly reprogram control template due to resulting changes, and ensure
+        # control-level params are still propagated to fields:
+        self._configure(self._previous_mask)
+
+        if self.controlInitialized:
+            if kwargs.has_key('fillChar') or kwargs.has_key('defaultValue'):
+                self._SetInitialValue()
+
+                if self._autofit:
+                    self.SetClientSize(self._calcSize())
+
+            # Set value/type-specific formatting
+            self._applyFormatting()
+
+
+    def GetFieldParameter(self, field_index, paramname):
+        """
+        Routine provided for getting a parameter of an individual field.
+        """
+        if field_index not in self._field_indices:
+            raise IndexError('%s: %s is not a valid field for this control.' % (self.name, str(field_index)))
+        elif Field.valid_params.has_key(paramname):
+            return self._fields[field_index]._GetParameter(paramname)
+        else:
+            TypeError('%s.GetFieldParameter: invalid parameter "%s"' % (self.name, paramname))
+
+
+    def _SetKeycodeHandler(self, keycode, func):
+        """
+        This function adds and/or replaces key event handling functions
+        used by the control.  <func> should take the event as argument
+        and return False if no further action on the key is necessary.
+        """
+        self._keyhandlers[keycode] = func
+
+
+    def _SetKeyHandler(self, char, func):
+        """
+        This function adds and/or replaces key event handling functions
+        for ascii characters.  <func> should take the event as argument
+        and return False if no further action on the key is necessary.
+        """
+        self._SetKeycodeHandler(ord(char), func)
+
+
+    def _AddNavKeycode(self, keycode, handler=None):
+        """
+        This function allows a derived subclass to augment the list of
+        keycodes that are considered "navigational" keys.
+        """
+        self._nav.append(keycode)
+        if handler:
+            self._keyhandlers[keycode] = handler
+
+
+    def _AddNavKey(self, char, handler=None):
+        """
+        This function is a convenience function so you don't have to
+        remember to call ord() for ascii chars to be used for navigation.
+        """
+        self._AddNavKeycode(ord(char), handler)
+
+
+    def _GetNavKeycodes(self):
+        """
+        This function retrieves the current list of navigational keycodes for
+        the control.
+        """
+        return self._nav
+
+
+    def _SetNavKeycodes(self, keycode_func_tuples):
+        """
+        This function allows you to replace the current list of keycode processed
+        as navigation keys, and bind associated optional keyhandlers.
+        """
+        self._nav = []
+        for keycode, func in keycode_func_tuples:
+            self._nav.append(keycode)
+            if func:
+                self._keyhandlers[keycode] = func
+
+
+    def _processMask(self, mask):
+        """
+        This subroutine expands {n} syntax in mask strings, and looks for escaped
+        special characters and returns the expanded mask, and an dictionary
+        of booleans indicating whether or not a given position in the mask is
+        a mask character or not.
+        """
+        dbg('_processMask: mask', mask, indent=1)
+        # regular expression for parsing c{n} syntax:
+        rex = re.compile('([' +string.join(maskchars,"") + '])\{(\d+)\}')
+        s = mask
+        match = rex.search(s)
+        while match:    # found an(other) occurrence
+            maskchr = s[match.start(1):match.end(1)]            # char to be repeated
+            repcount = int(s[match.start(2):match.end(2)])      # the number of times
+            replacement = string.join( maskchr * repcount, "")  # the resulting substr
+            s = s[:match.start(1)] + replacement + s[match.end(2)+1:]   #account for trailing '}'
+            match = rex.search(s)                               # look for another such entry in mask
+
+        self._decimalChar = self._ctrl_constraints._decimalChar
+        self._shiftDecimalChar = self._ctrl_constraints._shiftDecimalChar
+
+        self._isDec      = isDecimal(s, self._decimalChar) and not self._ctrl_constraints._validRegex
+        self._isInt      = isInteger(s) and not self._ctrl_constraints._validRegex
+        self._signOk     = '-' in self._ctrl_constraints._formatcodes and (self._isDec or self._isInt)
+        dbg('isDecimal(%s, %c)?' % (s, self._decimalChar), isDecimal(s, self._decimalChar),
+            'ctrl regex:', self._ctrl_constraints._validRegex)
+
+        if self._signOk and s[0] != ' ':
+            s = ' ' + s
+            if self._ctrl_constraints._defaultValue and self._ctrl_constraints._defaultValue[0] != ' ':
+                self._ctrl_constraints._defaultValue = ' ' + self._ctrl_constraints._defaultValue
+
+        # Now, go build up a dictionary of booleans, indexed by position,
+        # indicating whether or not a given position is masked or not
+        ismasked = {}
+        i = 0
+        while i < len(s):
+            if s[i] == '\\':            # if escaped character:
+                ismasked[i] = False     #     mark position as not a mask char
+                if i+1 < len(s):        #     if another char follows...
+                    s = s[:i] + s[i+1:] #         elide the '\'
+                    if i+2 < len(s) and s[i+1] == '\\':
+                        # if next char also a '\', char is a literal '\'
+                        s = s[:i] + s[i+1:]     # elide the 2nd '\' as well
+            else:                       # else if special char, mark position accordingly
+                ismasked[i] = s[i] in maskchars
+##            dbg('ismasked[%d]:' % i, ismasked[i], s)
+            i += 1                      # increment to next char
+##        dbg('ismasked:', ismasked)
+        dbg(indent=0)
+        return s, ismasked
+
+
+    def _calcFieldExtents(self):
+        """
+        Subroutine responsible for establishing/configuring field instances with
+        indices and editable extents appropriate to the specified mask, and building
+        the lookup table mapping each position to the corresponding field.
+        """
+        if self._mask:
+
+            ## Create dictionary of positions,characters in mask
+            self.maskdict = {}
+            for charnum in range( len( self._mask)):
+                self.maskdict[charnum] = self._mask[charnum:charnum+1]
+
+            # For the current mask, create an ordered list of field extents
+            # and a dictionary of positions that map to field indices:
+            self._lookupField = {}
+
+            if self._signOk: start = 1
+            else: start = 0
+
+            if self._isDec:
+                # Skip field "discovery", and just construct a 2-field control with appropriate
+                # constraints for a floating-point entry.
+
+                # .setdefault always constructs 2nd argument even if not needed, so we do this
+                # the old-fashioned way...
+                if not self._fields.has_key(0):
+                    self._fields[0] = Field()
+                if not self._fields.has_key(1):
+                    self._fields[1] = Field()
+
+                self._decimalpos = string.find( self._mask, self._decimalChar)
+                dbg('decimal pos =', self._decimalpos)
+
+                formatcodes = self._fields[0]._GetParameter('formatcodes')
+                if 'R' not in formatcodes: formatcodes += 'R'
+                self._fields[0]._SetParameters(index=0, extent=(start, self._decimalpos),
+                                               mask=self._mask[start:self._decimalpos], formatcodes=formatcodes)
+
+                self._fields[1]._SetParameters(index=1, extent=(self._decimalpos+1, len(self._mask)),
+                                               mask=self._mask[self._decimalpos+1:len(self._mask)])
+
+                for i in range(self._decimalpos+1):
+                    self._lookupField[i] = 0
+
+                for i in range(self._decimalpos+1, len(self._mask)+1):
+                    self._lookupField[i] = 1
+
+            elif self._isInt:
+                # Skip field "discovery", and just construct a 1-field control with appropriate
+                # constraints for a integer entry.
+                if not self._fields.has_key(0):
+                    self._fields[0] = Field(index=0)
+                self._fields[0]._SetParameters(extent=(start, len(self._mask)),
+                                               mask=self._mask[start:len(self._mask)])
+
+                for i in range(len(self._mask)+1):
+                    self._lookupField[i] = 0
+            else:
+                # generic control; parse mask to figure out where the fields are:
+                field_index = 0
+                pos = 0
+                i = self._findNextEntry(pos,adjustInsert=False)  # go to 1st entry point:
+                if i < len(self._mask):   # no editable chars!
+                    for j in range(pos, i+1):
+                        self._lookupField[j] = field_index
+                    pos = i       # figure out field for 1st editable space:
+
+                while i <= len(self._mask):
+##                    dbg('searching: outer field loop: i = ', i)
+                    if self._isMaskChar(i):
+##                        dbg('1st char is mask char; recording edit_start=', i)
+                        edit_start = i
+                        # Skip to end of editable part of current field:
+                        while i < len(self._mask) and self._isMaskChar(i):
+                            self._lookupField[i] = field_index
+                            i += 1
+##                        dbg('edit_end =', i)
+                        edit_end = i
+                        self._lookupField[i] = field_index
+##                        dbg('self._fields.has_key(%d)?' % field_index, self._fields.has_key(field_index))
+                        if not self._fields.has_key(field_index):
+                            self._fields[field_index] = Field()
+                        self._fields[field_index]._SetParameters(
+                                                                index=field_index,
+                                                                extent=(edit_start, edit_end),
+                                                                mask=self._mask[edit_start:edit_end])
+                    pos = i
+                    i = self._findNextEntry(pos, adjustInsert=False)  # go to next field:
+                    if i > pos:
+                        for j in range(pos, i+1):
+                            self._lookupField[j] = field_index
+                    if i >= len(self._mask):
+                        break           # if past end, we're done
+                    else:
+                        field_index += 1
+##                        dbg('next field:', field_index)
+
+        indices = self._fields.keys()
+        indices.sort()
+        self._field_indices = indices[1:]
+##        dbg('lookupField map:', indent=1)
+##        for i in range(len(self._mask)):
+##            dbg('pos %d:' % i, self._lookupField[i])
+##        dbg(indent=0)
+
+        # Verify that all field indices specified are valid for mask:
+        for index in self._fields.keys():
+            if index not in [-1] + self._lookupField.values():
+                dbg(indent=0)
+                raise IndexError('field %d is not a valid field for mask "%s"' % (index, self._mask))
+
+
+    def _calcTemplate(self, reset_fillchar, reset_default):
+        """
+        Subroutine for processing current fillchars and default values for
+        whole control and individual fields, constructing the resulting
+        overall template, and adjusting the current value as necessary.
+        """
+        default_set = False
+        if self._ctrl_constraints._defaultValue:
+            default_set = True
+        else:
+            for field in self._fields.values():
+                if field._defaultValue and not reset_default:
+                    default_set = True
+        dbg('default set?', default_set)
+
+        # Determine overall new template for control, and keep track of previous
+        # values, so that current control value can be modified as appropriate:
+        if self.controlInitialized: curvalue = list(self._GetValue())
+        else:                       curvalue = None
+
+        if hasattr(self, '_fillChar'): old_fillchars = self._fillChar
+        else:                          old_fillchars = None
+
+        if hasattr(self, '_template'): old_template = self._template
+        else:                          old_template = None
+
+        self._template = ""
+
+        self._fillChar = {}
+        reset_value = False
+
+        for field in self._fields.values():
+            field._template = ""
+
+        for pos in range(len(self._mask)):
+##            dbg('pos:', pos)
+            field = self._FindField(pos)
+##            dbg('field:', field._index)
+            start, end = field._extent
+
+            if pos == 0 and self._signOk:
+                self._template = ' ' # always make 1st 1st position blank, regardless of fillchar
+            elif self._isMaskChar(pos):
+                if field._fillChar != self._ctrl_constraints._fillChar and not reset_fillchar:
+                    fillChar = field._fillChar
+                else:
+                    fillChar = self._ctrl_constraints._fillChar
+                self._fillChar[pos] = fillChar
+
+                # Replace any current old fillchar with new one in current value;
+                # if action required, set reset_value flag so we can take that action
+                # after we're all done
+                if self.controlInitialized and old_fillchars and old_fillchars.has_key(pos) and curvalue:
+                    if curvalue[pos] == old_fillchars[pos] and old_fillchars[pos] != fillChar:
+                        reset_value = True
+                        curvalue[pos] = fillChar
+
+                if not field._defaultValue and not self._ctrl_constraints._defaultValue:
+##                    dbg('no default value')
+                    self._template += fillChar
+                    field._template += fillChar
+
+                elif field._defaultValue and not reset_default:
+##                    dbg('len(field._defaultValue):', len(field._defaultValue))
+##                    dbg('pos-start:', pos-start)
+                    if len(field._defaultValue) > pos-start:
+##                        dbg('field._defaultValue[pos-start]: "%s"' % field._defaultValue[pos-start])
+                        self._template += field._defaultValue[pos-start]
+                        field._template += field._defaultValue[pos-start]
+                    else:
+##                        dbg('field default not long enough; using fillChar')
+                        self._template += fillChar
+                        field._template += fillChar
+                else:
+                    if len(self._ctrl_constraints._defaultValue) > pos:
+##                        dbg('using control default')
+                        self._template += self._ctrl_constraints._defaultValue[pos]
+                        field._template += self._ctrl_constraints._defaultValue[pos]
+                    else:
+##                        dbg('ctrl default not long enough; using fillChar')
+                        self._template += fillChar
+                        field._template += fillChar
+##                dbg('field[%d]._template now "%s"' % (field._index, field._template))
+##                dbg('self._template now "%s"' % self._template)
+            else:
+                self._template += self._mask[pos]
+
+        self._fields[-1]._template = self._template     # (for consistency)
+
+        if curvalue:    # had an old value, put new one back together
+            newvalue = string.join(curvalue, "")
+        else:
+            newvalue = None
+
+        if default_set:
+            self._defaultValue = self._template
+            dbg('self._defaultValue:', self._defaultValue)
+            if not self.IsEmpty(self._defaultValue) and not self.IsValid(self._defaultValue):
+                dbg(indent=0)
+                raise ValueError('%s: default value of "%s" is not a valid value' % (self.name, self._defaultValue))
+
+            # if no fillchar change, but old value == old template, replace it:
+            if newvalue == old_template:
+                newvalue = self._template
+                reset_value = true
+        else:
+            self._defaultValue = None
+
+        if reset_value:
+            pos = self._GetInsertionPoint()
+            sel_start, sel_to = self._GetSelection()
+            self._SetValue(newvalue)
+            self._SetInsertionPoint(pos)
+            self._SetSelection(sel_start, sel_to)
+
+
+    def _propagateConstraints(self, **reset_args):
+        """
+        Subroutine for propagating changes to control-level constraints and
+        formatting to the individual fields as appropriate.
+        """
+        parent_codes = self._ctrl_constraints._formatcodes
+        for i in self._field_indices:
+            field = self._fields[i]
+            inherit_args = {}
+
+            field_codes = current_codes = field._GetParameter('formatcodes')
+            for c in parent_codes:
+                if c not in field_codes: field_codes += c
+            if field_codes != current_codes:
+                inherit_args['formatcodes'] = field_codes
+
+            include_chars = current_includes = field._GetParameter('includeChars')
+            for c in include_chars:
+                if not c in include_chars: include_chars += c
+            if include_chars != current_includes:
+                inherit_args['includeChars'] = include_chars
+
+            exclude_chars = current_excludes = field._GetParameter('excludeChars')
+            for c in exclude_chars:
+                if not c in exclude_chars: exclude_chars += c
+            if exclude_chars != current_excludes:
+                inherit_args['excludeChars'] = exclude_chars
+
+            if reset_args.has_key('defaultValue') and reset_args['defaultValue']:
+                inherit_args['defaultValue'] = ""   # (reset for field)
+
+            for param in ['fillChar', 'groupChar', 'compareNoCase', 'emptyInvalid', 'validRequired']:
+                if reset_args.has_key(param) and reset_args[param]:
+                    inherit_args[param] = self.GetCtrlParameter(param)
+
+            if inherit_args:
+                field._SetParameters(**inherit_args)
+
+
+    def _validateChoices(self):
+        """
+        Subroutine that validates that all choices for given fields are at
+        least of the necessary length, and that they all would be valid pastes
+        if pasted into their respective fields.
+        """
+        for field in self._fields.values():
+            if field._choices:
+                index = field._index
+##                dbg('checking for choices for field', field._index)
+                start, end = field._extent
+                field_length = end - start
+##                dbg('start, end, length:', start, end, field_length)
+
+                for choice in field._choices:
+                    valid_paste, ignore, replace_to = self._validatePaste(choice, start, end)
+                    if not valid_paste:
+                        dbg(indent=0)
+                        raise ValueError('%s: "%s" could not be entered into field %d' % (self.name, choice, index))
+                    elif replace_to > end:
+                        dbg(indent=0)
+                        raise ValueError('%s: "%s" will not fit into field %d' (self.name, choice, index))
+##                    dbg(choice, 'valid in field', index)
+
+
+    def _configure(self, mask, **reset_args):
+        """
+        This function sets flags for automatic styling options.  It is
+        called whenever a control or field-level parameter is set/changed.
+
+        This routine does the bulk of the interdependent parameter processing, determining
+        the field extents of the mask if changed, resetting parameters as appropriate,
+        determining the overall template value for the control, etc.
+
+        reset_args is supplied if called from control's .SetCtrlParameters()
+        routine, and indicates which if any parameters which can be
+        overridden by individual fields have been reset by request for the
+        whole control.
+        """
+        dbg('wxMaskedEditMixin::_configure("%s")' % mask, indent=1)
+
+        # Preprocess specified mask to expand {n} syntax, handle escaped
+        # mask characters, etc and build the resulting positionally keyed
+        # dictionary for which positions are mask vs. template characters:
+        self._mask, self.ismasked = self._processMask(mask)
+        dbg('processed mask:', self._mask)
+
+        # Preserve original mask specified, for subsequent reprocessing
+        # if parameters change.
+        self._previous_mask = mask
+
+
+        # Set extent of field -1 to width of entire control:
+        self._ctrl_constraints._SetParameters(extent=(0,len(self._mask)))
+
+        # Go parse mask to determine where each field is, construct field
+        # instances as necessary, configure them with those extents, and
+        # build lookup table mapping each position for control to its corresponding
+        # field.
+        self._calcFieldExtents()
+
+        # Go process defaultValues and fillchars to construct the overall
+        # template, and adjust the current value as necessary:
+        reset_fillchar = reset_args.has_key('fillChar') and reset_args['fillChar']
+        reset_default = reset_args.has_key('defaultValue') and reset_args['defaultValue']
+
+        self._calcTemplate(reset_fillchar, reset_default)
+
+        # Propagate control-level formatting and character constraints to each
+        # field if they don't already have them:
+        self._propagateConstraints(**reset_args)
+
+
+
+        if self._isDec and self._fields[0]._groupChar == self._decimalChar:
+            raise AttributeError('groupChar (%s) and decimalChar (%s) must be distinct.' %
+                                 (self._fields[0]._groupChar, self._decimalChar) )
+
+        # Validate that all choices for given fields are at least of the
+        # necessary length, and that they all would be valid pastes if pasted
+        # into their respective fields:
+        self._validateChoices()
+
+        dbg('fields:', indent=1)
+        for i in [-1] + self._field_indices:
+            dbg('field %d:' % i, self._fields[i].__dict__)
+        dbg(indent=0)
+
+        # Set up special parameters for numeric control, if appropriate:
+        if self._signOk:
+            self._signpos = 0   # assume it starts here, but it will move around on floats
+            self._SetKeyHandler('-', self._OnChangeSign)
+            self._SetKeyHandler('+', self._OnChangeSign)
+            self._SetKeyHandler(' ', self._OnChangeSign)
+
+        if self._isDec or self._isInt:
+            dbg('Registering numeric navigation and control handlers')
+
+            # Replace up/down arrow default handling:
+            # make down act like tab, up act like shift-tab:
+            self._SetKeycodeHandler(WXK_DOWN, self._OnChangeField)
+            self._SetKeycodeHandler(WXK_UP, self._OnUpNumeric)  # (adds "shift" to up arrow, and calls _OnChangeField)
+
+            # On ., truncate contents right of cursor to decimal point (if any)
+            # leaves cusor after decimal point if dec, otherwise at 0.
+            self._SetKeyHandler(self._decimalChar, self._OnDecimalPoint)
+            self._SetKeyHandler(self._shiftDecimalChar, self._OnChangeField)   # (Shift-'.' == '>' on US keyboards)
+
+            # Allow selective insert of groupchar in numbers:
+            self._SetKeyHandler(self._fields[0]._groupChar, self._OnGroupChar)
+
+        dbg(indent=0)
+
+
+    def _SetInitialValue(self, value=""):
+        """
+        fills the control with the generated or supplied default value.
+        It will also set/reset the font if necessary and apply
+        formatting to the control at this time.
+        """
+        dbg('wxMaskedEditMixin::_SetInitialValue("%s")' % value, indent=1)
+        if not value:
+            self._SetValue( self._template )
+        else:
+            # Apply validation as appropriate to passed value
+            self.SetValue(value)
+
+        # Set value/type-specific formatting
+        self._applyFormatting()
+        dbg(indent=0)
+
+
+    def _calcSize(self, size=None):
+        """ Calculate automatic size if allowed; must be called after the base control is instantiated"""
+##        dbg('wxMaskedEditMixin::_calcSize', indent=1)
+        cont = (size is None or size == wxDefaultSize)
+
+        if cont and self._autofit:
+            sizing_text = 'M' * len(self._mask)
+            if wxPlatform != "__WXMSW__":   # give it a little extra space
+                sizing_text += 'M'
+            if wxPlatform == "__WXMAC__":   # give it even a little more...
+                sizing_text += 'M'
+##            dbg('len(sizing_text):', len(sizing_text), 'sizing_text: "%s"' % sizing_text)
+            w, h = self.GetTextExtent(sizing_text)
+            size = (w+4, self.GetClientSize().height)
+##            dbg('size:', size, indent=0)
+        return size
+
+
+    def _setFont(self):
+        """ Set the control's font typeface -- pass the font name as str."""
+##        dbg('wxMaskedEditMixin::_setFont', indent=1)
+        if not self._useFixedWidthFont:
+            self._font = wxSystemSettings_GetFont(wxSYS_DEFAULT_GUI_FONT)
+        else:
+            font = self.GetFont()   # get size, weight, etc from current font
+
+            # Set to teletype font (guaranteed to be mappable to all wxWindows
+            # platforms:
+            self._font = wxFont( font.GetPointSize(), wxTELETYPE, font.GetStyle(),
+                                 font.GetWeight(), font.GetUnderlined())
+##            dbg('font string: "%s"' % font.GetNativeFontInfo().ToString())
+
+        self.SetFont(self._font)
+##        dbg(indent=0)
+
+
+    def _OnTextChange(self, event):
+        """
+        Handler for EVT_TEXT event.
+        self._Change() is provided for subclasses, and may return False to
+        skip this method logic.  This function returns True if the event
+        detected was a legitimate event, or False if it was a "bogus"
+        EVT_TEXT event.  (NOTE: There is currently an issue with calling
+        .SetValue from within the EVT_CHAR handler that causes duplicate
+        EVT_TEXT events for the same change.)
+        """
+        newvalue = self._GetValue()
+        dbg('wxMaskedEditMixin::_OnTextChange: value: "%s"' % newvalue, indent=1)
+        bValid = False
+        if self._ignoreChange:      # ie. if an "intermediate text change event"
+            dbg(indent=0)
+            return bValid
+
+        ##! WS: For some inexplicable reason, every wxTextCtrl.SetValue
+        ## call is generating two (2) EVT_TEXT events.
+        ## This is the only mechanism I can find to mask this problem:
+        if newvalue == self._oldvalue:
+            dbg('ignoring bogus text change event', indent=0)
+        else:
+            dbg('oldvalue: "%s", newvalue: "%s"' % (self._oldvalue, newvalue))
+            if self._Change():
+                if self._signOk and self._isNeg and newvalue.find('-') == -1:
+                    self._isNeg = False
+                    text, self._signpos = self._getSignedValue()
+                self._CheckValid()  # Recolor control as appropriate
+            event.Skip()
+            bValid = True
+        self._oldvalue = newvalue   # Save last seen value for next iteration
+        dbg(indent=0)
+        return bValid
+
+
+    def _OnKeyDown(self, event):
+        """
+        This function allows the control to capture Ctrl-events like Ctrl-tab,
+        that are not normally seen by the "cooked" EVT_CHAR routine.
+        """
+        # Get keypress value, adjusted by control options (e.g. convert to upper etc)
+        key    = event.GetKeyCode()
+        if key in self._nav and event.ControlDown():
+            # then this is the only place we will likely see these events;
+            # process them now:
+            dbg('wxMaskedEditMixin::OnKeyDown: calling _OnChar')
+            self._OnChar(event)
+            return
+        # else allow regular EVT_CHAR key processing
+        event.Skip()
+
+
+    def _OnChar(self, event):
+        """
+        This is the engine of wxMaskedEdit controls.  It examines each keystroke,
+        decides if it's allowed, where it should go or what action to take.
+        """
+        dbg('wxMaskedEditMixin::_OnChar', indent=1)
+
+        # Get keypress value, adjusted by control options (e.g. convert to upper etc)
+        key = event.GetKeyCode()
+        orig_pos = self._GetInsertionPoint()
+        orig_value = self._GetValue()
+        dbg('keycode = ', key)
+        dbg('current pos = ', orig_pos)
+        dbg('current selection = ', self._GetSelection())
+
+        if not self._Keypress(key):
+            dbg(indent=0)
+            return
+
+        # If no format string for this control, or the control is marked as "read-only",
+        # skip the rest of the special processing, and just "do the standard thing:"
+        if not self._mask or not self._IsEditable():
+            event.Skip()
+            dbg(indent=0)
+            return
+
+        # Process navigation and control keys first, with
+        # position/selection unadulterated:
+        if key in self._nav + self._control:
+            if self._keyhandlers.has_key(key):
+                keep_processing = self._keyhandlers[key](event)
+                if self._GetValue() != orig_value:
+                    self.modified = True
+                if not keep_processing:
+                    dbg(indent=0)
+                    return
+                self._applyFormatting()
+                dbg(indent=0)
+                return
+
+        # Else... adjust the position as necessary for next input key,
+        # and determine resulting selection:
+        pos = self._adjustPos( orig_pos, key )    ## get insertion position, adjusted as needed
+        sel_start, sel_to = self._GetSelection()                ## check for a range of selected text
+        dbg("pos, sel_start, sel_to:", pos, sel_start, sel_to)
+
+        keep_processing = True
+        # Capture user past end of format field
+        if pos > len(self.maskdict):
+            dbg("field length exceeded:",pos)
+            keep_processing = False
+
+        if keep_processing:
+            if self._isMaskChar(pos):  ## Get string of allowed characters for validation
+                okchars = self._getAllowedChars(pos)
+            else:
+                dbg('Not a valid position: pos = ', pos,"chars=",maskchars)
+                okchars = ""
+
+        key = self._adjustKey(pos, key)     # apply formatting constraints to key:
+
+        if self._keyhandlers.has_key(key):
+            # there's an override for default behavior; use override function instead
+            dbg('using supplied key handler:', self._keyhandlers[key])
+            keep_processing = self._keyhandlers[key](event)
+            if self._GetValue() != orig_value:
+                self.modified = True
+            if not keep_processing:
+                dbg(indent=0)
+                return
+            # else skip default processing, but do final formatting
+        if key < WXK_SPACE or key > 255:
+            dbg('key < WXK_SPACE or key > 255')
+            event.Skip()                # non alphanumeric
+            keep_processing = False
+        else:
+            field = self._FindField(pos)
+            dbg("key ='%s'" % chr(key))
+            if chr(key) == ' ':
+                dbg('okSpaces?', field._okSpaces)
+
+            if chr(key) in field._excludeChars + self._ctrl_constraints._excludeChars:
+                keep_processing = False
+                if (not wxValidator_IsSilent()) and orig_pos == pos:
+                    wxBell()
+
+            if keep_processing and self._isCharAllowed( chr(key), pos, checkRegex = True ):
+                dbg("key allowed by mask")
+                # insert key into candidate new value, but don't change control yet:
+                oldstr = self._GetValue()
+                newstr, newpos = self._insertKey(chr(key), pos, sel_start, sel_to, self._GetValue())
+                dbg("str with '%s' inserted:" % chr(key), '"%s"' % newstr)
+                if self._ctrl_constraints._validRequired and not self.IsValid(newstr):
+                    dbg('not valid; checking to see if adjusted string is:')
+                    keep_processing = False
+                    if self._isDec and newstr != self._template:
+                        newstr = self._adjustDec(newstr)
+                        dbg('adjusted str:', newstr)
+                        if self.IsValid(newstr):
+                            dbg("it is!")
+                            keep_processing = True
+                            wxCallAfter(self._SetInsertionPoint, self._decimalpos)
+                    if not keep_processing:
+                        dbg("key disallowed by validation")
+                        if not wxValidator_IsSilent() and orig_pos == pos:
+                            wxBell()
+
+                if keep_processing:
+                    unadjusted = newstr
+
+                    # special case: adjust date value as necessary:
+                    if self._isDate and newstr != self._template:
+                        newstr = self._adjustDate(newstr)
+                    dbg('adjusted newstr:', newstr)
+
+                    if newstr != orig_value:
+                        self.modified = True
+
+                    wxCallAfter(self._SetValue, newstr)
+
+                    # Adjust insertion point on date if just entered 2 digit year, and there are now 4 digits:
+                    if not self.IsDefault() and self._isDate and self._4digityear:
+                        year2dig = self._dateExtent - 2
+                        if pos == year2dig and unadjusted[year2dig] != newstr[year2dig]:
+                            newpos = pos+2
+
+                    wxCallAfter(self._SetInsertionPoint, newpos)
+                    newfield = self._FindField(newpos)
+                    if newfield != field and newfield._selectOnFieldEntry:
+                        wxCallAfter(self._SetSelection, newfield._extent[0], newfield._extent[1])
+                    keep_processing = false
+            else:
+                dbg('char not allowed; orig_pos == pos?', orig_pos == pos)
+                keep_processing = False
+                if (not wxValidator_IsSilent()) and orig_pos == pos:
+                    wxBell()
+
+        self._applyFormatting()
+
+        # Move to next insertion point
+        if keep_processing and key not in self._nav:
+            pos = self._GetInsertionPoint()
+            next_entry = self._findNextEntry( pos )
+            if pos != next_entry:
+                dbg("moving from %(pos)d to next valid entry: %(next_entry)d" % locals())
+                wxCallAfter(self._SetInsertionPoint, next_entry )
+
+            if self._isTemplateChar(pos):
+                self._AdjustField(pos)
+        dbg(indent=0)
+
+
+    def _FindFieldExtent(self, pos=None, getslice=False, value=None):
+        """ returns editable extent of field corresponding to
+        position pos, and, optionally, the contents of that field
+        in the control or the value specified.
+        Template chars are bound to the preceding field.
+        For masks beginning with template chars, these chars are ignored
+        when calculating the current field.
+
+        Eg: with template (###) ###-####,
+        >>> self._FindFieldExtent(pos=0)
+        1, 4
+        >>> self._FindFieldExtent(pos=1)
+        1, 4
+        >>> self._FindFieldExtent(pos=5)
+        1, 4
+        >>> self._FindFieldExtent(pos=6)
+        6, 9
+        >>> self._FindFieldExtent(pos=10)
+        10, 14
+        etc.
+        """
+        dbg('wxMaskedEditMixin::_FindFieldExtent(pos=%s, getslice=%s)' % (
+                str(pos), str(getslice)) ,indent=1)
+
+        field = self._FindField(pos)
+        if not field:
+            if getslice:
+                return None, None, ""
+            else:
+                return None, None
+        edit_start, edit_end = field._extent
+        if getslice:
+            if value is None: value = self._GetValue()
+            slice = value[edit_start:edit_end]
+            dbg('edit_start:', edit_start, 'edit_end:', edit_end, 'slice: "%s"' % slice)
+            dbg(indent=0)
+            return edit_start, edit_end, slice
+        else:
+            dbg('edit_start:', edit_start, 'edit_end:', edit_end)
+            dbg(indent=0)
+            return edit_start, edit_end
+
+
+    def _FindField(self, pos=None):
+        """
+        Returns the field instance in which pos resides.
+        Template chars are bound to the preceding field.
+        For masks beginning with template chars, these chars are ignored
+        when calculating the current field.
+
+        """
+##        dbg('wxMaskedEditMixin::_FindField(pos=%s)' % str(pos) ,indent=1)
+        if pos is None: pos = self._GetInsertionPoint()
+        elif pos < 0 or pos > len(self._mask):
+            raise IndexError('position %s out of range of control' % str(pos))
+
+        if len(self._fields) == 0:
+            dbg(indent=0)
+            return None
+
+        # else...
+##        dbg(indent=0)
+        return self._fields[self._lookupField[pos]]
+
+
+    def ClearValue(self):
+        """ Blanks the current control value by replacing it with the default value."""
+        dbg("wxMaskedEditMixin::ClearValue - value reset to default value (template)")
+        self._SetValue( self._template )
+        self._SetInsertionPoint(0)
+        self.Refresh()
+
+
+    def _baseCtrlEventHandler(self, event):
+        """
+        This function is used whenever a key should be handled by the base control.
+        """
+        event.Skip()
+        return False
+
+
+    def _OnUpNumeric(self, event):
+        """
+        Makes up-arrow act like shift-tab should; ie. take you to start of
+        previous field.
+        """
+        dbg('wxMaskedEditMixin::_OnUpNumeric', indent=1)
+        event.m_shiftDown = 1
+        dbg('event.ShiftDown()?', event.ShiftDown())
+        self._OnChangeField(event)
+        dbg(indent=0)
+
+
+    def _OnArrow(self, event):
+        """
+        Used in response to left/right navigation keys; makes these actions skip
+        over mask template chars.
+        """
+        dbg("wxMaskedEditMixin::_OnArrow", indent=1)
+        pos = self._GetInsertionPoint()
+        keycode = event.GetKeyCode()
+        sel_start, sel_to = self._GetSelection()
+        entry_end = self._goEnd(getPosOnly=True)
+        if keycode in (WXK_RIGHT, WXK_DOWN):
+            if( ( not self._isTemplateChar(pos) and pos+1 > entry_end)
+                or ( self._isTemplateChar(pos) and pos >= entry_end) ):
+                dbg(indent=0)
+                return False
+            elif self._isTemplateChar(pos):
+                self._AdjustField(pos)
+        elif keycode in (WXK_LEFT,WXK_UP) and pos > 0 and self._isTemplateChar(pos-1):
+            dbg('adjusting field')
+            self._AdjustField(pos)
+
+        # treat as shifted up/down arrows as tab/reverse tab:
+        if event.ShiftDown() and keycode in (WXK_UP, WXK_DOWN):
+            # remove "shifting" and treat as (forward) tab:
+            event.m_shiftDown = False
+            keep_processing = self._OnChangeField(event)
+
+        elif self._FindField(pos)._selectOnFieldEntry:
+            if( keycode in (WXK_UP, WXK_LEFT)
+                and sel_start != 0
+                and self._isTemplateChar(sel_start-1)):
+
+                # call _OnChangeField to handle "ctrl-shifted event"
+                # (which moves to previous field and selects it.)
+                event.m_shiftDown = True
+                event.m_ControlDown = True
+                keep_processing = self._OnChangeField(event)
+            elif( keycode in (WXK_DOWN, WXK_RIGHT)
+                  and sel_to != len(self._mask)
+                  and self._isTemplateChar(sel_to)):
+
+                # when changing field to the right, ensure don't accidentally go left instead
+                event.m_shiftDown = False
+                keep_processing = self._OnChangeField(event)
+            else:
+                # treat arrows as normal, allowing selection
+                # as appropriate:
+                event.Skip()
+        else:
+            if( (sel_to == self._fields[0]._extent[0] and keycode == WXK_LEFT)
+                or (sel_to == len(self._mask) and keycode == WXK_RIGHT) ):
+                if not wxValidator_IsSilent():
+                    wxBell()
+            else:
+                # treat arrows as normal, allowing selection
+                # as appropriate:
+                dbg('skipping event')
+                event.Skip()
+
+        keep_processing = False
+        dbg(indent=0)
+        return keep_processing
+
+
+    def _OnCtrl_S(self, event):
+        """ Default Ctrl-S handler; prints value information if demo enabled. """
+        dbg("wxMaskedEditMixin::_OnCtrl_S")
+        if self._demo:
+            print 'wxMaskedEditMixin.GetValue()       = "%s"\nwxMaskedEditMixin.GetPlainValue() = "%s"' % (self.GetValue(), self.GetPlainValue())
+            print "Valid? => " + str(self.IsValid())
+            print "Current field, start, end, value =", str( self._FindFieldExtent(getslice=True))
+        return False
+
+
+    def _OnCtrl_X(self, event):
+        """ Handles ctrl-x keypress in control. Should return False to skip other processing. """
+        dbg("wxMaskedEditMixin::_OnCtrl_X", indent=1)
+        self._Cut()
+        dbg(indent=0)
+        return False
+
+
+    def _OnCtrl_V(self, event):
+        """ Handles ctrl-V keypress in control. Should return False to skip other processing. """
+        dbg("wxMaskedEditMixin::_OnCtrl_V", indent=1)
+        self._Paste()
+        dbg(indent=0)
+        return False
+
+
+    def _OnCtrl_A(self,event):
+        """ Handles ctrl-a keypress in control. Should return False to skip other processing. """
+        end = self._goEnd(getPosOnly=True)
+        if event.ShiftDown():
+            wxCallAfter(self._SetInsertionPoint, 0)
+            wxCallAfter(self._SetSelection, 0, len(self._mask))
+        else:
+            wxCallAfter(self._SetInsertionPoint, 0)
+            wxCallAfter(self._SetSelection, 0, end)
+        return False
+
+
+    def _OnErase(self,event):
+        """ Handles backspace and delete keypress in control. Should return False to skip other processing."""
+        dbg("wxMaskedEditMixin::_OnErase", indent=1)
+        sel_start, sel_to = self._GetSelection()                   ## check for a range of selected text
+        key = event.GetKeyCode()
+        if( ((sel_to == 0 or sel_to == self._fields[0]._extent[0]) and key == WXK_BACK)
+            or (sel_to == len(self._mask) and key == WXK_DELETE)):
+            if not wxValidator_IsSilent():
+                wxBell()
+            dbg(indent=0)
+            return False
+
+        field = self._FindField(sel_to)
+        start, end = field._extent
+        value = self._GetValue()
+
+        if( field._insertRight
+            and key == WXK_BACK
+            and sel_start >= start and sel_to == end            # within field
+            and value[start:end] != self._template[start:end]): # and field not empty
+            dbg('delete left')
+            dbg('sel_start, start:', sel_start, start)
+            # special case: backspace at the end of a right insert field shifts contents right to cursor
+
+            if sel_start == end:    # select "last char in field"
+                sel_start -= 1
+
+            newfield = value[start:sel_start]
+            dbg('cut newfield: "%s"' % newfield)
+            left = ""
+            for i in range(start, end - len(newfield)):
+                if field._padZero:
+                    left += '0'
+                elif self._signOk and self._isNeg and newfield.find('-') == -1 and i == 1:
+                    left += '-'
+                else:
+                    left += self._template[i]   # this can produce strange results in combination with default values...
+            newfield = left + newfield
+            dbg('filled newfield: "%s"' % newfield)
+            newstr = value[:start] + newfield + value[end:]
+            if self._signOk and self._isNeg and newstr[0] == '-':
+                newstr = ' ' + newstr[1:]
+            pos = end
+        else:
+            if sel_start == sel_to:
+                dbg("current sel_start, sel_to:", sel_start, sel_to)
+                if key == WXK_BACK:
+                    sel_start, sel_to = sel_to-1, sel_to-1
+                    dbg("new sel_start, sel_to:", sel_start, sel_to)
+                if field._padZero and not value[start:sel_to].replace('0', '').replace(' ','').replace(field._fillChar, ''):
+                    # preceding chars (if any) are zeros, blanks or fillchar; new char should be 0:
+                    newchar = '0'
+                else:
+                    newchar = self._template[sel_to] ## get an original template character to "clear" the current char
+                dbg('value = "%s"' % value, 'value[%d] = "%s"' %(sel_start, value[sel_start]))
+
+                if self._isTemplateChar(sel_to):
+                    newstr = value
+                    newpos = sel_to
+                else:
+                    newstr, newpos = self._insertKey(newchar, sel_to, sel_start, sel_to, value)
+
+            else:
+                newstr = value
+                newpos = sel_start
+                for i in range(sel_start, sel_to):
+                    pos = i
+                    newchar = self._template[pos] ## get an original template character to "clear" the current char
+
+                    if not self._isTemplateChar(pos):
+                        newstr, newpos = self._insertKey(newchar, pos, sel_start, sel_to, newstr)
+
+            pos = sel_start  # put cursor back at beginning of selection
+        dbg('newstr:', newstr)
+
+        # if erasure results in an invalid field, disallow it:
+        dbg('field._validRequired?', field._validRequired)
+        dbg('field.IsValid("%s")?' % newstr[start:end], field.IsValid(newstr[start:end]))
+        if field._validRequired and not field.IsValid(newstr[start:end]):
+            if not wxValidator_IsSilent():
+                wxBell()
+            dbg(indent=0)
+            return False
+
+        # if erasure results in an invalid value, disallow it:
+        if self._ctrl_constraints._validRequired and not self.IsValid(newstr):
+            if not wxValidator_IsSilent():
+                wxBell()
+            dbg(indent=0)
+            return False
+
+        dbg('setting value (later) to', newstr)
+        wxCallAfter(self._SetValue, newstr)
+        dbg('setting insertion point (later) to', pos)
+        wxCallAfter(self._SetInsertionPoint, pos)
+        dbg(indent=0)
+        return False
+
+
+    def _OnEnd(self,event):
+        """ Handles End keypress in control. Should return False to skip other processing. """
+        dbg("wxMaskedEditMixin::_OnEnd", indent=1)
+        pos = self._adjustPos(self._GetInsertionPoint(), event.GetKeyCode())
+        end = self._goEnd(getPosOnly=True)
+
+        if event.ShiftDown():
+            dbg("shift-end; select to end of non-whitespace")
+            wxCallAfter(self._SetInsertionPoint, pos)
+            wxCallAfter(self._SetSelection, pos, end)
+        elif event.ControlDown():
+            dbg("control-end; select to end of control")
+            wxCallAfter(self._SetInsertionPoint, pos)
+            wxCallAfter(self._SetSelection, pos, len(self._mask))
+        else:
+            onChar = self._goEnd()
+        dbg(indent=0)
+        return False
+
+
+    def _OnReturn(self, event):
+         """
+         Changes the event to look like a tab event, so we can then call
+         event.Skip() on it, and have the parent form "do the right thing."
+         """
+         event.m_keyCode = WXK_TAB
+         event.Skip()
+
+
+    def _OnHome(self,event):
+        """ Handles Home keypress in control. Should return False to skip other processing."""
+        dbg("wxMaskedEditMixin::_OnHome", indent=1)
+        pos = self._adjustPos(self._GetInsertionPoint(), event.GetKeyCode())
+        sel_start, sel_to = self._GetSelection()
+
+        if event.ShiftDown():
+            dbg("shift-home; select to beginning of non-whitespace")
+            if sel_to > pos:
+                pos = sel_to
+            wxCallAfter(self._SetInsertionPoint, pos)
+            wxCallAfter(self._SetSelection, 0, pos)
+        else:
+            self._goHome()
+        dbg(indent=0)
+        return False
+
+
+    def _OnChangeField(self, event):
+        """
+        Primarily handles TAB events, but can be used for any key that
+        designer wants to change fields within a masked edit control.
+        NOTE: at the moment, although coded to handle shift-TAB and
+        control-shift-TAB, these events are not sent to the controls
+        by the framework.
+        """
+        dbg('wxMaskedEditMixin::_OnChangeField', indent = 1)
+        # determine end of current field:
+        pos = self._GetInsertionPoint()
+        dbg('current pos:', pos)
+
+
+        masklength = len(self._mask)
+        if masklength < 0:   # no fields; process tab normally
+            self._AdjustField(pos)
+            if event.GetKeyCode() == WXK_TAB:
+                dbg('tab to next ctrl')
+                event.Skip()
+            #else: do nothing
+            dbg(indent=0)
+            return False
+
+        field = self._FindField(pos)
+
+        if event.ShiftDown():
+            # "Go backward"
+
+            # NOTE: doesn't yet work with SHIFT-tab under wx; the control
+            # never sees this event! (But I've coded for it should it ever work,
+            # and it *does* work for '.' in wxIpAddrCtrl.)
+
+            index = field._index
+            begin_field = field._extent[0]
+            if event.ControlDown():
+                dbg('select to beginning of field:', begin_field, pos)
+                wxCallAfter(self._SetInsertionPoint, begin_field)
+                wxCallAfter(self._SetSelection, begin_field, pos)
+                dbg(indent=0)
+                return False
+
+            elif index == 0:
+                  # We're already in the 1st field; process shift-tab normally:
+                self._AdjustField(pos)
+                if event.GetKeyCode() == WXK_TAB:
+                    dbg('tab to previous ctrl')
+                    event.Skip()
+                else:
+                    dbg('position at beginning')
+                    wxCallAfter(self._SetInsertionPoint, begin_field)
+                dbg(indent=0)
+                return False
+            else:
+                # find beginning of previous field:
+                begin_prev = self._FindField(begin_field-1)._extent[0]
+                self._AdjustField(pos)
+                dbg('repositioning to', begin_prev)
+                wxCallAfter(self._SetInsertionPoint, begin_prev)
+                if self._FindField(begin_prev)._selectOnFieldEntry:
+                    edit_start, edit_end = self._FindFieldExtent(begin_prev)
+                    wxCallAfter(self._SetSelection, edit_start, edit_end)
+                dbg(indent=0)
+                return False
+
+        else:
+            # "Go forward"
+
+            end_field = field._extent[1]
+            if event.ControlDown():
+                dbg('select to end of field:', pos, end_field)
+                wxCallAfter(self._SetInsertionPoint, pos)
+                wxCallAfter(self._SetSelection, pos, end_field)
+                dbg(indent=0)
+                return False
+            else:
+                dbg('end of current field:', end_field)
+                dbg('go to next field')
+                if end_field == self._fields[self._field_indices[-1]]._extent[1]:
+                    self._AdjustField(pos)
+                    if event.GetKeyCode() == WXK_TAB:
+                        dbg('tab to next ctrl')
+                        event.Skip()
+                    else:
+                        dbg('position at end')
+                        wxCallAfter(self._SetInsertionPoint, end_field)
+                    dbg(indent=0)
+                    return False
+                else:
+                    # we have to find the start of the next field
+                    next_pos = self._findNextEntry(end_field)
+                    if next_pos == end_field:
+                        dbg('already in last field')
+                        self._AdjustField(pos)
+                        if event.GetKeyCode() == WXK_TAB:
+                            dbg('tab to next ctrl')
+                            event.Skip()
+                        #else: do nothing
+                        dbg(indent=0)
+                        return False
+                    else:
+                        self._AdjustField( pos )
+
+                        # move cursor to appropriate point in the next field and select as necessary:
+                        field = self._FindField(next_pos)
+                        edit_start, edit_end = field._extent
+                        if field._selectOnFieldEntry:
+                            dbg('move to ', next_pos)
+                            wxCallAfter(self._SetInsertionPoint, next_pos)
+                            edit_start, edit_end = self._FindFieldExtent(next_pos)
+                            dbg('select', edit_start, edit_end)
+                            wxCallAfter(self._SetSelection, edit_start, edit_end)
+                        else:
+                            if field._insertRight:
+                                next_pos = field._extent[1]
+                            dbg('move to ', next_pos)
+                            wxCallAfter(self._SetInsertionPoint, next_pos)
+                        dbg(indent=0)
+                        return False
+
+
+    def _OnDecimalPoint(self, event):
+        dbg('wxMaskedEditMixin::_OnDecimalPoint', indent=1)
+
+        pos = self._adjustPos(self._GetInsertionPoint(), event.GetKeyCode())
+
+        if self._isDec:       ## handle decimal value, move to decimal place
+            dbg('key == Decimal tab; decimal pos:', self._decimalpos)
+            value = self._GetValue()
+            if pos < self._decimalpos:
+                clipped_text = value[0:pos] + self._decimalChar + value[self._decimalpos+1:]
+                dbg('value: "%s"' % self._GetValue(), 'clipped_text:', clipped_text)
+                newstr = self._adjustDec(clipped_text)
+            else:
+                newstr = self._adjustDec(value)
+            wxCallAfter(self._SetValue, newstr)
+            wxCallAfter(self._SetInsertionPoint, self._decimalpos+1)
+            keep_processing = False
+
+        if self._isInt:      ## handle integer value, truncate from current position
+            dbg('key == Integer decimal event')
+            value = self._GetValue()
+            clipped_text = value[0:pos]
+            dbg('value: "%s"' % self._GetValue(), 'clipped_text:', clipped_text)
+            newstr = self._adjustInt(clipped_text)
+            dbg('newstr: "%s"' % newstr)
+            wxCallAfter(self._SetValue, newstr)
+            wxCallAfter(self._SetInsertionPoint, len(newstr.rstrip()))
+            keep_processing = False
+        dbg(indent=0)
+
+
+    def _OnChangeSign(self, event):
+        dbg('wxMaskedEditMixin::_OnChangeSign', indent=1)
+        key = event.GetKeyCode()
+        pos = self._adjustPos(self._GetInsertionPoint(), key)
+        if chr(key) in ("-","+") or (chr(key) == " " and pos == self._signpos):
+            cursign = self._isNeg
+            dbg('cursign:', cursign)
+            if chr(key) == "-":
+                self._isNeg = (not self._isNeg)   ## flip value
+            else:
+                self._isNeg = False
+            dbg('isNeg?', self._isNeg)
+
+            text, signpos = self._getSignedValue()
+            if text is not None:
+                self._signpos = signpos
+                dbg('self._signpos now:', self._signpos)
+            else:
+                text = self._GetValue()
+                field = self._fields[0]
+                if field._alignRight and field._fillChar == ' ':
+                    self._signpos = text.find('-')
+                    if self._signpos == -1:
+                        if len(text.lstrip()) < len(text):
+                            self._signpos = len(text) - len(text.lstrip()) - 1
+                        else:
+                            self._signpos = 0
+                else:
+                    self._signpos = 0
+                dbg('self._signpos now:', self._signpos)
+            if self._isNeg:
+                text = text[:self._signpos] + '-' + text[self._signpos+1:]
+            else:
+                text = text[:self._signpos] + ' ' + text[self._signpos+1:]
+
+            wxCallAfter(self._SetValue, text)
+            wxCallAfter(self._applyFormatting)
+            if pos == self._signpos:
+                wxCallAfter(self._SetInsertionPoint, self._signpos+1)
+            else:
+                wxCallAfter(self._SetInsertionPoint, pos)
+
+            keep_processing = False
+        else:
+            keep_processing = True
+        dbg(indent=0)
+        return keep_processing
+
+
+    def _OnGroupChar(self, event):
+        """
+        This handler is only registered if the mask is a numeric mask.
+        It allows the insertion of ',' or '.' if appropriate.
+        """
+        dbg('wxMaskedEditMixin::_OnGroupChar', indent=1)
+        keep_processing = True
+        pos = self._adjustPos(self._GetInsertionPoint(), event.GetKeyCode())
+        sel_start, sel_to = self._GetSelection()
+        groupchar = self._fields[0]._groupChar
+        if not self._isCharAllowed(groupchar, pos, checkRegex=True):
+            keep_processing = False
+            if not wxValidator_IsSilent():
+                    wxBell()
+
+        if keep_processing:
+            newstr, newpos = self._insertKey(groupchar, pos, sel_start, sel_to, self._GetValue() )
+            dbg("str with '%s' inserted:" % groupchar, '"%s"' % newstr)
+            if self._ctrl_constraints._validRequired and not self.IsValid(newstr):
+                keep_processing = False
+                if not wxValidator_IsSilent():
+                        wxBell()
+
+        if keep_processing:
+            wxCallAfter(self._SetValue, newstr)
+            wxCallAfter(self._SetInsertionPoint, newpos)
+        keep_processing = False
+        dbg(indent=0)
+        return keep_processing
+
+
+    def _findNextEntry(self,pos, adjustInsert=True):
+        """ Find the insertion point for the next valid entry character position."""
+        if self._isTemplateChar(pos):   # if changing fields, pay attn to flag
+            adjustInsert = adjustInsert
+        else:                           # else within a field; flag not relevant
+            adjustInsert = False
+
+        while self._isTemplateChar(pos) and pos < len(self._mask):
+            pos += 1
+
+        # if changing fields, and we've been told to adjust insert point,
+        # look at new field; if empty and right-insert field,
+        # adjust to right edge:
+        if adjustInsert and pos < len(self._mask):
+            field = self._FindField(pos)
+            start, end = field._extent
+            slice = self._GetValue()[start:end]
+            if field._insertRight and field.IsEmpty(slice):
+                pos = end
+        return pos
+
+
+    def _findNextTemplateChar(self, pos):
+        """ Find the position of the next non-editable character in the mask."""
+        while not self._isTemplateChar(pos) and pos < len(self._mask):
+            pos += 1
+        return pos
+
+
+    def _OnAutoCompleteField(self, event):
+        dbg('wxMaskedEditMixin::_OnAutoCompleteField', indent =1)
+        pos = self._GetInsertionPoint()
+        field = self._FindField(pos)
+        edit_start, edit_end, slice = self._FindFieldExtent(pos, getslice=True)
+        match_index = None
+        keycode = event.GetKeyCode()
+        text = slice.replace(field._fillChar, '')
+        text = text.strip()
+        keep_processing = True  # (assume True to start)
+        dbg('field._hasList?', field._hasList)
+        if field._hasList:
+            dbg('choices:', field._choices)
+            choices, choice_required = field._choices, field._choiceRequired
+            if keycode in (WXK_PRIOR, WXK_UP):
+                direction = -1
+            else:
+                direction = 1
+            match_index = self._autoComplete(direction, choices, text, compareNoCase=field._compareNoCase)
+            if( match_index is None
+                and (keycode in self._autoCompleteKeycodes + [WXK_PRIOR, WXK_NEXT]
+                     or (keycode in [WXK_UP, WXK_DOWN] and event.ShiftDown() ) ) ):
+                # Select the 1st thing from the list:
+                match_index = 0
+            if( match_index is not None
+                and ( keycode in self._autoCompleteKeycodes + [WXK_PRIOR, WXK_NEXT]
+                      or (keycode in [WXK_UP, WXK_DOWN] and event.ShiftDown())
+                      or (keycode == WXK_DOWN and len(text) < len(choices[match_index])) ) ):
+
+                    # We're allowed to auto-complete:
+                    value = self._GetValue()
+                    newvalue = value[:edit_start] + choices[match_index] + value[edit_end:]
+                    dbg('match found; setting value to "%s"' % newvalue)
+                    self._SetValue(newvalue)
+                    self._SetInsertionPoint(edit_end)
+                    self._CheckValid()  # recolor as appopriate
+
+        if keycode in (WXK_UP, WXK_DOWN, WXK_LEFT, WXK_RIGHT):
+            # treat as left right arrow if unshifted, tab/shift tab if shifted.
+            if event.ShiftDown():
+                if keycode in (WXK_DOWN, WXK_RIGHT):
+                    # remove "shifting" and treat as (forward) tab:
+                    event.m_shiftDown = False
+                keep_processing = self._OnChangeField(event)
+            else:
+                keep_processing = self._OnArrow(event)
+        # some other key; keep processing the key
+
+        dbg('keep processing?', keep_processing, indent=0)
+        return keep_processing
+
+
+    def _autoComplete(self, direction, choices, value, compareNoCase):
+        """
+        This function gets called in response to Auto-complete events.
+        It attempts to find a match to the specified value against the
+        list of choices; if exact match, the index of then next
+        appropriate value in the list, based on the given direction.
+        If not an exact match, it will return the index of the 1st value from
+        the choice list for which the partial value can be extended to match.
+        If no match found, it will return None.
+        """
+        if value is None:
+            dbg('nothing to match against', indent=0)
+            return None
+
+        if compareNoCase:
+            choices = [choice.strip().lower() for choice in choices]
+            value = value.lower()
+        else:
+            choices = [choice.strip() for choice in choices]
+
+        if value in choices:
+            index = choices.index(value)
+            dbg('matched "%s"' % choices[index])
+            if direction == -1:
+                if index == 0: index = len(choices) - 1
+                else: index -= 1
+            else:
+                if index == len(choices) - 1: index = 0
+                else: index += 1
+            dbg('change value to ', index)
+            match = index
+        else:
+            value = value.strip()
+            dbg('no match; try to auto-complete:')
+            match = None
+            dbg('searching for "%s"' % value)
+            for index in range(len(choices)):
+                choice = choices[index]
+                if choice.find(value, 0) == 0:
+                    dbg('match found:', choice)
+                    match = index
+                    break
+            if match is not None:
+                dbg('matched', match)
+            else:
+                dbg('no match found')
+        dbg(indent=0)
+        return match
+
+
+    def _AdjustField(self, pos):
+        """
+        This function gets called by default whenever the cursor leaves a field.
+        The pos argument given is the char position before leaving that field.
+        By default, floating point, integer and date values are adjusted to be
+        legal in this function.  Derived classes may override this function
+        to modify the value of the control in a different way when changing fields.
+
+        NOTE: these change the value immediately, and restore the cursor to
+        the passed location, so that any subsequent code can then move it
+        based on the operation being performed.
+        """
+        newvalue = value = self._GetValue()
+        field = self._FindField(pos)
+        start, end, slice = self._FindFieldExtent(getslice=True)
+        newfield = field._AdjustField(slice)
+        newvalue = value[:start] + newfield + value[end:]
+
+        if self._isDec and newvalue != self._template:
+            newvalue = self._adjustDec(newvalue)
+
+        if self._ctrl_constraints._isInt and value != self._template:
+            newvalue = self._adjustInt(value)
+
+        if self._isDate and value != self._template:
+            newvalue = self._adjustDate(value, fixcentury=True)
+            if self._4digityear:
+                year2dig = self._dateExtent - 2
+                if pos == year2dig and value[year2dig] != newvalue[year2dig]:
+                    pos = pos+2
+
+        if newvalue != value:
+            self._SetValue(newvalue)
+            self._SetInsertionPoint(pos)
+
+
+    def _adjustKey(self, pos, key):
+        """ Apply control formatting to the key (e.g. convert to upper etc). """
+        field = self._FindField(pos)
+        if field._forceupper and key in range(97,123):
+            key = ord( chr(key).upper())
+
+        if field._forcelower and key in range(97,123):
+            key = ord( chr(key).lower())
+
+        return key
+
+
+    def _adjustPos(self, pos, key):
+        """
+        Checks the current insertion point position and adjusts it if
+        necessary to skip over non-editable characters.
+        """
+        dbg('_adjustPos', pos, key, indent=1)
+        sel_start, sel_to = self._GetSelection()
+        # If a numeric or decimal mask, and negatives allowed, reserve the first space for sign
+        if( self._signOk
+            and pos == self._signpos
+            and key in (ord('-'), ord('+'), ord(' ')) ):
+            return pos
+
+        if key not in self._nav:
+            field = self._FindField(pos)
+
+            dbg('field._insertRight?', field._insertRight)
+            if field._insertRight:              # if allow right-insert
+                start, end = field._extent
+                slice = self._GetValue()[start:end].strip()
+                field_len = end - start
+                if pos == end:                      # if cursor at right edge of field
+                    # if not filled or supposed to stay in field, keep current position
+                    if len(slice) < field_len or not field._moveOnFieldFull:
+                        dbg('pos==end; len (slice) < field_len or not field._moveOnFieldFull')
+                        pass
+                else:
+                    # if at start of control, move to right edge
+                    if sel_to == sel_start and self._isTemplateChar(pos) and pos != end:
+                        pos = end                   # move to right edge
+                    elif sel_start <= start and sel_to == end:
+                        # select to right edge of field - 1 (to replace char)
+                        pos = end - 1
+                        self._SetInsertionPoint(pos)
+                        # restore selection
+                        self._SetSelection(sel_start, pos)
+
+                    elif self._signOk and sel_start == 0:   # if selected to beginning and signed,
+                        # adjust to past reserved sign position:
+                        pos = self._fields[0]._extent[0]
+                        self._SetInsertionPoint(pos)
+                        # restore selection
+                        self._SetSelection(pos, sel_to)
+                    else:
+                        pass    # leave position/selection alone
+
+            # else make sure the user is not trying to type over a template character
+            # If they are, move them to the next valid entry position
+            elif self._isTemplateChar(pos):
+                if( not field._moveOnFieldFull
+                      and (not self._signOk
+                           or (self._signOk
+                               and field._index == 0
+                               and pos > 0) ) ):      # don't move to next field without explicit cursor movement
+                    pass
+                else:
+                    # find next valid position
+                    pos = self._findNextEntry(pos)
+                    self._SetInsertionPoint(pos)
+                    if pos < sel_to:    # restore selection
+                        self._SetSelection(pos, sel_to)
+        dbg('adjusted pos:', pos, indent=0)
+        return pos
+
+
+    def _adjustDec(self, candidate=None):
+        """
+        'Fixes' an floating point control. Collapses spaces, right-justifies, etc.
+        """
+        dbg('wxMaskedEditMixin::_adjustDec, candidate = "%s"' % candidate, indent=1)
+        lenOrd,lenDec  = self._mask.split(self._decimalChar)  ## Get ordinal, decimal lengths
+        lenOrd = len(lenOrd)
+        lenDec = len(lenDec)
+        if candidate is None: value = self._GetValue()
+        else: value = candidate
+        dbg('value = "%(value)s"' % locals(), 'len(value):', len(value))
+        ordStr,decStr = value.split(self._decimalChar)
+
+        ordStr = self._fields[0]._AdjustField(ordStr)
+        dbg('adjusted ordStr: "%s"' % ordStr)
+        lenOrd = len(ordStr)
+        decStr = decStr + ('0'*(lenDec-len(decStr)))  # add trailing spaces to decimal
+
+        dbg('ordStr "%(ordStr)s"' % locals())
+        dbg('lenOrd:', lenOrd)
+
+        ordStr = string.rjust( ordStr[-lenOrd:], lenOrd)
+        dbg('right-justifed ordStr = "%(ordStr)s"' % locals())
+        newvalue = ordStr + self._decimalChar + decStr
+        if self._signOk:
+            if len(newvalue) < len(self._mask):
+                newvalue = ' ' + newvalue
+            signedvalue = self._getSignedValue(newvalue)[0]
+            if signedvalue is not None: newvalue = signedvalue
+
+        # Finally, align string with decimal position, left-padding with
+        # fillChar:
+        newdecpos = newvalue.find(self._decimalChar)
+        if newdecpos < self._decimalpos:
+            padlen = self._decimalpos - newdecpos
+            newvalue = string.join([' ' * padlen] + [newvalue] ,'')
+        dbg('newvalue = "%s"' % newvalue)
+        if candidate is None:
+            wxCallAfter(self._SetValue, newvalue)
+        dbg(indent=0)
+        return newvalue
+
+
+    def _adjustInt(self, candidate=None):
+        """ 'Fixes' an integer control. Collapses spaces, right or left-justifies."""
+        dbg("wxMaskedEditMixin::_adjustInt")
+        lenInt = len(self._mask)
+        if candidate is None: value = self._GetValue()
+        else: value = candidate
+        intStr = self._fields[0]._AdjustField(value)
+        intStr = intStr.strip() # drop extra spaces
+        if self._isNeg and intStr.find('-') == -1:
+            intStr = '-' + intStr
+        elif self._signOk and intStr.find('-') == -1:
+            intStr = ' ' + intStr
+
+        if self._fields[0]._alignRight:     ## Only if right-alignment is enabled
+            intStr = intStr.rjust( lenInt )
+        else:
+            intStr = intStr.ljust( lenInt )
+
+        if candidate is None:
+            wxCallAfter(self._SetValue, intStr )
+        return intStr
+
+
+    def _adjustDate(self, candidate=None, fixcentury=False, force4digit_year=False):
+        """
+        'Fixes' a date control, expanding the year if it can.
+        Applies various self-formatting options.
+        """
+        dbg("wxMaskedEditMixin::_adjustDate", indent=1)
+        if candidate is None: text    = self._GetValue()
+        else: text = candidate
+        dbg('text=', text)
+        if self._datestyle == "YMD":
+            year_field = 0
+        else:
+            year_field = 2
+
+        dbg('getYear: "%s"' % getYear(text, self._datestyle))
+        year    = string.replace( getYear( text, self._datestyle),self._fields[year_field]._fillChar,"")  # drop extra fillChars
+        month   = getMonth( text, self._datestyle)
+        day     = getDay( text, self._datestyle)
+        dbg('self._datestyle:', self._datestyle, 'year:', year, 'Month', month, 'day:', day)
+
+        yearVal = None
+        yearstart = self._dateExtent - 4
+        if( len(year) < 4
+            and (fixcentury
+                 or force4digit_year
+                 or (self._GetInsertionPoint() > yearstart+1 and text[yearstart+2] == ' ')
+                 or (self._GetInsertionPoint() > yearstart+2 and text[yearstart+3] == ' ') ) ):
+            ## user entered less than four digits and changing fields or past point where we could
+            ## enter another digit:
+            try:
+                yearVal = int(year)
+            except:
+                dbg('bad year=', year)
+                year = text[yearstart:self._dateExtent]
+
+        if len(year) < 4 and yearVal:
+            if len(year) == 2:
+                # Fix year adjustment to be less "20th century" :-) and to adjust heuristic as the
+                # years pass...
+                now = wxDateTime_Now()
+                century = (now.GetYear() /100) * 100        # "this century"
+                twodig_year = now.GetYear() - century       # "this year" (2 digits)
+                # if separation between today's 2-digit year and typed value > 50,
+                #      assume last century,
+                # else assume this century.
+                #
+                # Eg: if 2003 and yearVal == 30, => 2030
+                #     if 2055 and yearVal == 80, => 2080
+                #     if 2010 and yearVal == 96, => 1996
+                #
+                if abs(yearVal - twodig_year) > 50:
+                    yearVal = (century - 100) + yearVal
+                else:
+                    yearVal = century + yearVal
+                year = str( yearVal )
+            else:   # pad with 0's to make a 4-digit year
+                year = "%04d" % yearVal
+            if self._4digityear or force4digit_year:
+                text = makeDate(year, month, day, self._datestyle, text) + text[self._dateExtent:]
+        dbg('newdate: "%s"' % text, indent=0)
+        return text
+
+
+    def _goEnd(self, getPosOnly=False):
+        """ Moves the insertion point to the end of user-entry """
+        dbg("wxMaskedEditMixin::_goEnd; getPosOnly:", getPosOnly, indent=1)
+        text = self._GetValue()
+        for i in range( min( len(self._mask)-1, len(text)-1 ), -1, -1):
+            if self._isMaskChar(i):
+                char = text[i]
+                if char != ' ':
+                    break
+
+        pos = min(i+1,len(self._mask))
+        field = self._FindField(pos)
+        start, end = field._extent
+        if field._insertRight and pos < end:
+            pos = end
+        dbg('next pos:', pos)
+        dbg(indent=0)
+        if getPosOnly:
+            return pos
+        else:
+            self._SetInsertionPoint(pos)
+
+
+    def _goHome(self):
+        """ Moves the insertion point to the beginning of user-entry """
+        dbg("wxMaskedEditMixin::_goHome", indent=1)
+        text = self._GetValue()
+        for i in range(len(self._mask)):
+            if self._isMaskChar(i):
+                break
+        self._SetInsertionPoint(max(i,0))
+        dbg(indent=0)
+
+
+    def _getAllowedChars(self, pos):
+        """ Returns a string of all allowed user input characters for the provided
+            mask character plus control options
+        """
+        maskChar = self.maskdict[pos]
+        okchars = self.maskchardict[maskChar]    ## entry, get mask approved characters
+        field = self._FindField(pos)
+        if okchars and field._okSpaces:          ## Allow spaces?
+            okchars += " "
+        if okchars and field._includeChars:      ## any additional included characters?
+            okchars += field._includeChars
+##        dbg('okchars[%d]:' % pos, okchars)
+        return okchars
+
+
+    def _isMaskChar(self, pos):
+        """ Returns True if the char at position pos is a special mask character (e.g. NCXaA#)
+        """
+        if pos < len(self._mask):
+            return self.ismasked[pos]
+        else:
+            return False
+
+
+    def _isTemplateChar(self,Pos):
+        """ Returns True if the char at position pos is a template character (e.g. -not- NCXaA#)
+        """
+        if Pos < len(self._mask):
+            return not self._isMaskChar(Pos)
+        else:
+            return False
+
+
+    def _isCharAllowed(self, char, pos, checkRegex=False):
+        """ Returns True if character is allowed at the specific position, otherwise False."""
+        dbg('_isCharAllowed', char, pos, checkRegex, indent=1)
+        field = self._FindField(pos)
+        right_insert = False
+
+        if self.controlInitialized:
+            sel_start, sel_to = self._GetSelection()
+        else:
+            sel_start, sel_to = pos, pos
+
+        if (field._insertRight or self._ctrl_constraints._insertRight):
+            start, end = field._extent
+            if pos == end or (sel_start, sel_to) == field._extent:
+                pos = end - 1
+                right_insert = True
+
+        if self._isTemplateChar( pos ):  ## if a template character, return empty
+            dbg(indent=0)
+            return False
+
+        if self._isMaskChar( pos ):
+            okChars  = self._getAllowedChars(pos)
+            if self._fields[0]._groupdigits and (self._isInt or (self._isDec and pos < self._decimalpos)):
+                okChars += self._fields[0]._groupChar
+            if self._signOk and (self._isInt or (self._isDec and pos < self._decimalpos)):
+                okChars += '-'
+##            dbg('%s in %s?' % (char, okChars), char in okChars)
+            approved = char in okChars
+
+            if approved and checkRegex:
+                dbg("checking appropriate regex's")
+                value = self._eraseSelection(self._GetValue())
+                if right_insert:
+                    newvalue, newpos = self._insertKey(char, pos+1, sel_start, sel_to, value)
+                else:
+                    newvalue, newpos = self._insertKey(char, pos, sel_start, sel_to, value)
+                dbg('newvalue: "%s"' % newvalue)
+
+                fields = [self._FindField(pos)] + [self._ctrl_constraints]
+                for field in fields:    # includes fields[-1] == "ctrl_constraints"
+                    if field._regexMask and field._filter:
+                        dbg('checking vs. regex')
+                        start, end = field._extent
+                        slice = newvalue[start:end]
+                        approved = (re.match( field._filter, slice) is not None)
+                        dbg('approved?', approved)
+                    if not approved: break
+            dbg(indent=0)
+            return approved
+        else:
+            dbg(indent=0)
+            return False
+
+
+    def _applyFormatting(self):
+        """ Apply formatting depending on the control's state.
+            Need to find a way to call this whenever the value changes, in case the control's
+            value has been changed or set programatically.
+        """
+        dbg(suspend=1)
+        dbg('wxMaskedEditMixin::_applyFormatting', indent=1)
+
+        # Handle negative numbers
+        if self._signOk:
+##            value = self._GetValue()
+            text, signpos = self._getSignedValue()
+            dbg('text: "%s", signpos:' % text, signpos)
+            if not text or text[signpos] != '-':
+                self._isNeg = False
+                dbg('supposedly negative, but no sign found; new sign:', self._isNeg)
+                if text and signpos != self._signpos:
+                    self._signpos = signpos
+            elif text and self._valid and not self._isNeg and text[signpos] == '-':
+                self._isNeg = True
+
+        if self._signOk and self._isNeg:
+            dbg('setting foreground to', self._signedForegroundColor)
+            self.SetForegroundColour(self._signedForegroundColor)
+        else:
+            dbg('setting foreground to', self._foregroundColor)
+            self.SetForegroundColour(self._foregroundColor)
+
+        if self._valid:
+            dbg('valid')
+            if self.IsEmpty():
+                dbg('setting background to', self._emptyBackgroundColor)
+                self.SetBackgroundColour(self._emptyBackgroundColor)
+            else:
+                self.SetBackgroundColour(self._validBackgroundColor)
+        else:
+            dbg('invalid; coloring', self._invalidBackgroundColor)
+            self.SetBackgroundColour(self._invalidBackgroundColor) ## Change BG color if invalid
+
+        self._Refresh()
+        dbg(indent=0, suspend=0)
+
+
+    def _getAbsValue(self, candidate=None):
+        """ Return an unsigned value (i.e. strip the '-' prefix if any).
+        """
+        dbg('wxMaskedEditMixin::_getAbsValue; candidate="%s"' % candidate, indent=1)
+        if candidate is None: text = self._GetValue()
+        else: text = candidate
+
+        if self._isInt:
+            if self._ctrl_constraints._alignRight and self._fields[0]._fillChar == ' ':
+                signpos = text.find('-')
+                if signpos == -1:
+                    rstripped_text = text.rstrip()
+                    signpos = rstripped_text.rfind(' ')
+                    dbg('signpos:', signpos)
+                    if signpos == -1:
+                        signpos = 0
+                abstext = text[:signpos] + ' ' + text[signpos+1:]
+            else:
+                signpos = 0
+                text = self._template[0] + text[1:]
+            groupchar = self._fields[0]._groupChar
+            try:
+                value = long(text.replace(groupchar,''))
+            except:
+                dbg('invalid number', indent=0)
+                return None, None
+
+        else:   # decimal value
+            try:
+                groupchar = self._fields[0]._groupChar
+                value = float(text.replace(groupchar,'').replace(self._decimalChar, '.'))
+                if value < 0:
+                    signpos = text.find('-')
+                    text = text[:signpos] + self._template[signpos] + text[signpos+1:]
+                else:
+                    # look backwards from the decimal point for the 1st non-digit
+                    dbg('decimal pos:', self._decimalpos)
+                    signpos = self._decimalpos-1
+                    dbg('text: "%s"' % text)
+                    dbg('text[%d]:' % signpos, text[signpos])
+                    dbg('text[signpos] in list(string.digits) + [groupchar]?', text[signpos] in list(string.digits) + [groupchar])
+                    while text[signpos] in list(string.digits) + [groupchar] and signpos > 0:
+                        signpos -= 1
+                        dbg('text[%d]:' % signpos, text[signpos])
+            except ValueError:
+                dbg('invalid number', indent=0)
+                return None, None
+
+        dbg('abstext = "%s"' % text, 'signpos:', signpos)
+        dbg(indent=0)
+        return text, signpos
+
+
+    def _getSignedValue(self, candidate=None):
+        """ Return a signed value by adding a "-" prefix if the value
+            is set to negative, or a space if positive.
+        """
+        dbg('wxMaskedEditMixin::_getSignedValue; candidate="%s"' % candidate, indent=1)
+        if candidate is None: text = self._GetValue()
+        else: text = candidate
+
+
+        abstext, signpos = self._getAbsValue(text)
+        if self._signOk:
+            if abstext is None:
+                dbg(indent=0)
+                return abstext, signpos
+
+            if self._isNeg or text[signpos] == '-':
+                sign = '-'
+            else:
+                sign = ' '
+            if text[signpos] not in string.digits:
+                text = text[:signpos] + sign + text[signpos+1:]
+            else:
+                # this can happen if value passed is too big; sign assumed to be
+                # in position 0, but if already filled with a digit, prepend sign...
+                text = sign + text
+        else:
+            text = abstext
+        dbg('signedtext = "%s"' % text, 'signpos:', signpos)
+        dbg(indent=0)
+        return text, signpos
+
+
+    def GetPlainValue(self, candidate=None):
+        """ Returns control's value stripped of the template text.
+            plainvalue = wxMaskedEditMixin.GetPlainValue()
+        """
+        if candidate is None: text = self._GetValue()
+        else: text = candidate
+
+        if self.IsEmpty():
+            return ""
+        else:
+            plain = ""
+            for idx in range( len( self._template)):
+                if self._mask[idx] in maskchars:
+                    plain += text[idx]
+
+            if self._isDec or self._isInt:
+                if self._fields[0]._alignRight:
+                    lpad = plain.count(',')
+                    plain = ' ' * lpad + plain.replace(',','')
+                else:
+                    plain = plain.replace(',','')
+
+                if self._signOk and self._isNeg and plain.count('-') == 0:
+                    # must be in reserved position; add to "plain value"
+                    plain = '-' + plain
+
+            return plain.rstrip()
+
+
+    def IsEmpty(self, value=None):
+        """
+        Returns True if control is equal to an empty value.
+        (Empty means all editable positions in the template == fillChar.)
+        """
+        if value is None: value = self._GetValue()
+        if value == self._template and not self._defaultValue:
+##            dbg("IsEmpty? 1 (value == self._template and not self._defaultValue)")
+            return True     # (all mask chars == fillChar by defn)
+        elif value == self._template:
+            empty = True
+            for pos in range(len(self._template)):
+##                dbg('isMaskChar(%(pos)d)?' % locals(), self._isMaskChar(pos))
+##                dbg('value[%(pos)d] != self._fillChar?' %locals(), value[pos] != self._fillChar[pos])
+                if self._isMaskChar(pos) and value[pos] not in (' ', self._fillChar[pos]):
+                    empty = False
+##            dbg("IsEmpty? %(empty)d (do all mask chars == fillChar?)" % locals())
+            return empty
+        else:
+##            dbg("IsEmpty? 0 (value doesn't match template)")
+            return False
+
+
+    def IsDefault(self, value=None):
+        """
+        Returns True if the value specified (or the value of the control if not specified)
+        is equal to the default value.
+        """
+        if value is None: value = self._GetValue()
+        return value == self._template
+
+
+    def IsValid(self, value=None):
+        """ Indicates whether the value specified (or the current value of the control
+        if not specified) is considered valid."""
+##        dbg('wxMaskedEditMixin::IsValid("%s")' % value, indent=1)
+        if value is None: value = self._GetValue()
+        ret = self._CheckValid(value)
+##        dbg(indent=0)
+        return ret
+
+
+    def _eraseSelection(self, value=None, sel_start=None, sel_to=None):
+        """ Used to blank the selection when inserting a new character. """
+        dbg("wxMaskedEditMixin::_eraseSelection", indent=1)
+        if value is None: value = self._GetValue()
+        if sel_start is None or sel_to is None:
+            sel_start, sel_to = self._GetSelection()                   ## check for a range of selected text
+        dbg('value: "%s"' % value)
+        dbg("current sel_start, sel_to:", sel_start, sel_to)
+
+        newvalue = list(value)
+        for i in range(sel_start, sel_to):
+            if self._isMaskChar(i):
+                field = self._FindField(i)
+                if field._padZero:
+                    newvalue[i] = '0'
+                else:
+                    newvalue[i] = self._template[i]
+            elif self._signOk and i == 0 and newvalue[i] == '-':
+                newvalue[i] = ' '
+        value = string.join(newvalue,"")
+        dbg('new value: "%s"' % value)
+        dbg(indent=0)
+        return value
+
+
+    def _insertKey(self, char, pos, sel_start, sel_to, value):
+        """ Handles replacement of the character at the current insertion point."""
+        dbg('wxMaskedEditMixin::_insertKey', "\'" + char + "\'", pos, sel_start, sel_to, '"%s"' % value, indent=1)
+
+        text = self._eraseSelection(value)
+        field = self._FindField(pos)
+        start, end = field._extent
+        newtext = ""
+        if field._insertRight:
+            # special case; do right insertion if either whole field selected or cursor at right edge of field
+            if pos == end or (sel_start, sel_to) == field._extent:   # right edge insert
+                fstr = text[start:end]
+                erasable_chars = [field._fillChar, ' ']
+                if field._padZero: erasable_chars.append('0')
+                erased = ''
+                if fstr[0] in erasable_chars or (self._signOk and field._index == 0 and fstr[0] == '-'):
+                    erased = fstr[0]
+                    fstr = fstr[1:] + char
+                dbg('field str: "%s"' % fstr)
+                newtext = text[:start] + fstr + text[end:]
+                if erased == '-' and self._signOk:
+                    newtext = '-' + newtext[1:]
+                dbg('newtext: "%s"' % newtext)
+                if self._signOk and field._index == 0: start -= 1             # account for sign position
+                if( field._moveOnFieldFull
+                    and len(fstr.lstrip()) == end-start):   # if field now full
+                    newpos = self._findNextEntry(end)       #   go to next field
+                else:
+                    newpos = end                            # else keep cursor at right edge
+
+        if not newtext:
+            before  = text[0:pos]
+            after   = text[pos+1:]
+            newtext = before + char + after
+            newpos = pos+1
+
+        dbg('newtext: "%s"' % newtext, 'newpos:', newpos)
+
+        dbg(indent=0)
+        return newtext, newpos
+
+
+    def _OnFocus(self,event):
+        """
+        This event handler is currently necessary to work around new default
+        behavior as of wxPython2.3.3;
+        The TAB key auto selects the entire contents of the wxTextCtrl *after*
+        the EVT_SET_FOCUS event occurs; therefore we can't query/adjust the selection
+        *here*, because it hasn't happened yet.  So to prevent this behavior, and
+        preserve the correct selection when the focus event is not due to tab,
+        we need to pull the following trick:
+        """
+        dbg('wxMaskedEditMixin::_OnFocus')
+        wxCallAfter(self._fixSelection)
+        event.Skip()
+        self.Refresh()
+
+
+    def _CheckValid(self, candidate=None):
+        """
+        This is the default validation checking routine; It verifies that the
+        current value of the control is a "valid value," and has the side
+        effect of coloring the control appropriately.
+        """
+        dbg(suspend=1)
+        dbg('wxMaskedEditMixin::_CheckValid: candidate="%s"' % candidate, indent=1)
+        oldValid = self._valid
+        if candidate is None: value = self._GetValue()
+        else: value = candidate
+        dbg('value: "%s"' % value)
+        oldvalue = value
+        valid = True    # assume True
+
+        if not self.IsDefault(value) and self._isDate:                    ## Date type validation
+            valid = self._validateDate(value)
+            dbg("valid date?", valid)
+
+        elif not self.IsDefault(value) and self._isTime:
+            valid = self._validateTime(value)
+            dbg("valid time?", valid)
+
+        elif not self.IsDefault(value) and (self._isInt or self._isDec):  ## Numeric type
+            valid = self._validateNumeric(value)
+            dbg("valid Number?", valid)
+
+        if valid and not self.IsDefault(value):
+            ## valid so far; ensure also allowed by any list or regex provided:
+            valid = self._validateGeneric(value)
+            dbg("valid value?", valid)
+
+        if valid:
+            for field in self._fields.values(): # (includes field -1, ie: "global setting")
+                if field._emptyInvalid:
+                    start, end = field._extent
+                    if field.IsEmpty(value[start:end]):
+                        valid = False
+                        break
+
+        dbg('valid?', valid)
+
+        if not candidate:
+            self._valid = valid
+            self._applyFormatting()
+            if self._valid != oldValid:
+                dbg('validity changed: oldValid =',oldValid,'newvalid =', self._valid)
+                dbg('oldvalue: "%s"' % oldvalue, 'newvalue: "%s"' % self._GetValue())
+        dbg(indent=0, suspend=0)
+        return valid
+
+
+    def _validateGeneric(self, candidate=None):
+        """ Validate the current value using the provided list or Regex filter (if any).
+        """
+        if candidate is None:
+            text = self._GetValue()
+        else:
+            text = candidate
+
+        valid = True    # assume true
+        for i in [-1] + self._field_indices:   # process global constraints first:
+            field = self._fields[i]
+            start, end = field._extent
+            slice = text[start:end]
+            valid = field.IsValid(slice)
+            if not valid:
+                break
+
+        return valid
+
+
+    def _validateNumeric(self, candidate=None):
+        """ Validate that the value is within the specified range (if specified.)"""
+        if candidate is None: value = self._GetValue()
+        else: value = candidate
+        try:
+            groupchar = self._fields[0]._groupChar
+            if self._isDec:
+                number = float(value.replace(groupchar, '').replace(self._decimalChar, '.'))
+            else:
+                number = int( value.replace(groupchar, ''))
+            dbg('number:', number)
+            if self._ctrl_constraints._hasRange:
+                valid = self._ctrl_constraints._rangeLow <= number <= self._ctrl_constraints._rangeHigh
+            else:
+                valid = True
+            groupcharpos = value.rfind(groupchar)
+            if groupcharpos != -1:  # group char present
+                dbg('groupchar found at', groupcharpos)
+                if self._isDec and groupcharpos > self._decimalpos:
+                    # 1st one found on right-hand side is past decimal point
+                    dbg('groupchar in fraction; illegal')
+                    valid = False
+                elif self._isDec:
+                    ord = value[:self._decimalpos]
+                else:
+                    ord = value.strip()
+
+                parts = ord.split(groupchar)
+                for i in range(len(parts)):
+                    if i == 0 and abs(int(parts[0])) > 999:
+                        dbg('group 0 too long; illegal')
+                        valid = False
+                        break
+                    elif i > 0 and (len(parts[i]) != 3 or ' ' in parts[i]):
+                        dbg('group %i (%s) not right size; illegal' % (i, parts[i]))
+                        valid = False
+                        break
+        except ValueError:
+            dbg('value not a valid number')
+            valid = False
+        return valid
+
+
+    def _validateDate(self, candidate=None):
+        """ Validate the current date value using the provided Regex filter.
+            Generally used for character types.BufferType
+        """
+        dbg('wxMaskedEditMixin::_validateDate', indent=1)
+        if candidate is None: value = self._GetValue()
+        else: value = candidate
+        dbg('value = "%s"' % value)
+        text = self._adjustDate(value, force4digit_year=True)     ## Fix the date up before validating it
+        dbg('text =', text)
+        valid = True   # assume True until proven otherwise
+
+        try:
+            # replace fillChar in each field with space:
+            datestr = text[0:self._dateExtent]
+            for i in range(3):
+                field = self._fields[i]
+                start, end = field._extent
+                fstr = datestr[start:end]
+                fstr.replace(field._fillChar, ' ')
+                datestr = datestr[:start] + fstr + datestr[end:]
+
+            year, month, day = getDateParts( datestr, self._datestyle)
+            year = int(year)
+            dbg('self._dateExtent:', self._dateExtent)
+            if self._dateExtent == 11:
+                month = charmonths_dict[month.lower()]
+            else:
+                month = int(month)
+            day = int(day)
+            dbg('year, month, day:', year, month, day)
+
+        except ValueError:
+            dbg('cannot convert string to integer parts')
+            valid = False
+        except KeyError:
+            dbg('cannot convert string to integer month')
+            valid = False
+
+        if valid:
+            # use wxDateTime to unambiguously try to parse the date:
+            # ### Note: because wxDateTime is *brain-dead* and expects months 0-11,
+            # rather than 1-12, so handle accordingly:
+            if month > 12:
+                valid = False
+            else:
+                month -= 1
+                try:
+                    dbg("trying to create date from values day=%d, month=%d, year=%d" % (day,month,year))
+                    dateHandler = wxDateTimeFromDMY(day,month,year)
+                    dbg("succeeded")
+                    dateOk = True
+                except:
+                    dbg('cannot convert string to valid date')
+                    dateOk = False
+                if not dateOk:
+                    valid = False
+
+            if valid:
+                # wxDateTime doesn't take kindly to leading/trailing spaces when parsing,
+                # so we eliminate them here:
+                timeStr     = text[self._dateExtent+1:].strip()         ## time portion of the string
+                if timeStr:
+                    dbg('timeStr: "%s"' % timeStr)
+                    try:
+                        checkTime    = dateHandler.ParseTime(timeStr)
+                        valid = checkTime == len(timeStr)
+                    except:
+                        valid = False
+                    if not valid:
+                        dbg('cannot convert string to valid time')
+        if valid: dbg('valid date')
+        dbg(indent=0)
+        return valid
+
+
+    def _validateTime(self, candidate=None):
+        """ Validate the current time value using the provided Regex filter.
+            Generally used for character types.BufferType
+        """
+        dbg('wxMaskedEditMixin::_validateTime', indent=1)
+        # wxDateTime doesn't take kindly to leading/trailing spaces when parsing,
+        # so we eliminate them here:
+        if candidate is None: value = self._GetValue().strip()
+        else: value = candidate.strip()
+        dbg('value = "%s"' % value)
+        valid = True   # assume True until proven otherwise
+
+        dateHandler = wxDateTime_Today()
+        try:
+            checkTime    = dateHandler.ParseTime(value)
+            dbg('checkTime:', checkTime, 'len(value)', len(value))
+            valid = checkTime == len(value)
+        except:
+            valid = False
+
+        if not valid:
+            dbg('cannot convert string to valid time')
+        if valid: dbg('valid time')
+        dbg(indent=0)
+        return valid
+
+
+    def _OnKillFocus(self,event):
+        """ Handler for EVT_KILL_FOCUS event.
+        """
+        dbg('wxMaskedEditMixin::_OnKillFocus', 'isDate=',self._isDate, indent=1)
+        if self._mask and self._IsEditable():
+            self._AdjustField(self._GetInsertionPoint())
+            self._CheckValid()   ## Call valid handler
+
+        self._LostFocus()    ## Provided for subclass use
+        event.Skip()
+        dbg(indent=0)
+
+
+    def _fixSelection(self):
+        """
+        This gets called after the TAB traversal selection is made, if the
+        focus event was due to this, but before the EVT_LEFT_* events if
+        the focus shift was due to a mouse event.
+
+        The trouble is that, a priori, there's no explicit notification of
+        why the focus event we received.  However, the whole reason we need to
+        do this is because the default behavior on TAB traveral in a wxTextCtrl is
+        now to select the entire contents of the window, something we don't want.
+        So we can *now* test the selection range, and if it's "the whole text"
+        we can assume the cause, change the insertion point to the start of
+        the control, and deselect.
+        """
+        dbg('wxMaskedEditMixin::_fixSelection', indent=1)
+        if not self._mask or not self._IsEditable():
+            dbg(indent=0)
+            return
+
+        sel_start, sel_to = self._GetSelection()
+        dbg('sel_start, sel_to:', sel_start, sel_to, 'self.IsEmpty()?', self.IsEmpty())
+
+        if( sel_start == 0 and sel_to >= len( self._mask )   #(can be greater in numeric controls because of reserved space)
+            or self.IsEmpty() or self.IsDefault()):
+            # This isn't normally allowed, and so assume we got here by the new
+            # "tab traversal" behavior, so we need to reset the selection
+            # and insertion point:
+            dbg('entire text selected; resetting selection to start of control')
+            self._goHome()
+            if self._FindField(0)._selectOnFieldEntry:
+                edit_start, edit_end = self._FindFieldExtent(self._GetInsertionPoint())
+                self._SetSelection(edit_start, edit_end)
+            elif self._fields[0]._insertRight:
+                self._SetInsertionPoint(self._fields[0]._extent[1])
+
+        elif sel_start == 0 and self._GetValue()[0] == '-' and (self._isDec or self._isInt) and self._signOk:
+            dbg('control is empty; start at beginning after -')
+            self._SetInsertionPoint(1)   ## Move past minus sign space if signed
+            if self._FindField(0)._selectOnFieldEntry:
+                edit_start, edit_end = self._FindFieldExtent(self._GetInsertionPoint())
+                self._SetSelection(1, edit_end)
+            elif self._fields[0]._insertRight:
+                self._SetInsertionPoint(self._fields[0]._extent[1])
+
+        elif sel_start > self._goEnd(getPosOnly=True):
+            dbg('cursor beyond the end of the user input; go to end of it')
+            self._goEnd()
+        else:
+            dbg('sel_start, sel_to:', sel_start, sel_to, 'len(self._mask):', len(self._mask))
+        dbg(indent=0)
+
+
+    def _Keypress(self,key):
+        """ Method provided to override OnChar routine. Return False to force
+            a skip of the 'normal' OnChar process. Called before class OnChar.
+        """
+        return True
+
+
+    def _LostFocus(self):
+        """ Method provided for subclasses. _LostFocus() is called after
+            the class processes its EVT_KILL_FOCUS event code.
+        """
+        pass
+
+
+    def _OnDoubleClick(self, event):
+        """ selects field under cursor on dclick."""
+        pos = self._GetInsertionPoint()
+        field = self._FindField(pos)
+        start, end = field._extent
+        self._SetInsertionPoint(start)
+        self._SetSelection(start, end)
+
+
+    def _Change(self):
+        """ Method provided for subclasses. Called by internal EVT_TEXT
+            handler. Return False to override the class handler, True otherwise.
+        """
+        return True
+
+
+    def _Cut(self):
+        """
+        Used to override the default Cut() method in base controls, instead
+        copying the selection to the clipboard and then blanking the selection,
+        leaving only the mask in the selected area behind.
+        Note: _Cut (read "undercut" ;-) must be called from a Cut() override in the
+        derived control because the mixin functions can't override a method of
+        a sibling class.
+        """
+        dbg("wxMaskedEditMixin::_Cut", indent=1)
+        value = self._GetValue()
+        dbg('current value: "%s"' % value)
+        sel_start, sel_to = self._GetSelection()                   ## check for a range of selected text
+        dbg('selected text: "%s"' % value[sel_start:sel_to].strip())
+        do = wxTextDataObject()
+        do.SetText(value[sel_start:sel_to].strip())
+        wxTheClipboard.Open()
+        wxTheClipboard.SetData(do)
+        wxTheClipboard.Close()
+
+        wxCallAfter(self._SetValue, self._eraseSelection() )
+        wxCallAfter(self._SetInsertionPoint, sel_start)
+        dbg(indent=0)
+
+
+# WS Note: overriding Copy is no longer necessary given that you
+# can no longer select beyond the last non-empty char in the control.
+#
+##    def _Copy( self ):
+##        """
+##        Override the wxTextCtrl's .Copy function, with our own
+##        that does validation.  Need to strip trailing spaces.
+##        """
+##        sel_start, sel_to = self._GetSelection()
+##        select_len = sel_to - sel_start
+##        textval = wxTextCtrl._GetValue(self)
+##
+##        do = wxTextDataObject()
+##        do.SetText(textval[sel_start:sel_to].strip())
+##        wxTheClipboard.Open()
+##        wxTheClipboard.SetData(do)
+##        wxTheClipboard.Close()
+
+
+    def _getClipboardContents( self ):
+        """ Subroutine for getting the current contents of the clipboard.
+        """
+        do = wxTextDataObject()
+        wxTheClipboard.Open()
+        success = wxTheClipboard.GetData(do)
+        wxTheClipboard.Close()
+
+        if not success:
+            return None
+        else:
+            # Remove leading and trailing spaces before evaluating contents
+            return do.GetText().strip()
+
+
+    def _validatePaste(self, paste_text, sel_start, sel_to, raise_on_invalid=False):
+        """
+        Used by paste routine and field choice validation to see
+        if a given slice of paste text is legal for the area in question:
+        returns validity, replacement text, and extent of paste in
+        template.
+        """
+        dbg(suspend=1)
+        dbg('wxMaskedEditMixin::_validatePaste("%(paste_text)s", %(sel_start)d, %(sel_to)d), raise_on_invalid? %(raise_on_invalid)d' % locals(), indent=1)
+        select_length = sel_to - sel_start
+        maxlength = select_length
+        dbg('sel_to - sel_start:', maxlength)
+        if maxlength == 0:
+            maxlength = len(self._mask) - sel_start
+        dbg('maxlength:', maxlength)
+        length_considered = len(paste_text)
+        if length_considered > maxlength:
+            dbg('paste text will not fit into the control:', indent=0)
+            if raise_on_invalid:
+                raise ValueError('"%s" will not fit into the control "%s"' % (paste_text, self.name))
+            else:
+                return False, None, None
+
+        text = self._template
+        dbg('length_considered:', length_considered)
+
+        valid_paste = True
+        replacement_text = ""
+        replace_to = sel_start
+        i = 0
+        while valid_paste and i < length_considered and replace_to < len(self._mask):
+            char = paste_text[i]
+            field = self._FindField(replace_to)
+            if field._forceupper:   char = char.upper()
+            elif field._forcelower: char = char.lower()
+
+            dbg('char:', "'"+char+"'", 'i =', i, 'replace_to =', replace_to)
+            dbg('self._isTemplateChar(%d)?' % replace_to, self._isTemplateChar(replace_to))
+            if not self._isTemplateChar(replace_to) and self._isCharAllowed( char, replace_to):
+                replacement_text += char
+                dbg("not template(%(replace_to)d) and charAllowed('%(char)s',%(replace_to)d)" % locals())
+                dbg("replacement_text:", '"'+replacement_text+'"')
+                i += 1
+                replace_to += 1
+            elif char == self._template[replace_to] or (i == 0 and char == '-' and self._signOk):
+                replacement_text += char
+                dbg("'%(char)s' == template(%(replace_to)d)" % locals())
+                dbg("replacement_text:", '"'+replacement_text+'"')
+                i += 1
+                replace_to += 1
+            else:
+                next_entry = self._findNextEntry(replace_to, adjustInsert=False)
+                if next_entry == replace_to:
+                    valid_paste = False
+                else:
+                    replacement_text += self._template[replace_to:next_entry]
+                    dbg("skipping template; next_entry =", next_entry)
+                    dbg("replacement_text:", '"'+replacement_text+'"')
+                    replace_to = next_entry  # so next_entry will be considered on next loop
+
+        if not valid_paste and raise_on_invalid:
+            dbg('raising exception')
+            raise ValueError('"%s" cannot be inserted into the control "%s"' % (paste_text, self.name))
+
+        elif i < len(paste_text):
+            valid_paste = False
+            if raise_on_invalid:
+                dbg('raising exception')
+                raise ValueError('"%s" will not fit into the control "%s"' % (paste_text, self.name))
+
+        dbg('valid_paste?', valid_paste)
+        if valid_paste:
+            dbg('replacement_text: "%s"' % replacement_text, 'replace to:', replace_to)
+        dbg(indent=0, suspend=0)
+        return valid_paste, replacement_text, replace_to
+
+
+    def _Paste( self, value=None, raise_on_invalid=False, just_return_value=False ):
+        """
+        Used to override the base control's .Paste() function,
+        with our own that does validation.
+        Note: _Paste must be called from a Paste() override in the
+        derived control because the mixin functions can't override a
+        method of a sibling class.
+        """
+        dbg('wxMaskedEditMixin::_Paste (value = "%s")' % value, indent=1)
+        if value is None:
+            paste_text = self._getClipboardContents()
+        else:
+            paste_text = value
+
+        if paste_text is not None:
+            dbg('paste text:', paste_text)
+            # (conversion will raise ValueError if paste isn't legal)
+            sel_start, sel_to = self._GetSelection()
+            try:
+                valid_paste, replacement_text, replace_to = self._validatePaste(paste_text, sel_start, sel_to, raise_on_invalid)
+            except:
+                dbg('exception thrown', indent=0)
+                raise
+
+            if not valid_paste:
+                dbg('paste text not legal for the selection or portion of the control following the cursor;')
+                dbg(indent=0)
+                return False
+            # else...
+            text = self._eraseSelection()
+
+            new_text = text[:sel_start] + replacement_text + text[replace_to:]
+            if new_text:
+                new_text = string.ljust(new_text,len(self._mask))
+            dbg("new_text:", '"'+new_text+'"')
+
+            if not just_return_value:
+                if new_text == '':
+                    self.ClearValue()
+                else:
+                    wxCallAfter(self._SetValue, new_text)
+                    new_pos = sel_start + len(replacement_text)
+                    wxCallAfter(self._SetInsertionPoint, new_pos)
+            else:
+                return new_text
+        elif just_return_value:
+            return self._GetValue()
+        dbg(indent=0)
+
+
+
+## ---------- ---------- ---------- ---------- ---------- ---------- ----------
+
+class wxMaskedTextCtrl( wxTextCtrl, wxMaskedEditMixin ):
+    """
+    This is the primary derivation from wxMaskedEditMixin.  It provides
+    a general masked text control that can be configured with different
+    masks.
+    """
+
+    def __init__( self, parent, id=-1, value = '',
+                  pos = wxDefaultPosition,
+                  size = wxDefaultSize,
+                  style = wxTE_PROCESS_TAB,
+                  validator=wxDefaultValidator,     ## placeholder provided for data-transfer logic
+                  name = 'maskedTextCtrl',
+                  setupEventHandling = True,        ## setup event handling by default
+                  **kwargs):
+
+        wxTextCtrl.__init__(self, parent, id, value='',
+                            pos=pos, size = size,
+                            style=style, validator=validator,
+                            name=name)
+
+        self.controlInitialized = True
+        wxMaskedEditMixin.__init__( self, name, **kwargs )
+        self._SetInitialValue(value)
+
+        if setupEventHandling:
+            ## Setup event handlers
+            EVT_SET_FOCUS( self, self._OnFocus )        ## defeat automatic full selection
+            EVT_KILL_FOCUS( self, self._OnKillFocus )   ## run internal validator
+            EVT_LEFT_DCLICK(self, self._OnDoubleClick)  ## select field under cursor on dclick
+            EVT_KEY_DOWN( self, self._OnKeyDown )       ## capture control events not normally seen, eg ctrl-tab.
+            EVT_CHAR( self, self._OnChar )              ## handle each keypress
+            EVT_TEXT( self, self.GetId(), self._OnTextChange )  ## color control appropriately
+
+
+    def __repr__(self):
+        return "<wxMaskedTextCtrl: %s>" % self.GetValue()
+
+
+    def _GetSelection(self):
+        """
+        Allow mixin to get the text selection of this control.
+        REQUIRED by any class derived from wxMaskedEditMixin.
+        """
+        return self.GetSelection()
+
+    def _SetSelection(self, sel_start, sel_to):
+        """
+        Allow mixin to set the text selection of this control.
+        REQUIRED by any class derived from wxMaskedEditMixin.
+        """
+        return self.SetSelection( sel_start, sel_to )
+
+    def SetSelection(self, sel_start, sel_to):
+        """
+        This is just for debugging...
+        """
+        dbg("wxMaskedTextCtrl::SetSelection(%(sel_start)d, %(sel_to)d)" % locals())
+        wxTextCtrl.SetSelection(self, sel_start, sel_to)
+
+
+    def _GetInsertionPoint(self):
+        return self.GetInsertionPoint()
+
+    def _SetInsertionPoint(self, pos):
+        self.SetInsertionPoint(pos)
+
+    def SetInsertionPoint(self, pos):
+        """
+        This is just for debugging...
+        """
+        dbg("wxMaskedTextCtrl::SetInsertionPoint(%(pos)d)" % locals())
+        wxTextCtrl.SetInsertionPoint(self, pos)
+
+
+    def _GetValue(self):
+        """
+        Allow mixin to get the raw value of the control with this function.
+        REQUIRED by any class derived from wxMaskedEditMixin.
+        """
+        return self.GetValue()
+
+    def _SetValue(self, value):
+        """
+        Allow mixin to set the raw value of the control with this function.
+        REQUIRED by any class derived from wxMaskedEditMixin.
+        """
+        dbg('wxMaskedTextCtrl::_SetValue("%(value)s")' % locals(), indent=1)
+        wxTextCtrl.SetValue(self, value)
+        dbg(indent=0)
+
+    def SetValue(self, value):
+        """
+        This function redefines the externally accessible .SetValue to be
+        a smart "paste" of the text in question, so as not to corrupt the
+        masked control.  NOTE: this must be done in the class derived
+        from the base wx control.
+        """
+        dbg('wxMaskedTextCtrl::SetValue = "%s"' % value, indent=1)
+
+        # empty previous contents, replacing entire value:
+        self._SetInsertionPoint(0)
+        self._SetSelection(0, len(self._mask))
+
+        if( len(value) < len(self._mask)                # value shorter than control
+            and (self._isDec or self._isInt)            # and it's a numeric control
+            and self._ctrl_constraints._alignRight ):   # and it's a right-aligned control
+            # try to intelligently "pad out" the value to the right size:
+            value = self._template[0:len(self._mask) - len(value)] + value
+            dbg('padded value = "%s"' % value)
+
+        # make SetValue behave the same as if you had typed the value in:
+        try:
+            value = self._Paste(value, raise_on_invalid=True, just_return_value=True)
+            if self._isDec:
+                self._isNeg = False     # (clear current assumptions)
+                value = self._adjustDec(value)
+            elif self._isInt:
+                self._isNeg = False     # (clear current assumptions)
+                value = self._adjustInt(value)
+            elif self._isDate and not self.IsValid(value) and self._4digityear:
+                value = self._adjustDate(value, fixcentury=true)
+        except ValueError:
+            # If date, year might be 2 digits vs. 4; try adjusting it:
+            if self._isDate and self._4digityear:
+                dateparts = value.split(' ')
+                dateparts[0] = self._adjustDate(dateparts[0], fixcentury=true)
+                value = string.join(dateparts, ' ')
+                dbg('adjusted value: "%s"' % value)
+                value = self._Paste(value, raise_on_invalid=True, just_return_value=True)
+            else:
+                raise
+
+        self._SetValue(value)
+        dbg(indent=0)
+
+
+    def _Refresh(self):
+        """
+        Allow mixin to refresh the base control with this function.
+        REQUIRED by any class derived from wxMaskedEditMixin.
+        """
+        dbg('wxMaskedTextCtrl::_Refresh', indent=1)
+        wxTextCtrl.Refresh(self)
+        dbg(indent=0)
+
+
+    def Refresh(self):
+        """
+        This function redefines the externally accessible .Refresh() to
+        validate the contents of the masked control as it refreshes.
+        NOTE: this must be done in the class derived from the base wx control.
+        """
+        dbg('wxMaskedTextCtrl::Refresh', indent=1)
+        self._CheckValid()
+        self._Refresh()
+        dbg(indent=0)
+
+
+    def _IsEditable(self):
+        """
+        Allow mixin to determine if the base control is editable with this function.
+        REQUIRED by any class derived from wxMaskedEditMixin.
+        """
+        return wxTextCtrl.IsEditable(self)
+
+
+    def Cut(self):
+        """
+        This function redefines the externally accessible .Cut to be
+        a smart "erase" of the text in question, so as not to corrupt the
+        masked control.  NOTE: this must be done in the class derived
+        from the base wx control.
+        """
+        self._Cut()     # call the mixin's Cut method
+
+
+    def Paste(self):
+        """
+        This function redefines the externally accessible .Paste to be
+        a smart "paste" of the text in question, so as not to corrupt the
+        masked control.  NOTE: this must be done in the class derived
+        from the base wx control.
+        """
+        self._Paste()   # call the mixin's Paste method
+
+
+    def IsModified(self):
+        """
+        This function overrides the raw wxTextCtrl method, because the
+        masked edit mixin uses SetValue to change the value, which doesn't
+        modify the state of this attribute.  So, we keep track on each
+        keystroke to see if the value changes, and if so, it's been
+        modified.
+        """
+        return wxTextCtrl.IsModified(self) or self.modified
+
+
+
+
+## ---------- ---------- ---------- ---------- ---------- ---------- ----------
+## Because calling SetSelection programmatically does not fire EVT_COMBOBOX
+## events, we have to do it ourselves when we auto-complete.
+class wxMaskedComboBoxSelectEvent(wxPyCommandEvent):
+    def __init__(self, id, selection = 0, object=None):
+        wxPyCommandEvent.__init__(self, wxEVT_COMMAND_COMBOBOX_SELECTED, id)
+
+        self.__selection = selection
+        self.SetEventObject(object)
+
+    def GetSelection(self):
+        """Retrieve the value of the control at the time
+        this event was generated."""
+        return self.__selection
+
+
+class wxMaskedComboBox( wxComboBox, wxMaskedEditMixin ):
+    """
+    This masked edit control adds the ability to use a masked input
+    on a combobox, and do auto-complete of such values.
+    """
+    def __init__( self, parent, id=-1, value = '',
+                  pos = wxDefaultPosition,
+                  size = wxDefaultSize,
+                  choices = [],
+                  style = wxCB_DROPDOWN,
+                  validator = wxDefaultValidator,
+                  name = "maskedComboBox",
+                  setupEventHandling = True,        ## setup event handling by default):
+                  **kwargs):
+
+
+        # This is necessary, because wxComboBox currently provides no
+        # method for determining later if this was specified in the
+        # constructor for the control...
+        self.__readonly = style & wxCB_READONLY == wxCB_READONLY
+
+        kwargs['choices'] = choices                 ## set up maskededit to work with choice list too
+
+        ## Since combobox completion is case-insensitive, always validate same way
+        if not kwargs.has_key('compareNoCase'):
+            kwargs['compareNoCase'] = True
+
+        wxMaskedEditMixin.__init__( self, name, **kwargs )
+        self._choices = self._ctrl_constraints._choices
+        dbg('self._choices:', self._choices)
+
+        if self._ctrl_constraints._alignRight:
+            choices = [choice.rjust(len(self._mask)) for choice in choices]
+        else:
+            choices = [choice.ljust(len(self._mask)) for choice in choices]
+
+        wxComboBox.__init__(self, parent, id, value='',
+                            pos=pos, size = size,
+                            choices=choices, style=style|wxWANTS_CHARS,
+                            validator=validator,
+                            name=name)
+
+        self.controlInitialized = True
+
+        # Set control font - fixed width by default
+        self._setFont()
+
+        if self._autofit:
+            self.SetClientSize(self.calcSize())
+
+        if value:
+            # ensure value is width of the mask of the control:
+            if self._ctrl_constraints._alignRight:
+                value = value.rjust(len(self._mask))
+            else:
+                value = value.ljust(len(self._mask))
+
+        if self.__readonly:
+            self.SetStringSelection(value)
+        else:
+            self._SetInitialValue(value)
+
+
+        self._SetKeycodeHandler(WXK_UP, self.OnSelectChoice)
+        self._SetKeycodeHandler(WXK_DOWN, self.OnSelectChoice)
+
+        if setupEventHandling:
+            ## Setup event handlers
+            EVT_SET_FOCUS( self, self._OnFocus )        ## defeat automatic full selection
+            EVT_KILL_FOCUS( self, self._OnKillFocus )   ## run internal validator
+            EVT_LEFT_DCLICK(self, self._OnDoubleClick)  ## select field under cursor on dclick
+            EVT_CHAR( self, self._OnChar )              ## handle each keypress
+            EVT_KEY_DOWN( self, self.OnKeyDown )        ## for special processing of up/down keys
+            EVT_KEY_DOWN( self, self._OnKeyDown )       ## for processing the rest of the control keys
+                                                           ## (next in evt chain)
+            EVT_TEXT( self, self.GetId(), self._OnTextChange )  ## color control appropriately
+
+
+    def __repr__(self):
+        return "<wxMaskedComboBox: %s>" % self.GetValue()
+
+
+    def calcSize(self, size=None):
+        """
+        Calculate automatic size if allowed; override base mixin function
+        to account for the selector button.
+        """
+        size = self._calcSize(size)
+        return (size[0]+20, size[1])
+
+
+    def _GetSelection(self):
+        """
+        Allow mixin to get the text selection of this control.
+        REQUIRED by any class derived from wxMaskedEditMixin.
+        """
+        return self.GetMark()
+
+    def _SetSelection(self, sel_start, sel_to):
+        """
+        Allow mixin to set the text selection of this control.
+        REQUIRED by any class derived from wxMaskedEditMixin.
+        """
+        return self.SetMark( sel_start, sel_to )
+
+
+    def _GetInsertionPoint(self):
+        return self.GetInsertionPoint()
+
+    def _SetInsertionPoint(self, pos):
+        self.SetInsertionPoint(pos)
+
+
+    def _GetValue(self):
+        """
+        Allow mixin to get the raw value of the control with this function.
+        REQUIRED by any class derived from wxMaskedEditMixin.
+        """
+        return self.GetValue()
+
+    def _SetValue(self, value):
+        """
+        Allow mixin to set the raw value of the control with this function.
+        REQUIRED by any class derived from wxMaskedEditMixin.
+        """
+        # For wxComboBox, ensure that values are properly padded so that
+        # if varying length choices are supplied, they always show up
+        # in the window properly, and will be the appropriate length
+        # to match the mask:
+        if self._ctrl_constraints._alignRight:
+            value = value.rjust(len(self._mask))
+        else:
+            value = value.ljust(len(self._mask))
+        wxComboBox.SetValue(self, value)
+
+    def SetValue(self, value):
+        """
+        This function redefines the externally accessible .SetValue to be
+        a smart "paste" of the text in question, so as not to corrupt the
+        masked control.  NOTE: this must be done in the class derived
+        from the base wx control.
+        """
+
+        # empty previous contents, replacing entire value:
+        self._SetInsertionPoint(0)
+        self._SetSelection(0, len(self._mask))
+
+        if( len(value) < len(self._mask)                # value shorter than control
+            and (self._isDec or self._isInt)            # and it's a numeric control
+            and self._ctrl_constraints._alignRight ):   # and it's a right-aligned control
+            # try to intelligently "pad out" the value to the right size:
+            value = self._template[0:len(self._mask) - len(value)] + value
+            dbg('padded value = "%s"' % value)
+
+        # make SetValue behave the same as if you had typed the value in:
+        try:
+            value = self._Paste(value, raise_on_invalid=True, just_return_value=True)
+            if self._isDec:
+                self._isNeg = False     # (clear current assumptions)
+                value = self._adjustDec(value)
+            elif self._isInt:
+                self._isNeg = False     # (clear current assumptions)
+                value = self._adjustInt(value)
+            elif self._isDate and not self.IsValid(value) and self._4digityear:
+                value = self._adjustDate(value, fixcentury=true)
+        except ValueError:
+            # If date, year might be 2 digits vs. 4; try adjusting it:
+            if self._isDate and self._4digityear:
+                dateparts = value.split(' ')
+                dateparts[0] = self._adjustDate(dateparts[0], fixcentury=true)
+                value = string.join(dateparts, ' ')
+                dbg('adjusted value: "%s"' % value)
+                value = self._Paste(value, raise_on_invalid=True, just_return_value=True)
+            else:
+                raise
+
+        self._SetValue(value)
+
+    def _Refresh(self):
+        """
+        Allow mixin to refresh the base control with this function.
+        REQUIRED by any class derived from wxMaskedEditMixin.
+        """
+        wxComboBox.Refresh(self)
+
+    def Refresh(self):
+        """
+        This function redefines the externally accessible .Refresh() to
+        validate the contents of the masked control as it refreshes.
+        NOTE: this must be done in the class derived from the base wx control.
+        """
+        self._CheckValid()
+        self._Refresh()
+
+
+    def _IsEditable(self):
+        """
+        Allow mixin to determine if the base control is editable with this function.
+        REQUIRED by any class derived from wxMaskedEditMixin.
+        """
+        return not self.__readonly
+
+
+    def Cut(self):
+        """
+        This function redefines the externally accessible .Cut to be
+        a smart "erase" of the text in question, so as not to corrupt the
+        masked control.  NOTE: this must be done in the class derived
+        from the base wx control.
+        """
+        self._Cut()     # call the mixin's Cut method
+
+
+    def Paste(self):
+        """
+        This function redefines the externally accessible .Paste to be
+        a smart "paste" of the text in question, so as not to corrupt the
+        masked control.  NOTE: this must be done in the class derived
+        from the base wx control.
+        """
+        self._Paste()   # call the mixin's Paste method
+
+
+    def Append( self, choice ):
+        """
+        This function override is necessary so we can keep track of any additions to the list
+        of choices, because wxComboBox doesn't have an accessor for the choice list.
+        """
+        if self._ctrl_constraints._alignRight:
+            choice = choice.rjust(len(self._mask))
+        else:
+            choice = choice.ljust(len(self._mask))
+
+        if self._ctrl_constraints._choiceRequired:
+            choice = choice.lower().strip()
+        self._choices.append(choice)
+
+        if not self.IsValid(choice):
+            raise ValueError('%s: "%s" is not a valid value for the control as specified.' % (self.name, choice))
+
+
+        wxComboBox.Append(self, choice)
+
+
+    def Clear( self ):
+        """
+        This function override is necessary so we can keep track of any additions to the list
+        of choices, because wxComboBox doesn't have an accessor for the choice list.
+        """
+        self._choices = []
+        if self._ctrl_constraints._choices:
+            self.SetCtrlParameters(choices=[])
+        wxComboBox.Clear(self)
+
+
+    def GetMark(self):
+        """
+        This function is a hack to make up for the fact that wxComboBox has no
+        method for returning the selected portion of its edit control.  It
+        works, but has the nasty side effect of generating lots of intermediate
+        events.
+        """
+        dbg(suspend=1)  # turn off debugging around this function
+        dbg('wxMaskedComboBox::GetMark', indent=1)
+        sel_start = sel_to = self.GetInsertionPoint()
+        dbg("current sel_start:", sel_start)
+        value = self.GetValue()
+        dbg('value: "%s"' % value)
+
+        self._ignoreChange = True               # tell _OnTextChange() to ignore next event (if any)
+
+        wxComboBox.Cut(self)
+        newvalue = self.GetValue()
+        dbg("value after Cut operation:", newvalue)
+
+        if newvalue != value:                   # something was selected; calculate extent
+            dbg("something selected")
+            sel_to = sel_start + len(value) - len(newvalue)
+            wxComboBox.SetValue(self, value)    # restore original value and selection (still ignoring change)
+            wxComboBox.SetInsertionPoint(self, sel_start)
+            wxComboBox.SetMark(self, sel_start, sel_to)
+
+        self._ignoreChange = False              # tell _OnTextChange() to pay attn again
+
+        dbg('computed selection:', sel_start, sel_to, indent=0, suspend=0)
+        return sel_start, sel_to
+
+
+    def OnKeyDown(self, event):
+        """
+        This function is necessary because navigation and control key
+        events do not seem to normally be seen by the wxComboBox's
+        EVT_CHAR routine.  (Tabs don't seem to be visible no matter
+        what... {:-( )
+        """
+        if event.GetKeyCode() in self._nav + self._control:
+            self._OnChar(event)
+            return
+        else:
+            event.Skip()    # let mixin default KeyDown behavior occur
+
+
+    def OnSelectChoice(self, event):
+        """
+        This function appears to be necessary, because the processing done
+        on the text of the control somehow interferes with the combobox's
+        selection mechanism for the arrow keys.
+        """
+        dbg('wxMaskedComboBox::OnSelectChoice', indent=1)
+
+        # force case-insensitive comparison for matching purposes:
+        value = self.GetValue().lower().strip()
+        if event.GetKeyCode() == WXK_UP:
+            direction = -1
+        else:
+            direction = 1
+        match_index = self._autoComplete(direction, self._choices, value, self._ctrl_constraints._compareNoCase)
+        if match_index is not None:
+            dbg('setting selection to', match_index)
+            self.SetSelection(match_index)
+            # issue appropriate event to outside:
+            self.GetEventHandler().ProcessEvent(
+                wxMaskedComboBoxSelectEvent( self.GetId(), match_index, self ) )
+            self._CheckValid()
+            keep_processing = False
+        else:
+            pos = self._adjustPos(self._GetInsertionPoint(), event.GetKeyCode())
+            field = self._FindField(pos)
+            if self.IsEmpty() or not field._hasList:
+                dbg('selecting 1st value in list')
+                self.SetSelection(0)
+                self.GetEventHandler().ProcessEvent(
+                        wxMaskedComboBoxSelectEvent( self.GetId(), 0, self ) )
+                self._CheckValid()
+                keep_processing = False
+            else:
+                # attempt field-level auto-complete
+                dbg(indent=0)
+                keep_processing = self._OnAutoCompleteField(event)
+        dbg(indent=0)
+        return keep_processing
+
+
+## ---------- ---------- ---------- ---------- ---------- ---------- ----------
+
+class wxIpAddrCtrl( wxMaskedTextCtrl ):
+    """
+    This class is a particular type of wxMaskedTextCtrl that accepts
+    and understands the semantics of IP addresses, reformats input
+    as you move from field to field, and accepts '.' as a navigation
+    character, so that typing an IP address can be done naturally.
+    """
+    def __init__( self, parent, id=-1, value = '',
+                  pos = wxDefaultPosition,
+                  size = wxDefaultSize,
+                  style = wxTE_PROCESS_TAB,
+                  validator = wxDefaultValidator,
+                  name = 'wxIpAddrCtrl',
+                  setupEventHandling = True,        ## setup event handling by default
+                  **kwargs):
+
+        if not kwargs.has_key('mask'):
+            kwargs['mask'] = mask = "###.###.###.###"
+        if not kwargs.has_key('formatcodes'):
+            kwargs['formatcodes'] = 'F_Sr<'
+        if not kwargs.has_key('validRegex'):
+            kwargs['validRegex'] = "(  \d| \d\d|(1\d\d|2[0-4]\d|25[0-5]))(\.(  \d| \d\d|(1\d\d|2[0-4]\d|25[0-5]))){3}"
+
+        if not kwargs.has_key('emptyInvalid'):
+            kwargs['emptyInvalid'] = True
+
+        wxMaskedTextCtrl.__init__(
+                self, parent, id=id, value = value,
+                pos=pos, size=size,
+                style = style,
+                validator = validator,
+                name = name,
+                setupEventHandling = setupEventHandling,
+                **kwargs)
+
+        field_params = {}
+        if not kwargs.has_key('validRequired'):
+            field_params['validRequired'] = True
+
+        field_params['validRegex'] = "(   |  \d| \d |\d  | \d\d|\d\d |\d \d|(1\d\d|2[0-4]\d|25[0-5]))"
+
+        # require "valid" string; this prevents entry of any value > 255, but allows
+        # intermediate constructions; overall control validation requires well-formatted value.
+        field_params['formatcodes'] = 'V'
+
+        if field_params:
+            for i in self._field_indices:
+                self.SetFieldParameters(i, **field_params)
+
+        # This makes '.' act like tab:
+        self._AddNavKey('.', handler=self.OnDot)
+        self._AddNavKey('>', handler=self.OnDot)    # for "shift-."
+
+
+    def OnDot(self, event):
+        dbg('wxIpAddrCtrl::OnDot', indent=1)
+        pos = self._adjustPos(self._GetInsertionPoint(), event.GetKeyCode())
+        oldvalue = self.GetValue()
+        edit_start, edit_end, slice = self._FindFieldExtent(pos, getslice=True)
+        if not event.ShiftDown():
+            if pos < edit_end:
+                # clip data in field to the right of pos, if adjusting fields
+                # when not at delimeter; (assumption == they hit '.')
+                newvalue = oldvalue[:pos] + ' ' * (edit_end - pos) + oldvalue[edit_end:]
+                self._SetValue(newvalue)
+                self._SetInsertionPoint(pos)
+        dbg(indent=0)
+        return self._OnChangeField(event)
+
+
+
+    def GetAddress(self):
+        value = wxMaskedTextCtrl.GetValue(self)
+        return value.replace(' ','')    # remove spaces from the value
+
+
+    def _OnCtrl_S(self, event):
+        dbg("wxIpAddrCtrl::_OnCtrl_S")
+        if self._demo:
+            print "value:", self.GetAddress()
+        return False
+
+    def SetValue(self, value):
+        dbg('wxIpAddrCtrl::SetValue(%s)' % str(value), indent=1)
+        if type(value) != types.StringType:
+            raise ValueError('%s must be a string', str(value))
+
+        bValid = True   # assume true
+        parts = value.split('.')
+        if len(parts) != 4:
+            bValid = False
+        else:
+            for i in range(4):
+                part = parts[i]
+                if not 0 <= len(part) <= 3:
+                    bValid = False
+                    break
+                elif part.strip():  # non-empty part
+                    try:
+                        j = string.atoi(part)
+                        if not 0 <= j <= 255:
+                            bValid = False
+                            break
+                        else:
+                            parts[i] = '%3d' % j
+                    except:
+                        bValid = False
+                        break
+                else:
+                    # allow empty sections for SetValue (will result in "invalid" value,
+                    # but this may be useful for initializing the control:
+                    parts[i] = '   '    # convert empty field to 3-char length
+
+        if not bValid:
+            dbg(indent=0)
+            raise ValueError('value (%s) must be a string of form n.n.n.n where n is empty or in range 0-255' % str(value))
+        else:
+            dbg('parts:', parts)
+            value = string.join(parts, '.')
+            wxMaskedTextCtrl.SetValue(self, value)
+        dbg(indent=0)
+
+
+## ---------- ---------- ---------- ---------- ---------- ---------- ----------
+## these are helper subroutines:
+
+def movetodec( origvalue, fmtstring, neg, addseparators=False, sepchar = ',',fillchar=' '):
+    """ addseparators = add separator character every three numerals if True
+    """
+    fmt0 = fmtstring.split('.')
+    fmt1 = fmt0[0]
+    fmt2 = fmt0[1]
+    val  = origvalue.split('.')[0].strip()
+    ret  = fillchar * (len(fmt1)-len(val)) + val + "." + "0" * len(fmt2)
+    if neg:
+        ret = '-' + ret[1:]
+    return (ret,len(fmt1))
+
+
+def isDateType( fmtstring ):
+    """ Checks the mask and returns True if it fits an allowed
+        date or datetime format.
+    """
+    dateMasks = ("^##/##/####",
+                 "^##-##-####",
+                 "^##.##.####",
+                 "^####/##/##",
+                 "^####-##-##",
+                 "^####.##.##",
+                 "^##/CCC/####",
+                 "^##.CCC.####",
+                 "^##/##/##$",
+                 "^##/##/## ",
+                 "^##/CCC/##$",
+                 "^##.CCC.## ",)
+    reString  = "|".join(dateMasks)
+    filter = re.compile( reString)
+    if re.match(filter,fmtstring): return True
+    return False
+
+def isTimeType( fmtstring ):
+    """ Checks the mask and returns True if it fits an allowed
+        time format.
+    """
+    reTimeMask = "^##:##(:##)?( (AM|PM))?"
+    filter = re.compile( reTimeMask )
+    if re.match(filter,fmtstring): return True
+    return False
+
+
+def isDecimal( fmtstring, decimalchar ):
+    filter = re.compile("[ ]?[#]+\%c[#]+\n" % decimalchar)
+    if re.match(filter,fmtstring+"\n"): return True
+    return False
+
+
+def isInteger( fmtstring ):
+    filter = re.compile("[#]+\n")
+    if re.match(filter,fmtstring+"\n"): return True
+    return False
+
+
+def getDateParts( dateStr, dateFmt ):
+    if len(dateStr) > 11: clip = dateStr[0:11]
+    else:                 clip = dateStr
+    if clip[-2] not in string.digits:
+        clip = clip[:-1]    # (got part of time; drop it)
+
+    dateSep = (('/' in clip) * '/') + (('-' in clip) * '-') + (('.' in clip) * '.')
+    slices  = clip.split(dateSep)
+    if dateFmt == "MDY":
+        y,m,d = (slices[2],slices[0],slices[1])  ## year, month, date parts
+    elif dateFmt == "DMY":
+        y,m,d = (slices[2],slices[1],slices[0])  ## year, month, date parts
+    elif dateFmt == "YMD":
+        y,m,d = (slices[0],slices[1],slices[2])  ## year, month, date parts
+    else:
+        y,m,d = None, None, None
+    if not y:
+        return None
+    else:
+        return y,m,d
+
+
+def getDateSepChar(dateStr):
+    clip   = dateStr[0:10]
+    dateSep = (('/' in clip) * '/') + (('-' in clip) * '-') + (('.' in clip) * '.')
+    return dateSep
+
+
+def makeDate( year, month, day, dateFmt, dateStr):
+    sep    = getDateSepChar( dateStr)
+    if dateFmt == "MDY":
+        return "%s%s%s%s%s" % (month,sep,day,sep,year)  ## year, month, date parts
+    elif dateFmt == "DMY":
+        return "%s%s%s%s%s" % (day,sep,month,sep,year)  ## year, month, date parts
+    elif dateFmt == "YMD":
+        return "%s%s%s%s%s" % (year,sep,month,sep,day)  ## year, month, date parts
+    else:
+        return none
+
+
+def getYear(dateStr,dateFmt):
+    parts = getDateParts( dateStr, dateFmt)
+    return parts[0]
+
+def getMonth(dateStr,dateFmt):
+    parts = getDateParts( dateStr, dateFmt)
+    return parts[1]
+
+def getDay(dateStr,dateFmt):
+    parts = getDateParts( dateStr, dateFmt)
+    return parts[2]
+
+## ---------- ---------- ---------- ---------- ---------- ---------- ----------
+class test(wxPySimpleApp):
+        def OnInit(self):
+            from wxPython.lib.rcsizer import RowColSizer
+            self.frame = wxFrame( NULL, -1, "wxMaskedEditMixin 0.0.7 Demo Page #1", size = (700,600))
+            self.panel = wxPanel( self.frame, -1)
+            self.sizer = RowColSizer()
+            self.labels = []
+            self.editList  = []
+            rowcount    = 4
+
+            id, id1 = wxNewId(), wxNewId()
+            self.command1  = wxButton( self.panel, id, "&Close" )
+            self.command2  = wxButton( self.panel, id1, "&AutoFormats" )
+            self.sizer.Add(self.command1, row=0, col=0, flag=wxALL, border = 5)
+            self.sizer.Add(self.command2, row=0, col=1, colspan=2, flag=wxALL, border = 5)
+            EVT_BUTTON( self.panel, id, self.onClick )
+##            self.panel.SetDefaultItem(self.command1 )
+            EVT_BUTTON( self.panel, id1, self.onClickPage )
+
+            self.check1 = wxCheckBox( self.panel, -1, "Disallow Empty" )
+            self.check2 = wxCheckBox( self.panel, -1, "Highlight Empty" )
+            self.sizer.Add( self.check1, row=0,col=3, flag=wxALL,border=5 )
+            self.sizer.Add( self.check2, row=0,col=4, flag=wxALL,border=5 )
+            EVT_CHECKBOX( self.panel, self.check1.GetId(), self._onCheck1 )
+            EVT_CHECKBOX( self.panel, self.check2.GetId(), self._onCheck2 )
+
+
+            label = """Press ctrl-s in any field to output the value and plain value. Press ctrl-x to clear and re-set any field.
+Note that all controls have been auto-sized by including F in the format code.
+Try entering nonsensical or partial values in validated fields to see what happens (use ctrl-s to test the valid status)."""
+            label2 = "\nNote that the State and Last Name fields are list-limited (Name:Smith,Jones,Williams)."
+
+            self.label1 = wxStaticText( self.panel, -1, label)
+            self.label2 = wxStaticText( self.panel, -1, "Description")
+            self.label3 = wxStaticText( self.panel, -1, "Mask Value")
+            self.label4 = wxStaticText( self.panel, -1, "Format")
+            self.label5 = wxStaticText( self.panel, -1, "Reg Expr Val. (opt)")
+            self.label6 = wxStaticText( self.panel, -1, "wxMaskedEdit Ctrl")
+            self.label7 = wxStaticText( self.panel, -1, label2)
+            self.label7.SetForegroundColour("Blue")
+            self.label1.SetForegroundColour("Blue")
+            self.label2.SetFont(wxFont(9,wxSWISS,wxNORMAL,wxBOLD))
+            self.label3.SetFont(wxFont(9,wxSWISS,wxNORMAL,wxBOLD))
+            self.label4.SetFont(wxFont(9,wxSWISS,wxNORMAL,wxBOLD))
+            self.label5.SetFont(wxFont(9,wxSWISS,wxNORMAL,wxBOLD))
+            self.label6.SetFont(wxFont(9,wxSWISS,wxNORMAL,wxBOLD))
+
+            self.sizer.Add( self.label1, row=1,col=0,colspan=7, flag=wxALL,border=5)
+            self.sizer.Add( self.label7, row=2,col=0,colspan=7, flag=wxALL,border=5)
+            self.sizer.Add( self.label2, row=3,col=0, flag=wxALL,border=5)
+            self.sizer.Add( self.label3, row=3,col=1, flag=wxALL,border=5)
+            self.sizer.Add( self.label4, row=3,col=2, flag=wxALL,border=5)
+            self.sizer.Add( self.label5, row=3,col=3, flag=wxALL,border=5)
+            self.sizer.Add( self.label6, row=3,col=4, flag=wxALL,border=5)
+
+            # The following list is of the controls for the demo. Feel free to play around with
+            # the options!
+            controls = [
+            #description        mask                    excl format     regexp                              range,list,initial
+           ("Phone No",         "(###) ###-#### x:###", "", 'F!^-R',    "^\(\d\d\d\) \d\d\d-\d\d\d\d",    (),[],''),
+           ("Last Name Only",   "C{14}",                "", 'F {list}', '^[A-Z][a-zA-Z]+',                  (),('Smith','Jones','Williams'),''),
+           ("Full Name",        "C{14}",                "", 'F_',       '^[A-Z][a-zA-Z]+ [A-Z][a-zA-Z]+',   (),[],''),
+           ("Social Sec#",      "###-##-####",          "", 'F',        "\d{3}-\d{2}-\d{4}",                (),[],''),
+           ("U.S. Zip+4",       "#{5}-#{4}",            "", 'F',        "\d{5}-(\s{4}|\d{4})",(),[],''),
+           ("U.S. State (2 char)\n(with default)","AA",                 "", 'F!',       "[A-Z]{2}",                         (),states, 'AZ'),
+           ("Customer No",      "\CAA-###",              "", 'F!',      "C[A-Z]{2}-\d{3}",                   (),[],''),
+           ("Date (MDY) + Time\n(with default)",      "##/##/#### ##:## AM",  'BCDEFGHIJKLMNOQRSTUVWXYZ','DFR!',"",                (),[], r'03/05/2003 12:00 AM'),
+           ("Invoice Total",    "#{9}.##",              "", 'F-R,',     "",                                 (),[], ''),
+           ("Integer (signed)\n(with default)", "#{6}",                 "", 'F-R',      "",                                 (),[], '0     '),
+           ("Integer (unsigned)\n(with default), 1-399", "######",      "", 'F',        "",                                 (1,399),[], '1     '),
+           ("Month selector",   "XXX",                  "", 'F',        "",                                 (),
+                ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],""),
+           ("fraction selector","#/##",                 "", 'F',        "^\d\/\d\d?",                       (),
+                ['2/3', '3/4', '1/2', '1/4', '1/8', '1/16', '1/32', '1/64'], "")
+           ]
+
+            for control in controls:
+                self.sizer.Add( wxStaticText( self.panel, -1, control[0]),row=rowcount, col=0,border=5,flag=wxALL)
+                self.sizer.Add( wxStaticText( self.panel, -1, control[1]),row=rowcount, col=1,border=5, flag=wxALL)
+                self.sizer.Add( wxStaticText( self.panel, -1, control[3]),row=rowcount, col=2,border=5, flag=wxALL)
+                self.sizer.Add( wxStaticText( self.panel, -1, control[4][:20]),row=rowcount, col=3,border=5, flag=wxALL)
+
+                if control in controls[:]:#-2]:
+                    newControl  = wxMaskedTextCtrl( self.panel, -1, "",
+                                                    mask         = control[1],
+                                                    excludeChars = control[2],
+                                                    formatcodes  = control[3],
+                                                    includeChars = "",
+                                                    validRegex   = control[4],
+                                                    validRange   = control[5],
+                                                    choices      = control[6],
+                                                    defaultValue = control[7],
+                                                    demo         = True)
+                    if control[6]: newControl.SetCtrlParameters(choiceRequired = True)
+                else:
+                    newControl = wxMaskedComboBox(  self.panel, -1, "",
+                                                    choices = control[7],
+                                                    choiceRequired  = True,
+                                                    mask         = control[1],
+                                                    formatcodes  = control[3],
+                                                    excludeChars = control[2],
+                                                    includeChars = "",
+                                                    validRegex   = control[4],
+                                                    validRange   = control[5],
+                                                    demo         = True)
+                self.editList.append( newControl )
+
+                self.sizer.Add( newControl, row=rowcount,col=4,flag=wxALL,border=5)
+                rowcount += 1
+
+            self.sizer.AddGrowableCol(4)
+
+            self.panel.SetSizer(self.sizer)
+            self.panel.SetAutoLayout(1)
+
+            self.frame.Show(1)
+            self.MainLoop()
+
+            return True
+
+        def onClick(self, event):
+            self.frame.Close()
+
+        def onClickPage(self, event):
+            self.page2 = test2(self.frame,-1,"")
+            self.page2.Show(True)
+
+        def _onCheck1(self,event):
+            """ Set required value on/off """
+            value = event.Checked()
+            if value:
+                for control in self.editList:
+                    control.SetCtrlParameters(emptyInvalid=True)
+                    control.Refresh()
+            else:
+                for control in self.editList:
+                    control.SetCtrlParameters(emptyInvalid=False)
+                    control.Refresh()
+            self.panel.Refresh()
+
+        def _onCheck2(self,event):
+            """ Highlight empty values"""
+            value = event.Checked()
+            if value:
+                for control in self.editList:
+                    control.SetCtrlParameters( emptyBackgroundColor = 'Aquamarine')
+                    control.Refresh()
+            else:
+                for control in self.editList:
+                    control.SetCtrlParameters( emptyBackgroundColor = 'White')
+                    control.Refresh()
+            self.panel.Refresh()
+
+
+## ---------- ---------- ---------- ---------- ---------- ---------- ----------
+
+class test2(wxFrame):
+        def __init__(self, parent, id, caption):
+            wxFrame.__init__( self, parent, id, "wxMaskedEdit control 0.0.7 Demo Page #2 -- AutoFormats", size = (550,600))
+            from wxPython.lib.rcsizer import RowColSizer
+            self.panel = wxPanel( self, -1)
+            self.sizer = RowColSizer()
+            self.labels = []
+            self.texts  = []
+            rowcount    = 4
+
+            label = """\
+All these controls have been created by passing a single parameter, the AutoFormat code.
+The class contains an internal dictionary of types and formats (autoformats).
+To see a great example of validations in action, try entering a bad email address, then tab out."""
+
+            self.label1 = wxStaticText( self.panel, -1, label)
+            self.label2 = wxStaticText( self.panel, -1, "Description")
+            self.label3 = wxStaticText( self.panel, -1, "AutoFormat Code")
+            self.label4 = wxStaticText( self.panel, -1, "wxMaskedEdit Control")
+            self.label1.SetForegroundColour("Blue")
+            self.label2.SetFont(wxFont(9,wxSWISS,wxNORMAL,wxBOLD))
+            self.label3.SetFont(wxFont(9,wxSWISS,wxNORMAL,wxBOLD))
+            self.label4.SetFont(wxFont(9,wxSWISS,wxNORMAL,wxBOLD))
+
+            self.sizer.Add( self.label1, row=1,col=0,colspan=3, flag=wxALL,border=5)
+            self.sizer.Add( self.label2, row=3,col=0, flag=wxALL,border=5)
+            self.sizer.Add( self.label3, row=3,col=1, flag=wxALL,border=5)
+            self.sizer.Add( self.label4, row=3,col=2, flag=wxALL,border=5)
+
+            id, id1 = wxNewId(), wxNewId()
+            self.command1  = wxButton( self.panel, id, "&Close")
+            self.command2  = wxButton( self.panel, id1, "&Print Formats")
+            EVT_BUTTON( self.panel, id, self.onClick)
+            self.panel.SetDefaultItem(self.command1)
+            EVT_BUTTON( self.panel, id1, self.onClickPrint)
+
+            # The following list is of the controls for the demo. Feel free to play around with
+            # the options!
+            controls = [
+           ("Phone No","USPHONEFULLEXT"),
+           ("US Date + Time","USDATETIMEMMDDYYYY/HHMM"),
+           ("US Date MMDDYYYY","USDATEMMDDYYYY/"),
+           ("Time (with seconds)","TIMEHHMMSS"),
+           ("Military Time\n(without seconds)","MILTIMEHHMM"),
+           ("Social Sec#","USSOCIALSEC"),
+           ("Credit Card","CREDITCARD"),
+           ("Expiration MM/YY","EXPDATEMMYY"),
+           ("Percentage","PERCENT"),
+           ("Person's Age","AGE"),
+           ("US Zip Code","USZIP"),
+           ("US Zip+4","USZIPPLUS4"),
+           ("Email Address","EMAIL"),
+           ("IP Address", "(derived control wxIpAddrCtrl)")
+           ]
+
+            for control in controls:
+                self.sizer.Add( wxStaticText( self.panel, -1, control[0]),row=rowcount, col=0,border=5,flag=wxALL)
+                self.sizer.Add( wxStaticText( self.panel, -1, control[1]),row=rowcount, col=1,border=5, flag=wxALL)
+                if control in controls[:-1]:
+                    self.sizer.Add( wxMaskedTextCtrl( self.panel, -1, "",
+                                                      autoformat  = control[1],
+                                                      demo        = True),
+                                row=rowcount,col=2,flag=wxALL,border=5)
+                else:
+                    self.sizer.Add( wxIpAddrCtrl( self.panel, -1, "", demo=True ),
+                                    row=rowcount,col=2,flag=wxALL,border=5)
+                rowcount += 1
+
+            self.sizer.Add(self.command1, row=0, col=0, flag=wxALL, border = 5)
+            self.sizer.Add(self.command2, row=0, col=1, flag=wxALL, border = 5)
+            self.sizer.AddGrowableCol(3)
+
+            self.panel.SetSizer(self.sizer)
+            self.panel.SetAutoLayout(1)
+
+        def onClick(self, event):
+            self.Close()
+
+        def onClickPrint(self, event):
+            for format in masktags.keys():
+                sep = "+------------------------+"
+                print "%s\n%s  \n  Mask: %s \n  RE Validation string: %s\n" % (sep,format, masktags[format][0], masktags[format][3])
+
+## ---------- ---------- ---------- ---------- ---------- ---------- ----------
+
+if __name__ == "__main__":
+    app = test()
+
+i=1
+##
+## Current Issues:
+## ===================================
+##
+## 1. WS: For some reason I don't understand, the control is generating two (2)
+##      EVT_TEXT events for every one (1) .SetValue() of the underlying control.
+##      I've been unsuccessful in determining why or in my efforts to make just one
+##      occur.  So, I've added a hack to save the last seen value from the
+##      control in the EVT_TEXT handler, and if *different*, call event.Skip()
+##      to propagate it down the event chain, and let the application see it.
+##
+## 2. WS: wxMaskedComboBox is deficient in several areas, all having to do with the
+##      behavior of the underlying control that I can't fix.  The problems are:
+##      a) The background coloring doesn't work in the text field of the control;
+##         instead, there's a only border around it that assumes the correct color.
+##      b) The control will not pass WXK_TAB to the event handler, no matter what
+##         I do, and there's no style wxCB_PROCESS_TAB like wxTE_PROCESS_TAB to
+##         indicate that we want these events.  As a result, wxMaskedComboBox
+##         doesn't do the nice field-tabbing that wxMaskedTextCtrl does.
+##      c) Auto-complete had to be reimplemented for the control because programmatic
+##         setting of the value of the text field does not set up the auto complete
+##         the way that the control processing keystrokes does.  (But I think I've
+##         implemented a fairly decent approximation.)  Because of this the control
+##         also won't auto-complete on dropdown, and there's no event I can catch
+##         to work around this problem.
+##      d) There is no method provided for getting the selection; the hack I've
+##         implemented has its flaws, not the least of which is that due to the
+##         strategy that I'm using, the paste buffer is always replaced by the
+##         contents of the control's selection when in focus, on each keystroke;
+##         this makes it impossible to paste anything into a wxMaskedComboBox
+##         at the moment... :-(
+##      e) The other deficient behavior, likely induced by the workaround for (d),
+##         is that you can can't shift-left to select more than one character
+##         at a time.
+##
+##
+## 3. WS: Controls on wxPanels don't seem to pass Shift-WXK_TAB to their
+##      EVT_KEY_DOWN or EVT_CHAR event handlers.  Until this is fixed in
+##      wxWindows, shift-tab won't take you backwards through the fields of
+##      a wxMaskedTextCtrl like it should.  Until then Shifted arrow keys will
+##      work like shift-tab and tab ought to.
+##
+
+## To-Do's:
+## =============================##
+##  1. Add Popup list for auto-completable fields that simulates combobox on individual
+##     fields.  Example: City validates against list of cities, or zip vs zip code list.
+##  2. Allow optional monetary symbols (eg. $, pounds, etc.) at front of a "decimal"
+##     control.
+##  3. Fix shift-left selection for wxMaskedComboBox.
+##  5. Transform notion of "decimal control" to be less "entire control"-centric,
+##     so that monetary symbols can be included and still have the appropriate
+##     semantics.  (Big job, as currently written, but would make control even
+##     more useful for business applications.)
+
+
+## CHANGELOG:
+## ====================
+##  Version 1.3
+##   1. Made it possible to configure grouping, decimal and shift-decimal characters,
+##      to make controls more usable internationally.
+##   2. Added code to smart "adjust" value strings presented to .SetValue()
+##      for right-aligned numeric format controls if they are shorter than
+##      than the control width,  prepending the missing portion, prepending control
+##      template left substring for the missing characters, so that setting
+##      numeric values is easier.
+##   3. Renamed SetMaskParameters SetCtrlParameters() (with old name preserved
+##      for b-c), as this makes more sense.
+##
+##  Version 1.2
+##   1. Fixed .SetValue() to replace the current value, rather than the current
+##      selection. Also changed it to generate ValueError if presented with
+##      either a value which doesn't follow the format or won't fit.  Also made
+##      set value adjust numeric and date controls as if user entered the value.
+##      Expanded doc explaining how SetValue() works.
+##   2. Fixed EUDATE* autoformats, fixed IsDateType mask list, and added ability to
+##      use 3-char months for dates, and EUDATETIME, and EUDATEMILTIME autoformats.
+##   3. Made all date autoformats automatically pick implied "datestyle".
+##   4. Added IsModified override, since base wxTextCtrl never reports modified if
+##      .SetValue used to change the value, which is what the masked edit controls
+##      use internally.
+##   5. Fixed bug in date position adjustment on 2 to 4 digit date conversion when
+##      using tab to "leave field" and auto-adjust.
+##   6. Fixed bug in _isCharAllowed() for negative number insertion on pastes,
+##      and bug in ._Paste() that didn't account for signs in signed masks either.
+##   7. Fixed issues with _adjustPos for right-insert fields causing improper
+##      selection/replacement of values
+##   8. Fixed _OnHome handler to properly handle extending current selection to
+##      beginning of control.
+##   9. Exposed all (valid) autoformats to demo, binding descriptions to
+##      autoformats.
+##  10. Fixed a couple of bugs in email regexp.
+##  11. Made maskchardict an instance var, to make mask chars to be more
+##      amenable to international use.
+##  12. Clarified meaning of '-' formatcode in doc.
+##  13. Fixed a couple of coding bugs being flagged by Python2.1.
+##  14. Fixed several issues with sign positioning, erasure and validity
+##      checking for "numeric" masked controls.
+##  15. Added validation to wxIpAddrCtrl.SetValue().
+##
+##  Version 1.1
+##   1. Changed calling interface to use boolean "useFixedWidthFont" (True by default)
+##      vs. literal font facename, and use wxTELETYPE as the font family
+##      if so specified.
+##   2. Switched to use of dbg module vs. locally defined version.
+##   3. Revamped entire control structure to use Field classes to hold constraint
+##      and formatting data, to make code more hierarchical, allow for more
+##      sophisticated masked edit construction.
+##   4. Better strategy for managing options, and better validation on keywords.
+##   5. Added 'V' format code, which requires that in order for a character
+##      to be accepted, it must result in a string that passes the validRegex.
+##   6. Added 'S' format code which means "select entire field when navigating
+##      to new field."
+##   7. Added 'r' format code to allow "right-insert" fields. (implies 'R'--right-alignment)
+##   8. Added '<' format code to allow fields to require explicit cursor movement
+##      to leave field.
+##   9. Added validFunc option to other validation mechanisms, that allows derived
+##      classes to add dynamic validation constraints to the control.
+##  10. Fixed bug in validatePaste code causing possible IndexErrors, and also
+##      fixed failure to obey case conversion codes when pasting.
+##  11. Implemented '0' (zero-pad) formatting code, as it wasn't being done anywhere...
+##  12. Removed condition from OnDecimalPoint, so that it always truncates right on '.'
+##  13. Enhanced wxIpAddrCtrl to use right-insert fields, selection on field traversal,
+##      individual field validation to prevent field values > 255, and require explicit
+##      tab/. to change fields.
+##  14. Added handler for left double-click to select field under cursor.
+##  15. Fixed handling for "Read-only" styles.
+##  16. Separated signedForegroundColor from 'R' style, and added foregroundColor
+##      attribute, for more consistent and controllable coloring.
+##  17. Added retainFieldValidation parameter, allowing top-level constraints
+##      such as "validRequired" to be set independently of field-level equivalent.
+##      (needed in wxTimeCtrl for bounds constraints.)
+##  18. Refactored code a bit, cleaned up and commented code more heavily, fixed
+##      some of the logic for setting/resetting parameters, eg. fillChar, defaultValue,
+##      etc.
+##  19. Fixed maskchar setting for upper/lowercase, to work in all locales.
+##
+##
+##  Version 1.0
+##   1. Decimal point behavior restored for decimal and integer type controls:
+##      decimal point now trucates the portion > 0.
+##   2. Return key now works like the tab character and moves to the next field,
+##      provided no default button is set for the form panel on which the control
+##      resides.
+##   3. Support added in _FindField() for subclasses controls (like timecontrol)
+##      to determine where the current insertion point is within the mask (i.e.
+##      which sub-'field'). See method documentation for more info and examples.
+##   4. Added Field class and support for all constraints to be field-specific
+##      in addition to being globally settable for the control.
+##      Choices for each field are validated for length and pastability into
+##      the field in question, raising ValueError if not appropriate for the control.
+##      Also added selective additional validation based on individual field constraints.
+##      By default, SHIFT-WXK_DOWN, SHIFT-WXK_UP, WXK_PRIOR and WXK_NEXT all
+##      auto-complete fields with choice lists, supplying the 1st entry in
+##      the choice list if the field is empty, and cycling through the list in
+##      the appropriate direction if already a match.  WXK_DOWN will also auto-
+##      complete if the field is partially completed and a match can be made.
+##      SHIFT-WXK_UP/DOWN will also take you to the next field after any
+##      auto-completion performed.
+##   5. Added autoCompleteKeycodes=[] parameters for allowing further
+##      customization of the control.  Any keycode supplied as a member
+##      of the _autoCompleteKeycodes list will be treated like WXK_NEXT.  If
+##      requireFieldChoice is set, then a valid value from each non-empty
+##      choice list will be required for the value of the control to validate.
+##   6. Fixed "auto-sizing" to be relative to the font actually used, rather
+##      than making assumptions about character width.
+##   7. Fixed GetMaskParameter(), which was non-functional in previous version.
+##   8. Fixed exceptions raised to provide info on which control had the error.
+##   9. Fixed bug in choice management of wxMaskedComboBox.
+##  10. Fixed bug in wxIpAddrCtrl causing traceback if field value was of
+##     the form '# #'.  Modified control code for wxIpAddrCtrl so that '.'
+##     in the middle of a field clips the rest of that field, similar to
+##     decimal and integer controls.
+##
+##
+##  Version 0.0.7
+##   1. "-" is a toggle for sign; "+" now changes - signed numerics to positive.
+##   2. ',' in formatcodes now causes numeric values to be comma-delimited (e.g.333,333).
+##   3. New support for selecting text within the control.(thanks Will Sadkin!)
+##      Shift-End and Shift-Home now select text as you would expect
+##      Control-Shift-End selects to the end of the mask string, even if value not entered.
+##      Control-A selects all *entered* text, Shift-Control-A selects everything in the control.
+##   4. event.Skip() added to onKillFocus to correct remnants when running in Linux (contributed-
+##      for some reason I couldn't find the original email but thanks!!!)
+##   5. All major key-handling code moved to their own methods for easier subclassing: OnHome,
+##      OnErase, OnEnd, OnCtrl_X, OnCtrl_A, etc.
+##   6. Email and autoformat validations corrected using regex provided by Will Sadkin (thanks!).
+##   (The rest of the changes in this version were done by Will Sadkin with permission from Jeff...)
+##   7. New mechanism for replacing default behavior for any given key, using
+##      ._SetKeycodeHandler(keycode, func) and ._SetKeyHandler(char, func) now available
+##      for easier subclassing of the control.
+##   8. Reworked the delete logic, cut, paste and select/replace logic, as well as some bugs
+##      with insertion point/selection modification.  Changed Ctrl-X to use standard "cut"
+##      semantics, erasing the selection, rather than erasing the entire control.
+##   9. Added option for an "default value" (ie. the template) for use when a single fillChar
+##      is not desired in every position.  Added IsDefault() function to mean "does the value
+##      equal the template?" and modified .IsEmpty() to mean "do all of the editable
+##      positions in the template == the fillChar?"
+##  10. Extracted mask logic into mixin, so we can have both wxMaskedTextCtrl and wxMaskedComboBox,
+##      now included.
+##  11. wxMaskedComboBox now adds the capability to validate from list of valid values.
+##      Example: City validates against list of cities, or zip vs zip code list.
+##  12. Fixed oversight in EVT_TEXT handler that prevented the events from being
+##      passed to the next handler in the event chain, causing updates to the
+##      control to be invisible to the parent code.
+##  13. Added IPADDR autoformat code, and subclass wxIpAddrCtrl for controlling tabbing within
+##      the control, that auto-reformats as you move between cells.
+##  14. Mask characters [A,a,X,#] can now appear in the format string as literals, by using '\'.
+##  15. It is now possible to specify repeating masks, e.g. #{3}-#{3}-#{14}
+##  16. Fixed major bugs in date validation, due to the fact that
+##      wxDateTime.ParseDate is too liberal, and will accept any form that
+##      makes any kind of sense, regardless of the datestyle you specified
+##      for the control.  Unfortunately, the strategy used to fix it only
+##      works for versions of wxPython post 2.3.3.1, as a C++ assert box
+##      seems to show up on an invalid date otherwise, instead of a catchable
+##      exception.
+##  17. Enhanced date adjustment to automatically adjust heuristic based on
+##      current year, making last century/this century determination on
+##      2-digit year based on distance between today's year and value;
+##      if > 50 year separation, assume last century (and don't assume last
+##      century is 20th.)
+##  18. Added autoformats and support for including HHMMSS as well as HHMM for
+##      date times, and added similar time, and militaray time autoformats.
+##  19. Enhanced tabbing logic so that tab takes you to the next field if the
+##      control is a multi-field control.
+##  20. Added stub method called whenever the control "changes fields", that
+##      can be overridden by subclasses (eg. wxIpAddrCtrl.)
+##  21. Changed a lot of code to be more functionally-oriented so side-effects
+##      aren't as problematic when maintaining code and/or adding features.
+##      Eg: IsValid() now does not have side-effects; it merely reflects the
+##      validity of the value of the control; to determine validity AND recolor
+##      the control, _CheckValid() should be used with a value argument of None.
+##      Similarly, made most reformatting function take an optional candidate value
+##      rather than just using the current value of the control, and only
+##      have them change the value of the control if a candidate is not specified.
+##      In this way, you can do validation *before* changing the control.
+##  22. Changed validRequired to mean "disallow chars that result in invalid
+##      value."  (Old meaning now represented by emptyInvalid.)  (This was
+##      possible once I'd made the changes in (19) above.)
+##  23. Added .SetMaskParameters and .GetMaskParameter methods, so they
+##      can be set/modified/retrieved after construction.  Removed individual
+##      parameter setting functions, in favor of this mechanism, so that
+##      all adjustment of the control based on changing parameter values can
+##      be handled in one place with unified mechanism.
+##  24. Did a *lot* of testing and fixing re: numeric values.  Added ability
+##      to type "grouping char" (ie. ',') and validate as appropriate.
+##  25. Fixed ZIPPLUS4 to allow either 5 or 4, but if > 5 must be 9.
+##  26. Fixed assumption about "decimal or integer" masks so that they're only
+##      made iff there's no validRegex associated with the field.  (This
+##      is so things like zipcodes which look like integers can have more
+##      restrictive validation (ie. must be 5 digits.)
+##  27. Added a ton more doc strings to explain use and derivation requirements
+##      and did regularization of the naming conventions.
+##  28. Fixed a range bug in _adjustKey preventing z from being handled properly.
+##  29. Changed behavior of '.' (and shift-.) in numeric controls to move to
+##      reformat the value and move the next field as appropriate. (shift-'.',
+##      ie. '>' moves to the previous field.
+
+##  Version 0.0.6
+##   1. Fixed regex bug that caused autoformat AGE to invalidate any age ending
+##      in '0'.
+##   2. New format character 'D' to trigger date type. If the user enters 2 digits in the
+##      year position, the control will expand the value to four digits, using numerals below
+##      50 as 21st century (20+nn) and less than 50 as 20th century (19+nn).
+##      Also, new optional parameter datestyle = set to one of {MDY|DMY|YDM}
+##   3. revalid parameter renamed validRegex to conform to standard for all validation
+##      parameters (see 2 new ones below).
+##   4. New optional init parameter = validRange. Used only for int/dec (numeric) types.
+##      Allows the developer to specify a valid low/high range of values.
+##   5. New optional init parameter = validList. Used for character types. Allows developer
+##      to send a list of values to the control to be used for specific validation.
+##      See the Last Name Only example - it is list restricted to Smith/Jones/Williams.
+##   6. Date type fields now use wxDateTime's parser to validate the date and time.
+##      This works MUCH better than my kludgy regex!! Thanks to Robin Dunn for pointing
+##      me toward this solution!
+##   7. Date fields now automatically expand 2-digit years when it can. For example,
+##      if the user types "03/10/67", then "67" will auto-expand to "1967". If a two-year
+##      date is entered it will be expanded in any case when the user tabs out of the
+##      field.
+##   8. New class functions: SetValidBackgroundColor, SetInvalidBackgroundColor, SetEmptyBackgroundColor,
+##      SetSignedForeColor allow accessto override default class coloring behavior.
+##   9. Documentation updated and improved.
+##  10. Demo - page 2 is now a wxFrame class instead of a wxPyApp class. Works better.
+##      Two new options (checkboxes) - test highlight empty and disallow empty.
+##  11. Home and End now work more intuitively, moving to the first and last user-entry
+##      value, respectively.
+##  12. New class function: SetRequired(bool). Sets the control's entry required flag
+##      (i.e. disallow empty values if True).
+##
+##  Version 0.0.5
+##   1. get_plainValue method renamed to GetPlainValue following the wxWindows
+##      StudlyCaps(tm) standard (thanks Paul Moore).  ;)
+##   2. New format code 'F' causes the control to auto-fit (auto-size) itself
+##      based on the length of the mask template.
+##   3. Class now supports "autoformat" codes. These can be passed to the class
+##      on instantiation using the parameter autoformat="code". If the code is in
+##      the dictionary, it will self set the mask, formatting, and validation string.
+##      I have included a number of samples, but I am hoping that someone out there
+##      can help me to define a whole bunch more.
+##   4. I have added a second page to the demo (as well as a second demo class, test2)
+##      to showcase how autoformats work. The way they self-format and self-size is,
+##      I must say, pretty cool.
+##   5. Comments added and some internal cosmetic revisions re: matching the code
+##      standards for class submission.
+##   6. Regex validation is now done in real time - field turns yellow immediately
+##      and stays yellow until the entered value is valid
+##   7. Cursor now skips over template characters in a more intuitive way (before the
+##      next keypress).
+##   8. Change, Keypress and LostFocus methods added for convenience of subclasses.
+##      Developer may use these methods which will be called after EVT_TEXT, EVT_CHAR,
+##      and EVT_KILL_FOCUS, respectively.
+##   9. Decimal and numeric handlers have been rewritten and now work more intuitively.
+##
+##  Version 0.0.4
+##   1. New .IsEmpty() method returns True if the control's value is equal to the
+##      blank template string
+##   2. Control now supports a new init parameter: revalid. Pass a regular expression
+##      that the value will have to match when the control loses focus. If invalid,
+##      the control's BackgroundColor will turn yellow, and an internal flag is set (see next).
+##   3. Demo now shows revalid functionality. Try entering a partial value, such as a
+##      partial social security number.
+##   4. New .IsValid() value returns True if the control is empty, or if the value matches
+##      the revalid expression. If not, .IsValid() returns False.
+##   5. Decimal values now collapse to decimal with '.00' on losefocus if the user never
+##      presses the decimal point.
+##   6. Cursor now goes to the beginning of the field if the user clicks in an
+##      "empty" field intead of leaving the insertion point in the middle of the
+##      field.
+##   7. New "N" mask type includes upper and lower chars plus digits. a-zA-Z0-9.
+##   8. New formatcodes init parameter replaces other init params and adds functions.
+##      String passed to control on init controls:
+##        _ Allow spaces
+##        ! Force upper
+##        ^ Force lower
+##        R Show negative #s in red
+##        , Group digits
+##        - Signed numerals
+##        0 Numeric fields get leading zeros
+##   9. Ctrl-X in any field clears the current value.
+##   10. Code refactored and made more modular (esp in OnChar method). Should be more
+##       easy to read and understand.
+##   11. Demo enhanced.
+##   12. Now has _doc_.
+##
+##  Version 0.0.3
+##   1. GetPlainValue() now returns the value without the template characters;
+##      so, for example, a social security number (123-33-1212) would return as
+##      123331212; also removes white spaces from numeric/decimal values, so
+##      "-   955.32" is returned "-955.32". Press ctrl-S to see the plain value.
+##   2. Press '.' in an integer style masked control and truncate any trailing digits.
+##   3. Code moderately refactored. Internal names improved for clarity. Additional
+##      internal documentation.
+##   4. Home and End keys now supported to move cursor to beginning or end of field.
+##   5. Un-signed integers and decimals now supported.
+##   6. Cosmetic improvements to the demo.
+##   7. Class renamed to wxMaskedTextCtrl.
+##   8. Can now specify include characters that will override the basic
+##      controls: for example, includeChars = "@." for email addresses
+##   9. Added mask character 'C' -> allow any upper or lowercase character
+##   10. .SetSignColor(str:color) sets the foreground color for negative values
+##       in signed controls (defaults to red)
+##   11. Overview documentation written.
+##
+##  Version 0.0.2
+##   1. Tab now works properly when pressed in last position
+##   2. Decimal types now work (e.g. #####.##)
+##   3. Signed decimal or numeric values supported (i.e. negative numbers)
+##   4. Negative decimal or numeric values now can show in red.
+##   5. Can now specify an "exclude list" with the excludeChars parameter.
+##      See date/time formatted example - you can only enter A or P in the
+##      character mask space (i.e. AM/PM).
+##   6. Backspace now works properly, including clearing data from a selected
+##      region but leaving template characters intact. Also delete key.
+##   7. Left/right arrows now work properly.
+##   8. Removed EventManager call from test so demo should work with wxPython 2.3.3
+##
diff --git a/wxPython/wxPython/lib/mixins/rubberband.py b/wxPython/wxPython/lib/mixins/rubberband.py
index f71dbf50a9..678282d810 100644
--- a/wxPython/wxPython/lib/mixins/rubberband.py
+++ b/wxPython/wxPython/lib/mixins/rubberband.py
@@ -1,14 +1,21 @@
+#---------------------------------------------------------------------------
+# Name:        wxPython.lib.mixins.rubberband
+# Purpose:     A mixin class for doing "RubberBand"-ing on a window.
+#
+# Author:      Robb Shecter and members of wxPython-users
+#
+# Created:     11-September-2002
+# RCS-ID:      $Id$
+# Copyright:   (c) 2002 by db-X Corporation
+# Licence:     wxWindows license
+#---------------------------------------------------------------------------
+
 """
 A mixin class for doing "RubberBand"-ing on a window.
-
-by "Robb Shecter" <rs@onsitetech.com>
-
-$Id$
-
 """
 
 from wxPython.wx import *
-import Image
+
 
 #
 # Some miscellaneous mathematical and geometrical functions
diff --git a/wxPython/wxPython/lib/popupctl.py b/wxPython/wxPython/lib/popupctl.py
index 466e06f77d..76dfc6de19 100644
--- a/wxPython/wxPython/lib/popupctl.py
+++ b/wxPython/wxPython/lib/popupctl.py
@@ -140,7 +140,7 @@ class PopButton(wxPyControl):
 # Tried to use wxPopupWindow but the control misbehaves on MSW
 class wxPopupDialog(wxDialog):
     def __init__(self,parent,content = None):
-        wxDialog.__init__(self,parent,-1,'', style = wxSTAY_ON_TOP)
+        wxDialog.__init__(self,parent,-1,'', style = wxBORDER_SIMPLE|wxSTAY_ON_TOP)
 
         self.ctrl = parent
         self.win = wxWindow(self,-1,pos = wxPoint(0,0),style = 0)
@@ -197,6 +197,12 @@ class wxPopupControl(wxPyControl):
 
         EVT_SIZE(self,self.OnSize)
         EVT_BUTTON(self.bCtrl,self.bCtrl.GetId(),self.OnButton)
+        # embedded control should get focus on TAB keypress
+        EVT_SET_FOCUS(self,self.OnFocus)
+
+    def OnFocus(self,evt):
+        self.textCtrl.SetFocus()
+        evt.Skip()
 
     def OnSize(self,evt):
         w,h = self.GetClientSizeTuple()
diff --git a/wxPython/wxPython/lib/pubsub.py b/wxPython/wxPython/lib/pubsub.py
index c2b6968094..6efa12c378 100644
--- a/wxPython/wxPython/lib/pubsub.py
+++ b/wxPython/wxPython/lib/pubsub.py
@@ -6,7 +6,7 @@
 #
 # Created:     12-December-2002
 # RCS-ID:      $Id$
-# Copyright:   (c) 2002 by Robb Shecter <robb@acm.org>
+# Copyright:   (c) 2002 by db-X Corporation
 # Licence:     wxWindows license
 #---------------------------------------------------------------------------
 """
diff --git a/wxPython/wxPython/lib/rightalign.py b/wxPython/wxPython/lib/rightalign.py
index 5c363ef4ac..ca3c262d31 100644
--- a/wxPython/wxPython/lib/rightalign.py
+++ b/wxPython/wxPython/lib/rightalign.py
@@ -28,6 +28,9 @@ Hope this can help someone, as much as this list helps me.
 
 Josu Oyanguren
 Ubera Servicios Informáticos.
+
+
+P.S.  This only works well on wxMSW.
 """
 
 from wxPython.wx import *
@@ -51,6 +54,12 @@ class wxRightTextCtrl(wxTextCtrl):
         y = (dcheight - textheight) / 2
         x = dcwidth - textwidth - 2
 
+        if self.IsEnabled():
+            fclr = self.GetForegroundColour()
+        else:
+            fclr = wxSystemSettings_GetColour(wxSYS_COLOUR_GRAYTEXT)
+        dc.SetTextForeground(fclr)
+
         dc.SetClippingRegion(0, 0, dcwidth, dcheight)
         dc.DrawText(text, x, y)
 
diff --git a/wxPython/wxPython/lib/scrolledpanel.py b/wxPython/wxPython/lib/scrolledpanel.py
index b8da67e498..1b8c79a844 100644
--- a/wxPython/wxPython/lib/scrolledpanel.py
+++ b/wxPython/wxPython/lib/scrolledpanel.py
@@ -27,8 +27,10 @@ as a proper class (and the demo is now converted to just use it.)
                                   pos=pos, size=size,
                                   style=style, name=name)
 
+        EVT_CHILD_FOCUS(self, self.OnChildFocus)
+
 
-    def SetupScrolling(self, scroll_x=True, scroll_y=True, rate_x=1, rate_y=1):
+    def SetupScrolling(self, scroll_x=True, scroll_y=True, rate_x=20, rate_y=20):
         """
         This function sets up the event handling necessary to handle
         scrolling properly. It should be called within the __init__
@@ -42,10 +44,18 @@ as a proper class (and the demo is now converted to just use it.)
         if not scroll_x: rate_x = 0
         if not scroll_y: rate_y = 0
 
-        self.SetScrollRate(rate_x, rate_y)
+        # Round up the virtual size to be a multiple of the scroll rate
+        sizer = self.GetSizer()
+        if sizer:
+            w, h = sizer.GetMinSize()
+            if rate_x:
+                w += rate_x - (w % rate_x)
+            if rate_y:
+                h += rate_y - (h % rate_y)
+            self.SetVirtualSize( (w, h) )
+            self.SetVirtualSizeHints( w, h )
 
-        self.GetSizer().SetVirtualSizeHints(self)
-        EVT_CHILD_FOCUS(self, self.OnChildFocus)
+        self.SetScrollRate(rate_x, rate_y)
         wxCallAfter(self.Scroll, 0, 0) # scroll back to top after initial events
 
 
diff --git a/wxPython/wxPython/lib/stattext.py b/wxPython/wxPython/lib/stattext.py
index d93b16d156..894a474c69 100644
--- a/wxPython/wxPython/lib/stattext.py
+++ b/wxPython/wxPython/lib/stattext.py
@@ -26,7 +26,8 @@ class wxGenStaticText(wxPyControl):
                  pos = wxDefaultPosition, size = wxDefaultSize,
                  style = 0,
                  name = "genstattext"):
-        wxPyControl.__init__(self, parent, ID, pos, size, style, wxDefaultValidator, name)
+        wxPyControl.__init__(self, parent, ID, pos, size, style|wxNO_BORDER,
+                             wxDefaultValidator, name)
 
         wxPyControl.SetLabel(self, label) # don't check wxST_NO_AUTORESIZE yet
         self.SetPosition(pos)
@@ -35,10 +36,10 @@ class wxGenStaticText(wxPyControl):
             font = wxSystemSettings_GetSystemFont(wxSYS_DEFAULT_GUI_FONT)
         wxPyControl.SetFont(self, font) # same here
 
-        clr = parent.GetBackgroundColour()
-        if not clr.Ok():
-            clr = wxSystemSettings_GetSystemColour(wxSYS_COLOUR_BTNFACE)
-        self.SetBackgroundColour(clr)
+        self.defBackClr = parent.GetBackgroundColour()
+        if not self.defBackClr.Ok():
+            self.defBackClr = wxSystemSettings_GetSystemColour(wxSYS_COLOUR_3DFACE)
+        self.SetBackgroundColour(self.defBackClr)
 
         clr = parent.GetForegroundColour()
         if not clr.Ok():
@@ -105,7 +106,14 @@ class wxGenStaticText(wxPyControl):
         width, height = self.GetClientSize()
         if not width or not height:
             return
-        dc.SetBackground(wxBrush(self.GetBackgroundColour(), wxSOLID))
+
+        clr = self.GetBackgroundColour()
+        backBrush = wxBrush(clr, wxSOLID)
+        if wxPlatform == "__WXMAC__" and clr == self.defBackClr:
+            # if colour still the default the use the striped background on Mac
+            backBrush.SetMacTheme(1) # 1 == kThemeBrushDialogBackgroundActive
+        dc.SetBackground(backBrush)
+
         dc.SetTextForeground(self.GetForegroundColour())
         dc.Clear()
         dc.SetFont(self.GetFont())
diff --git a/wxPython/wxPython/lib/timectrl.py b/wxPython/wxPython/lib/timectrl.py
index 52d9c4b4fc..7347a2799a 100644
--- a/wxPython/wxPython/lib/timectrl.py
+++ b/wxPython/wxPython/lib/timectrl.py
@@ -18,43 +18,240 @@
 #   cursor-position specific, so the control intercepts the key codes before the
 #   validator would fire.
 #
+#   wxTimeCtrl now also supports .SetValue() with either strings or wxDateTime
+#   values, as well as range limits, with the option of either enforcing them
+#   or simply coloring the text of the control if the limits are exceeded.
+#
+#   Note: this class now makes heavy use of wxDateTime for parsing and
+#   regularization, but it always does so with ephemeral instances of
+#   wxDateTime, as the C++/Python validity of these instances seems to not
+#   persist.  Because "today" can be a day for which an hour can "not exist"
+#   or be counted twice (1 day each per year, for DST adjustments), the date
+#   portion of all wxDateTimes used/returned have their date portion set to
+#   Jan 1, 1970 (the "epoch.")
+#
 
+"""<html><body>
+<P>
+<B>wxTimeCtrl</B> provides a multi-cell control that allows manipulation of a time
+value.  It supports 12 or 24 hour format, and you can use wxDateTime or mxDateTime
+to get/set values from the control.
+<P>
+Left/right/tab keys to switch cells within a wxTimeCtrl, and the up/down arrows act
+like a spin control.  wxTimeCtrl also allows for an actual spin button to be attached
+to the control, so that it acts like the up/down arrow keys.
+<P>
+The <B>!</B> or <B>c</B> key sets the value of the control to the current time.
+<P>
+Here's the API for wxTimeCtrl:
+<DL><PRE>
+    <B>wxTimeCtrl</B>(
+         parent, id = -1,
+         <B>value</B> = '12:00:00 AM',
+         pos = wxDefaultPosition,
+         size = wxDefaultSize,
+         <B>style</B> = wxTE_PROCESS_TAB,
+         <B>validator</B> = wxDefaultValidator,
+         name = "time",
+         <B>fmt24hr</B> = False,
+         <B>spinButton</B> = None,
+         <B>min</B> = None,
+         <B>max</B> = None,
+         <B>limited</B> = None,
+         <B>oob_color</B> = "Yellow"
+)
+</PRE>
+<UL>
+    <DT><B>value</B>
+    <DD>If no initial value is set, the default will be midnight; if an illegal string
+    is specified, a ValueError will result.  (You can always later set the initial time
+    with SetValue() after instantiation of the control.)
+    <DL><B>size</B>
+    <DD>The size of the control will be automatically adjusted for 12/24 hour format
+    if wxDefaultSize is specified.
+    <DT><B>style</B>
+    <DD>By default, wxTimeCtrl will process TAB events, by allowing tab to the
+    different cells within the control.
+    <DT><B>validator</B>
+    <DD>By default, wxTimeCtrl just uses the default (empty) validator, as all
+    of its validation for entry control is handled internally.  However, a validator
+    can be supplied to provide data transfer capability to the control.
+    <BR>
+    <DT><B>fmt24hr</B>
+    <DD>If True, control will display time in 24 hour time format; if False, it will
+    use 12 hour AM/PM format.  SetValue() will adjust values accordingly for the
+    control, based on the format specified.
+    <BR>
+    <DT><B>spinButton</B>
+    <DD>If specified, this button's events will be bound to the behavior of the
+    wxTimeCtrl, working like up/down cursor key events.  (See BindSpinButton.)
+    <BR>
+    <DT><B>min</B>
+    <DD>Defines the lower bound for "valid" selections in the control.
+    By default, wxTimeCtrl doesn't have bounds.  You must set both upper and lower
+    bounds to make the control pay attention to them, (as only one bound makes no sense
+    with times.) "Valid" times will fall between the min and max "pie wedge" of the
+    clock.
+    <DT><B>max</B>
+    <DD>Defines the upper bound for "valid" selections in the control.
+    "Valid" times will fall between the min and max "pie wedge" of the
+    clock. (This can be a "big piece", ie. <b>min = 11pm, max= 10pm</b>
+    means <I>all but the hour from 10:00pm to 11pm are valid times.</I>)
+    <DT><B>limited</B>
+    <DD>If True, the control will not permit entry of values that fall outside the
+    set bounds.
+    <BR>
+    <DT><B>oob_color</B>
+    <DD>Sets the background color used to indicate out-of-bounds values for the control
+    when the control is not limited.  This is set to "Yellow" by default.
+    </DL>
+</UL>
+<BR>
+<BR>
+<BR>
+<DT><B>EVT_TIMEUPDATE(win, id, func)</B>
+<DD>func is fired whenever the value of the control changes.
+<BR>
+<BR>
+<DT><B>SetValue(time_string | wxDateTime | wxTimeSpan | mx.DateTime | mx.DateTimeDelta)</B>
+<DD>Sets the value of the control to a particular time, given a valid
+value; raises ValueError on invalid value.
+<EM>NOTE:</EM> This will only allow mx.DateTime or mx.DateTimeDelta if mx.DateTime
+was successfully imported by the class module.
+<BR>
+<DT><B>GetValue(as_wxDateTime = False, as_mxDateTime = False, as_wxTimeSpan=False, as mxDateTimeDelta=False)</B>
+<DD>Retrieves the value of the time from the control.  By default this is
+returned as a string, unless one of the other arguments is set; args are
+searched in the order listed; only one value will be returned.
+<BR>
+<DT><B>GetWxDateTime(value=None)</B>
+<DD>When called without arguments, retrieves the value of the control, and applies
+it to the wxDateTimeFromHMS() constructor, and returns the resulting value.
+The date portion will always be set to Jan 1, 1970. This form is the same
+as GetValue(as_wxDateTime=True).  GetWxDateTime can also be called with any of the
+other valid time formats settable with SetValue, to regularize it to a single
+wxDateTime form.  The function will raise ValueError on an unconvertable argument.
+<BR>
+<DT><B>GetMxDateTime()</B>
+<DD>Retrieves the value of the control and applies it to the DateTime.Time()
+constructor,and returns the resulting value.  (The date portion will always be
+set to Jan 1, 1970.) (Same as GetValue(as_wxDateTime=True); provided for backward
+compatibility with previous release.)
+<BR>
+<BR>
+<DT><B>BindSpinButton(wxSpinBtton)</B>
+<DD>Binds an externally created spin button to the control, so that up/down spin
+events change the active cell or selection in the control (in addition to the
+up/down cursor keys.)  (This is primarily to allow you to create a "standard"
+interface to time controls, as seen in Windows.)
+<BR>
+<BR>
+<DT><B>SetMin(min=None)</B>
+<DD>Sets the expected minimum value, or lower bound, of the control.
+(The lower bound will only be enforced if the control is
+configured to limit its values to the set bounds.)
+If a value of <I>None</I> is provided, then the control will have
+explicit lower bound.  If the value specified is greater than
+the current lower bound, then the function returns False and the
+lower bound will not change from its current setting.  On success,
+the function returns True.  Even if set, if there is no corresponding
+upper bound, the control will behave as if it is unbounded.
+<DT><DD>If successful and the current value is outside the
+new bounds, if the control is limited the value will be
+automatically adjusted to the nearest bound; if not limited,
+the background of the control will be colored with the current
+out-of-bounds color.
+<BR>
+<DT><B>GetMin(as_string=False)</B>
+<DD>Gets the current lower bound value for the control, returning
+None, if not set, or a wxDateTime, unless the as_string parameter
+is set to True, at which point it will return the string
+representation of the lower bound.
+<BR>
+<BR>
+<DT><B>SetMax(max=None)</B>
+<DD>Sets the expected maximum value, or upper bound, of the control.
+(The upper bound will only be enforced if the control is
+configured to limit its values to the set bounds.)
+If a value of <I>None</I> is provided, then the control will
+have no explicit upper bound.  If the value specified is less
+than the current lower bound, then the function returns False and
+the maximum will not change from its current setting. On success,
+the function returns True.  Even if set, if there is no corresponding
+lower bound, the control will behave as if it is unbounded.
+<DT><DD>If successful and the current value is outside the
+new bounds, if the control is limited the value will be
+automatically adjusted to the nearest bound; if not limited,
+the background of the control will be colored with the current
+out-of-bounds color.
+<BR>
+<DT><B>GetMax(as_string = False)</B>
+<DD>Gets the current upper bound value for the control, returning
+None, if not set, or a wxDateTime, unless the as_string parameter
+is set to True, at which point it will return the string
+representation of the lower bound.
+
+<BR>
+<BR>
+<DT><B>SetBounds(min=None,max=None)</B>
+<DD>This function is a convenience function for setting the min and max
+values at the same time.  The function only applies the maximum bound
+if setting the minimum bound is successful, and returns True
+only if both operations succeed.  <B><I>Note: leaving out an argument
+will remove the corresponding bound, and result in the behavior of
+an unbounded control.</I></B>
+<BR>
+<DT><B>GetBounds(as_string = False)</B>
+<DD>This function returns a two-tuple (min,max), indicating the
+current bounds of the control.  Each value can be None if
+that bound is not set.  The values will otherwise be wxDateTimes
+unless the as_string argument is set to True, at which point they
+will be returned as string representations of the bounds.
+<BR>
+<BR>
+<DT><B>IsInBounds(value=None)</B>
+<DD>Returns <I>True</I> if no value is specified and the current value
+of the control falls within the current bounds.  This function can also
+be called with a value to see if that value would fall within the current
+bounds of the given control.  It will raise ValueError if the value
+specified is not a wxDateTime, mxDateTime (if available) or parsable string.
+<BR>
+<BR>
+<DT><B>IsValid(value)</B>
+<DD>Returns <I>True</I>if specified value is a legal time value and
+falls within the current bounds of the given control.
+<BR>
+<BR>
+<DT><B>SetLimited(bool)</B>
+<DD>If called with a value of True, this function will cause the control
+to limit the value to fall within the bounds currently specified.
+(Provided both bounds have been set.)
+If the control's value currently exceeds the bounds, it will then
+be set to the nearest bound.
+If called with a value of False, this function will disable value
+limiting, but coloring of out-of-bounds values will still take
+place if bounds have been set for the control.
+<DT><B>IsLimited()</B>
+<DD>Returns <I>True</I> if the control is currently limiting the
+value to fall within the current bounds.
+<BR>
+</DL>
+</body></html>
+"""
+
+import string, copy
 from wxPython.wx import *
-import string
-
-# wxWindows' wxTextCtrl translates Composite "control key"
-# events into single events before returning them to its OnChar
-# routine.  The doc says that this results in 1 for Ctrl-A, 2 for
-# Ctrl-B, etc. However, there are no wxPython or wxWindows
-# symbols for them, so I'm defining codes for Ctrl-X (cut) and
-# Ctrl-V (paste) here for readability:
-WXK_CTRL_X = (ord('X')+1) - ord('A')
-WXK_CTRL_V = (ord('V')+1) - ord('A')
-
-# The following bit of function is for debugging the subsequent code.
-# To turn on debugging output, set _debug to 1
-_debug = 0
-_indent = 0
-
-if _debug:
-    def _dbg(*args, **kwargs):
-        global _indent
-
-        if len(args):
-            if _indent:      print ' ' * 3 * _indent,
-            for arg in args: print arg,
-            print
-        # else do nothing
-
-        # post process args:
-        for kwarg, value in kwargs.items():
-            if kwarg == 'indent' and value:         _indent = _indent + 1
-            elif kwarg == 'indent' and value == 0:  _indent = _indent - 1
-            if _indent < 0: _indent = 0
-else:
-    def _dbg(*args, **kwargs):
-        pass
-
+from wxPython.tools.dbg import Logger
+from wxPython.lib.maskededit import wxMaskedTextCtrl, Field
+import wxPython.utils
+dbg = Logger()
+dbg(enable=0)
+
+try:
+    from mx import DateTime
+    accept_mx = True
+except ImportError:
+    accept_mx = False
 
 # This class of event fires whenever the value of the time changes in the control:
 wxEVT_TIMEVAL_UPDATED = wxNewId()
@@ -71,98 +268,173 @@ class TimeUpdatedEvent(wxPyCommandEvent):
         return self.value
 
 
-# Set up all the positions of the cells in the wxTimeCtrl (once at module import):
-# Format of control is:
-#               hh:mm:ss xM
-#                         1
-# positions:    01234567890
-_listCells = ['hour', 'minute', 'second', 'am_pm']
-_listCellRange =   [(0,1,2), (3,4,5), (6,7,8), (9,10,11)]
-_listDelimPos =  [2,5,8]
-
-# Create dictionary of cell ranges, indexed by name or position in the range:
-_dictCellRange = {}
-for i in range(4):
-    _dictCellRange[_listCells[i]] = _listCellRange[i]
-for cell in _listCells:
-    for i in _dictCellRange[cell]:
-        _dictCellRange[i] = _dictCellRange[cell]
-
-
-# Create lists of starting and ending positions for each range, and a dictionary of starting
-# positions indexed by name
-_listStartCellPos = []
-_listEndCellPos = []
-for tup in _listCellRange:
-    _listStartCellPos.append(tup[0])  # 1st char of cell
-    _listEndCellPos.append(tup[1])    # last char of cell (not including delimiter)
-
-_dictStartCellPos = {}
-for i in range(4):
-    _dictStartCellPos[_listCells[i]] = _listStartCellPos[i]
+class wxTimeCtrl(wxMaskedTextCtrl):
 
+    valid_ctrl_params = {
+        'display_seconds' : True,   # by default, shows seconds
+        'min': None,                # by default, no bounds set
+        'max': None,
+        'limited': False,           # by default, no limiting even if bounds set
+        'useFixedWidthFont': True,  # by default, use a fixed-width font
+        'oob_color': "Yellow"       # by default, the default wxMaskedTextCtrl "invalid" color
+        }
 
-class wxTimeCtrl(wxTextCtrl):
     def __init__ (
                 self, parent, id=-1, value = '12:00:00 AM',
                 pos = wxDefaultPosition, size = wxDefaultSize,
-                fmt24hr=0,
+                fmt24hr=False,
                 spinButton = None,
-                style = wxTE_PROCESS_TAB, name = "time"
-        ):
-        wxTextCtrl.__init__(self, parent, id, value='',
-                            pos=pos, size=size, style=style, name=name)
-
+                style = wxTE_PROCESS_TAB,
+                validator = wxDefaultValidator,
+                name = "time",
+                **kwargs ):
+
+        # set defaults for control:
+        dbg('setting defaults:')
+        for key, param_value in wxTimeCtrl.valid_ctrl_params.items():
+            # This is done this way to make setattr behave consistently with
+            # "private attribute" name mangling
+            setattr(self, "_wxTimeCtrl__" + key, copy.copy(param_value))
+
+        # create locals from current defaults, so we can override if
+        # specified in kwargs, and handle uniformly:
+        min = self.__min
+        max = self.__max
+        limited = self.__limited
+        self.__posCurrent = 0
+
+
+        # (handle positional args (from original release) differently from rest of kwargs:)
         self.__fmt24hr = fmt24hr
 
-        if size == wxDefaultSize:
-            # set appropriate default sizes depending on format:
-            if self.__fmt24hr:
-                testText = '00:00:00'
-            else:
-                testText = '00:00:00 MM'
-            _dbg(wxPlatform)
+        maskededit_kwargs = {}
+
+        # assign keyword args as appropriate:
+        for key, param_value in kwargs.items():
+            if key not in wxTimeCtrl.valid_ctrl_params.keys():
+                raise AttributeError('invalid keyword argument "%s"' % key)
+
+            if key == "display_seconds":
+                self.__display_seconds = param_value
+
+            elif key == "min":      min = param_value
+            elif key == "max":      max = param_value
+            elif key == "limited":  limited = param_value
+
+            elif key == "useFixedWidthFont":
+                maskededit_kwargs[key] = param_value
+            elif key == "oob_color":
+                maskededit_kwargs['invalidBackgroundColor'] = param_value
+
+        if self.__fmt24hr:
+            if self.__display_seconds:  maskededit_kwargs['autoformat'] = 'MILTIMEHHMMSS'
+            else:                       maskededit_kwargs['autoformat'] = 'MILTIMEHHMM'
+
+            # Set hour field to zero-pad, right-insert, require explicit field change,
+            # select entire field on entry, and require a resultant valid entry
+            # to allow character entry:
+            hourfield = Field(formatcodes='0r<SV', validRegex='0\d|1\d|2[0123]', validRequired=True)
+        else:
+            if self.__display_seconds:  maskededit_kwargs['autoformat'] = 'TIMEHHMMSS'
+            else:                       maskededit_kwargs['autoformat'] = 'TIMEHHMM'
+
+            # Set hour field to allow spaces (at start), right-insert,
+            # require explicit field change, select entire field on entry,
+            # and require a resultant valid entry to allow character entry:
+            hourfield = Field(formatcodes='_0<rSV', validRegex='0[1-9]| [1-9]|1[012]', validRequired=True)
+            ampmfield = Field(formatcodes='S')
+
+        # Field 1 is always a zero-padded right-insert minute field,
+        # similarly configured as above:
+        minutefield = Field(formatcodes='0r<SV', validRegex='[0-5]\d', validRequired=True)
+
+        fields = [ hourfield, minutefield ]
+        if self.__display_seconds:
+            fields.append(copy.copy(minutefield))    # second field has same constraints as field 1
+
+        if not self.__fmt24hr:
+            fields.append(ampmfield)
+
+        # set fields argument:
+        maskededit_kwargs['fields'] = fields
+
+        # This allows range validation if set
+        maskededit_kwargs['validFunc'] = self.IsInBounds
+
+        # This allows range limits to affect insertion into control or not
+        # dynamically without affecting individual field constraint validation
+        maskededit_kwargs['retainFieldValidation'] = True
+
+        # allow control over font selection:
+        maskededit_kwargs['useFixedWidthFont'] = self.__useFixedWidthFont
+
+        # allow for explicit size specification:
+        if size != wxDefaultSize:
+            # override (and remove) "autofit" autoformat code in standard time formats:
+            maskededit_kwargs['formatcodes'] = 'T!'
+
+        # Now we can initialize the base control:
+        wxMaskedTextCtrl.__init__(
+                self, parent, id=id,
+                pos=pos, size=size,
+                style = style,
+                validator = validator,
+                name = name,
+                setupEventHandling = False,
+                **maskededit_kwargs)
+
 
-            if wxPlatform != "__WXMSW__":   # give it a little extra space
-                testText += 'M'
-            if wxPlatform == "__WXMAC__":   # give it even a little more...
-                testText += 'M'
+        # This makes ':' act like tab (after we fix each ':' key event to remove "shift")
+        self._SetKeyHandler(':', self._OnChangeField)
 
-            w, h = self.GetTextExtent(testText)
-            self.SetClientSize( (w+4, self.GetClientSize().height) )
 
+        # This makes the up/down keys act like spin button controls:
+        self._SetKeycodeHandler(WXK_UP, self.__OnSpinUp)
+        self._SetKeycodeHandler(WXK_DOWN, self.__OnSpinDown)
+
+
+        # This allows ! and c/C to set the control to the current time:
+        self._SetKeyHandler('!', self.__OnSetToNow)
+        self._SetKeyHandler('c', self.__OnSetToNow)
+        self._SetKeyHandler('C', self.__OnSetToNow)
+
+
+        # Set up event handling ourselves, so we can insert special
+        # processing on the ":' key to remove the "shift" attribute
+        # *before* the default handlers have been installed, so
+        # that : takes you forward, not back, and so we can issue
+        # EVT_TIMEUPDATE events on changes:
+
+        EVT_SET_FOCUS( self, self._OnFocus )        ## defeat automatic full selection
+        EVT_KILL_FOCUS( self, self._OnKillFocus )   ## run internal validator
+        EVT_LEFT_UP(self, self.__LimitSelection)    ## limit selections to single field
+        EVT_LEFT_DCLICK(self, self._OnDoubleClick ) ## select field under cursor on dclick
+        EVT_KEY_DOWN( self, self._OnKeyDown )       ## capture control events not normally seen, eg ctrl-tab.
+        EVT_CHAR( self, self.__OnChar )             ## remove "shift" attribute from colon key event,
+                                                    ## then call wxMaskedTextCtrl._OnChar with
+                                                    ## the possibly modified event.
+        EVT_TEXT( self, self.GetId(), self.__OnTextChange ) ## color control appropriately and EVT_TIMEUPDATE events
 
-        if self.__fmt24hr:  self.__lastCell = 'second'
-        else:               self.__lastCell = 'am_pm'
 
         # Validate initial value and set if appropriate
         try:
+            self.SetBounds(min, max)
+            self.SetLimited(limited)
             self.SetValue(value)
         except:
             self.SetValue('12:00:00 AM')
 
-        # set initial position and selection state
-        self.__SetCurrentCell(_dictStartCellPos['hour'])
-        self.__OnChangePos(None)
-
-        # Set up internal event handlers to change the event reaction behavior of
-        # the base wxTextCtrl:
-        EVT_TEXT(self, self.GetId(), self.__OnTextChange)
-        EVT_SET_FOCUS(self, self.__OnFocus)
-        EVT_LEFT_UP(self, self.__OnChangePos)
-        EVT_LEFT_DCLICK(self, self.__OnDoubleClick)
-        EVT_CHAR(self, self.__OnChar)
-
         if spinButton:
             self.BindSpinButton(spinButton)     # bind spin button up/down events to this control
 
 
+
     def BindSpinButton(self, sb):
         """
         This function binds an externally created spin button to the control, so that
         up/down events from the button automatically change the control.
         """
-        _dbg('wxTimeCtrl::BindSpinButton')
+        dbg('wxTimeCtrl::BindSpinButton')
         self.__spinButton = sb
         if self.__spinButton:
             # bind event handlers to spin ctrl
@@ -170,235 +442,518 @@ class wxTimeCtrl(wxTextCtrl):
             EVT_SPIN_DOWN(self.__spinButton, self.__spinButton.GetId(), self.__OnSpinDown)
 
 
-
     def __repr__(self):
         return "<wxTimeCtrl: %s>" % self.GetValue()
 
 
-
     def SetValue(self, value):
         """
-        Validating SetValue function for time strings, doing 12/24 format conversion as appropriate.
+        Validating SetValue function for time values:
+        This function will do dynamic type checking on the value argument,
+        and convert wxDateTime, mxDateTime, or 12/24 format time string
+        into the appropriate format string for the control.
         """
-        _dbg('wxTimeCtrl::SetValue', indent=1)
-        dict_range = _dictCellRange             # (for brevity)
-        dict_start = _dictStartCellPos
-
-        fmt12len = dict_range['am_pm'][-1]
-        fmt24len = dict_range['second'][-1]
+        dbg('wxTimeCtrl::SetValue(%s)' % repr(value), indent=1)
         try:
-            separators_correct = value[2] == ':' and value[5] == ':'
-            len_ok = len(value) in (fmt12len, fmt24len)
-
-            if len(value) > fmt24len:
-                separators_correct = separators_correct and value[8] == ' '
-            hour = int(value[dict_range['hour'][0]:dict_range['hour'][-1]])
-            hour_ok = ((hour in range(0,24) and len(value) == fmt24len)
-                       or (hour in range(1,13) and len(value) == fmt12len
-                           and value[dict_start['am_pm']:] in ('AM', 'PM')))
-
-            minute = int(value[dict_range['minute'][0]:dict_range['minute'][-1]])
-            min_ok  = minute in range(60)
-            second  = int(value[dict_range['second'][0]:dict_range['second'][-1]])
-            sec_ok  = second in range(60)
-
-            _dbg('len_ok =', len_ok, 'separators_correct =', separators_correct)
-            _dbg('hour =', hour, 'hour_ok =', hour_ok, 'min_ok =', min_ok, 'sec_ok =', sec_ok)
-
-            if len_ok and hour_ok and min_ok and sec_ok and separators_correct:
-                _dbg('valid time string')
-
-                self.__hour = hour
-                if len(value) == fmt12len:                      # handle 12 hour format conversion for actual hour:
-                    am = value[dict_start['am_pm']:] == 'AM'
-                    if hour != 12 and not am:
-                        self.__hour = hour = (hour+12) % 24
-                    elif hour == 12:
-                        if am: self.__hour = hour = 0
-
-                self.__minute = minute
-                self.__second = second
-
-                # valid time
-                need_to_convert = ((self.__fmt24hr and len(value) == fmt12len)
-                                   or (not self.__fmt24hr and len(value) == fmt24len))
-                _dbg('need_to_convert =', need_to_convert)
-
-                if need_to_convert:     #convert to 12/24 hour format as specified:
-                    if self.__fmt24hr and len(value) == fmt12len:
-                        text = '%.2d:%.2d:%.2d' % (hour, minute, second)
-                    else:
-                        if hour > 12:
-                            hour = hour - 12
-                            am_pm = 'PM'
-                        elif hour == 12:
-                            am_pm = 'PM'
-                        else:
-                            if hour == 0: hour = 12
-                            am_pm = 'AM'
-                        text = '%2d:%.2d:%.2d %s' % (hour, minute, second, am_pm)
-                else:
-                    text = value
-                _dbg('text=', text)
-                wxTextCtrl.SetValue(self, text)
-                _dbg('firing TimeUpdatedEvent...')
-                evt = TimeUpdatedEvent(self.GetId(), text)
-                evt.SetEventObject(self)
-                self.GetEventHandler().ProcessEvent(evt)
-            else:
-                _dbg('len_ok:', len_ok, 'separators_correct =', separators_correct)
-                _dbg('hour_ok:', hour_ok, 'min_ok:', min_ok, 'sec_ok:', sec_ok, indent=0)
-                raise ValueError, 'value is not a valid time string'
+            strtime = self._toGUI(self.__validateValue(value))
+        except:
+            dbg('validation failed', indent=0)
+            raise
+
+        dbg('strtime:', strtime)
+        self._SetValue(strtime)
+        dbg(indent=0)
+
+    def GetValue(self,
+                 as_wxDateTime = False,
+                 as_mxDateTime = False,
+                 as_wxTimeSpan = False,
+                 as_mxDateTimeDelta = False):
+
+
+        if as_wxDateTime or as_mxDateTime or as_wxTimeSpan or as_mxDateTimeDelta:
+            value = self.GetWxDateTime()
+            if as_wxDateTime:
+                pass
+            elif as_mxDateTime:
+                value = DateTime.DateTime(1970, 1, 1, value.GetHour(), value.GetMinute(), value.GetSecond())
+            elif as_wxTimeSpan:
+                value = wxTimeSpan(value.GetHour(), value.GetMinute(), value.GetSecond())
+            elif as_mxDateTimeDelta:
+                value = DateTime.DateTimeDelta(0, value.GetHour(), value.GetMinute(), value.GetSecond())
+        else:
+            value = wxMaskedTextCtrl.GetValue(self)
+        return value
 
-        except (TypeError, ValueError):
-            _dbg(indent=0)
-            raise ValueError, 'value is not a valid time string'
-        _dbg(indent=0)
 
     def SetWxDateTime(self, wxdt):
-        value = '%2d:%.2d:%.2d' % (wxdt.GetHour(), wxdt.GetMinute(), wxdt.GetSecond())
-        self.SetValue(value)
+        """
+        Because SetValue can take a wxDateTime, this is now just an alias.
+        """
+        self.SetValue(wxdt)
+
+
+    def GetWxDateTime(self, value=None):
+        """
+        This function is the conversion engine for wxTimeCtrl; it takes
+        one of the following types:
+            time string
+            wxDateTime
+            wxTimeSpan
+            mxDateTime
+            mxDateTimeDelta
+        and converts it to a wxDateTime that always has Jan 1, 1970 as its date
+        portion, so that range comparisons around values can work using
+        wxDateTime's built-in comparison function.  If a value is not
+        provided to convert, the string value of the control will be used.
+        If the value is not one of the accepted types, a ValueError will be
+        raised.
+        """
+        global accept_mx
+        dbg(suspend=1)
+        dbg('wxTimeCtrl::GetWxDateTime(%s)' % repr(value), indent=1)
+        if value is None:
+            dbg('getting control value')
+            value = self.GetValue()
+            dbg('value = "%s"' % value)
+
+        valid = True    # assume true
+        if type(value) == types.StringType:
+
+            # Construct constant wxDateTime, then try to parse the string:
+            wxdt = wxDateTimeFromDMY(1, 0, 1970)
+            dbg('attempting conversion')
+            value = value.strip()    # (parser doesn't like leading spaces)
+            checkTime    = wxdt.ParseTime(value)
+            valid = checkTime == len(value)     # entire string parsed?
+            dbg('checkTime == len(value)?', valid)
+
+            if not valid:
+                dbg(indent=0, suspend=0)
+                raise ValueError('cannot convert string "%s" to valid time' % value)
+
+        else:
+            if isinstance(value, wxPython.utils.wxDateTimePtr):
+                hour, minute, second = value.GetHour(), value.GetMinute(), value.GetSecond()
+            elif isinstance(value, wxPython.utils.wxTimeSpanPtr):
+                totalseconds = value.GetSeconds()
+                hour = totalseconds / 3600
+                minute = totalseconds / 60 - (hour * 60)
+                second = totalseconds - ((hour * 3600) + (minute * 60))
+
+            elif accept_mx and isinstance(value, DateTime.DateTimeType):
+                hour, minute, second = value.hour, value.minute, value.second
+            elif accept_mx and isinstance(value, DateTime.DateTimeDeltaType):
+                hour, minute, second = value.hour, value.minute, value.second
+            else:
+                # Not a valid function argument
+                if self.__accept_mx:
+                    error = 'GetWxDateTime requires wxDateTime, mxDateTime or parsable time string, passed %s'% repr(value)
+                else:
+                    error = 'GetWxDateTime requires wxDateTime or parsable time string, passed %s'% repr(value)
+                dbg(indent=0, suspend=0)
+                raise ValueError(error)
+
+            wxdt = wxDateTimeFromDMY(1, 0, 1970)
+            wxdt.SetHour(hour)
+            wxdt.SetMinute(minute)
+            wxdt.SetSecond(second)
+
+        dbg('wxdt:', wxdt, indent=0, suspend=0)
+        return wxdt
 
-    def GetWxDateTime(self):
-        t = wxDateTimeFromHMS(self.__hour, self.__minute, self.__second)
-        return t
 
     def SetMxDateTime(self, mxdt):
-        from mx import DateTime
-        value = '%2d:%.2d:%.2d' % (mxdt.hour, mxdt.minute, mxdt.second)
+        """
+        Because SetValue can take an mxDateTime, (if DateTime is importable),
+        this is now just an alias.
+        """
         self.SetValue(value)
 
-    def GetMxDateTime(self):
-        from mx import DateTime
-        t = DateTime.Time(self.__hour, self.__minute, self.__second)
+
+    def GetMxDateTime(self, value=None):
+        if value is None:
+            t = self.GetValue(as_mxDateTime=True)
+        else:
+            # Convert string 1st to wxDateTime, then use components, since
+            # mx' DateTime.Parser.TimeFromString() doesn't handle AM/PM:
+            wxdt = self.GetWxDateTime(value)
+            hour, minute, second = wxdt.GetHour(), wxdt.GetMinute(), wxdt.GetSecond()
+            t = DateTime.DateTime(1970,1,1) + DateTimeDelta(0, hour, minute, second)
         return t
 
-#-------------------------------------------------------------------------------------------------------------
-# these are private functions and overrides:
 
-    def __SetCurrentCell(self, pos):
+    def SetMin(self, min=None):
         """
-        Sets state variables that indicate the current cell and position within the control.
+        Sets the minimum value of the control.  If a value of None
+        is provided, then the control will have no explicit minimum value.
+        If the value specified is greater than the current maximum value,
+        then the function returns 0 and the minimum will not change from
+        its current setting.  On success, the function returns 1.
+
+        If successful and the current value is lower than the new lower
+        bound, if the control is limited, the value will be automatically
+        adjusted to the new minimum value; if not limited, the value in the
+        control will be colored as invalid.
         """
-        self.__posCurrent = pos
-        self.__cellStart, self.__cellEnd = _dictCellRange[pos][0], _dictCellRange[pos][-1]
+        dbg('wxTimeCtrl::SetMin(%s)'% repr(min), indent=1)
+        if min is not None:
+            try:
+                min = self.GetWxDateTime(min)
+                self.__min = self._toGUI(min)
+            except:
+                dbg('exception occurred', indent=0)
+                return False
+        else:
+            self.__min = min
+
+        if self.IsLimited() and not self.IsInBounds():
+            self.SetLimited(self.__limited) # force limited value:
+        else:
+            self._CheckValid()
+        ret = True
+        dbg('ret:', ret, indent=0)
+        return ret
 
 
-    def SetInsertionPoint(self, pos):
+    def GetMin(self, as_string = False):
         """
-        Records the specified position and associated cell before calling base class' function.
+        Gets the minimum value of the control.
+        If None, it will return None.  Otherwise it will return
+        the current minimum bound on the control, as a wxDateTime
+        by default, or as a string if as_string argument is True.
         """
-        _dbg('wxTimeCtrl::SetInsertionPoint', pos, indent=1)
+        dbg(suspend=1)
+        dbg('wxTimeCtrl::GetMin, as_string?', as_string, indent=1)
+        if self.__min is None:
+            dbg('(min == None)')
+            ret = self.__min
+        elif as_string:
+            ret = self.__min
+            dbg('ret:', ret)
+        else:
+            try:
+                ret = self.GetWxDateTime(self.__min)
+            except:
+                dbg(suspend=0)
+                dbg('exception occurred', indent=0)
+            dbg('ret:', repr(ret))
+        dbg(indent=0, suspend=0)
+        return ret
+
+
+    def SetMax(self, max=None):
+        """
+        Sets the maximum value of the control. If a value of None
+        is provided, then the control will have no explicit maximum value.
+        If the value specified is less than the current minimum value, then
+        the function returns False and the maximum will not change from its
+        current setting. On success, the function returns True.
+
+        If successful and the current value is greater than the new upper
+        bound, if the control is limited the value will be automatically
+        adjusted to this maximum value; if not limited, the value in the
+        control will be colored as invalid.
+        """
+        dbg('wxTimeCtrl::SetMax(%s)' % repr(max), indent=1)
+        if max is not None:
+            try:
+                max = self.GetWxDateTime(max)
+                self.__max = self._toGUI(max)
+            except:
+                dbg('exception occurred', indent=0)
+                return False
+        else:
+            self.__max = max
+        dbg('max:', repr(self.__max))
+        if self.IsLimited() and not self.IsInBounds():
+            self.SetLimited(self.__limited) # force limited value:
+        else:
+            self._CheckValid()
+        ret = True
+        dbg('ret:', ret, indent=0)
+        return ret
 
-        # Adjust pos to legal value if not already
-        if pos < 0: pos = 0
-        elif pos in _listDelimPos + [_dictCellRange[self.__lastCell]]:
-            pos = pos - 1
-            if self.__lastCell == 'am_pm' and pos in _dictCellRange[self.__lastCell]:
-                pos = _dictStartCellPos[self.__lastCell]
 
-        self.__SetCurrentCell(pos)
-        wxTextCtrl.SetInsertionPoint(self, pos)                 # (causes EVT_TEXT event to fire)
-        _dbg(indent=0)
+    def GetMax(self, as_string = False):
+        """
+        Gets the minimum value of the control.
+        If None, it will return None.  Otherwise it will return
+        the current minimum bound on the control, as a wxDateTime
+        by default, or as a string if as_string argument is True.
+        """
+        dbg(suspend=1)
+        dbg('wxTimeCtrl::GetMin, as_string?', as_string, indent=1)
+        if self.__max is None:
+            dbg('(max == None)')
+            ret = self.__max
+        elif as_string:
+            ret = self.__max
+            dbg('ret:', ret)
+        else:
+            try:
+                ret = self.GetWxDateTime(self.__max)
+            except:
+                dbg(suspend=0)
+                dbg('exception occurred', indent=0)
+                raise
+            dbg('ret:', repr(ret))
+        dbg(indent=0, suspend=0)
+        return ret
 
 
-    def SetSelection(self, sel_start, sel_to):
-        _dbg('wxTimeCtrl::SetSelection', sel_start, sel_to, indent=1)
+    def SetBounds(self, min=None, max=None):
+        """
+        This function is a convenience function for setting the min and max
+        values at the same time.  The function only applies the maximum bound
+        if setting the minimum bound is successful, and returns True
+        only if both operations succeed.
+        NOTE: leaving out an argument will remove the corresponding bound.
+        """
+        ret = self.SetMin(min)
+        return ret and self.SetMax(max)
 
-        # Adjust selection range to legal extent if not already
-        if sel_start < 0:
-            self.SetInsertionPoint(0)
-            sel_start = self.__posCurrent
 
-        elif sel_start in _listDelimPos + [_dictCellRange[self.__lastCell]]:
-            self.SetInsertionPoint(sel_start - 1)
-            sel_start = self.__posCurrent
+    def GetBounds(self, as_string = False):
+        """
+        This function returns a two-tuple (min,max), indicating the
+        current bounds of the control.  Each value can be None if
+        that bound is not set.
+        """
+        return (self.GetMin(as_string), self.GetMax(as_string))
 
-        if self.__posCurrent != sel_start:                      # force selection and insertion point to match
-            self.SetInsertionPoint(sel_start)
 
-        if sel_to not in _dictCellRange[sel_start]:
-            sel_to = _dictCellRange[sel_start][-1]              # limit selection to end of current cell
+    def SetLimited(self, limited):
+        """
+        If called with a value of True, this function will cause the control
+        to limit the value to fall within the bounds currently specified.
+        If the control's value currently exceeds the bounds, it will then
+        be limited accordingly.
+
+        If called with a value of 0, this function will disable value
+        limiting, but coloring of out-of-bounds values will still take
+        place if bounds have been set for the control.
+        """
+        dbg('wxTimeCtrl::SetLimited(%d)' % limited, indent=1)
+        self.__limited = limited
+
+        if not limited:
+            self.SetMaskParameters(validRequired = False)
+            self._CheckValid()
+            dbg(indent=0)
+            return
+
+        dbg('requiring valid value')
+        self.SetMaskParameters(validRequired = True)
+
+        min = self.GetMin()
+        max = self.GetMax()
+        if min is None or max is None:
+            dbg('both bounds not set; no further action taken')
+            return  # can't limit without 2 bounds
+
+        elif not self.IsInBounds():
+            # set value to the nearest bound:
+            try:
+                value = self.GetWxDateTime()
+            except:
+                dbg('exception occurred', indent=0)
+                raise
+
+            if min <= max:   # valid range doesn't span midnight
+                dbg('min <= max')
+                # which makes the "nearest bound" computation trickier...
+
+                # determine how long the "invalid" pie wedge is, and cut
+                # this interval in half for comparison purposes:
+
+                # Note: relies on min and max and value date portions
+                # always being the same.
+                interval = (min + wxTimeSpan(24, 0, 0, 0)) - max
+
+                half_interval = wxTimeSpan(
+                                    0,      # hours
+                                    0,      # minutes
+                                    interval.GetSeconds() / 2,  # seconds
+                                    0)      # msec
+
+                if value < min: # min is on next day, so use value on
+                    # "next day" for "nearest" interval calculation:
+                    cmp_value = value + wxTimeSpan(24, 0, 0, 0)
+                else:   # "before midnight; ok
+                    cmp_value = value
+
+                if (cmp_value - max) > half_interval:
+                    dbg('forcing value to min (%s)' % min.FormatTime())
+                    self.SetValue(min)
+                else:
+                    dbg('forcing value to max (%s)' % max.FormatTime())
+                    self.SetValue(max)
+            else:
+                dbg('max < min')
+                # therefore  max < value < min guaranteed to be true,
+                # so "nearest bound" calculation is much easier:
+                if (value - max) >= (min - value):
+                    # current value closer to min; pick that edge of pie wedge
+                    dbg('forcing value to min (%s)' % min.FormatTime())
+                    self.SetValue(min)
+                else:
+                    dbg('forcing value to max (%s)' % max.FormatTime())
+                    self.SetValue(max)
 
-        self.__bSelection = sel_start != sel_to
-        self.__posSelectTo = sel_to
-        wxTextCtrl.SetSelection(self, sel_start, sel_to)
-        _dbg(indent=0)
+        dbg(indent=0)
 
 
-    def __OnFocus(self,event):
+
+    def IsLimited(self):
         """
-        This event handler is currently necessary to work around new default
-        behavior as of wxPython2.3.3;
-        The TAB key auto selects the entire contents of the wxTextCtrl *after*
-        the EVT_SET_FOCUS event occurs; therefore we can't query/adjust the selection
-        *here*, because it hasn't happened yet.  So to prevent this behavior, and
-        preserve the correct selection when the focus event is not due to tab,
-        we need to pull the following trick:
+        Returns True if the control is currently limiting the
+        value to fall within any current bounds.  Note: can
+        be set even if there are no current bounds.
         """
-        _dbg('wxTimeCtrl::OnFocus')
-        wxCallAfter(self.__FixSelection)
-        event.Skip()
+        return self.__limited
 
 
-    def __FixSelection(self):
+    def IsInBounds(self, value=None):
+        """
+        Returns True if no value is specified and the current value
+        of the control falls within the current bounds.  As the clock
+        is a "circle", both minimum and maximum bounds must be set for
+        a value to ever be considered "out of bounds".  This function can
+        also be called with a value to see if that value would fall within
+        the current bounds of the given control.
         """
-        This gets called after the TAB traversal selection is made, if the
-        focus event was due to this, but before the EVT_LEFT_* events if
-        the focus shift was due to a mouse event.
+        if value is not None:
+            try:
+                value = self.GetWxDateTime(value)   # try to regularize passed value
+            except ValueError:
+                dbg('ValueError getting wxDateTime for %s' % repr(value), indent=0)
+                raise
+
+        dbg('wxTimeCtrl::IsInBounds(%s)' % repr(value), indent=1)
+        if self.__min is None or self.__max is None:
+            dbg(indent=0)
+            return True
+
+        elif value is None:
+            try:
+                value = self.GetWxDateTime()
+            except:
+                dbg('exception occurred', indent=0)
+
+        dbg('value:', value.FormatTime())
+
+        # Get wxDateTime representations of bounds:
+        min = self.GetMin()
+        max = self.GetMax()
+
+        midnight = wxDateTimeFromDMY(1, 0, 1970)
+        if min <= max:   # they don't span midnight
+            ret = min <= value <= max
+
+        else:
+            # have to break into 2 tests; to be in bounds
+            # either "min" <= value (<= midnight of *next day*)
+            # or midnight <= value <= "max"
+            ret = min <= value or (midnight <= value <= max)
+        dbg('in bounds?', ret, indent=0)
+        return ret
+
 
-        The trouble is that, a priori, there's no explicit notification of
-        why the focus event we received.  However, the whole reason we need to
-        do this is because the default behavior on TAB traveral in a wxTextCtrl is
-        now to select the entire contents of the window, something we don't want.
-        So we can *now* test the selection range, and if it's "the whole text"
-        we can assume the cause, change the insertion point to the start of
-        the control, and deselect.
+    def IsValid( self, value ):
         """
-        _dbg('wxTimeCtrl::FixSelection', indent=1)
-        sel_start, sel_to = self.GetSelection()
-        if sel_start == 0 and sel_to in _dictCellRange[self.__lastCell]:
-            # This isn't normally allowed, and so assume we got here by the new
-            # "tab traversal" behavior, so we need to reset the selection
-            # and insertion point:
-            _dbg('entire text selected; resetting selection to start of control')
-            self.SetInsertionPoint(0)
-            self.SetSelection(self.__cellStart, self.__cellEnd)
-        _dbg(indent=0)
+        Can be used to determine if a given value would be a legal and
+        in-bounds value for the control.
+        """
+        try:
+            self.__validateValue(value)
+            return True
+        except ValueError:
+            return False
 
 
-    def __OnTextChange(self, event):
+#-------------------------------------------------------------------------------------------------------------
+# these are private functions and overrides:
+
+
+    def __OnTextChange(self, event=None):
+        dbg('wxTimeCtrl::OnTextChange', indent=1)
+
+        # Allow wxMaskedtext base control to color as appropriate,
+        # and Skip the EVT_TEXT event (if appropriate.)
+        ##! WS: For some inexplicable reason, every wxTextCtrl.SetValue()
+        ## call is generating two (2) EVT_TEXT events. (!)
+        ## The the only mechanism I can find to mask this problem is to
+        ## keep track of last value seen, and declare a valid EVT_TEXT
+        ## event iff the value has actually changed.  The masked edit
+        ## OnTextChange routine does this, and returns True on a valid event,
+        ## False otherwise.
+        if not wxMaskedTextCtrl._OnTextChange(self, event):
+            return
+
+        dbg('firing TimeUpdatedEvent...')
+        evt = TimeUpdatedEvent(self.GetId(), self.GetValue())
+        evt.SetEventObject(self)
+        self.GetEventHandler().ProcessEvent(evt)
+        dbg(indent=0)
+
+
+    def SetInsertionPoint(self, pos):
         """
-        This private event handler is required to retain the current position information of the cursor
-        after update to the underlying text control is done.
+        Records the specified position and associated cell before calling base class' function.
+        This is necessary to handle the optional spin button, because the insertion
+        point is lost when the focus shifts to the spin button.
         """
-        _dbg('wxTimeCtrl::OnTextChange', indent=1)
-        self.__SetCurrentCell(self.__posCurrent)                # ensure cell range vars are set
+        dbg('wxTimeCtrl::SetInsertionPoint', pos, indent=1)
+        wxMaskedTextCtrl.SetInsertionPoint(self, pos)                 # (causes EVT_TEXT event to fire)
+        self.__posCurrent = self.GetInsertionPoint()
+        dbg(indent=0)
+
+
+    def SetSelection(self, sel_start, sel_to):
+        dbg('wxTimeCtrl::SetSelection', sel_start, sel_to, indent=1)
+
+        # Adjust selection range to legal extent if not already
+        if sel_start < 0:
+            sel_start = 0
+
+        if self.__posCurrent != sel_start:                      # force selection and insertion point to match
+            self.SetInsertionPoint(sel_start)
+        cell_start, cell_end = self._FindField(sel_start)._extent
+        if not cell_start <= sel_to <= cell_end:
+            sel_to = cell_end
+
+        self.__bSelection = sel_start != sel_to
+        wxMaskedTextCtrl.SetSelection(self, sel_start, sel_to)
+        dbg(indent=0)
 
-        # Note: must call self.SetSelection here to preserve insertion point cursor after update!
-        # (I don't know why, but this does the trick!)
-        if self.__bSelection:
-            _dbg('reselecting from ', self.__posCurrent, 'to', self.__posSelectTo)
-            self.SetSelection(self.__posCurrent, self.__posSelectTo)
-        else:
-            self.SetSelection(self.__posCurrent, self.__posCurrent)
-        event.Skip()
-        _dbg(indent=0)
 
     def __OnSpin(self, key):
-        self.__IncrementValue(key, self.__posCurrent)
+        """
+        This is the function that gets called in response to up/down arrow or
+        bound spin button events.
+        """
+        self.__IncrementValue(key, self.__posCurrent)   # changes the value
+
+        # Ensure adjusted control regains focus and has adjusted portion
+        # selected:
         self.SetFocus()
-        self.SetInsertionPoint(self.__posCurrent)
-        self.SetSelection(self.__posCurrent, self.__posSelectTo)
+        start, end = self._FindField(self.__posCurrent)._extent
+        self.SetInsertionPoint(start)
+        self.SetSelection(start, end)
+        dbg('current position:', self.__posCurrent)
+
 
     def __OnSpinUp(self, event):
         """
         Event handler for any bound spin button on EVT_SPIN_UP;
         causes control to behave as if up arrow was pressed.
         """
-        _dbg('wxTimeCtrl::OnSpinUp', indent=1)
+        dbg('wxTimeCtrl::OnSpinUp', indent=1)
         self.__OnSpin(WXK_UP)
-        _dbg(indent=0)
+        keep_processing = False
+        dbg(indent=0)
+        return keep_processing
 
 
     def __OnSpinDown(self, event):
@@ -406,381 +961,146 @@ class wxTimeCtrl(wxTextCtrl):
         Event handler for any bound spin button on EVT_SPIN_DOWN;
         causes control to behave as if down arrow was pressed.
         """
-        _dbg('wxTimeCtrl::OnSpinDown', indent=1)
+        dbg('wxTimeCtrl::OnSpinDown', indent=1)
         self.__OnSpin(WXK_DOWN)
-        _dbg(indent=0)
+        keep_processing = False
+        dbg(indent=0)
+        return keep_processing
 
 
-    def __OnChangePos(self, event):
+    def __OnChar(self, event):
         """
-        Event handler for motion events; this handler
-        changes limits the selection to the new cell boundaries.
+        Handler to explicitly look for ':' keyevents, and if found,
+        clear the m_shiftDown field, so it will behave as forward tab.
+        It then calls the base control's _OnChar routine with the modified
+        event instance.
         """
-        _dbg('wxTimeCtrl::OnChangePos', indent=1)
-        pos = self.GetInsertionPoint()
-        self.__SetCurrentCell(pos)
-        sel_start, sel_to = self.GetSelection()
-        selection = sel_start != sel_to
-        if not selection:
-            # disallow position at end of field:
-            if pos in _listDelimPos + [_dictCellRange[self.__lastCell][-1]]:
-                self.SetInsertionPoint(pos-1)
-            self.__posSelectTo = self.__cellEnd
-        else:
-            # only allow selection to end of current cell:
-            if sel_to < pos:   self.__posSelectTo = self.__cellStart
-            elif sel_to > pos: self.__posSelectTo = self.__cellEnd
-
-        _dbg('new pos =', self.__posCurrent, 'select to ', self.__posSelectTo)
-        self.SetSelection(self.__posCurrent, self.__posSelectTo)
-        if event: event.Skip()
-        _dbg(indent=0)
+        dbg('wxTimeCtrl::OnChar', indent=1)
+        keycode = event.GetKeyCode()
+        dbg('keycode:', keycode)
+        if keycode == ord(':'):
+            dbg('colon seen! removing shift attribute')
+            event.m_shiftDown = False
+        wxMaskedTextCtrl._OnChar(self, event )              ## handle each keypress
+        dbg(indent=0)
 
 
-    def __OnDoubleClick(self, event):
+    def __OnSetToNow(self, event):
         """
-        Event handler for left double-click mouse events; this handler
-        causes the cell at the double-click point to be selected.
+        This is the key handler for '!' and 'c'; this allows the user to
+        quickly set the value of the control to the current time.
         """
-        _dbg('wxTimeCtrl::OnDoubleClick', indent=1)
-        pos = self.GetInsertionPoint()
-        self.__SetCurrentCell(pos)
-        if self.__posCurrent != self.__cellStart:
-            self.SetInsertionPoint(self.__cellStart)
-        self.SetSelection(self.__cellStart, self.__cellEnd)
-        _dbg(indent=0)
+        self.SetValue(wxDateTime_Now().FormatTime())
+        keep_processing = False
+        return keep_processing
 
 
-    def __OnChar(self, event):
+    def __LimitSelection(self, event):
         """
-        This private event handler is the main control point for the wxTimeCtrl.
-        It governs whether input characters are accepted and if so, handles them
-        so as to provide appropriate cursor and selection behavior for the control.
+        Event handler for motion events; this handler
+        changes limits the selection to the new cell boundaries.
         """
-        _dbg('wxTimeCtrl::OnChar', indent=1)
-
-        # NOTE: Returning without calling event.Skip() eats the event before it
-        # gets to the text control...
-
-        key = event.GetKeyCode()
-        text = self.GetValue()
+        dbg('wxTimeCtrl::LimitSelection', indent=1)
         pos = self.GetInsertionPoint()
-        if pos != self.__posCurrent:
-            _dbg("insertion point has moved; resetting current cell")
-            self.__SetCurrentCell(pos)
-            self.SetSelection(self.__posCurrent, self.__posCurrent)
-
+        self.__posCurrent = pos
         sel_start, sel_to = self.GetSelection()
         selection = sel_start != sel_to
-        _dbg('sel_start=', sel_start, 'sel_to =', sel_to)
-        if not selection:
-            self.__bSelection = False                       # predict unselection of entire region
-
-        _dbg('keycode = ', key)
-        _dbg('pos = ', pos)
-
-        # don't allow deletion, cut or paste:
-        if key in (WXK_DELETE, WXK_BACK, WXK_CTRL_X, WXK_CTRL_V):
-            pass
-
-        elif key == WXK_TAB:                                # skip to next field if applicable:
-            _dbg('key == WXK_TAB')
-            dict_range = _dictCellRange                     # (for brevity)
-            dict_start = _dictStartCellPos
-            if event.ShiftDown():                           # tabbing backwords
-
-                ###(NOTE: doesn't work; wxTE_PROCESS_TAB doesn't appear to send us this event!)
-
-                _dbg('event.ShiftDown()')
-                if pos in dict_range['hour']:               # already in 1st field
-                    self.__SetCurrentCell(dict_start['hour']) # ensure we have our member vars set
-                    event.Skip()                            #then do normal tab processing for the form
-                    _dbg(indent=0)
-                    return
-
-                elif pos in dict_range['minute']:           # skip to hours field
-                    new_pos = dict_start['hour']
-                elif pos in dict_range['second']:           # skip to minutes field
-                    new_pos = dict_start['minute']
-                elif pos in dict_range['am_pm']:            # skip to seconds field
-                    new_pos = dict_start['second']
-
-                self.SetInsertionPoint(new_pos)             # force insert point to jump to next cell (swallowing TAB)
-                self.__OnChangePos(None)                    # update selection accordingly
-
-            else:
-                # Tabbing forwards through control...
-
-                if pos in dict_range[self.__lastCell]:      # already in last field; ensure we have our members set
-                    self.__SetCurrentCell(dict_start[self.__lastCell])
-                    _dbg('tab in last cell')
-                    event.Skip()                            # then do normal tab processing for the form
-                    _dbg(indent=0)
-                    return
-
-                if pos in dict_range['second']:             # skip to AM/PM field (if not last cell)
-                    new_pos = dict_start['am_pm']
-                elif pos in dict_range['minute']:           # skip to seconds field
-                    new_pos = dict_start['second']
-                elif pos in dict_range['hour']:             # skip to minutes field
-                    new_pos = dict_start['minute']
-
-                self.SetInsertionPoint(new_pos)             # force insert point to jump to next cell (swallowing TAB)
-                self.__OnChangePos(None)                    # update selection accordingly
-
-        elif key == WXK_LEFT:                               # move left; set insertion point as appropriate:
-            _dbg('key == WXK_LEFT')
-            if event.ShiftDown():                           # selecting a range...
-                _dbg('event.ShiftDown()')
-                if pos in _listStartCellPos:                # can't select pass delimiters
-                    if( sel_to == pos+2 and sel_to != _dictCellRange['am_pm'][-1]):
-                        self.SetSelection(pos, pos+1)       # allow deselection of 2nd char in cell if not am/pm
-                    # else ignore event
-
-                elif pos in _listEndCellPos:                # can't use normal selection, because position ends up
-                                                            # at delimeter
-                    _dbg('set selection from', pos-1, 'to', self.__posCurrent)
-                    self.SetInsertionPoint(pos-1)           # this selects the previous position
-                    self.SetSelection(self.__posCurrent, pos)
-                else:
-                    self.SetInsertionPoint(sel_to - 1)      # this unselects the last digit
-                    self.SetSelection(self.__posCurrent, pos)
-
-            else:   # ... not selecting
-                if pos == 0:                                # can't position before position 0
-                    pass
-                elif pos in _listStartCellPos:              # skip (left) OVER the colon/space:
-                    self.SetInsertionPoint(pos-2)
-                    self.__OnChangePos(None)                # set the selection appropriately
-                else:
-                    self.SetInsertionPoint(pos-1)           # reposition the cursor and
-                    self.__OnChangePos(None)                # set the selection appropriately
-
-
-        elif key == WXK_RIGHT:                              # move right
-            _dbg('key == WXK_RIGHT')
-            if event.ShiftDown():
-                _dbg('event.ShiftDown()')
-                if sel_to in _listDelimPos:                 # can't select pass delimiters
-                    pass
-                else:
-                    self.SetSelection(self.__posCurrent, sel_to+1)
-            else:
-                if( (self.__lastCell == 'second'
-                     and pos == _dictStartCellPos['second']+1)
-                    or (self.__lastCell == 'am_pm'
-                        and pos == _dictStartCellPos['am_pm']) ):
-                    pass                                    # don't allow cursor past last cell
-                elif pos in _listEndCellPos:                # skip (right) OVER the colon/space:
-                    self.SetInsertionPoint(pos+2)
-                    self.__OnChangePos(None)                # set the selection appropriately
-                else:
-                    self.SetInsertionPoint(pos+1)           # reposition the cursor and
-                    self.__OnChangePos(None)                # set the selection appropriately
-
-        elif key in (WXK_UP, WXK_DOWN):
-            _dbg('key in (WXK_UP, WXK_DOWN)')
-            self.__IncrementValue(key, pos)                   # increment/decrement as appropriate
-
-
-        elif key < WXK_SPACE or key == WXK_DELETE or key > 255:
-            event.Skip()                                    # non alphanumeric; process normally (Right thing to do?)
-
-        elif chr(key) in ['!', 'c', 'C']:                   # Special character; sets the value of the control to "now"
-            _dbg("key == '!'; setting time to 'now'")
-            now = wxDateTime_Now()
-            self.SetWxDateTime(now)
-
-        elif chr(key) in string.digits:                     # let ChangeValue validate and update current position
-            self.__ChangeValue(chr(key), pos)               # handle event (and swallow it)
-
-        elif chr(key) in ('a', 'A', 'p', 'P', ' '):         # let ChangeValue validate and update current position
-            self.__ChangeValue(chr(key), pos)               # handle event (and swallow it)
+        if selection:
+            # only allow selection to end of current cell:
+            start, end = self._FindField(sel_start)._extent
+            if sel_to < pos:   sel_to = start
+            elif sel_to > pos: sel_to = end
 
-        else:                                               # disallowed char; swallow event
-            pass
-        _dbg(indent=0)
+        dbg('new pos =', self.__posCurrent, 'select to ', sel_to)
+        self.SetInsertionPoint(self.__posCurrent)
+        self.SetSelection(self.__posCurrent, sel_to)
+        if event: event.Skip()
+        dbg(indent=0)
 
 
     def __IncrementValue(self, key, pos):
-        _dbg('wxTimeCtrl::IncrementValue', key, pos, indent=1)
+        dbg('wxTimeCtrl::IncrementValue', key, pos, indent=1)
         text = self.GetValue()
+        field = self._FindField(pos)
+        dbg('field: ', field._index)
+        start, end = field._extent
+        slice = text[start:end]
+        if key == WXK_UP: increment = 1
+        else:             increment = -1
+
+        if slice in ('A', 'P'):
+            if slice == 'A': newslice = 'P'
+            elif slice == 'P': newslice = 'A'
+            newvalue = text[:start] + newslice + text[end:]
+
+        elif field._index == 0:
+            # adjusting this field is trickier, as its value can affect the
+            # am/pm setting.  So, we use wxDateTime to generate a new value for us:
+            # (Use a fixed date not subject to DST variations:)
+            converter = wxDateTimeFromDMY(1, 0, 1970)
+            dbg('text: "%s"' % text)
+            converter.ParseTime(text.strip())
+            currenthour = converter.GetHour()
+            dbg('current hour:', currenthour)
+            newhour = (currenthour + increment) % 24
+            dbg('newhour:', newhour)
+            converter.SetHour(newhour)
+            dbg('converter.GetHour():', converter.GetHour())
+            newvalue = converter     # take advantage of auto-conversion for am/pm in .SetValue()
+
+        else:   # minute or second field; handled the same way:
+            newslice = "%02d" % ((int(slice) + increment) % 60)
+            newvalue = text[:start] + newslice + text[end:]
 
-        sel_start, sel_to = self.GetSelection()
-        selection = sel_start != sel_to
-        cell_selected = selection and sel_to -1 != pos
+        try:
+            self.SetValue(newvalue)
 
-        dict_start = _dictStartCellPos                      # (for brevity)
+        except ValueError:  # must not be in bounds:
+            if not wxValidator_IsSilent():
+                wxBell()
+        dbg(indent=0)
 
-        # Determine whether we should change the entire cell or just a portion of it:
-        if( cell_selected
-            or (pos in _listStartCellPos and not selection)
-            or (text[pos] == ' ' and text[pos+1] not in ('1', '2'))
-            or (text[pos] == '9' and text[pos-1] == ' ' and key == WXK_UP)
-            or (text[pos] == '1' and text[pos-1] == ' ' and key == WXK_DOWN)
-            or pos >= dict_start['am_pm']):
 
-            self.__IncrementCell(key, pos)
-        else:
-            if key == WXK_UP:   inc = 1
-            else:               inc = -1
-
-            if pos == dict_start['hour'] and not self.__fmt24hr:
-                if text[pos] == ' ': digit = '1'                    # allow ' ' or 1 for 1st digit in 12hr format
-                else:                digit = ' '
-            else:
-                if pos == dict_start['hour']:
-                    if int(text[pos + 1]) >3:   mod = 2             # allow for 20-23
-                    else:                       mod = 3             # allow 00-19
-                elif pos == dict_start['hour'] + 1:
-                    if self.__fmt24hr:
-                        if text[pos - 1] == '2': mod = 4            # allow hours 20-23
-                        else:                    mod = 10           # allow hours 00-19
-                    else:
-                        if text[pos - 1] == '1': mod = 3            # allow hours 10-12
-                        else:                    mod = 10           # allow 0-9
-
-                elif pos in (dict_start['minute'],
-                             dict_start['second']): mod = 6         # allow minutes/seconds 00-59
-                else:                               mod = 10
-
-                digit = '%d' % ((int(text[pos]) + inc) % mod)
-
-            _dbg("new digit = \'%s\'" % digit)
-            self.__ChangeValue(digit, pos)
-        _dbg(indent=0)
-
-
-    def __IncrementCell(self, key, pos):
-        _dbg('wxTimeCtrl::IncrementCell', key, pos, indent=1)
-        self.__SetCurrentCell(pos)                                  # determine current cell
-        hour, minute, second = self.__hour, self.__minute, self.__second
-        text = self.GetValue()
-        dict_start = _dictStartCellPos                              # (for brevity)
-        if key == WXK_UP:   inc = 1
-        else:               inc = -1
-
-        if self.__cellStart == dict_start['am_pm']:
-            am = text[dict_start['am_pm']:] == 'AM'
-            if am: hour = hour + 12
-            else:  hour = hour - 12
+    def _toGUI( self, wxdt ):
+        """
+        This function takes a wxdt as an unambiguous representation of a time, and
+        converts it to a string appropriate for the format of the control.
+        """
+        if self.__fmt24hr:
+            if self.__display_seconds: strval = wxdt.Format('%H:%M:%S')
+            else:                      strval = wxdt.Format('%H:%M')
         else:
-            if self.__cellStart == dict_start['hour']:
-                hour = (hour + inc) % 24
-            elif self.__cellStart == dict_start['minute']:
-                minute = (minute + inc) % 60
-            elif self.__cellStart == dict_start['second']:
-                second = (second + inc) % 60
-
-        newvalue = '%.2d:%.2d:%.2d' % (hour, minute, second)
+            if self.__display_seconds: strval = wxdt.Format('%I:%M:%S %p')
+            else:                      strval = wxdt.Format('%I:%M %p')
 
-        self.SetValue(newvalue)
-        self.SetInsertionPoint(self.__cellStart)
-        self.SetSelection(self.__cellStart, self.__cellEnd)
-        _dbg(indent=0)
+        return strval
 
 
-    def __ChangeValue(self, char, pos):
-        _dbg('wxTimeCtrl::ChangeValue', "\'" + char + "\'", pos, indent=1)
-        text = self.GetValue()
-
-        self.__SetCurrentCell(pos)
-        sel_start, sel_to = self.GetSelection()
-        self.__posSelectTo = sel_to
-        self.__bSelection = selection = sel_start != sel_to
-        cell_selected = selection and sel_to -1 != pos
-        _dbg('cell_selected =', cell_selected, indent=0)
-
-        dict_start = _dictStartCellPos                          # (for brevity)
-
-        if pos in _listDelimPos: return                         # don't allow change of punctuation
-
-        elif( 0 < pos < dict_start['am_pm'] and char not in string.digits):
-            return                                              # AM/PM not allowed in this position
-
-        # See if we're changing the hour cell, and validate/update appropriately:
-        #
-        hour_start = dict_start['hour']                         # (ie. 0)
-
-        if pos == hour_start:                                   # if at 1st position,
-            if self.__fmt24hr:                                  # and using 24 hour format
-                if cell_selected:                               # replace cell contents with hour represented by digit
-                    newtext = '%.2d' % int(char) + text[hour_start+2:]
-                elif char not in ('0', '1', '2'):               # return if digit not 0,1, or 2
-                    return
-                else:                                           # relace current position
-                    newtext = char + text[pos+1:]
-            else:                                               # (12 hour format)
-                if cell_selected:
-                    if char == ' ': return                      # can't erase entire cell
-                    elif char == '0':                           # treat 0 as '12'
-                        newtext = '12' + text[hour_start+2:]
-                    else:                                       # replace cell contents with hour represented by digit
-                        newtext = '%2d' % int(char) + text[hour_start+2:]
-                else:
-                    if char not in ('1', ' '):                  # can only type a 1 or space
-                        return
-                    if text[pos+1] not in ('0', '1', '2'):      # and then, only if other column is 0,1, or 2
-                        return
-                    if char == ' ' and text[pos+1] == '0':      # and char isn't space if 2nd column is 0
-                        return
-                    else:                                       # ok; replace current position
-                        newtext = char + text[pos+1:]
-                if char == ' ': self.SetInsertionPoint(pos+1)   # move insert point to legal position
-
-        elif pos == hour_start+1:                               # if editing 2nd position of hour
-            if( not self.__fmt24hr                              # and using 12 hour format
-                and text[hour_start] == '1'                     # if 1st char is 1,
-                and char not in ('0', '1', '2')):               # disallow anything bug 0,1, or 2
-                return
-            newtext = text[hour_start] + char + text[hour_start+2:]  # else any digit ok
-
-        # Do the same sort of validation for minute and second cells
-        elif pos in (dict_start['minute'], dict_start['second']):
-            if cell_selected:                                   # if cell selected, replace value
-                newtext = text[:pos] + '%.2d' % int(char) + text[pos+2:]
-            elif int(char) > 5: return                          # else disallow > 59 for minute and second fields
-            else:
-                newtext = text[:pos] + char + text[pos+1:]      # else ok
-
-        elif pos in (dict_start['minute']+1, dict_start['second']+1):
-            newtext = text[:pos] + char + text[pos+1:]          # all digits ok for 2nd digit of minute/second
-
-        # Process AM/PM cell
-        elif pos == dict_start['am_pm']:
-            char = char.upper()
-            if char not in ('A','P'): return                    # disallow all but A or P as 1st char of column
-            newtext = text[:pos] + char + text[pos+1:]
-        else: return    # not a valid position
-
-        _dbg(indent=1)
-        # update member position vars and set selection to character changed
-        if not cell_selected:
-            _dbg('reselecting current digit')
-            self.__posSelectTo = pos+1
-
-        _dbg('newtext=', newtext)
-        self.SetValue(newtext)
-        self.SetInsertionPoint(self.__posCurrent)
-        self.SetSelection(self.__posCurrent, self.__posSelectTo)
-        _dbg(indent=0)
-
-
-    def Cut(self):
+    def __validateValue( self, value ):
         """
-        Override wxTextCtrl::Cut() method, as this operation should not
-        be allowed for wxTimeCtrls.
+        This function converts the value to a wxDateTime if not already one,
+        does bounds checking and raises ValueError if argument is
+        not a valid value for the control as currently specified.
+        It is used by both the SetValue() and the IsValid() methods.
         """
-        return
-
+        dbg('wxTimeCtrl::__validateValue(%s)' % repr(value), indent=1)
+        if not value:
+            dbg(indent=0)
+            raise ValueError('%s not a valid time value' % repr(value))
 
-    def Paste(self):
-        """
-        Override wxTextCtrl::Paste() method, as this operation should not
-        be allowed for wxTimeCtrls.
-        """
-        return
+        valid = True    # assume true
+        try:
+            value = self.GetWxDateTime(value)   # regularize form; can generate ValueError if problem doing so
+        except:
+            dbg('exception occurred', indent=0)
+            raise
 
+        if self.IsLimited() and not self.IsInBounds(value):
+            dbg(indent=0)
+            raise ValueError (
+                'value %s is not within the bounds of the control' % str(value) )
+        dbg(indent=0)
+        return value
 
 #----------------------------------------------------------------------------
 # Test jig for wxTimeCtrl:
@@ -814,12 +1134,12 @@ if __name__ == '__main__':
             EVT_TIMEUPDATE(self, self.tc.GetId(), self.OnTimeChange)
 
         def OnTimeChange(self, event):
-            _dbg('OnTimeChange: value = ', event.GetValue())
+            dbg('OnTimeChange: value = ', event.GetValue())
             wxdt = self.tc.GetWxDateTime()
-            _dbg('wxdt =', wxdt.GetHour(), wxdt.GetMinute(), wxdt.GetSecond())
+            dbg('wxdt =', wxdt.GetHour(), wxdt.GetMinute(), wxdt.GetSecond())
             if self.test_mx:
                 mxdt = self.tc.GetMxDateTime()
-                _dbg('mxdt =', mxdt.hour, mxdt.minute, mxdt.second)
+                dbg('mxdt =', mxdt.hour, mxdt.minute, mxdt.second)
 
 
     class MyApp(wxApp):
diff --git a/wxPython/wxPython/py/CHANGES.txt b/wxPython/wxPython/py/CHANGES.txt
new file mode 100644
index 0000000000..572f2a9529
--- /dev/null
+++ b/wxPython/wxPython/py/CHANGES.txt
@@ -0,0 +1,594 @@
+
+0.9.2 (5/3/2003 to //2003)
+-----------------------------
+
+Changed to the new prefix-less "wx" package::
+
+    import wx
+
+instead of::
+
+    from wxPython import wx
+
+Fixed typo in ``PyWrap.py``::
+
+    if __name__ == '__main__':
+        main(sys.argv)
+
+should have been::
+
+    if __name__ == '__main__':
+        main()
+
+Added pretty-print Display tab to Crust, based on suggestion from
+Jason Whitlark.
+
+Improved ``Can*`` checks in ``EditWindow``, since STC is too lenient,
+particularly when it is set to read-only but returns True for
+CanPaste() (seems like an STC bug to me)::
+
+    def CanCopy(self):
+        """Return True if text is selected and can be copied."""
+        return self.GetSelectionStart() != self.GetSelectionEnd()
+
+    def CanCut(self):
+        """Return True if text is selected and can be cut."""
+        return self.CanCopy() and self.CanEdit()
+
+    def CanEdit(self):
+        """Return True if editing should succeed."""
+        return not self.GetReadOnly()
+
+    def CanPaste(self):
+        """Return True if pasting should succeed."""
+        return stc.StyledTextCtrl.CanPaste(self) and self.CanEdit()
+
+
+0.9.1 (3/21/2003 to 5/2/2003)
+-----------------------------
+
+PyCrust is dead!  Long live Py!
+
+* Renamed ``PyCrust`` package to ``py``.
+* Moved code to wxPython's CVS repository.
+
+Fixed bug in ``introspect.py`` on introspecting objects occurring
+immediately after a secondary prompt, like this::
+
+    >>> l = [1, 2, 3]
+    >>> for n in range(3):
+    ...     l.  <-- failed to popup autocomplete list
+
+Added documentation files:
+
+* PyManual.txt
+* wxPythonManual.txt
+* wxPythonPackage.txt
+* wxPythonExamples.txt
+
+Added PyAlaMode and PyAlaCarte code editors.
+
+Major refactoring to support ``editor`` and ``shell`` from the same
+base.
+
+Renamed program files:
+
+* ``PyCrustApp.py`` to ``PyCrust.py``
+* ``PyFillingApp.py`` to ``PyFilling.py``
+* ``PyShellApp.py`` to ``PyShell.py``
+* ``wrap.py`` to ``PyWrap.py``
+
+Removed disabling of autocomplete for lists of 2000 items or more.
+The current implementation of wxSTC can now handle lists this big.
+
+Improved handling of ``sys.path`` to mimic the standard Python shell.
+
+
+0.9 (2/27/2003 to 3/20/2003)
+----------------------------
+
+Added fontIncrease, fontDecrease, fontDefault signals, receivers and
+keybindings::
+
+    Ctrl+]            Increase font size.
+    Ctrl+[            Decrease font size.
+    Ctrl+=            Default font size.
+
+Continued enhancement of the decorator capability to provide better
+documentation and docstrings for wxPython classes and functions.
+
+Introduced new tabbed interface:
+
+* Namespace
+* Calltip
+* Session
+* Dispatcher
+* wxPython Docs
+* wxSTC Docs
+
+``Filling.tree`` now expands tuples as well as lists.  (It should have
+done this all along, I just never noticed this omission before.)
+
+Added this True/False test to all modules::
+
+    try:
+        True
+    except NameError:
+        True = 1==1
+        False = 1==0
+
+Added ``wxd`` directory with decoration classes.
+
+
+0.8.2 (1/5/2003 to 2/26/2003)
+-----------------------------
+
+Wrapped ``sys.ps1``, ``sys.ps2``, and ``sys.ps3`` in ``str()``.
+(Thanks, Kieran Holland.)
+
+Fixed minor things found by PyChecker.
+
+Changed locals to use ``__main__.__dict__`` and added code to clean up
+the namespace, making it as close to the regular Python environment as
+possible.  This solves the problem of pickling and unpickling
+instances of classes defined in the shell.
+
+Made ``shell.PasteAndRun()`` a little more forgiving when it finds a
+ps2 prompt line with no trailing space, such when you copy code from a
+web page.
+
+Improved autocomplete behavior by adding these to shell::
+
+    self.AutoCompSetAutoHide(False)
+    self.AutoCompStops(' .,;:([)]}\'"\\<>%^&+-=*/|`')
+
+Added ``decor`` directory, ``decorator.py``, ``stcDecor.py``, and
+``stcConstants.py``.  These all serve the purpose of adding docstrings
+to existing wxPython classes, in particular the ``wxStyledTextCtrl``.
+
+Added ``wrap.py``, a command line utility for running a wxPython app
+with additional runtime-tools loaded, such as PyCrust (the only tool
+at this point).
+
+Flushed the clipboard Cut/Copy operations so that selections will
+exist in the clipboard even after PyCrust has been closed.
+
+Improved the suppression of docstrings for simple data types appearing
+in the namespace viewer.
+
+Better handling of autocompletion with numeric types; no
+autocompletion when typing a dot after an integer.  If the
+autocompletion is desired, type a space before the dot::
+
+    func = 3 .
+
+More Filling!!! The namespace tree is now dynamically updated.
+
+
+0.8.1 (12/20/2002 to 12/25/2002)
+--------------------------------
+
+Improved keyboard handling with Autocomplete active.  You can now use
+Enter as well as Tab to select an item from the list.
+
+Disabled autocomplete for lists of 2000 items or more.  The current
+implementation of wxSTC can't handle lists this big.
+
+Changed ``filling`` to always display docstrings for objects.  This is
+useful for objects whose docstrings have been decorated, rather than
+coming directly from the source code.  (Hmmm.  Sounds like someone is
+doing some decorating.  I wonder where that would be helpful? <wink>)
+
+Fixed handling of icon.  Added ``images.py`` file.
+
+
+0.8 (10/29/2002 to 12/16/2002)
+------------------------------
+
+Added "help" to startup banner info.
+
+Made all ``wx`` and ``stc`` imports explicit.  No more ``import *``.
+
+Replaced use of the ``wx`` module's ``true`` and ``false`` with
+Python's ``True`` and ``False``.
+
+Changed ``introspect.getRoot()`` to use ``tokenize`` module.  This
+does a slightly better job than the previous parsing routine and the
+code is clearer.
+
+Improved handling of whitespace and empty types during introspection.
+
+Fixed cut/copy clipboard problem under Linux.  (Robin Dunn rocks!!!)
+
+Added shell.about() which works like this::
+
+    >>> shell.about()
+    PyCrust Version: 0.8
+    Shell Revision: 1.80
+    Interpreter Revision: 1.15
+    Python Version: 2.2.2
+    wxPython Version: 2.3.3.1
+    Platform: linux2
+
+Added copy plus and paste plus to shell menu.
+
+Moved shell menu from ``shell.py`` to ``shellmenu.py``.
+
+Added ``sys.stdin.readlines()`` support.
+
+Added ``time.sleep()`` in ``readline()`` and ``OnIdle()`` event
+handler to free up the CPU.
+
+
+0.7.2 (2/22/2002 to 8/27/2002)
+------------------------------
+
+Tweaked ``getAttributeNames()`` to pick up a few more attributes::
+
+    '__bases__', '__class__', '__dict__', '__name__', 'func_closure',
+    'func_code', 'func_defaults', 'func_dict', 'func_doc',
+    'func_globals', 'func_name'
+
+Added a tests directory and unit tests.
+
+Improved support for empty types in the shell: ``[]``, ``()`` and
+``{}`` as far as when call tips and autocompletion are available.
+
+Added support for the other triple string - ``''''''``.
+
+Refactored ``introspect.py`` to improve testability.
+
+Improved call tips for unbound methods by leaving the "self"
+parameter, since unbound methods require an instance be passed.
+
+Fixed call tip bug where a tip was displayed when a "(" was typed
+after an object that wasn't callable.
+
+Fixed ``getAllAttributeNames`` when ``str(object)`` fails.
+
+Added brace highlighting.  (Thank you, Kevin Altis.)
+
+Fixed problem displaying unicode objects in ``PyFilling``.
+
+Changed how ``filling.py`` checks for expandable objects.  Lists are
+now expandable objects.
+
+Made the key handling more robust when there is an active text
+selection that includes text prior to the last primary prompt.  Thanks
+to Raul Cota for pointing this out.
+
+Fixed wxSTC problem with brace highlighting and non-us keyboards.
+(Thank you for the patch, Jean-Michel Fauth.)
+
+Added ``busy = wxBusyCursor()`` to key points in ``shell`` and
+``filling``.
+
+Added ``OnCloseWindow`` handler to ``ShellFrame`` and ``CrustFrame``.
+
+Default to ``SetWrapMode(1)`` for shell and namespace viewer.
+
+Added ``shell.wrap()`` and ``shell.zoom()``.
+
+Added autoCompleteKeys hooks for Raul Cota.
+
+Cleaned up various little key handling bugs.
+
+Changed input methods to get values from shell, rather than dialog
+boxes.  Renamed ``readIn`` to ``readline`` and ``readRaw`` to
+``raw_input``.
+
+
+0.7.1 (12/12/2001 to 2/21/2002)
+-------------------------------
+
+Fixed ``OnChar()`` issues effecting European keyboards, as reported by
+Jean-Michel Fauth.
+
+Fixed ``introspect.py`` issue with xmlrpc objects reported by Kevin
+Altis.
+
+Fixed some introspect/PyFilling issues with regard to Python 2.2.
+
+Fixed font background color as reported by Keith J. Farmer.  (Thanks)
+
+Fixed problem with call tips and autocompletion inside multiline
+commands as report by Kevin Altis.
+
+Improved ``OnKeyDown`` handling of cut/copy/paste operations based on
+feedback from Syver Enstad.  (Thanks)
+
+Added a ``shell.help()`` method to display some help info.
+
+Changed sort of items in the namespace viewer to case insensitive.
+
+Changed ``attributes.sort(lambda x, y: cmp(x.upper(), y.upper()))`` in
+advance of an upcoming fix to an autocompletion matching bug in wxSTC.
+
+Improved support for ZODB by allowing namespace drilldown into BTrees.
+
+Added ``shell.PasteAndRun()`` to support pasting multiple commands into
+the shell from the clipboard.  Ctrl+Shift+V or v.
+
+Enter now always processes a command (or copies down a previous one.)
+To insert a line break, press Ctrl+Enter.
+
+Escape key clears the current, unexecuted command.
+
+History retrieval changed to replace current command.  Added new keys
+to insert from history - Shift+Up and Shift+Down.
+
+Better call tips on objects with ``__call__`` methods.
+
+Improved call tip positioning calculation.
+
+
+0.7 (10/15/2001 to 12/11/2001)
+------------------------------
+
+Changed how command history retrieval functions work.  Added Alt-P,
+Alt-N as keybindings for Retrieve-Previous, Retrieve-Next.
+
+Added full support for multi-line commands, similar to IDLE.
+
+Changed ``introspect.getAttributeNames()`` to do a case insensitive
+sort.
+
+Changed Cut/Copy/Paste to deal with prompts intelligently.  Cut and
+Copy remove all prompts.  Paste can handle prompted or not-prompted
+text.
+
+Added ``CopyWithPrompts()`` method attached to Ctrl-Shift-C for those
+times when you really do want all the prompts left intact.
+
+Improved handling of the shell's read-only zone.
+
+Changed ``CrustFrame.__init__`` parameter spec to include all
+parameters allowed by a ``wxFrame``.
+
+Changed ``FillingText`` to be read-only.
+
+Renamed ``PyCrust.py`` to ``PyCrustApp.py`` to eliminate
+package/module name conflicts that kept you from doing ``from PyCrust
+import shell`` inside files located in the ``PyCrust`` directory.
+
+Renamed ``PyFilling.py`` to ``PyFillingApp.py`` and ``PyShell.py`` to
+``PyShellApp.py`` to maintain consistency.
+
+Removed the ``__date__`` property from all modules.
+
+Fixed bug in ``introspect.getCallTip()``, reported by Kevin Altis.
+
+
+0.6.1 (9/19/2001 to 10/12/2001)
+-------------------------------
+
+Changed ``Shell.run()`` to always position to the end of existing
+text, as suggested by Raul Cota.
+
+Changed ``introspect.getAllAttributeNames()`` to break circular
+references in ``object.__class__``, which occurs in Zope/ZODB
+extension classes.
+
+Changed ``filling.FillingTree.getChildren()`` to introspect extension
+classes.
+
+Fixed minor bugs in ``introspect.getCallTip()`` that were interfering
+with call tips for Zope/ZODB extension class methods.
+
+In preparation for wxPython 2.3.2, added code to fix a font sizing
+problem.  Versions of wxPython prior to 2.3.2 had a sizing bug on Win
+platform where the font was 2 points larger than what was specified.
+
+Added a hack to ``introspect.getAllAttributeNames()`` to "wake up"
+ZODB objects that are asleep - in a "ghost" state.  Otherwise it
+returns incomplete info.
+
+
+0.6 (8/21/2001 to 9/12/2001)
+----------------------------
+
+Added ``PyFilling.py`` and ``filling.py``.
+
+``PyShell.py`` and ``PyFilling.py`` can now be run standalone, as well
+as ``PyCrust.py``.
+
+Added ``crust.py`` and moved some code from ``PyCrust.py`` to it.
+
+Added command history retrieval features submitted by Richie Hindle.
+
+Changed ``shell.write()`` to replace line endings with OS-specific
+endings.  Changed ``shell.py`` and ``interpreter.py`` to use
+``os.linesep`` in strings having hardcoded line endings.
+
+Added ``shell.redirectStdin()``, ``shell.redirectStdout()`` and
+``shell.redirectStderr()`` to allow the surrounding app to toggle
+requests that the specified ``sys.std*`` be redirected to the shell.
+These can also be run from within the shell itself, of course.
+
+The shell now adds the current working directory "." to the search
+path::
+
+    sys.path.insert(0, os.curdir)
+
+Added support for distutils installations.
+
+
+0.5.4 (8/17/2001 to 8/20/2001)
+------------------------------
+
+Changed default font size under Linux to::
+
+    'size'   : 12,
+    'lnsize' : 10,
+
+Changed ``Shell`` to expect a parameter referencing an Interpreter
+class, rather than an intepreter instance, to facilitate subclassing
+of Interpreter, which effectively broke when the Editor class was
+eliminated.
+
+Fixed ``PyCrustAlaCarte.py``, which had been broken by previous
+changes.
+
+Created ``InterpreterAlaCarte`` class as an example for use in the
+demo.
+
+Split ``PyCrust.py`` into ``PyCrust.py`` and ``PyShell.py`` in
+anticipation of ``PyFilling.py``.
+
+
+0.5.3 (8/16/2001)
+-----------------
+
+Added patch to ``PyCrust.py`` to fix wxPython bug::
+
+    wxID_SELECTALL = NewId() # This *should* be defined by wxPython.
+
+
+0.5.2 (8/14/2001 to 8/15/2001)
+------------------------------
+
+Shortened module names by dropping "PyCrust" as a prefix.
+
+Changed ``version`` to ``VERSION`` in ``version`` module.
+
+Added Options menu to PyCrust application.
+
+Eliminated the Editor class (and editor module) by merging with Shell.
+This means that Shell "is a" wxStyledTextCtrl rather than "has a".
+There just wasn't enough non-gui code to justify the separation.
+Plus, Shell will be much easier for gui toolkits/designers to deal
+with now.
+
+
+0.5.1 (8/10/2001 to 8/14/2001)
+------------------------------
+
+Added ``introspect`` module.
+
+Moved some functionality from ``PyCrustInterp`` to ``introspect``.
+
+Changed ``introspect.getRoot()`` to no longer remove whitespace from
+the command.  This was a remnant of a previous approach that, when
+left as part of the current approach, turned out to be a really bad
+thing.
+
+Changed ``introspect.getRoot()`` to allow commands of ``''``, ``""``,
+``""""""``, ``[]``, ``()``, and ``{}`` to pass through.  This allows
+you to type them, followed by a dot, and get autocomplete options on
+them.
+
+Changed ``introspect.getRoot()`` to identify some situations where
+strings shouldn't be considered roots.  For example::
+
+    >>> import PyCrust  # To illustrate the potential problem.
+    >>> len('PyCrust.py')
+
+Typing the dot at the end of "PyCrust" in the second line above should
+NOT result in an autocompletion list because "PyCrust" is part of a
+string in this context, not a reference to the PyCrust module object.
+Similar reasoning applies to call tips.  For example::
+
+    >>> len('dir(')
+
+Typing the left paren at the end of "dir" should NOT result in a call
+tip.
+
+Both features now behave properly in the examples given.  However,
+there is still the case where whitespace precedes the potential root
+and that is NOT handled properly.  For example::
+
+    >>> len('this is a dir(')
+
+and::
+
+    >>> len('This is PyCrust.py')
+
+More code needs to be written to handle more complex situations.
+
+Added ``locals=None`` parameter to ``Shell.__init__()``.
+
+Added support for magic attribute retrieval.  Users can change this
+with::
+
+    >>> shell.editor.autoCompleteIncludeMagic = 0
+
+Added the ability to set filters on auto completion to exclude
+attributes prefixed with a single or double underscore.  Users can
+exclude one or the other or both with::
+
+    >>> shell.editor.autoCompleteExcludeSingle = 1
+    >>> shell.editor.autoCompleteExcludeDouble = 1
+
+
+0.5 (8/8/2001)
+--------------
+
+Mostly just a final version change before creating a release.
+
+
+0.4 (8/4/2001 to 8/7/2001)
+--------------------------
+
+Changed version/revision handling.
+
+Fixed bugs.
+
+
+0.3 (8/2/2001 to 8/3/2001)
+--------------------------
+
+Removed lots of cruft.
+
+Added lots of docstrings.
+
+Imported to CVS repository at SourceForge.
+
+Added call tips.
+
+
+0.2 (7/30/2001 to 8/2/2001)
+---------------------------
+
+Renamed several files.
+
+Added command autocompletion.
+
+Added menus to PyCrust.py: File, Edit and Help.
+
+Added sample applications: ``PyCrustAlaCarte.py``,
+``PyCrustAlaMode.py``, and ``PyCrustMinimus.py``.
+
+
+0.1 (7/1/2001 to 7/19/2001)
+---------------------------
+
+Added basic syntax coloring much like Boa.
+
+Added read-only logging much like IDLE.
+
+Can retrieve a previous command by putting the cursor back on that
+line and hitting enter.
+
+Stdin and raw_input operate properly so you can now do ``help()`` and
+``license()`` without hanging.
+
+Redefined "quit", "exit", and "close" to display a better-than-nothing
+response.
+
+Home key honors the prompt.
+
+Created SourceForge account, but nothing was posted.
+
+
+In the beginning, there was pie... (7/1/2001)
+---------------------------------------------
+
+Blame it all on IDLE, Boa and PythonWin.  I was using all three, got
+frustrated with their dissimilarities, and began to let everyone know
+how I felt.  At the same time, Scintilla looked like an interesting
+tool to build a shell around.  And while I didn't receive much in the
+way of positive feedback, let alone encouragement, I just couldn't let
+go of the idea of a Scintilla-based Python shell.  Then the PythonCard
+project got to the point where they were talking about including a
+shell in their development environment.  That was all the incentive I
+needed.  PyCrust had to happen...
diff --git a/wxPython/wxPython/lib/PyCrust/PyCrust.ico b/wxPython/wxPython/py/Py.ico
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/PyCrust.ico
rename to wxPython/wxPython/py/Py.ico
diff --git a/wxPython/wxPython/py/PyAlaCarte.py b/wxPython/wxPython/py/PyAlaCarte.py
new file mode 100755
index 0000000000..0f71bd447b
--- /dev/null
+++ b/wxPython/wxPython/py/PyAlaCarte.py
@@ -0,0 +1,43 @@
+"""PyAlaCarte is a simple programmer's editor."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import wx
+
+import os
+import sys
+
+import editor
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+class App(wx.App):
+    """PyAlaCarte standalone application."""
+
+    def __init__(self, filename=None):
+        self.filename = filename
+        wx.App.__init__(self, redirect=False)
+
+    def OnInit(self):
+        wx.InitAllImageHandlers()
+        self.frame = editor.EditorFrame(filename=self.filename)
+        self.frame.Show()
+        self.SetTopWindow(self.frame)
+        return True
+
+def main(filename=None):
+    if not filename and len(sys.argv) > 1:
+        filename = sys.argv[1]
+    if filename:
+        filename = os.path.realpath(filename)
+    app = App(filename)
+    app.MainLoop()
+
+if __name__ == '__main__':
+    main()
diff --git a/wxPython/wxPython/py/PyAlaMode.py b/wxPython/wxPython/py/PyAlaMode.py
new file mode 100755
index 0000000000..d33243a36a
--- /dev/null
+++ b/wxPython/wxPython/py/PyAlaMode.py
@@ -0,0 +1,43 @@
+"""PyAlaMode is a programmer's editor."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import wx
+
+import os
+import sys
+
+import editor
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+class App(wx.App):
+    """PyAlaMode standalone application."""
+
+    def __init__(self, filename=None):
+        self.filename = filename
+        wx.App.__init__(self, redirect=False)
+
+    def OnInit(self):
+        wx.InitAllImageHandlers()
+        self.frame = editor.EditorNotebookFrame(filename=self.filename)
+        self.frame.Show()
+        self.SetTopWindow(self.frame)
+        return True
+
+def main(filename=None):
+    if not filename and len(sys.argv) > 1:
+        filename = sys.argv[1]
+    if filename:
+        filename = os.path.realpath(filename)
+    app = App(filename)
+    app.MainLoop()
+
+if __name__ == '__main__':
+    main()
diff --git a/wxPython/wxPython/py/PyAlaModeTest.py b/wxPython/wxPython/py/PyAlaModeTest.py
new file mode 100755
index 0000000000..57b52e4524
--- /dev/null
+++ b/wxPython/wxPython/py/PyAlaModeTest.py
@@ -0,0 +1,42 @@
+"""PyAlaModeTest is a programmer's editor."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import wx
+
+import os
+import sys
+
+import editor
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+class App(wx.App):
+    """PyAlaModeTest standalone application."""
+
+    def __init__(self, filename=None):
+        self.filename = filename
+        wx.App.__init__(self, redirect=False)
+
+    def OnInit(self):
+        wx.InitAllImageHandlers()
+        self.frame = editor.EditorShellNotebookFrame(filename=self.filename)
+        self.frame.Show()
+        self.SetTopWindow(self.frame)
+        return True
+
+def main(filename=None):
+    app = App(filename)
+    app.MainLoop()
+
+if __name__ == '__main__':
+    filename = None
+    if len(sys.argv) > 1:
+        filename = os.path.realpath(sys.argv[1])
+    main(filename)
diff --git a/wxPython/wxPython/py/PyCrust.ico b/wxPython/wxPython/py/PyCrust.ico
new file mode 100644
index 0000000000000000000000000000000000000000..eae6180e103f0c480023dabb654fa3cfb1202fe7
GIT binary patch
literal 4710
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

literal 0
HcmV?d00001

diff --git a/wxPython/wxPython/py/PyCrust.py b/wxPython/wxPython/py/PyCrust.py
new file mode 100755
index 0000000000..c48cb344df
--- /dev/null
+++ b/wxPython/wxPython/py/PyCrust.py
@@ -0,0 +1,78 @@
+"""PyCrust is a python shell and namespace browser application."""
+
+# The next two lines, and the other code below that makes use of
+# ``__main__`` and ``original``, serve the purpose of cleaning up the
+# main namespace to look as much as possible like the regular Python
+# shell environment.
+import __main__
+original = __main__.__dict__.keys()
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import wx
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+
+class App(wx.App):
+    """PyCrust standalone application."""
+
+    def OnInit(self):
+        import wx
+        wx.InitAllImageHandlers()
+        locals = __main__.__dict__
+        from crust import CrustFrame
+        self.frame = CrustFrame(locals=locals)
+        self.frame.SetSize((800, 600))
+        self.frame.Show()
+        self.SetTopWindow(self.frame)
+        return True
+
+'''
+The main() function needs to handle being imported, such as with the
+pycrust script that wxPython installs:
+
+    #!/usr/bin/env python
+
+    from wx.py.PyCrust import main
+    main()
+'''
+
+def main():
+    """The main function for the PyCrust program."""
+    # Cleanup the main namespace, leaving the App class.
+    import __main__
+    md = __main__.__dict__
+    keepers = original
+    keepers.append('App')
+    for key in md.keys():
+        if key not in keepers:
+            del md[key]
+    # Create an application instance.
+    app = App(0)
+    # Mimic the contents of the standard Python shell's sys.path.
+    import sys
+    if sys.path[0]:
+        sys.path[0] = ''
+    # Add the application object to the sys module's namespace.
+    # This allows a shell user to do:
+    # >>> import sys
+    # >>> sys.app.whatever
+    sys.app = app
+    del sys
+    # Cleanup the main namespace some more.
+    if md.has_key('App') and md['App'] is App:
+        del md['App']
+    if md.has_key('__main__') and md['__main__'] is __main__:
+        del md['__main__']
+    # Start the wxPython event loop.
+    app.MainLoop()
+
+if __name__ == '__main__':
+    main()
diff --git a/wxPython/wxPython/py/PyCrust_16.png b/wxPython/wxPython/py/PyCrust_16.png
new file mode 100644
index 0000000000000000000000000000000000000000..1abc97df903a6ef1514c29149319562e214cb142
GIT binary patch
literal 706
zcmV;z0zLhSP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00007bV*G`2h#=-
z2LUhz78Vl#000SaNLh0L01FZT01FZU(%pXi00004XF*Lt006O%3;baP0006}Nkl<Z
zc-qyHO-NKx7>1vF@3EO_1{ub11|3AubhOES&`k>6psa<IRP;xQVGC&$v<X~{AuXa!
z5QLDMK!S)i(W0HM`lIXz3P~kN9mgDXCTE;G<DGlE&Y)>Rwe5rVaL)P8`+e_w&Vm0b
z_BGTD^!1!HFSOJRtnMlQLaZz%boq#FFq4dwSMNT=#kQm6(!z-P@^ke5-?*W66?5Ra
z&3thK^W9C%=3SVnFOSSSJsqZ%-!J`v*xh*;gvethOas1thnd1l98~Ms-q_jwyM<8K
z3ESYUwyfF|%oAn#S5mUtxwpX3aF_$ltxQc$t74T{SK;oy))J$tEWPPsOx+sR6><?l
z&nh^b4wM~!%hyg+uS)|<;zU%&At^ljVDRZ1IiNU@4U>$XS2Y`l;jqkfWERonC}mMh
zky=uin1lK<ftHkMC@mnR8z`1;BW*CdETQQ#c3Ci{1?f88N+QvZDEQ%`VdU7FJWXi4
zcg7ggW6UKXP$J>4jxkD<#iT;Y@^ki70QXiqMJ^YjFyY>4ShwSe`|#k)ufur+)*UH0
zZ>iLEl6o33>>1^4GKRlMkkWKKF7VoYh<Q6?EYHgVVTcVqgw1Md6_8{F(RgML=h`~3
zE7qZ9jhRG(*U#TDG@fK{iO#EWllaG{EJYnS3@?!ho%XmJ>&jV}pF_HOI$+iWgQTsB
z{$ejxwLyHv+j7q)RzMbEy}vHma$R#SEyOcv`g-rN=_fw8dnMH0dpkET@%so*M%Hrv
oidwa@sz!C%vq(bW$-~F$PXsj8B~~=~9RL6T07*qoM6N<$f&>;ui2wiq

literal 0
HcmV?d00001

diff --git a/wxPython/wxPython/py/PyCrust_32.png b/wxPython/wxPython/py/PyCrust_32.png
new file mode 100644
index 0000000000000000000000000000000000000000..0496f5f5156592cfe94752d8c04ba56fcef0fb78
GIT binary patch
literal 1273
zcmV<V1P1$wP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800004b3#c}2nYxW
zd<bNS000EANkl<Zc%1E*O>9(E6o9|m89LM0c<&?_x*(a?1QAWh8x{~)7={J09T!t}
z$cAEq8W*-*_!ErjV4_hr)C~(vuq-r{#I#*l7A}}dh{P`12@4F6bS8mV5|g<vDVaCa
znd{=td!6ZzEm(2m+1xwlop;Z7&bja0J3_QY_%EgHKlT1U01*8*7dQ2q$+&htRRGZz
z5zh?3)N5v9beL><A0@5P3uVrHIApHgYK0J6{T1}?t(jmxRe)<_InoDHl(eQeU*uda
zM>E8h?SbCCHDl^EbGkRl=^pstIAmNnay-ZM+&oF8aJn7d9~y3f{KpwEb-P$T2W3A=
zB3?qq009{Ic+6(P6ej?~^lX9jv0S(xo;m}jZX?d;taBwH5ii-O;vizy?(=>-mKMr@
z!0C1v9~lV2pLi2CM;wTftz#&SN@rY{y*W*?uMZVhB$A2HWYYjE9j|h>hBRj(H8{$|
z4u|ZaREy1qB{21xdGBazsyE}jWewkEK`#^maJn7xV>wK{X4VA=YCQf?l2biT=QwZ<
zHVaoqM?<~VWnhgA1dcN<%$<ks9VN66ruyX0*AiVZ$e6_4(+xE3fuP127k2MUb6DlW
zmsEV?g@Z^%+|GkB&;{c89;!o8Dr*Z6I1Xg008@oLcid&&o3C~diB{-Nt`E@cB$$g8
z;8TUhBrY+Y1rUH4AGGz=-s-Vbu^H&BbpUYbdL>*a<Jv_tF0>~c`d)cJXIqrT`kw$K
zUswW`Gw4;}+_;^$Cmhm;Qx;(4?N-uV?Va3vyvVNhP5|ybUS#LCj_~>YrAlZ6v^)cd
zc2+2tK}5ENx+^!9XiqqdoX;VF>A5*Bj*K9NyHX}$B!ds9!-!T!_gSw(Ybdon!hQZZ
z9z3!U{!y#4JrWBc1E`(bI=H`7X#u-*y~4L+<6%ZTp*WE}g2=d-qlGN%iwDYp5&Y!j
zTWi^n(RXd6+as|SsAjMWKQHp#_oK*|Y;;J)>)9il>4XyOejxxoy27G-!H!ql$p+xk
z3X4SsdXmVv0%O2{_UyS4Jy1w*%&<vW4-lXjFW^-)2#_&}*U-29>gKl$;BUnks5YE8
zHMM7VDHV;QQGlt~n(lttCHi6)3>79ryMe6Yt4V8+X=+Bh6E4yKMFmw5z5s)b%HQ~q
zP+cjA%MhYCU*yj10@1q*kRKbwc_{@#VtkLGvkH8Tsgx=CfbTIenP+A;&s3=a+M~Gp
zyAHpIf!6>pNunY!01p+SqCgm=RyeYV3_4_N`Cb|YaQ4_UI;j98HZ%!H5<Xx&T&Ew+
z03vQ*HVZ`(jzd`+Jm2HYJN<yA3!ny1x{O?I{P+_3-tZ7HiEi2hQ2<5or3p$}H((?f
zka&22N=THU0S7oqJim<7A@Jhx<KzVR8e$T!>OsYT5afmcV=x346pv<!0-QM6zp7^Y
z52cy;CC^(!!ziV2x(vjZQ<qc{T@^^FpsMkFjl}kQ8I!Qa3F`TveG5>2Xzv3X-il{$
z{9wjMbIjbFTMc<IwWhvV4y3d6pE}l}o4Y;F#V^is^;Se|`5%*J`R2kWX8yN%X0Bas
j(eFQ);?u8h34p%<7FqnYdpZ!u00000NkvXXu0mjf@E}D{

literal 0
HcmV?d00001

diff --git a/wxPython/wxPython/py/PyFilling.py b/wxPython/wxPython/py/PyFilling.py
new file mode 100755
index 0000000000..5331791f33
--- /dev/null
+++ b/wxPython/wxPython/py/PyFilling.py
@@ -0,0 +1,43 @@
+"""PyFilling is a python namespace inspection application."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+# We use this object to get more introspection when run standalone.
+app = None
+
+import filling
+
+# These are imported just to have something interesting to inspect.
+import crust
+import interpreter
+import introspect
+import pseudo
+import shell
+import sys
+import wx
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+
+class App(filling.App):
+    def OnInit(self):
+        filling.App.OnInit(self)
+        self.root = self.fillingFrame.filling.tree.root
+        return True
+
+def main():
+    """Create and run the application."""
+    global app
+    app = App(0)
+    app.fillingFrame.filling.tree.Expand(app.root)
+    app.MainLoop()
+
+
+if __name__ == '__main__':
+    main()
diff --git a/wxPython/wxPython/py/PyShell.py b/wxPython/wxPython/py/PyShell.py
new file mode 100755
index 0000000000..39f3c103f9
--- /dev/null
+++ b/wxPython/wxPython/py/PyShell.py
@@ -0,0 +1,79 @@
+"""PyShell is a python shell application."""
+
+# The next two lines, and the other code below that makes use of
+# ``__main__`` and ``original``, serve the purpose of cleaning up the
+# main namespace to look as much as possible like the regular Python
+# shell environment.
+import __main__
+original = __main__.__dict__.keys()
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import wx
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+
+class App(wx.App):
+    """PyShell standalone application."""
+
+    def OnInit(self):
+        import wx
+        wx.InitAllImageHandlers()
+        locals = __main__.__dict__
+        from shell import ShellFrame
+        self.frame = ShellFrame(locals=locals)
+        self.frame.SetSize((750, 525))
+        self.frame.Show()
+        self.SetTopWindow(self.frame)
+        self.frame.shell.SetFocus()
+        return True
+
+'''
+The main() function needs to handle being imported, such as with the
+pyshell script that wxPython installs:
+
+    #!/usr/bin/env python
+
+    from wx.py.PyShell import main
+    main()
+'''
+
+def main():
+    """The main function for the PyShell program."""
+    # Cleanup the main namespace, leaving the App class.
+    import __main__
+    md = __main__.__dict__
+    keepers = original
+    keepers.append('App')
+    for key in md.keys():
+        if key not in keepers:
+            del md[key]
+    # Create an application instance.
+    app = App(0)
+    # Cleanup the main namespace some more.
+    if md.has_key('App') and md['App'] is App:
+        del md['App']
+    if md.has_key('__main__') and md['__main__'] is __main__:
+        del md['__main__']
+    # Mimic the contents of the standard Python shell's sys.path.
+    import sys
+    if sys.path[0]:
+        sys.path[0] = ''
+    # Add the application object to the sys module's namespace.
+    # This allows a shell user to do:
+    # >>> import sys
+    # >>> sys.app.whatever
+    sys.app = app
+    del sys
+    # Start the wxPython event loop.
+    app.MainLoop()
+
+if __name__ == '__main__':
+    main()
diff --git a/wxPython/wxPython/py/PyWrap.py b/wxPython/wxPython/py/PyWrap.py
new file mode 100755
index 0000000000..4911be1ae1
--- /dev/null
+++ b/wxPython/wxPython/py/PyWrap.py
@@ -0,0 +1,56 @@
+"""PyWrap is a command line utility that runs a wxPython program with
+additional runtime-tools, such as PyCrust."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import os
+import sys
+import wx
+from crust import CrustFrame as Frame
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+
+def wrap(app):
+    wx.InitAllImageHandlers()
+    frame = Frame()
+    frame.SetSize((750, 525))
+    frame.Show(True)
+    frame.shell.interp.locals['app'] = app
+    app.MainLoop()
+
+
+def main(modulename=None):
+    sys.path.insert(0, os.curdir)
+    if not modulename:
+        if len(sys.argv) < 2:
+            print "Please specify a module name."
+            raise SystemExit
+        modulename = sys.argv[1]
+        if modulename.endswith('.py'):
+            modulename = modulename[:-3]
+    module = __import__(modulename)
+    # Find the App class.
+    App = None
+    d = module.__dict__
+    for item in d.keys():
+        try:
+            if issubclass(d[item], wx.App):
+                App = d[item]
+        except (NameError, TypeError):
+            pass
+    if App is None:
+        print "No App class found."
+        raise SystemExit
+    app = App()
+    wrap(app)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/wxPython/wxPython/lib/PyCrust/README.txt b/wxPython/wxPython/py/README.txt
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/README.txt
rename to wxPython/wxPython/py/README.txt
diff --git a/wxPython/wxPython/py/__init__.py b/wxPython/wxPython/py/__init__.py
new file mode 100644
index 0000000000..4ae1c3a91a
--- /dev/null
+++ b/wxPython/wxPython/py/__init__.py
@@ -0,0 +1,20 @@
+"""The py package, formerly the PyCrust package."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import buffer
+import crust
+import dispatcher
+import document
+import editor
+import editwindow
+import filling
+import frame
+import images
+import interpreter
+import introspect
+import pseudo
+import shell
+import version
diff --git a/wxPython/wxPython/py/buffer.py b/wxPython/wxPython/py/buffer.py
new file mode 100644
index 0000000000..ebb04cc920
--- /dev/null
+++ b/wxPython/wxPython/py/buffer.py
@@ -0,0 +1,144 @@
+"""Buffer class."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from interpreter import Interpreter
+import imp
+import os
+import sys
+
+import document
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+
+class Buffer:
+    """Buffer class."""
+
+    id = 0
+
+    def __init__(self, filename=None):
+        """Create a Buffer instance."""
+        Buffer.id += 1
+        self.id = Buffer.id
+        self.interp = Interpreter(locals={})
+        self.name = ''
+        self.editors = {}
+        self.editor = None
+        self.modules = sys.modules.keys()
+        self.syspath = sys.path[:]
+        while True:
+            try:
+                self.syspath.remove('')
+            except ValueError:
+                break
+        while True:
+            try:
+                self.syspath.remove('.')
+            except ValueError:
+                break
+        self.open(filename)
+
+    def addEditor(self, editor):
+        """Add an editor."""
+        self.editor = editor
+        self.editors[editor.id] = editor
+
+    def hasChanged(self):
+        """Return True if text in editor has changed since last save."""
+        if self.editor:
+            return self.editor.hasChanged()
+        else:
+            return False
+
+    def new(self, filepath):
+        """New empty buffer."""
+        if not filepath:
+            return
+        if os.path.exists(filepath):
+            self.confirmed = self.overwriteConfirm(filepath)
+        else:
+            self.confirmed = True
+
+    def open(self, filename):
+        """Open file into buffer."""
+        self.doc = document.Document(filename)
+        self.name = self.doc.filename or ('Untitled:' + str(self.id))
+        self.modulename = self.doc.filebase
+        # XXX This should really make sure filedir is first item in syspath.
+        # XXX Or maybe this should be moved to the update namespace method.
+        if self.doc.filedir and self.doc.filedir not in self.syspath:
+            # To create the proper context for updateNamespace.
+            self.syspath.insert(0, self.doc.filedir)
+        if self.doc.filepath and os.path.exists(self.doc.filepath):
+            self.confirmed = True
+        if self.editor:
+            text = self.doc.read()
+            self.editor._setBuffer(buffer=self, text=text)
+
+    def overwriteConfirm(filepath):
+        """Confirm overwriting an existing file."""
+        return False
+
+    def save(self):
+        """Save buffer."""
+        filepath = self.doc.filepath
+        if not filepath:
+            return  # XXX Get filename
+        if not os.path.exists(filepath):
+            self.confirmed = True
+        if not self.confirmed:
+            self.confirmed = self.overwriteConfirm(filepath)
+        if self.confirmed:
+            self.doc.write(self.editor.getText())
+            if self.editor:
+                self.editor.setSavePoint()
+
+    def saveAs(self, filename):
+        """Save buffer."""
+        self.doc = document.Document(filename)
+        self.name = self.doc.filename
+        self.modulename = self.doc.filebase
+        self.save()
+
+    def updateNamespace(self):
+        """Update the namespace for autocompletion and calltips.
+
+        Return True if updated, False if there was an error."""
+        if not self.interp or not hasattr(self.editor, 'getText'):
+            return False
+        syspath = sys.path
+        sys.path = self.syspath
+        text = self.editor.getText()
+        text = text.replace('\r\n', '\n')
+        text = text.replace('\r', '\n')
+        name = self.modulename or self.name
+        module = imp.new_module(name)
+        newspace = module.__dict__.copy()
+        try:
+            try:
+                code = compile(text, name, 'exec')
+            except:
+                raise
+#                return False
+            try:
+                exec code in newspace
+            except:
+                raise
+#                return False
+            else:
+                # No problems, so update the namespace.
+                self.interp.locals.clear()
+                self.interp.locals.update(newspace)
+                return True
+        finally:
+            sys.path = syspath
+            for m in sys.modules.keys():
+                if m not in self.modules:
+                    del sys.modules[m]
diff --git a/wxPython/wxPython/py/crust.py b/wxPython/wxPython/py/crust.py
new file mode 100644
index 0000000000..c7ac81fa92
--- /dev/null
+++ b/wxPython/wxPython/py/crust.py
@@ -0,0 +1,221 @@
+"""Crust combines the shell and filling into one control."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import wx
+
+import os
+import pprint
+import sys
+
+import dispatcher
+import editwindow
+from filling import Filling
+import frame
+from shell import Shell
+from version import VERSION
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+
+class Crust(wx.SplitterWindow):
+    """Crust based on SplitterWindow."""
+
+    name = 'Crust'
+    revision = __revision__
+
+    def __init__(self, parent, id=-1, pos=wx.DefaultPosition, 
+                 size=wx.DefaultSize, style=wx.SP_3D,
+                 name='Crust Window', rootObject=None, rootLabel=None,
+                 rootIsNamespace=True, intro='', locals=None, 
+                 InterpClass=None, *args, **kwds):
+        """Create Crust instance."""
+        wx.SplitterWindow.__init__(self, parent, id, pos, size, style, name)
+        self.shell = Shell(parent=self, introText=intro, 
+                           locals=locals, InterpClass=InterpClass, 
+                           *args, **kwds)
+        self.editor = self.shell
+        if rootObject is None:
+            rootObject = self.shell.interp.locals
+        self.notebook = wx.Notebook(parent=self, id=-1)
+        self.shell.interp.locals['notebook'] = self.notebook
+        self.filling = Filling(parent=self.notebook, 
+                               rootObject=rootObject, 
+                               rootLabel=rootLabel, 
+                               rootIsNamespace=rootIsNamespace)
+        # Add 'filling' to the interpreter's locals.
+        self.shell.interp.locals['filling'] = self.filling
+        self.notebook.AddPage(page=self.filling, text='Namespace', select=True)
+        self.display = Display(parent=self.notebook)
+        self.notebook.AddPage(page=self.display, text='Display')
+        # Add 'pp' (pretty print) to the interpreter's locals.
+        self.shell.interp.locals['pp'] = self.display.setItem
+        self.calltip = Calltip(parent=self.notebook)
+        self.notebook.AddPage(page=self.calltip, text='Calltip')
+        self.sessionlisting = SessionListing(parent=self.notebook)
+        self.notebook.AddPage(page=self.sessionlisting, text='Session')
+        self.dispatcherlisting = DispatcherListing(parent=self.notebook)
+        self.notebook.AddPage(page=self.dispatcherlisting, text='Dispatcher')
+        from wxd import wx_
+        self.wxdocs = Filling(parent=self.notebook, 
+                              rootObject=wx_,
+                              rootLabel='wx', 
+                              rootIsNamespace=False,
+                              static=True)
+        self.notebook.AddPage(page=self.wxdocs, text='wxPython Docs')
+        from wxd import stc_
+        self.stcdocs = Filling(parent=self.notebook, 
+                               rootObject=stc_.StyledTextCtrl,
+                               rootLabel='StyledTextCtrl', 
+                               rootIsNamespace=False,
+                               static=True)
+        self.notebook.AddPage(page=self.stcdocs, text='StyledTextCtrl Docs')
+        self.SplitHorizontally(self.shell, self.notebook, 300)
+        self.SetMinimumPaneSize(1)
+
+
+class Display(editwindow.EditWindow):
+    """STC used to display an object using Pretty Print."""
+
+    def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
+                 size=wx.DefaultSize,
+                 style=wx.CLIP_CHILDREN | wx.SUNKEN_BORDER,
+                 static=False):
+        """Create Display instance."""
+        editwindow.EditWindow.__init__(self, parent, id, pos, size, style)
+        # Configure various defaults and user preferences.
+        self.SetReadOnly(True)
+        self.SetWrapMode(False)
+        if not static:
+            dispatcher.connect(receiver=self.push, signal='Interpreter.push')
+
+    def push(self, command, more):
+        """Receiver for Interpreter.push signal."""
+        self.Refresh()
+
+    def Refresh(self):
+        if not hasattr(self, "item"):
+            return
+        self.SetReadOnly(False)
+        text = pprint.pformat(self.item)
+        self.SetText(text)
+        self.SetReadOnly(True)
+
+    def setItem(self, item):
+        """Set item to pretty print in the notebook Display tab."""
+        self.item = item
+        self.Refresh()
+
+
+class Calltip(wx.TextCtrl):
+    """Text control containing the most recent shell calltip."""
+
+    def __init__(self, parent=None, id=-1):
+        style = wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_RICH2
+        wx.TextCtrl.__init__(self, parent=parent, id=id, style=style)
+        self.SetBackgroundColour(wx.Colour(255, 255, 232))
+        dispatcher.connect(receiver=self.display, signal='Shell.calltip')
+
+    def display(self, calltip):
+        """Receiver for Shell.calltip signal."""
+        self.SetValue(calltip)
+
+
+class SessionListing(wx.TextCtrl):
+    """Text control containing all commands for session."""
+
+    def __init__(self, parent=None, id=-1):
+        style = wx.TE_MULTILINE | wx.TE_READONLY | \
+                wx.TE_RICH2 | wx.TE_DONTWRAP
+        wx.TextCtrl.__init__(self, parent=parent, id=id, style=style)
+        dispatcher.connect(receiver=self.push, signal='Interpreter.push')
+
+    def push(self, command, more):
+        """Receiver for Interpreter.push signal."""
+        if command and not more:
+            self.SetInsertionPointEnd()
+            start, end = self.GetSelection()
+            if start != end:
+                self.SetSelection(0, 0)
+            self.AppendText(command + '\n')
+
+
+class DispatcherListing(wx.TextCtrl):
+    """Text control containing all dispatches for session."""
+
+    def __init__(self, parent=None, id=-1):
+        style = wx.TE_MULTILINE | wx.TE_READONLY | \
+                wx.TE_RICH2 | wx.TE_DONTWRAP
+        wx.TextCtrl.__init__(self, parent=parent, id=id, style=style)
+        dispatcher.connect(receiver=self.spy)
+
+    def spy(self, signal, sender):
+        """Receiver for Any signal from Any sender."""
+        text = '%r from %s' % (signal, sender)
+        self.SetInsertionPointEnd()
+        start, end = self.GetSelection()
+        if start != end:
+            self.SetSelection(0, 0)
+        self.AppendText(text + '\n')
+
+
+class CrustFrame(frame.Frame):
+    """Frame containing all the PyCrust components."""
+
+    name = 'CrustFrame'
+    revision = __revision__
+
+    def __init__(self, parent=None, id=-1, title='PyCrust',
+                 pos=wx.DefaultPosition, size=wx.DefaultSize,
+                 style=wx.DEFAULT_FRAME_STYLE,
+                 rootObject=None, rootLabel=None, rootIsNamespace=True,
+                 locals=None, InterpClass=None, *args, **kwds):
+        """Create CrustFrame instance."""
+        frame.Frame.__init__(self, parent, id, title, pos, size, style)
+        intro = 'PyCrust %s - The Flakiest Python Shell' % VERSION
+        intro += '\nSponsored by Orbtech - '
+        intro += 'Your source for Python programming expertise.'
+        self.SetStatusText(intro.replace('\n', ', '))
+        self.crust = Crust(parent=self, intro=intro,
+                           rootObject=rootObject,
+                           rootLabel=rootLabel,
+                           rootIsNamespace=rootIsNamespace,
+                           locals=locals,
+                           InterpClass=InterpClass, *args, **kwds)
+        self.shell = self.crust.shell
+        # Override the filling so that status messages go to the status bar.
+        self.crust.filling.tree.setStatusText = self.SetStatusText
+        # Override the shell so that status messages go to the status bar.
+        self.shell.setStatusText = self.SetStatusText
+        # Fix a problem with the sash shrinking to nothing.
+        self.crust.filling.SetSashPosition(200)
+        # Set focus to the shell editor.
+        self.shell.SetFocus()
+
+    def OnClose(self, event):
+        """Event handler for closing."""
+        self.crust.shell.destroy()
+        self.Destroy()
+
+    def OnAbout(self, event):
+        """Display an About window."""
+        title = 'About PyCrust'
+        text = 'PyCrust %s\n\n' % VERSION + \
+               'Yet another Python shell, only flakier.\n\n' + \
+               'Half-baked by Patrick K. O\'Brien,\n' + \
+               'the other half is still in the oven.\n\n' + \
+               'Shell Revision: %s\n' % self.shell.revision + \
+               'Interpreter Revision: %s\n\n' % self.shell.interp.revision + \
+               'Python Version: %s\n' % sys.version.split()[0] + \
+               'wxPython Version: %s\n' % wx.VERSION_STRING + \
+               'Platform: %s\n' % sys.platform
+        dialog = wx.MessageDialog(self, text, title,
+                                  wx.OK | wx.ICON_INFORMATION)
+        dialog.ShowModal()
+        dialog.Destroy()
diff --git a/wxPython/wxPython/lib/PyCrust/dispatcher.py b/wxPython/wxPython/py/dispatcher.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/dispatcher.py
rename to wxPython/wxPython/py/dispatcher.py
diff --git a/wxPython/wxPython/py/document.py b/wxPython/wxPython/py/document.py
new file mode 100644
index 0000000000..7bba48cb54
--- /dev/null
+++ b/wxPython/wxPython/py/document.py
@@ -0,0 +1,49 @@
+"""Document class."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import os
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+
+class Document:
+    """Document class."""
+
+    def __init__(self, filename=None):
+        """Create a Document instance."""
+        self.filename = filename
+        self.filepath = None
+        self.filedir = None
+        self.filebase = None
+        self.fileext = None
+        if self.filename:
+            self.filepath = os.path.realpath(self.filename)
+            self.filedir, self.filename = os.path.split(self.filepath)
+            self.filebase, self.fileext = os.path.splitext(self.filename)
+
+    def read(self):
+        """Return contents of file."""
+        if self.filepath and os.path.exists(self.filepath):
+            f = file(self.filepath, 'rb')
+            try:
+                return f.read()
+            finally:
+                f.close()
+        else:
+            return ''
+
+    def write(self, text):
+        """Write text to file."""
+        try:
+            f = file(self.filepath, 'wb')
+            f.write(text)
+        finally:
+            if f:
+                f.close()
diff --git a/wxPython/wxPython/py/editor.py b/wxPython/wxPython/py/editor.py
new file mode 100644
index 0000000000..72b356f31e
--- /dev/null
+++ b/wxPython/wxPython/py/editor.py
@@ -0,0 +1,839 @@
+"""PyAlaCarte and PyAlaMode editors."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import wx
+
+from buffer import Buffer
+import crust
+import dispatcher
+import editwindow
+import frame
+from shell import Shell
+import version
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+
+class EditorFrame(frame.Frame):
+    """Frame containing one editor."""
+
+    def __init__(self, parent=None, id=-1, title='PyAlaCarte',
+                 pos=wx.DefaultPosition, size=(800, 600), 
+                 style=wx.DEFAULT_FRAME_STYLE, filename=None):
+        """Create EditorFrame instance."""
+        frame.Frame.__init__(self, parent, id, title, pos, size, style)
+        self.buffers = {}
+        self.buffer = None  # Current buffer.
+        self.editor = None
+        self._defaultText = title + ' - the tastiest Python editor.'
+        self._statusText = self._defaultText
+        self.SetStatusText(self._statusText)
+        wx.EVT_IDLE(self, self.OnIdle)
+        self._setup()
+        if filename:
+            self.bufferCreate(filename)
+
+    def _setup(self):
+        """Setup prior to first buffer creation.
+
+        Useful for subclasses."""
+        pass
+
+    def setEditor(self, editor):
+        self.editor = editor
+        self.buffer = self.editor.buffer
+        self.buffers[self.buffer.id] = self.buffer
+
+    def OnAbout(self, event):
+        """Display an About window."""
+        title = 'About PyAlaCarte'
+        text = 'Another fine, flaky program.'
+        dialog = wx.MessageDialog(self, text, title,
+                                  wx.OK | wx.ICON_INFORMATION)
+        dialog.ShowModal()
+        dialog.Destroy()
+
+    def OnClose(self, event):
+        """Event handler for closing."""
+        for buffer in self.buffers.values():
+            self.buffer = buffer
+            if buffer.hasChanged():
+                cancel = self.bufferSuggestSave()
+                if cancel and event.CanVeto():
+                    event.Veto()
+                    return
+        self.Destroy()
+
+    def OnIdle(self, event):
+        """Event handler for idle time."""
+        self._updateStatus()
+        if hasattr(self, 'notebook'):
+            self._updateTabText()
+        self._updateTitle()
+        event.Skip()
+
+    def _updateStatus(self):
+        """Show current status information."""
+        if self.editor and hasattr(self.editor, 'getStatus'):
+            status = self.editor.getStatus()
+            text = 'File: %s  |  Line: %d  |  Column: %d' % status
+        else:
+            text = self._defaultText
+        if text != self._statusText:
+            self.SetStatusText(text)
+            self._statusText = text
+
+    def _updateTabText(self):
+        """Show current buffer information on notebook tab."""
+##         suffix = ' **'
+##         notebook = self.notebook
+##         selection = notebook.GetSelection()
+##         if selection == -1:
+##             return
+##         text = notebook.GetPageText(selection)
+##         window = notebook.GetPage(selection)
+##         if window.editor and window.editor.buffer.hasChanged():
+##             if text.endswith(suffix):
+##                 pass
+##             else:
+##                 notebook.SetPageText(selection, text + suffix)
+##         else:
+##             if text.endswith(suffix):
+##                 notebook.SetPageText(selection, text[:len(suffix)])
+
+    def _updateTitle(self):
+        """Show current title information."""
+        title = self.GetTitle()
+        if self.bufferHasChanged():
+            if title.startswith('* '):
+                pass
+            else:
+                self.SetTitle('* ' + title)
+        else:
+            if title.startswith('* '):
+                self.SetTitle(title[2:])
+        
+    def hasBuffer(self):
+        """Return True if there is a current buffer."""
+        if self.buffer:
+            return True
+        else:
+            return False
+
+    def bufferClose(self):
+        """Close buffer."""
+        if self.bufferHasChanged():
+            cancel = self.bufferSuggestSave()
+            if cancel:
+                return cancel
+        self.bufferDestroy()
+        cancel = False
+        return cancel
+
+    def bufferCreate(self, filename=None):
+        """Create new buffer."""
+        self.bufferDestroy()
+        buffer = Buffer()
+        self.panel = panel = wx.Panel(parent=self, id=-1)
+        editor = Editor(parent=panel)
+        panel.editor = editor
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(editor.window, 1, wx.EXPAND)
+        panel.SetSizer(sizer)
+        panel.SetAutoLayout(True)
+        sizer.Layout()
+        buffer.addEditor(editor)
+        buffer.open(filename)
+        self.setEditor(editor)
+        self.editor.setFocus()
+
+    def bufferDestroy(self):
+        """Destroy the current buffer."""
+        if self.buffer:
+            for editor in self.buffer.editors.values():
+                editor.destroy()
+            self.editor = None
+            del self.buffers[self.buffer.id]
+            self.buffer = None
+            self.panel.Destroy()
+
+    def bufferHasChanged(self):
+        """Return True if buffer has changed since last save."""
+        if self.buffer:
+            return self.buffer.hasChanged()
+        else:
+            return False
+
+    def bufferNew(self):
+        """Create new buffer."""
+        if self.bufferHasChanged():
+            cancel = self.bufferSuggestSave()
+            if cancel:
+                return cancel
+        self.bufferCreate()
+        cancel = False
+        return cancel
+
+    def bufferOpen(self):
+        """Open file in buffer."""
+        if self.bufferHasChanged():
+            cancel = self.bufferSuggestSave()
+            if cancel:
+                return cancel
+        filedir = ''
+        if self.buffer and self.buffer.doc.filedir:
+            filedir = self.buffer.doc.filedir
+        result = openSingle(directory=filedir)
+        if result.path:
+            self.bufferCreate(result.path)
+        cancel = False
+        return cancel
+
+##     def bufferPrint(self):
+##         """Print buffer."""
+##         pass
+
+##     def bufferRevert(self):
+##         """Revert buffer to version of file on disk."""
+##         pass
+
+    def bufferSave(self):
+        """Save buffer to its file."""
+        if self.buffer.doc.filepath:
+            self.buffer.save()
+            cancel = False
+        else:
+            cancel = self.bufferSaveAs()
+        return cancel
+
+    def bufferSaveAs(self):
+        """Save buffer to a new filename."""
+        if self.bufferHasChanged() and self.buffer.doc.filepath:
+            cancel = self.bufferSuggestSave()
+            if cancel:
+                return cancel
+        filedir = ''
+        if self.buffer and self.buffer.doc.filedir:
+            filedir = self.buffer.doc.filedir
+        result = saveSingle(directory=filedir)
+        if result.path:
+            self.buffer.saveAs(result.path)
+            cancel = False
+        else:
+            cancel = True
+        return cancel
+
+    def bufferSuggestSave(self):
+        """Suggest saving changes.  Return True if user selected Cancel."""
+        result = messageDialog(parent=None,
+                               message='%s has changed.\n'
+                                       'Would you like to save it first'
+                                       '?' % self.buffer.name,
+                               title='Save current file?')
+        if result.positive:
+            cancel = self.bufferSave()
+        else:
+            cancel = result.text == 'Cancel'
+        return cancel
+
+    def updateNamespace(self):
+        """Update the buffer namespace for autocompletion and calltips."""
+        if self.buffer.updateNamespace():
+            self.SetStatusText('Namespace updated')
+        else:
+            self.SetStatusText('Error executing, unable to update namespace')
+
+
+class EditorNotebookFrame(EditorFrame):
+    """Frame containing one or more editors in a notebook."""
+
+    def __init__(self, parent=None, id=-1, title='PyAlaMode',
+                 pos=wx.DefaultPosition, size=(800, 600), 
+                 style=wx.DEFAULT_FRAME_STYLE, filename=None):
+        """Create EditorNotebookFrame instance."""
+        self.notebook = None
+        EditorFrame.__init__(self, parent, id, title, pos,
+                             size, style, filename)
+        if self.notebook:
+            dispatcher.connect(receiver=self._editorChange,
+                               signal='EditorChange', sender=self.notebook)
+
+    def _setup(self):
+        """Setup prior to first buffer creation.
+
+        Called automatically by base class during init."""
+        self.notebook = EditorNotebook(parent=self)
+        intro = 'Py %s' % version.VERSION
+        import imp
+        module = imp.new_module('__main__')
+        import __builtin__
+        module.__dict__['__builtins__'] = __builtin__
+        namespace = module.__dict__.copy()
+        self.crust = crust.Crust(parent=self.notebook, intro=intro, locals=namespace)
+        self.shell = self.crust.shell
+        # Override the filling so that status messages go to the status bar.
+        self.crust.filling.tree.setStatusText = self.SetStatusText
+        # Override the shell so that status messages go to the status bar.
+        self.shell.setStatusText = self.SetStatusText
+        # Fix a problem with the sash shrinking to nothing.
+        self.crust.filling.SetSashPosition(200)
+        self.notebook.AddPage(page=self.crust, text='*Shell*', select=True)
+        self.setEditor(self.crust.editor)
+        self.crust.editor.SetFocus()
+
+    def _editorChange(self, editor):
+        """Editor change signal receiver."""
+        self.setEditor(editor)
+
+    def OnAbout(self, event):
+        """Display an About window."""
+        title = 'About PyAlaMode'
+        text = 'Another fine, flaky program.'
+        dialog = wx.MessageDialog(self, text, title,
+                                  wx.OK | wx.ICON_INFORMATION)
+        dialog.ShowModal()
+        dialog.Destroy()
+
+    def _updateTitle(self):
+        """Show current title information."""
+        pass
+##         title = self.GetTitle()
+##         if self.bufferHasChanged():
+##             if title.startswith('* '):
+##                 pass
+##             else:
+##                 self.SetTitle('* ' + title)
+##         else:
+##             if title.startswith('* '):
+##                 self.SetTitle(title[2:])
+        
+    def bufferCreate(self, filename=None):
+        """Create new buffer."""
+        buffer = Buffer()
+        panel = wx.Panel(parent=self.notebook, id=-1)
+        editor = Editor(parent=panel)
+        panel.editor = editor
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(editor.window, 1, wx.EXPAND)
+        panel.SetSizer(sizer)
+        panel.SetAutoLayout(True)
+        sizer.Layout()
+        buffer.addEditor(editor)
+        buffer.open(filename)
+        self.setEditor(editor)
+        self.notebook.AddPage(page=panel, text=self.buffer.name, select=True)
+        self.editor.setFocus()
+
+    def bufferDestroy(self):
+        """Destroy the current buffer."""
+        selection = self.notebook.GetSelection()
+##         print "Destroy Selection:", selection
+        if selection > 0:  # Don't destroy the PyCrust tab.
+            if self.buffer:
+                del self.buffers[self.buffer.id]
+                self.buffer = None  # Do this before DeletePage().
+            self.notebook.DeletePage(selection)
+
+    def bufferNew(self):
+        """Create new buffer."""
+        self.bufferCreate()
+        cancel = False
+        return cancel
+
+    def bufferOpen(self):
+        """Open file in buffer."""
+        filedir = ''
+        if self.buffer and self.buffer.doc.filedir:
+            filedir = self.buffer.doc.filedir
+        result = openMultiple(directory=filedir)
+        for path in result.paths:
+            self.bufferCreate(path)
+        cancel = False
+        return cancel
+
+
+class EditorNotebook(wx.Notebook):
+    """A notebook containing a page for each editor."""
+
+    def __init__(self, parent):
+        """Create EditorNotebook instance."""
+        wx.Notebook.__init__(self, parent, id=-1)
+        wx.EVT_NOTEBOOK_PAGE_CHANGING(self, self.GetId(),
+                                      self.OnPageChanging)
+        wx.EVT_NOTEBOOK_PAGE_CHANGED(self, self.GetId(),
+                                     self.OnPageChanged)
+        wx.EVT_IDLE(self, self.OnIdle)
+
+    def OnIdle(self, event):
+        """Event handler for idle time."""
+        self._updateTabText()
+        event.Skip()
+
+    def _updateTabText(self):
+        """Show current buffer display name on all but first tab."""
+        size = 3
+        changed = ' **'
+        unchanged = ' --'
+        selection = self.GetSelection()
+        if selection < 1:
+            return
+        text = self.GetPageText(selection)
+        window = self.GetPage(selection)
+        if not window.editor:
+            return
+        if text.endswith(changed) or text.endswith(unchanged):
+            name = text[:-size]
+        else:
+            name = text
+        if name != window.editor.buffer.name:
+            text = window.editor.buffer.name
+        if window.editor.buffer.hasChanged():
+            if text.endswith(changed):
+                text = None
+            elif text.endswith(unchanged):
+                text = text[:-size] + changed
+            else:
+                text += changed
+        else:
+            if text.endswith(changed):
+                text = text[:-size] + unchanged
+            elif text.endswith(unchanged):
+                text = None
+            else:
+                text += unchanged
+        if text is not None:
+            self.SetPageText(selection, text)
+            self.Refresh()  # Needed on Win98.
+
+    def OnPageChanging(self, event):
+        """Page changing event handler."""
+        event.Skip()
+
+    def OnPageChanged(self, event):
+        """Page changed event handler."""
+        new = event.GetSelection()
+        window = self.GetPage(new)
+        dispatcher.send(signal='EditorChange', sender=self,
+                        editor=window.editor)
+        window.SetFocus()
+        event.Skip()
+
+
+class EditorShellNotebookFrame(EditorNotebookFrame):
+    """Frame containing a notebook containing EditorShellNotebooks."""
+
+    def __init__(self, parent=None, id=-1, title='PyAlaModeTest',
+                 pos=wx.DefaultPosition, size=(600, 400), 
+                 style=wx.DEFAULT_FRAME_STYLE,
+                 filename=None, singlefile=False):
+        """Create EditorShellNotebookFrame instance."""
+        self._singlefile = singlefile
+        EditorNotebookFrame.__init__(self, parent, id, title, pos,
+                                     size, style, filename)
+
+    def _setup(self):
+        """Setup prior to first buffer creation.
+
+        Called automatically by base class during init."""
+        if not self._singlefile:
+            self.notebook = EditorNotebook(parent=self)
+
+    def OnAbout(self, event):
+        """Display an About window."""
+        title = 'About PyAlaModePlus'
+        text = 'Another fine, flaky program.'
+        dialog = wx.MessageDialog(self, text, title,
+                                  wx.OK | wx.ICON_INFORMATION)
+        dialog.ShowModal()
+        dialog.Destroy()
+
+    def bufferCreate(self, filename=None):
+        """Create new buffer."""
+        if self._singlefile:
+            self.bufferDestroy()
+            notebook = EditorShellNotebook(parent=self,
+                                           filename=filename)
+            self.notebook = notebook
+        else:
+            notebook = EditorShellNotebook(parent=self.notebook,
+                                           filename=filename)
+        self.setEditor(notebook.editor)
+        if not self._singlefile:
+            self.notebook.AddPage(page=notebook, text=self.buffer.name,
+                                  select=True)
+        self.editor.setFocus()
+
+    def bufferDestroy(self):
+        """Destroy the current buffer."""
+        if self.buffer:
+            self.editor = None
+            del self.buffers[self.buffer.id]
+            self.buffer = None  # Do this before DeletePage().
+        if self._singlefile:
+            self.notebook.Destroy()
+            self.notebook = None
+        else:
+            selection = self.notebook.GetSelection()
+##             print "Destroy Selection:", selection
+            self.notebook.DeletePage(selection)
+
+    def bufferNew(self):
+        """Create new buffer."""
+        if self._singlefile and self.bufferHasChanged():
+            cancel = self.bufferSuggestSave()
+            if cancel:
+                return cancel
+        self.bufferCreate()
+        cancel = False
+        return cancel
+
+    def bufferOpen(self):
+        """Open file in buffer."""
+        if self._singlefile and self.bufferHasChanged():
+            cancel = self.bufferSuggestSave()
+            if cancel:
+                return cancel
+        filedir = ''
+        if self.buffer and self.buffer.doc.filedir:
+            filedir = self.buffer.doc.filedir
+        if self._singlefile:
+            result = openSingle(directory=filedir)
+            if result.path:
+                self.bufferCreate(result.path)
+        else:
+            result = openMultiple(directory=filedir)
+            for path in result.paths:
+                self.bufferCreate(path)
+        cancel = False
+        return cancel
+
+
+class EditorShellNotebook(wx.Notebook):
+    """A notebook containing an editor page and a shell page."""
+
+    def __init__(self, parent, filename=None):
+        """Create EditorShellNotebook instance."""
+        wx.Notebook.__init__(self, parent, id=-1)
+        usePanels = True
+        if usePanels:
+            editorparent = editorpanel = wx.Panel(self, -1)
+            shellparent = shellpanel = wx.Panel(self, -1)
+        else:
+            editorparent = self
+            shellparent = self
+        self.buffer = Buffer()
+        self.editor = Editor(parent=editorparent)
+        self.buffer.addEditor(self.editor)
+        self.buffer.open(filename)
+        self.shell = Shell(parent=shellparent, locals=self.buffer.interp.locals,
+                           style=wx.CLIP_CHILDREN | wx.SUNKEN_BORDER)
+        self.buffer.interp.locals.clear()
+        if usePanels:
+            self.AddPage(page=editorpanel, text='Editor', select=True)
+            self.AddPage(page=shellpanel, text='Shell')
+            # Setup sizers
+            editorsizer = wx.BoxSizer(wx.VERTICAL)
+            editorsizer.Add(self.editor.window, 1, wx.EXPAND)
+            editorpanel.SetSizer(editorsizer)
+            editorpanel.SetAutoLayout(True)
+            shellsizer = wx.BoxSizer(wx.VERTICAL)
+            shellsizer.Add(self.shell, 1, wx.EXPAND)
+            shellpanel.SetSizer(shellsizer)
+            shellpanel.SetAutoLayout(True)
+        else:
+            self.AddPage(page=self.editor.window, text='Editor', select=True)
+            self.AddPage(page=self.shell, text='Shell')
+        self.editor.setFocus()
+        wx.EVT_NOTEBOOK_PAGE_CHANGED(self, self.GetId(), self.OnPageChanged)
+
+    def OnPageChanged(self, event):
+        """Page changed event handler."""
+        selection = event.GetSelection()
+        if selection == 0:
+            self.editor.setFocus()
+        else:
+            self.shell.SetFocus()
+        event.Skip()
+
+    def SetFocus(self):
+        wx.Notebook.SetFocus(self)
+        selection = self.GetSelection()
+        if selection == 0:
+            self.editor.setFocus()
+        else:
+            self.shell.SetFocus()
+
+
+class Editor:
+    """Editor having an EditWindow."""
+
+    def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
+                 size=wx.DefaultSize,
+                 style=wx.CLIP_CHILDREN | wx.SUNKEN_BORDER):
+        """Create Editor instance."""
+        self.window = EditWindow(self, parent, id, pos, size, style)
+        self.id = self.window.GetId()
+        self.buffer = None
+        # Assign handlers for keyboard events.
+        wx.EVT_CHAR(self.window, self.OnChar)
+        wx.EVT_KEY_DOWN(self.window, self.OnKeyDown)
+
+    def _setBuffer(self, buffer, text):
+        """Set the editor to a buffer.  Private callback called by buffer."""
+        self.buffer = buffer
+        self.autoCompleteKeys = buffer.interp.getAutoCompleteKeys()
+        self.clearAll()
+        self.setText(text)
+        self.emptyUndoBuffer()
+        self.setSavePoint()
+
+    def destroy(self):
+        """Destroy all editor objects."""
+        self.window.Destroy()
+
+    def clearAll(self):
+        self.window.ClearAll()
+
+    def emptyUndoBuffer(self):
+        self.window.EmptyUndoBuffer()
+
+    def getStatus(self):
+        """Return (filepath, line, column) status tuple."""
+        pos = self.window.GetCurrentPos()
+        line = self.window.LineFromPosition(pos) + 1
+        col = self.window.GetColumn(pos)
+        if self.buffer:
+            name = self.buffer.doc.filepath or self.buffer.name
+        else:
+            name = ''
+        status = (name, line, col)
+        return status
+
+    def getText(self):
+        """Return contents of editor."""
+        return self.window.GetText()
+
+    def hasChanged(self):
+        """Return True if contents have changed."""
+        return self.window.GetModify()
+
+    def setFocus(self):
+        """Set the input focus to the editor window."""
+        self.window.SetFocus()
+
+    def setSavePoint(self):
+        self.window.SetSavePoint()
+
+    def setText(self, text):
+        """Set contents of editor."""
+        self.window.SetText(text)
+
+    def OnChar(self, event):
+        """Keypress event handler.
+        
+        Only receives an event if OnKeyDown calls event.Skip() for the
+        corresponding event."""
+
+        key = event.KeyCode()
+        if key in self.autoCompleteKeys:
+            # Usually the dot (period) key activates auto completion.
+            if self.window.AutoCompActive(): 
+                self.window.AutoCompCancel()
+            self.window.ReplaceSelection('')
+            self.window.AddText(chr(key))
+            text, pos = self.window.GetCurLine()
+            text = text[:pos]
+            if self.window.autoComplete: 
+                self.autoCompleteShow(text)
+        elif key == ord('('):
+            # The left paren activates a call tip and cancels an
+            # active auto completion.
+            if self.window.AutoCompActive(): 
+                self.window.AutoCompCancel()
+            self.window.ReplaceSelection('')
+            self.window.AddText('(')
+            text, pos = self.window.GetCurLine()
+            text = text[:pos]
+            self.autoCallTipShow(text)
+        else:
+            # Allow the normal event handling to take place.
+            event.Skip()
+
+    def OnKeyDown(self, event):
+        """Key down event handler."""
+
+        key = event.KeyCode()
+        # If the auto-complete window is up let it do its thing.
+        if self.window.AutoCompActive():
+            event.Skip()
+            return
+        controlDown = event.ControlDown()
+        altDown = event.AltDown()
+        shiftDown = event.ShiftDown()
+        # Let Ctrl-Alt-* get handled normally.
+        if controlDown and altDown:
+            event.Skip()
+        # Increase font size.
+        elif controlDown and key in (ord(']'),):
+            dispatcher.send(signal='FontIncrease')
+        # Decrease font size.
+        elif controlDown and key in (ord('['),):
+            dispatcher.send(signal='FontDecrease')
+        # Default font size.
+        elif controlDown and key in (ord('='),):
+            dispatcher.send(signal='FontDefault')
+        else:
+            event.Skip()
+
+    def autoCompleteShow(self, command):
+        """Display auto-completion popup list."""
+        list = self.buffer.interp.getAutoCompleteList(command, 
+                    includeMagic=self.window.autoCompleteIncludeMagic, 
+                    includeSingle=self.window.autoCompleteIncludeSingle, 
+                    includeDouble=self.window.autoCompleteIncludeDouble)
+        if list:
+            options = ' '.join(list)
+            offset = 0
+            self.window.AutoCompShow(offset, options)
+
+    def autoCallTipShow(self, command):
+        """Display argument spec and docstring in a popup window."""
+        if self.window.CallTipActive():
+            self.window.CallTipCancel()
+        (name, argspec, tip) = self.buffer.interp.getCallTip(command)
+        if tip:
+            dispatcher.send(signal='Shell.calltip', sender=self, calltip=tip)
+        if not self.window.autoCallTip:
+            return
+        if argspec:
+            startpos = self.window.GetCurrentPos()
+            self.window.AddText(argspec + ')')
+            endpos = self.window.GetCurrentPos()
+            self.window.SetSelection(endpos, startpos)
+        if tip:
+            curpos = self.window.GetCurrentPos()
+            size = len(name)
+            tippos = curpos - (size + 1)
+            fallback = curpos - self.window.GetColumn(curpos)
+            # In case there isn't enough room, only go back to the
+            # fallback.
+            tippos = max(tippos, fallback)
+            self.window.CallTipShow(tippos, tip)
+            self.window.CallTipSetHighlight(0, size)
+
+
+class EditWindow(editwindow.EditWindow):
+    """EditWindow based on StyledTextCtrl."""
+
+    def __init__(self, editor, parent, id=-1, pos=wx.DefaultPosition,
+                 size=wx.DefaultSize,
+                 style=wx.CLIP_CHILDREN | wx.SUNKEN_BORDER):
+        """Create EditWindow instance."""
+        editwindow.EditWindow.__init__(self, parent, id, pos, size, style)
+        self.editor = editor
+
+
+class DialogResults:
+    """DialogResults class."""
+
+    def __init__(self, returned):
+        """Create wrapper for results returned by dialog."""
+        self.returned = returned
+        self.positive = returned in (wx.ID_OK, wx.ID_YES)
+        self.text = self._asString()
+        
+
+    def __repr__(self):
+        return str(self.__dict__)
+
+    def _asString(self):
+        returned = self.returned
+        if returned == wx.ID_OK:
+            return "Ok"
+        elif returned == wx.ID_CANCEL:
+            return "Cancel"
+        elif returned == wx.ID_YES:
+            return "Yes"
+        elif returned == wx.ID_NO:
+            return "No"
+
+
+def fileDialog(parent=None, title='Open', directory='', filename='',
+               wildcard='All Files (*.*)|*.*',
+               style=wx.OPEN | wx.MULTIPLE):
+    """File dialog wrapper function."""
+    dialog = wx.FileDialog(parent, title, directory, filename,
+                           wildcard, style)
+    result = DialogResults(dialog.ShowModal())
+    if result.positive:
+        result.paths = dialog.GetPaths()
+    else:
+        result.paths = []
+    dialog.Destroy()
+    return result
+
+
+def openSingle(parent=None, title='Open', directory='', filename='',
+               wildcard='All Files (*.*)|*.*', style=wx.OPEN):
+    """File dialog wrapper function."""
+    dialog = wx.FileDialog(parent, title, directory, filename,
+                           wildcard, style)
+    result = DialogResults(dialog.ShowModal())
+    if result.positive:
+        result.path = dialog.GetPath()
+    else:
+        result.path = None
+    dialog.Destroy()
+    return result
+
+
+def openMultiple(parent=None, title='Open', directory='', filename='',
+                 wildcard='All Files (*.*)|*.*',
+                 style=wx.OPEN | wx.MULTIPLE):
+    """File dialog wrapper function."""
+    return fileDialog(parent, title, directory, filename, wildcard, style)
+
+
+def saveSingle(parent=None, title='Save', directory='', filename='',
+               wildcard='All Files (*.*)|*.*',
+               style=wx.SAVE | wx.HIDE_READONLY | wx.OVERWRITE_PROMPT):
+    """File dialog wrapper function."""
+    dialog = wx.FileDialog(parent, title, directory, filename,
+                           wildcard, style)
+    result = DialogResults(dialog.ShowModal())
+    if result.positive:
+        result.path = dialog.GetPath()
+    else:
+        result.path = None
+    dialog.Destroy()
+    return result
+
+
+def directory(parent=None, message='Choose a directory', path='', style=0,
+              pos=wx.DefaultPosition, size=wx.DefaultSize):
+    """Dir dialog wrapper function."""
+    dialog = wx.DirDialog(parent, message, path, style, pos, size)
+    result = DialogResults(dialog.ShowModal())
+    if result.positive:
+        result.path = dialog.GetPath()
+    else:
+        result.path = None
+    dialog.Destroy()
+    return result
+
+
+def messageDialog(parent=None, message='', title='Message box',
+                  style=wx.YES_NO | wx.CANCEL | wx.CENTRE | wx.ICON_QUESTION,
+                  pos=wx.DefaultPosition):
+    """Message dialog wrapper function."""
+    dialog = wx.MessageDialog(parent, message, title, style, pos)
+    result = DialogResults(dialog.ShowModal())
+    dialog.Destroy()
+    return result
diff --git a/wxPython/wxPython/py/editwindow.py b/wxPython/wxPython/py/editwindow.py
new file mode 100644
index 0000000000..cc62b12488
--- /dev/null
+++ b/wxPython/wxPython/py/editwindow.py
@@ -0,0 +1,199 @@
+"""EditWindow class."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import wx
+from wx import stc
+
+import keyword
+import os
+import sys
+import time
+
+import dispatcher
+from version import VERSION
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+if wx.Platform == '__WXMSW__':
+    FACES = { 'times'  : 'Times New Roman',
+              'mono'   : 'Courier New',
+              'helv'   : 'Lucida Console',
+              'lucida' : 'Lucida Console',
+              'other'  : 'Comic Sans MS',
+              'size'   : 10,
+              'lnsize' : 9,
+              'backcol': '#FFFFFF',
+            }
+else:  # GTK
+    FACES = { 'times'  : 'Times',
+              'mono'   : 'Courier',
+              'helv'   : 'Helvetica',
+              'other'  : 'new century schoolbook',
+              'size'   : 12,
+              'lnsize' : 10,
+              'backcol': '#FFFFFF',
+            }
+
+
+class EditWindow(stc.StyledTextCtrl):
+    """EditWindow based on StyledTextCtrl."""
+
+    revision = __revision__
+
+    def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
+                 size=wx.DefaultSize, style=wx.CLIP_CHILDREN | wx.SUNKEN_BORDER):
+        """Create EditWindow instance."""
+        stc.StyledTextCtrl.__init__(self, parent, id, pos, size, style)
+        self.__config()
+        stc.EVT_STC_UPDATEUI(self, id, self.OnUpdateUI)
+        dispatcher.connect(receiver=self._fontsizer, signal='FontIncrease')
+        dispatcher.connect(receiver=self._fontsizer, signal='FontDecrease')
+        dispatcher.connect(receiver=self._fontsizer, signal='FontDefault')
+
+    def _fontsizer(self, signal):
+        """Receiver for Font* signals."""
+        size = self.GetZoom()
+        if signal == 'FontIncrease':
+            size += 1
+        elif signal == 'FontDecrease':
+            size -= 1
+        elif signal == 'FontDefault':
+            size = 0
+        self.SetZoom(size)
+
+    def __config(self):
+        """Configure shell based on user preferences."""
+        self.SetMarginType(1, stc.STC_MARGIN_NUMBER)
+        self.SetMarginWidth(1, 40)
+
+        self.SetLexer(stc.STC_LEX_PYTHON)
+        self.SetKeyWords(0, ' '.join(keyword.kwlist))
+
+        self.setStyles(FACES)
+        self.SetViewWhiteSpace(False)
+        self.SetTabWidth(4)
+        self.SetUseTabs(False)
+        # Do we want to automatically pop up command completion options?
+        self.autoComplete = True
+        self.autoCompleteIncludeMagic = True
+        self.autoCompleteIncludeSingle = True
+        self.autoCompleteIncludeDouble = True
+        self.autoCompleteCaseInsensitive = True
+        self.AutoCompSetIgnoreCase(self.autoCompleteCaseInsensitive)
+        self.AutoCompSetAutoHide(False)
+        self.AutoCompStops(' .,;:([)]}\'"\\<>%^&+-=*/|`')
+        # Do we want to automatically pop up command argument help?
+        self.autoCallTip = True
+        self.CallTipSetBackground(wx.Colour(255, 255, 232))
+        self.SetWrapMode(False)
+        try:
+            self.SetEndAtLastLine(False)
+        except AttributeError:
+            pass
+
+    def setStyles(self, faces):
+        """Configure font size, typeface and color for lexer."""
+
+        # Default style
+        self.StyleSetSpec(stc.STC_STYLE_DEFAULT,
+                          "face:%(mono)s,size:%(size)d,back:%(backcol)s" % \
+                          faces)
+
+        self.StyleClearAll()
+
+        # Built in styles
+        self.StyleSetSpec(stc.STC_STYLE_LINENUMBER,
+                          "back:#C0C0C0,face:%(mono)s,size:%(lnsize)d" % faces)
+        self.StyleSetSpec(stc.STC_STYLE_CONTROLCHAR,
+                          "face:%(mono)s" % faces)
+        self.StyleSetSpec(stc.STC_STYLE_BRACELIGHT,
+                          "fore:#0000FF,back:#FFFF88")
+        self.StyleSetSpec(stc.STC_STYLE_BRACEBAD,
+                          "fore:#FF0000,back:#FFFF88")
+
+        # Python styles
+        self.StyleSetSpec(stc.STC_P_DEFAULT,
+                          "face:%(mono)s" % faces)
+        self.StyleSetSpec(stc.STC_P_COMMENTLINE,
+                          "fore:#007F00,face:%(mono)s" % faces)
+        self.StyleSetSpec(stc.STC_P_NUMBER,
+                          "")
+        self.StyleSetSpec(stc.STC_P_STRING,
+                          "fore:#7F007F,face:%(mono)s" % faces)
+        self.StyleSetSpec(stc.STC_P_CHARACTER,
+                          "fore:#7F007F,face:%(mono)s" % faces)
+        self.StyleSetSpec(stc.STC_P_WORD,
+                          "fore:#00007F,bold")
+        self.StyleSetSpec(stc.STC_P_TRIPLE,
+                          "fore:#7F0000")
+        self.StyleSetSpec(stc.STC_P_TRIPLEDOUBLE,
+                          "fore:#000033,back:#FFFFE8")
+        self.StyleSetSpec(stc.STC_P_CLASSNAME,
+                          "fore:#0000FF,bold")
+        self.StyleSetSpec(stc.STC_P_DEFNAME,
+                          "fore:#007F7F,bold")
+        self.StyleSetSpec(stc.STC_P_OPERATOR,
+                          "")
+        self.StyleSetSpec(stc.STC_P_IDENTIFIER,
+                          "")
+        self.StyleSetSpec(stc.STC_P_COMMENTBLOCK,
+                          "fore:#7F7F7F")
+        self.StyleSetSpec(stc.STC_P_STRINGEOL,
+                          "fore:#000000,face:%(mono)s,back:#E0C0E0,eolfilled" % faces)
+
+    def OnUpdateUI(self, event):
+        """Check for matching braces."""
+        # If the auto-complete window is up let it do its thing.
+        if self.AutoCompActive() or self.CallTipActive():
+            return
+        braceAtCaret = -1
+        braceOpposite = -1
+        charBefore = None
+        caretPos = self.GetCurrentPos()
+        if caretPos > 0:
+            charBefore = self.GetCharAt(caretPos - 1)
+            styleBefore = self.GetStyleAt(caretPos - 1)
+
+        # Check before.
+        if charBefore and chr(charBefore) in '[]{}()' \
+        and styleBefore == stc.STC_P_OPERATOR:
+            braceAtCaret = caretPos - 1
+
+        # Check after.
+        if braceAtCaret < 0:
+            charAfter = self.GetCharAt(caretPos)
+            styleAfter = self.GetStyleAt(caretPos)
+            if charAfter and chr(charAfter) in '[]{}()' \
+            and styleAfter == stc.STC_P_OPERATOR:
+                braceAtCaret = caretPos
+
+        if braceAtCaret >= 0:
+            braceOpposite = self.BraceMatch(braceAtCaret)
+
+        if braceAtCaret != -1  and braceOpposite == -1:
+            self.BraceBadLight(braceAtCaret)
+        else:
+            self.BraceHighlight(braceAtCaret, braceOpposite)
+
+    def CanCopy(self):
+        """Return True if text is selected and can be copied."""
+        return self.GetSelectionStart() != self.GetSelectionEnd()
+
+    def CanCut(self):
+        """Return True if text is selected and can be cut."""
+        return self.CanCopy() and self.CanEdit()
+
+    def CanEdit(self):
+        """Return True if editing should succeed."""
+        return not self.GetReadOnly()
+
+    def CanPaste(self):
+        """Return True if pasting should succeed."""
+        return stc.StyledTextCtrl.CanPaste(self) and self.CanEdit()
diff --git a/wxPython/wxPython/py/filling.py b/wxPython/wxPython/py/filling.py
new file mode 100644
index 0000000000..0a4b701465
--- /dev/null
+++ b/wxPython/wxPython/py/filling.py
@@ -0,0 +1,337 @@
+"""Filling is the gui tree control through which a user can navigate
+the local namespace or any object."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import wx
+
+import dispatcher
+import editwindow
+import inspect
+import introspect
+import keyword
+import sys
+import types
+from version import VERSION
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+COMMONTYPES = [getattr(types, t) for t in dir(types) \
+               if not t.startswith('_') \
+               and t not in ('ClassType', 'InstanceType', 'ModuleType')]
+
+DOCTYPES = ('BuiltinFunctionType', 'BuiltinMethodType', 'ClassType',
+            'FunctionType', 'GeneratorType', 'InstanceType',
+            'LambdaType', 'MethodType', 'ModuleType',
+            'UnboundMethodType', 'method-wrapper')
+
+SIMPLETYPES = [getattr(types, t) for t in dir(types) \
+               if not t.startswith('_') and t not in DOCTYPES]
+
+del t
+
+try:
+    COMMONTYPES.append(type(''.__repr__))  # Method-wrapper in version 2.2.x.
+except AttributeError:
+    pass
+
+
+class FillingTree(wx.TreeCtrl):
+    """FillingTree based on TreeCtrl."""
+    
+    name = 'Filling Tree'
+    revision = __revision__
+
+    def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
+                 size=wx.DefaultSize, style=wx.TR_DEFAULT_STYLE,
+                 rootObject=None, rootLabel=None, rootIsNamespace=False,
+                 static=False):
+        """Create FillingTree instance."""
+        wx.TreeCtrl.__init__(self, parent, id, pos, size, style)
+        self.rootIsNamespace = rootIsNamespace
+        import __main__
+        if rootObject is None:
+            rootObject = __main__.__dict__
+            self.rootIsNamespace = True
+        if rootObject is __main__.__dict__ and rootLabel is None:
+            rootLabel = 'locals()'
+        if not rootLabel:
+            rootLabel = 'Ingredients'
+        rootData = wx.TreeItemData(rootObject)
+        self.item = self.root = self.AddRoot(rootLabel, -1, -1, rootData)
+        self.SetItemHasChildren(self.root, self.objHasChildren(rootObject))
+        wx.EVT_TREE_ITEM_EXPANDING(self, self.GetId(), self.OnItemExpanding)
+        wx.EVT_TREE_ITEM_COLLAPSED(self, self.GetId(), self.OnItemCollapsed)
+        wx.EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged)
+        wx.EVT_TREE_ITEM_ACTIVATED(self, self.GetId(), self.OnItemActivated)
+        if not static:
+            dispatcher.connect(receiver=self.push, signal='Interpreter.push')
+
+    def push(self, command, more):
+        """Receiver for Interpreter.push signal."""
+        self.display()
+
+    def OnItemExpanding(self, event):
+        """Add children to the item."""
+        busy = wx.BusyCursor()
+        item = event.GetItem()
+        if self.IsExpanded(item):
+            return
+        self.addChildren(item)
+#        self.SelectItem(item)
+
+    def OnItemCollapsed(self, event):
+        """Remove all children from the item."""
+        busy = wx.BusyCursor()
+        item = event.GetItem()
+#        self.CollapseAndReset(item)
+#        self.DeleteChildren(item)
+#        self.SelectItem(item)
+
+    def OnSelChanged(self, event):
+        """Display information about the item."""
+        busy = wx.BusyCursor()
+        self.item = event.GetItem()
+        self.display()
+
+    def OnItemActivated(self, event):
+        """Launch a DirFrame."""
+        item = event.GetItem()
+        text = self.getFullName(item)
+        obj = self.GetPyData(item)
+        frame = FillingFrame(parent=self, size=(600, 100), rootObject=obj,
+                             rootLabel=text, rootIsNamespace=False)
+        frame.Show()
+
+    def objHasChildren(self, obj):
+        """Return true if object has children."""
+        if self.objGetChildren(obj):
+            return True
+        else:
+            return False
+
+    def objGetChildren(self, obj):
+        """Return dictionary with attributes or contents of object."""
+        busy = wx.BusyCursor()
+        otype = type(obj)
+        if otype is types.DictType \
+        or str(otype)[17:23] == 'BTrees' and hasattr(obj, 'keys'):
+            return obj
+        d = {}
+        if otype is types.ListType or otype is types.TupleType:
+            for n in range(len(obj)):
+                key = '[' + str(n) + ']'
+                d[key] = obj[n]
+        if otype not in COMMONTYPES:
+            for key in introspect.getAttributeNames(obj):
+                # Believe it or not, some attributes can disappear,
+                # such as the exc_traceback attribute of the sys
+                # module. So this is nested in a try block.
+                try:
+                    d[key] = getattr(obj, key)
+                except:
+                    pass
+        return d
+
+    def addChildren(self, item):
+        self.DeleteChildren(item)
+        obj = self.GetPyData(item)
+        children = self.objGetChildren(obj)
+        if not children:
+            return
+        keys = children.keys()
+        keys.sort(lambda x, y: cmp(str(x).lower(), str(y).lower()))
+        for key in keys:
+            itemtext = str(key)
+            # Show string dictionary items with single quotes, except
+            # for the first level of items, if they represent a
+            # namespace.
+            if type(obj) is types.DictType \
+            and type(key) is types.StringType \
+            and (item != self.root \
+                 or (item == self.root and not self.rootIsNamespace)):
+                itemtext = repr(key)
+            child = children[key]
+            data = wx.TreeItemData(child)
+            branch = self.AppendItem(parent=item, text=itemtext, data=data)
+            self.SetItemHasChildren(branch, self.objHasChildren(child))
+
+    def display(self):
+        item = self.item
+        if self.IsExpanded(item):
+            self.addChildren(item)
+        self.setText('')
+        obj = self.GetPyData(item)
+        if wx.Platform == '__WXMSW__':
+            if obj is None: # Windows bug fix.
+                return
+        self.SetItemHasChildren(item, self.objHasChildren(obj))
+        otype = type(obj)
+        text = ''
+        text += self.getFullName(item)
+        text += '\n\nType: ' + str(otype)
+        try:
+            value = str(obj)
+        except:
+            value = ''
+        if otype is types.StringType or otype is types.UnicodeType:
+            value = repr(obj)
+        text += '\n\nValue: ' + value
+        if otype not in SIMPLETYPES:
+            try:
+                text += '\n\nDocstring:\n\n"""' + \
+                        inspect.getdoc(obj).strip() + '"""'
+            except:
+                pass
+        if otype is types.InstanceType:
+            try:
+                text += '\n\nClass Definition:\n\n' + \
+                        inspect.getsource(obj.__class__)
+            except:
+                pass
+        else:
+            try:
+                text += '\n\nSource Code:\n\n' + \
+                        inspect.getsource(obj)
+            except:
+                pass
+        self.setText(text)
+
+    def getFullName(self, item, partial=''):
+        """Return a syntactically proper name for item."""
+        name = self.GetItemText(item)
+        parent = None
+        obj = None
+        if item != self.root:
+            parent = self.GetItemParent(item)
+            obj = self.GetPyData(parent)
+        # Apply dictionary syntax to dictionary items, except the root
+        # and first level children of a namepace.
+        if (type(obj) is types.DictType \
+            or str(type(obj))[17:23] == 'BTrees' \
+            and hasattr(obj, 'keys')) \
+        and ((item != self.root and parent != self.root) \
+            or (parent == self.root and not self.rootIsNamespace)):
+            name = '[' + name + ']'
+        # Apply dot syntax to multipart names.
+        if partial:
+            if partial[0] == '[':
+                name += partial
+            else:
+                name += '.' + partial
+        # Repeat for everything but the root item
+        # and first level children of a namespace.
+        if (item != self.root and parent != self.root) \
+        or (parent == self.root and not self.rootIsNamespace):
+            name = self.getFullName(parent, partial=name)
+        return name
+
+    def setText(self, text):
+        """Display information about the current selection."""
+
+        # This method will likely be replaced by the enclosing app to
+        # do something more interesting, like write to a text control.
+        print text
+
+    def setStatusText(self, text):
+        """Display status information."""
+
+        # This method will likely be replaced by the enclosing app to
+        # do something more interesting, like write to a status bar.
+        print text
+
+
+class FillingText(editwindow.EditWindow):
+    """FillingText based on StyledTextCtrl."""
+
+    name = 'Filling Text'
+    revision = __revision__
+
+    def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
+                 size=wx.DefaultSize, style=wx.CLIP_CHILDREN,
+                 static=False):
+        """Create FillingText instance."""
+        editwindow.EditWindow.__init__(self, parent, id, pos, size, style)
+        # Configure various defaults and user preferences.
+        self.SetReadOnly(True)
+        self.SetWrapMode(True)
+        self.SetMarginWidth(1, 0)
+        if not static:
+            dispatcher.connect(receiver=self.push, signal='Interpreter.push')
+
+    def push(self, command, more):
+        """Receiver for Interpreter.push signal."""
+        self.Refresh()
+
+    def SetText(self, *args, **kwds):
+        self.SetReadOnly(False)
+        editwindow.EditWindow.SetText(self, *args, **kwds)
+        self.SetReadOnly(True)
+
+
+class Filling(wx.SplitterWindow):
+    """Filling based on wxSplitterWindow."""
+
+    name = 'Filling'
+    revision = __revision__
+
+    def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
+                 size=wx.DefaultSize, style=wx.SP_3D,
+                 name='Filling Window', rootObject=None,
+                 rootLabel=None, rootIsNamespace=False, static=False):
+        """Create a Filling instance."""
+        wx.SplitterWindow.__init__(self, parent, id, pos, size, style, name)
+        self.tree = FillingTree(parent=self, rootObject=rootObject,
+                                rootLabel=rootLabel,
+                                rootIsNamespace=rootIsNamespace,
+                                static=static)
+        self.text = FillingText(parent=self, static=static)
+        self.SplitVertically(self.tree, self.text, 130)
+        self.SetMinimumPaneSize(1)
+        # Override the filling so that descriptions go to FillingText.
+        self.tree.setText = self.text.SetText
+        # Display the root item.
+##        self.tree.SelectItem(self.tree.root)
+        self.tree.display()
+
+
+class FillingFrame(wx.Frame):
+    """Frame containing the namespace tree component."""
+
+    name = 'Filling Frame'
+    revision = __revision__
+
+    def __init__(self, parent=None, id=-1, title='PyFilling',
+                 pos=wx.DefaultPosition, size=(600, 400),
+                 style=wx.DEFAULT_FRAME_STYLE, rootObject=None,
+                 rootLabel=None, rootIsNamespace=False, static=False):
+        """Create FillingFrame instance."""
+        wx.Frame.__init__(self, parent, id, title, pos, size, style)
+        intro = 'PyFilling - The Tastiest Namespace Inspector'
+        self.CreateStatusBar()
+        self.SetStatusText(intro)
+        import images
+        self.SetIcon(images.getPyIcon())
+        self.filling = Filling(parent=self, rootObject=rootObject,
+                               rootLabel=rootLabel,
+                               rootIsNamespace=rootIsNamespace,
+                               static=static)
+        # Override so that status messages go to the status bar.
+        self.filling.tree.setStatusText = self.SetStatusText
+
+
+class App(wx.App):
+    """PyFilling standalone application."""
+
+    def OnInit(self):
+        wx.InitAllImageHandlers()
+        self.fillingFrame = FillingFrame()
+        self.fillingFrame.Show(True)
+        self.SetTopWindow(self.fillingFrame)
+        return True
diff --git a/wxPython/wxPython/py/frame.py b/wxPython/wxPython/py/frame.py
new file mode 100644
index 0000000000..74b85b34fd
--- /dev/null
+++ b/wxPython/wxPython/py/frame.py
@@ -0,0 +1,348 @@
+"""Base frame with menu."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import wx
+from version import VERSION
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+ID_NEW = wx.ID_NEW
+ID_OPEN = wx.ID_OPEN
+ID_REVERT = wx.ID_REVERT
+ID_CLOSE = wx.ID_CLOSE
+ID_SAVE = wx.ID_SAVE
+ID_SAVEAS = wx.ID_SAVEAS
+ID_PRINT = wx.ID_PRINT
+ID_EXIT = wx.ID_EXIT
+ID_UNDO = wx.ID_UNDO
+ID_REDO = wx.ID_REDO
+ID_CUT = wx.ID_CUT
+ID_COPY = wx.ID_COPY
+ID_PASTE = wx.ID_PASTE
+ID_CLEAR = wx.ID_CLEAR
+ID_SELECTALL = wx.ID_SELECTALL
+ID_ABOUT = wx.ID_ABOUT
+ID_AUTOCOMP = wx.NewId()
+ID_AUTOCOMP_SHOW = wx.NewId()
+ID_AUTOCOMP_MAGIC = wx.NewId()
+ID_AUTOCOMP_SINGLE = wx.NewId()
+ID_AUTOCOMP_DOUBLE = wx.NewId()
+ID_CALLTIPS = wx.NewId()
+ID_CALLTIPS_SHOW = wx.NewId()
+ID_COPY_PLUS = wx.NewId()
+ID_NAMESPACE = wx.NewId()
+ID_PASTE_PLUS = wx.NewId()
+ID_WRAP = wx.NewId()
+
+
+class Frame(wx.Frame):
+    """Frame with standard menu items."""
+
+    revision = __revision__
+
+    def __init__(self, parent=None, id=-1, title='Editor',
+                 pos=wx.DefaultPosition, size=wx.DefaultSize, 
+                 style=wx.DEFAULT_FRAME_STYLE):
+        """Create a Frame instance."""
+        wx.Frame.__init__(self, parent, id, title, pos, size, style)
+        self.CreateStatusBar()
+        self.SetStatusText('Frame')
+        import images
+        self.SetIcon(images.getPyIcon())
+        self.__createMenus()
+        wx.EVT_CLOSE(self, self.OnClose)
+
+    def OnClose(self, event):
+        """Event handler for closing."""
+        self.Destroy()
+
+    def __createMenus(self):
+        m = self.fileMenu = wx.Menu()
+        m.Append(ID_NEW, '&New \tCtrl+N',
+                 'New file')
+        m.Append(ID_OPEN, '&Open... \tCtrl+O',
+                 'Open file')
+        m.AppendSeparator()
+        m.Append(ID_REVERT, '&Revert \tCtrl+R',
+                 'Revert to last saved version')
+        m.Append(ID_CLOSE, '&Close \tCtrl+W',
+                 'Close file')
+        m.AppendSeparator()
+        m.Append(ID_SAVE, '&Save... \tCtrl+S',
+                 'Save file')
+        m.Append(ID_SAVEAS, 'Save &As \tShift+Ctrl+S',
+                 'Save file with new name')
+        m.AppendSeparator()
+        m.Append(ID_PRINT, '&Print... \tCtrl+P',
+                 'Print file')
+        m.AppendSeparator()
+        m.Append(ID_NAMESPACE, '&Update Namespace \tShift+Ctrl+N',
+                 'Update namespace for autocompletion and calltips')
+        m.AppendSeparator()
+        m.Append(ID_EXIT, 'E&xit', 'Exit Program')
+
+        m = self.editMenu = wx.Menu()
+        m.Append(ID_UNDO, '&Undo \tCtrl+Z',
+                 'Undo the last action')
+        m.Append(ID_REDO, '&Redo \tCtrl+Y',
+                 'Redo the last undone action')
+        m.AppendSeparator()
+        m.Append(ID_CUT, 'Cu&t \tCtrl+X',
+                 'Cut the selection')
+        m.Append(ID_COPY, '&Copy \tCtrl+C',
+                 'Copy the selection')
+        m.Append(ID_COPY_PLUS, 'Cop&y Plus \tShift+Ctrl+C',
+                 'Copy the selection - retaining prompts')
+        m.Append(ID_PASTE, '&Paste \tCtrl+V', 'Paste from clipboard')
+        m.Append(ID_PASTE_PLUS, 'Past&e Plus \tShift+Ctrl+V',
+                 'Paste and run commands')
+        m.AppendSeparator()
+        m.Append(ID_CLEAR, 'Cle&ar',
+                 'Delete the selection')
+        m.Append(ID_SELECTALL, 'Select A&ll \tCtrl+A',
+                 'Select all text')
+
+        m = self.autocompMenu = wx.Menu()
+        m.Append(ID_AUTOCOMP_SHOW, 'Show Auto Completion',
+                 'Show auto completion list', 1)
+        m.Append(ID_AUTOCOMP_MAGIC, 'Include Magic Attributes',
+                 'Include attributes visible to __getattr__ and __setattr__',
+                 1)
+        m.Append(ID_AUTOCOMP_SINGLE, 'Include Single Underscores',
+                 'Include attibutes prefixed by a single underscore', 1)
+        m.Append(ID_AUTOCOMP_DOUBLE, 'Include Double Underscores',
+                 'Include attibutes prefixed by a double underscore', 1)
+
+        m = self.calltipsMenu = wx.Menu()
+        m.Append(ID_CALLTIPS_SHOW, 'Show Call Tips',
+                 'Show call tips with argument signature and docstring', 1)
+
+        m = self.optionsMenu = wx.Menu()
+        m.AppendMenu(ID_AUTOCOMP, '&Auto Completion', self.autocompMenu,
+                     'Auto Completion Options')
+        m.AppendMenu(ID_CALLTIPS, '&Call Tips', self.calltipsMenu,
+                     'Call Tip Options')
+        m.Append(ID_WRAP, '&Wrap Lines',
+                 'Wrap lines at right edge', 1)
+
+        m = self.helpMenu = wx.Menu()
+        m.AppendSeparator()
+        m.Append(ID_ABOUT, '&About...', 'About this program')
+
+        b = self.menuBar = wx.MenuBar()
+        b.Append(self.fileMenu, '&File')
+        b.Append(self.editMenu, '&Edit')
+        b.Append(self.optionsMenu, '&Options')
+        b.Append(self.helpMenu, '&Help')
+        self.SetMenuBar(b)
+
+        wx.EVT_MENU(self, ID_NEW, self.OnFileNew)
+        wx.EVT_MENU(self, ID_OPEN, self.OnFileOpen)
+        wx.EVT_MENU(self, ID_REVERT, self.OnFileRevert)
+        wx.EVT_MENU(self, ID_CLOSE, self.OnFileClose)
+        wx.EVT_MENU(self, ID_SAVE, self.OnFileSave)
+        wx.EVT_MENU(self, ID_SAVEAS, self.OnFileSaveAs)
+        wx.EVT_MENU(self, ID_NAMESPACE, self.OnFileUpdateNamespace)
+        wx.EVT_MENU(self, ID_PRINT, self.OnFilePrint)
+        wx.EVT_MENU(self, ID_EXIT, self.OnExit)
+        wx.EVT_MENU(self, ID_UNDO, self.OnUndo)
+        wx.EVT_MENU(self, ID_REDO, self.OnRedo)
+        wx.EVT_MENU(self, ID_CUT, self.OnCut)
+        wx.EVT_MENU(self, ID_COPY, self.OnCopy)
+        wx.EVT_MENU(self, ID_COPY_PLUS, self.OnCopyPlus)
+        wx.EVT_MENU(self, ID_PASTE, self.OnPaste)
+        wx.EVT_MENU(self, ID_PASTE_PLUS, self.OnPastePlus)
+        wx.EVT_MENU(self, ID_CLEAR, self.OnClear)
+        wx.EVT_MENU(self, ID_SELECTALL, self.OnSelectAll)
+        wx.EVT_MENU(self, ID_ABOUT, self.OnAbout)
+        wx.EVT_MENU(self, ID_AUTOCOMP_SHOW, self.OnAutoCompleteShow)
+        wx.EVT_MENU(self, ID_AUTOCOMP_MAGIC, self.OnAutoCompleteMagic)
+        wx.EVT_MENU(self, ID_AUTOCOMP_SINGLE, self.OnAutoCompleteSingle)
+        wx.EVT_MENU(self, ID_AUTOCOMP_DOUBLE, self.OnAutoCompleteDouble)
+        wx.EVT_MENU(self, ID_CALLTIPS_SHOW, self.OnCallTipsShow)
+        wx.EVT_MENU(self, ID_WRAP, self.OnWrap)
+
+        wx.EVT_UPDATE_UI(self, ID_NEW, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_OPEN, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_REVERT, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_CLOSE, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_SAVE, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_SAVEAS, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_NAMESPACE, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_PRINT, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_UNDO, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_REDO, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_CUT, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_COPY, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_COPY_PLUS, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_PASTE, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_PASTE_PLUS, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_CLEAR, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_SELECTALL, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_SHOW, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_MAGIC, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_SINGLE, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_DOUBLE, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_CALLTIPS_SHOW, self.OnUpdateMenu)
+        wx.EVT_UPDATE_UI(self, ID_WRAP, self.OnUpdateMenu)
+
+    def OnFileNew(self, event):
+        self.bufferNew()
+
+    def OnFileOpen(self, event):
+        self.bufferOpen()
+
+    def OnFileRevert(self, event):
+        self.bufferRevert()
+
+    def OnFileClose(self, event):
+        self.bufferClose()
+
+    def OnFileSave(self, event):
+        self.bufferSave()
+
+    def OnFileSaveAs(self, event):
+        self.bufferSaveAs()
+
+    def OnFileUpdateNamespace(self, event):
+        self.updateNamespace()
+
+    def OnFilePrint(self, event):
+        self.bufferPrint()
+
+    def OnExit(self, event):
+        self.Close(False)
+
+    def OnUndo(self, event):
+        win = wx.Window_FindFocus()
+        win.Undo()
+
+    def OnRedo(self, event):
+        win = wx.Window_FindFocus()
+        win.Redo()
+
+    def OnCut(self, event):
+        win = wx.Window_FindFocus()
+        win.Cut()
+
+    def OnCopy(self, event):
+        win = wx.Window_FindFocus()
+        win.Copy()
+
+    def OnCopyPlus(self, event):
+        win = wx.Window_FindFocus()
+        win.CopyWithPrompts()
+
+    def OnPaste(self, event):
+        win = wx.Window_FindFocus()
+        win.Paste()
+
+    def OnPastePlus(self, event):
+        win = wx.Window_FindFocus()
+        win.PasteAndRun()
+
+    def OnClear(self, event):
+        win = wx.Window_FindFocus()
+        win.Clear()
+
+    def OnSelectAll(self, event):
+        win = wx.Window_FindFocus()
+        win.SelectAll()
+
+    def OnAbout(self, event):
+        """Display an About window."""
+        title = 'About'
+        text = 'Your message here.'
+        dialog = wx.MessageDialog(self, text, title,
+                                  wx.OK | wx.ICON_INFORMATION)
+        dialog.ShowModal()
+        dialog.Destroy()
+
+    def OnAutoCompleteShow(self, event):
+        win = wx.Window_FindFocus()
+        win.autoComplete = event.IsChecked()
+
+    def OnAutoCompleteMagic(self, event):
+        win = wx.Window_FindFocus()
+        win.autoCompleteIncludeMagic = event.IsChecked()
+
+    def OnAutoCompleteSingle(self, event):
+        win = wx.Window_FindFocus()
+        win.autoCompleteIncludeSingle = event.IsChecked()
+
+    def OnAutoCompleteDouble(self, event):
+        win = wx.Window_FindFocus()
+        win.autoCompleteIncludeDouble = event.IsChecked()
+
+    def OnCallTipsShow(self, event):
+        win = wx.Window_FindFocus()
+        win.autoCallTip = event.IsChecked()
+
+    def OnWrap(self, event):
+        win = wx.Window_FindFocus()
+        win.SetWrapMode(event.IsChecked())
+
+    def OnUpdateMenu(self, event):
+        """Update menu items based on current status and context."""
+        win = wx.Window_FindFocus()
+        id = event.GetId()
+        event.Enable(True)
+        try:
+            if id == ID_NEW:
+                event.Enable(hasattr(self, 'bufferNew'))
+            elif id == ID_OPEN:
+                event.Enable(hasattr(self, 'bufferOpen'))
+            elif id == ID_REVERT:
+                event.Enable(hasattr(self, 'bufferRevert') and self.hasBuffer())
+            elif id == ID_CLOSE:
+                event.Enable(hasattr(self, 'bufferClose') and self.hasBuffer())
+            elif id == ID_SAVE:
+                event.Enable(hasattr(self, 'bufferSave') and self.bufferHasChanged())
+            elif id == ID_SAVEAS:
+                event.Enable(hasattr(self, 'bufferSaveAs') and self.hasBuffer())
+            elif id == ID_NAMESPACE:
+                event.Enable(hasattr(self, 'updateNamespace') and self.hasBuffer())
+            elif id == ID_PRINT:
+                event.Enable(hasattr(self, 'bufferPrint') and self.hasBuffer())
+            elif id == ID_UNDO:
+                event.Enable(win.CanUndo())
+            elif id == ID_REDO:
+                event.Enable(win.CanRedo())
+            elif id == ID_CUT:
+                event.Enable(win.CanCut())
+            elif id == ID_COPY:
+                event.Enable(win.CanCopy())
+            elif id == ID_COPY_PLUS:
+                event.Enable(win.CanCopy() and hasattr(win, 'CopyWithPrompts'))
+            elif id == ID_PASTE:
+                event.Enable(win.CanPaste())
+            elif id == ID_PASTE_PLUS:
+                event.Enable(win.CanPaste() and hasattr(win, 'PasteAndRun'))
+            elif id == ID_CLEAR:
+                event.Enable(win.CanCut())
+            elif id == ID_SELECTALL:
+                event.Enable(hasattr(win, 'SelectAll'))
+            elif id == ID_AUTOCOMP_SHOW:
+                event.Check(win.autoComplete)
+            elif id == ID_AUTOCOMP_MAGIC:
+                event.Check(win.autoCompleteIncludeMagic)
+            elif id == ID_AUTOCOMP_SINGLE:
+                event.Check(win.autoCompleteIncludeSingle)
+            elif id == ID_AUTOCOMP_DOUBLE:
+                event.Check(win.autoCompleteIncludeDouble)
+            elif id == ID_CALLTIPS_SHOW:
+                event.Check(win.autoCallTip)
+            elif id == ID_WRAP:
+                event.Check(win.GetWrapMode())
+            else:
+                event.Enable(False)
+        except AttributeError:
+            # This menu option is not supported in the current context.
+            event.Enable(False)
diff --git a/wxPython/wxPython/lib/PyCrust/images.py b/wxPython/wxPython/py/images.py
similarity index 87%
rename from wxPython/wxPython/lib/PyCrust/images.py
rename to wxPython/wxPython/py/images.py
index 375e2004fd..4eba169368 100644
--- a/wxPython/wxPython/lib/PyCrust/images.py
+++ b/wxPython/wxPython/py/images.py
@@ -1,12 +1,26 @@
-#----------------------------------------------------------------------
-# This file was generated by ../scripts/img2py
-#
-from wxPython.wx import wxImageFromStream, wxBitmapFromImage
-from wxPython.wx import wxEmptyIcon
+"""Support for icons."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import wx
 import cStringIO
 
 
-def getPyCrustData():
+def getPyIcon():
+    icon = wx.EmptyIcon()
+    icon.CopyFromBitmap(getPyBitmap())
+    return icon
+
+def getPyBitmap():
+    return wx.BitmapFromImage(getPyImage())
+
+def getPyImage():
+    stream = cStringIO.StringIO(getPyData())
+    return wx.ImageFromStream(stream)
+
+def getPyData():
     return \
 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\
 \x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x04\
@@ -56,16 +70,3 @@ N\xba\xb3\xab\x87\xfb\x8f\x97\xd8\xd9\xd5\x03\xc0\xfd\xc7K\xec\xd8\xd6\xdd\
 \x8f\xdb\xbel\x8e\xa1S\xc7\xda\xc6\xe6\xee\xccs\xe9\xdcYnV\x95\xd8\xf2?&q+\
 \x9c\x1b1\xf3\xbf\xcd3{\xfdJ\xdb\xf8\xde\xfd\x19.\\\xad\x08\x80\xbf\x01\xd1\
 \x86\xfa\x8b\xc7\xc0\xc8\xb7\x00\x00\x00\x00IEND\xaeB`\x82' 
-
-def getPyCrustBitmap():
-    return wxBitmapFromImage(getPyCrustImage())
-
-def getPyCrustImage():
-    stream = cStringIO.StringIO(getPyCrustData())
-    return wxImageFromStream(stream)
-
-def getPyCrustIcon():
-    icon = wxEmptyIcon()
-    icon.CopyFromBitmap(getPyCrustBitmap())
-    return icon
-
diff --git a/wxPython/wxPython/lib/PyCrust/interpreter.py b/wxPython/wxPython/py/interpreter.py
similarity index 96%
rename from wxPython/wxPython/lib/PyCrust/interpreter.py
rename to wxPython/wxPython/py/interpreter.py
index 07caaafc84..426b0b966f 100644
--- a/wxPython/wxPython/lib/PyCrust/interpreter.py
+++ b/wxPython/wxPython/py/interpreter.py
@@ -1,4 +1,4 @@
-"""PyCrust Interpreter executes Python commands."""
+"""Interpreter executes Python commands."""
 
 __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
 __cvsid__ = "$Id$"
@@ -18,7 +18,7 @@ except NameError:
 
 
 class Interpreter(InteractiveInterpreter):
-    """PyCrust Interpreter based on code.InteractiveInterpreter."""
+    """Interpreter based on code.InteractiveInterpreter."""
     
     revision = __revision__
     
@@ -112,7 +112,7 @@ class Interpreter(InteractiveInterpreter):
 
 
 class InterpreterAlaCarte(Interpreter):
-    """PyCrustAlaCarte Demo Interpreter."""
+    """Demo Interpreter."""
     
     def __init__(self, locals, rawin, stdin, stdout, stderr, 
                  ps1='main prompt', ps2='continuation prompt'):
diff --git a/wxPython/wxPython/lib/PyCrust/introspect.py b/wxPython/wxPython/py/introspect.py
similarity index 96%
rename from wxPython/wxPython/lib/PyCrust/introspect.py
rename to wxPython/wxPython/py/introspect.py
index 482464735d..3bdff3a460 100644
--- a/wxPython/wxPython/lib/PyCrust/introspect.py
+++ b/wxPython/wxPython/py/introspect.py
@@ -9,6 +9,7 @@ from __future__ import nested_scopes
 
 import cStringIO
 import inspect
+import sys
 import tokenize
 import types
 
@@ -173,7 +174,10 @@ def getCallTip(command='', locals=None):
         tip1 = name + argspec
     doc = ''
     if callable(object):
-        doc = inspect.getdoc(object)
+        try:
+            doc = inspect.getdoc(object)
+        except:
+            pass
     if doc:
         # tip2 is the first separated line of the docstring, like:
         # "Return call tip text for a command."
@@ -200,6 +204,10 @@ def getRoot(command, terminator=None):
     effects.  The command would normally terminate with a '(' or
     '.'. The terminator and anything after the terminator will be
     dropped."""
+    command = command.split('\n')[-1]
+    if command.startswith(sys.ps2):
+        command = command[len(sys.ps2):]
+    command = command.lstrip()
     command = rtrimTerminus(command, terminator)
     tokens = getTokens(command)
     if not tokens:
@@ -207,13 +215,17 @@ def getRoot(command, terminator=None):
     if tokens[-1][0] is tokenize.ENDMARKER:
         # Remove the end marker.
         del tokens[-1]
+    if not tokens:
+        return ''
     if terminator == '.' and \
            (tokens[-1][1] <> '.' or tokens[-1][0] is not tokenize.OP):
         # Trap decimals in numbers, versus the dot operator.
         return ''
     else:
         # Strip off the terminator.
-        command = command[:-1]
+        if terminator and command.endswith(terminator):
+            size = 0 - len(terminator)
+            command = command[:size]
     command = command.rstrip()
     tokens = getTokens(command)
     tokens.reverse()
@@ -293,7 +305,7 @@ def getTokens(command):
     return tokens    
 
 def rtrimTerminus(command, terminator=None):
-    """Return command minus anything that fillows the final terminator."""
+    """Return command minus anything that follows the final terminator."""
     if terminator:
         pieces = command.split(terminator)
         if len(pieces) > 1:
diff --git a/wxPython/wxPython/lib/PyCrust/pseudo.py b/wxPython/wxPython/py/pseudo.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/pseudo.py
rename to wxPython/wxPython/py/pseudo.py
diff --git a/wxPython/wxPython/py/shell.py b/wxPython/wxPython/py/shell.py
new file mode 100644
index 0000000000..6c87ab6e76
--- /dev/null
+++ b/wxPython/wxPython/py/shell.py
@@ -0,0 +1,1039 @@
+"""Shell is an interactive text control in which a user types in
+commands to be sent to the interpreter.  This particular shell is
+based on wxPython's wxStyledTextCtrl.
+
+Sponsored by Orbtech - Your source for Python programming expertise."""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+from wxd.d_wx import wx
+from wxd.d_stc import stc
+
+import wx
+
+import keyword
+import os
+import sys
+import time
+
+from buffer import Buffer
+import dispatcher
+import editwindow
+import frame
+from pseudo import PseudoFileIn
+from pseudo import PseudoFileOut
+from pseudo import PseudoFileErr
+from version import VERSION
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+sys.ps3 = '<-- '  # Input prompt.
+
+NAVKEYS = (wx.WXK_END, wx.WXK_LEFT, wx.WXK_RIGHT,
+           wx.WXK_UP, wx.WXK_DOWN, wx.WXK_PRIOR, wx.WXK_NEXT)
+
+
+class ShellFrame(frame.Frame):
+    """Frame containing the shell component."""
+
+    name = 'Shell Frame'
+    revision = __revision__
+
+    def __init__(self, parent=None, id=-1, title='PyShell',
+                 pos=wx.DefaultPosition, size=wx.DefaultSize,
+                 style=wx.DEFAULT_FRAME_STYLE, locals=None,
+                 InterpClass=None, *args, **kwds):
+        """Create ShellFrame instance."""
+        frame.Frame.__init__(self, parent, id, title, pos, size, style)
+        intro = 'PyShell %s - The Flakiest Python Shell' % VERSION
+        intro += '\nSponsored by Orbtech - ' + \
+                 'Your source for Python programming expertise.'
+        self.SetStatusText(intro.replace('\n', ', '))
+        self.shell = Shell(parent=self, id=-1, introText=intro,
+                           locals=locals, InterpClass=InterpClass,
+                           *args, **kwds)
+        # Override the shell so that status messages go to the status bar.
+        self.shell.setStatusText = self.SetStatusText
+
+    def OnClose(self, event):
+        """Event handler for closing."""
+        # This isn't working the way I want, but I'll leave it for now.
+        if self.shell.waiting:
+            if event.CanVeto():
+                event.Veto(True)
+        else:
+            self.shell.destroy()
+            self.Destroy()
+
+    def OnAbout(self, event):
+        """Display an About window."""
+        title = 'About PyShell'
+        text = 'PyShell %s\n\n' % VERSION + \
+               'Yet another Python shell, only flakier.\n\n' + \
+               'Half-baked by Patrick K. O\'Brien,\n' + \
+               'the other half is still in the oven.\n\n' + \
+               'Shell Revision: %s\n' % self.shell.revision + \
+               'Interpreter Revision: %s\n\n' % self.shell.interp.revision + \
+               'Python Version: %s\n' % sys.version.split()[0] + \
+               'wxPython Version: %s\n' % wx.VERSION_STRING + \
+               'Platform: %s\n' % sys.platform
+        dialog = wx.MessageDialog(self, text, title,
+                                  wx.OK | wx.ICON_INFORMATION)
+        dialog.ShowModal()
+        dialog.Destroy()
+
+
+class ShellFacade:
+    """Simplified interface to all shell-related functionality.
+
+    This is a semi-transparent facade, in that all attributes of other
+    are accessible, even though only some are visible to the user."""
+
+    name = 'Shell Interface'
+    revision = __revision__
+
+    def __init__(self, other):
+        """Create a ShellFacade instance."""
+        d = self.__dict__
+        d['other'] = other
+        d['helpText'] = \
+"""
+* Key bindings:
+Home              Go to the beginning of the command or line.
+Shift+Home        Select to the beginning of the command or line.
+Shift+End         Select to the end of the line.
+End               Go to the end of the line.
+Ctrl+C            Copy selected text, removing prompts.
+Ctrl+Shift+C      Copy selected text, retaining prompts.
+Ctrl+X            Cut selected text.
+Ctrl+V            Paste from clipboard.
+Ctrl+Shift+V      Paste and run multiple commands from clipboard.
+Ctrl+Up Arrow     Retrieve Previous History item.
+Alt+P             Retrieve Previous History item.
+Ctrl+Down Arrow   Retrieve Next History item.
+Alt+N             Retrieve Next History item.
+Shift+Up Arrow    Insert Previous History item.
+Shift+Down Arrow  Insert Next History item.
+F8                Command-completion of History item.
+                  (Type a few characters of a previous command and press F8.)
+Ctrl+Enter        Insert new line into multiline command.
+Ctrl+]            Increase font size.
+Ctrl+[            Decrease font size.
+Ctrl+=            Default font size.
+"""
+
+    def help(self):
+        """Display some useful information about how to use the shell."""
+        self.write(self.helpText)
+
+    def __getattr__(self, name):
+        if hasattr(self.other, name):
+            return getattr(self.other, name)
+        else:
+            raise AttributeError, name
+
+    def __setattr__(self, name, value):
+        if self.__dict__.has_key(name):
+            self.__dict__[name] = value
+        elif hasattr(self.other, name):
+            setattr(self.other, name, value)
+        else:
+            raise AttributeError, name
+
+    def _getAttributeNames(self):
+        """Return list of magic attributes to extend introspection."""
+        list = [
+            'about',
+            'ask',
+            'autoCallTip',
+            'autoComplete',
+            'autoCompleteCaseInsensitive',
+            'autoCompleteIncludeDouble',
+            'autoCompleteIncludeMagic',
+            'autoCompleteIncludeSingle',
+            'clear',
+            'pause',
+            'prompt',
+            'quit',
+            'redirectStderr',
+            'redirectStdin',
+            'redirectStdout',
+            'run',
+            'runfile',
+            'wrap',
+            'zoom',
+            ]
+        list.sort()
+        return list
+
+
+class Shell(editwindow.EditWindow):
+    """Shell based on StyledTextCtrl."""
+
+    name = 'Shell'
+    revision = __revision__
+
+    def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
+                 size=wx.DefaultSize, style=wx.CLIP_CHILDREN,
+                 introText='', locals=None, InterpClass=None, *args, **kwds):
+        """Create Shell instance."""
+        editwindow.EditWindow.__init__(self, parent, id, pos, size, style)
+        self.wrap()
+        if locals is None:
+            locals = {}
+        # Grab these so they can be restored by self.redirect* methods.
+        self.stdin = sys.stdin
+        self.stdout = sys.stdout
+        self.stderr = sys.stderr
+        # Import a default interpreter class if one isn't provided.
+        if InterpClass == None:
+            from interpreter import Interpreter
+        else:
+            Interpreter = InterpClass
+        # Create a replacement for stdin.
+        self.reader = PseudoFileIn(self.readline, self.readlines)
+        self.reader.input = ''
+        self.reader.isreading = False
+        # Set up the interpreter.
+        self.interp = Interpreter(locals=locals,
+                                  rawin=self.raw_input,
+                                  stdin=self.reader,
+                                  stdout=PseudoFileOut(self.writeOut),
+                                  stderr=PseudoFileErr(self.writeErr),
+                                  *args, **kwds)
+        # Set up the buffer.
+        self.buffer = Buffer()
+        # Find out for which keycodes the interpreter will autocomplete.
+        self.autoCompleteKeys = self.interp.getAutoCompleteKeys()
+        # Keep track of the last non-continuation prompt positions.
+        self.promptPosStart = 0
+        self.promptPosEnd = 0
+        # Keep track of multi-line commands.
+        self.more = False
+        # Create the command history.  Commands are added into the
+        # front of the list (ie. at index 0) as they are entered.
+        # self.historyIndex is the current position in the history; it
+        # gets incremented as you retrieve the previous command,
+        # decremented as you retrieve the next, and reset when you hit
+        # Enter.  self.historyIndex == -1 means you're on the current
+        # command, not in the history.
+        self.history = []
+        self.historyIndex = -1
+        # Assign handlers for keyboard events.
+        wx.EVT_CHAR(self, self.OnChar)
+        wx.EVT_KEY_DOWN(self, self.OnKeyDown)
+        # Assign handler for idle time.
+        self.waiting = False
+        wx.EVT_IDLE(self, self.OnIdle)
+        # Display the introductory banner information.
+        self.showIntro(introText)
+        # Assign some pseudo keywords to the interpreter's namespace.
+        self.setBuiltinKeywords()
+        # Add 'shell' to the interpreter's local namespace.
+        self.setLocalShell()
+        # Do this last so the user has complete control over their
+        # environment.  They can override anything they want.
+        self.execStartupScript(self.interp.startupScript)
+        wx.CallAfter(self.ScrollToLine, 0)
+
+    def destroy(self):
+        del self.interp
+
+    def setFocus(self):
+        """Set focus to the shell."""
+        self.SetFocus()
+
+    def OnIdle(self, event):
+        """Free the CPU to do other things."""
+        if self.waiting:
+            time.sleep(0.05)
+        event.Skip()
+
+    def showIntro(self, text=''):
+        """Display introductory text in the shell."""
+        if text:
+            if not text.endswith(os.linesep):
+                text += os.linesep
+            self.write(text)
+        try:
+            self.write(self.interp.introText)
+        except AttributeError:
+            pass
+
+    def setBuiltinKeywords(self):
+        """Create pseudo keywords as part of builtins.
+
+        This sets `close`, `exit` and `quit` to a helpful string.
+        """
+        import __builtin__
+        __builtin__.close = __builtin__.exit = __builtin__.quit = \
+            'Click on the close button to leave the application.'
+
+    def quit(self):
+        """Quit the application."""
+
+        # XXX Good enough for now but later we want to send a close event.
+
+        # In the close event handler we can make sure they want to
+        # quit.  Other applications, like PythonCard, may choose to
+        # hide rather than quit so we should just post the event and
+        # let the surrounding app decide what it wants to do.
+        self.write('Click on the close button to leave the application.')
+
+    def setLocalShell(self):
+        """Add 'shell' to locals as reference to ShellFacade instance."""
+        self.interp.locals['shell'] = ShellFacade(other=self)
+
+    def execStartupScript(self, startupScript):
+        """Execute the user's PYTHONSTARTUP script if they have one."""
+        if startupScript and os.path.isfile(startupScript):
+            text = 'Startup script executed: ' + startupScript
+            self.push('print %r; execfile(%r)' % (text, startupScript))
+        else:
+            self.push('')
+
+    def about(self):
+        """Display information about Py."""
+        text = """
+Author: %r
+Py Version: %s
+Py Shell Revision: %s
+Py Interpreter Revision: %s
+Python Version: %s
+wxPython Version: %s
+Platform: %s""" % \
+        (__author__, VERSION, self.revision, self.interp.revision,
+         sys.version.split()[0], wx.VERSION_STRING, sys.platform)
+        self.write(text.strip())
+
+    def OnChar(self, event):
+        """Keypress event handler.
+
+        Only receives an event if OnKeyDown calls event.Skip() for the
+        corresponding event."""
+
+        # Prevent modification of previously submitted
+        # commands/responses.
+        if not self.CanEdit():
+            return
+        key = event.KeyCode()
+        currpos = self.GetCurrentPos()
+        stoppos = self.promptPosEnd
+        # Return (Enter) needs to be ignored in this handler.
+        if key == wx.WXK_RETURN:
+            pass
+        elif key in self.autoCompleteKeys:
+            # Usually the dot (period) key activates auto completion.
+            # Get the command between the prompt and the cursor.  Add
+            # the autocomplete character to the end of the command.
+            if self.AutoCompActive():
+                self.AutoCompCancel()
+            command = self.GetTextRange(stoppos, currpos) + chr(key)
+            self.write(chr(key))
+            if self.autoComplete:
+                self.autoCompleteShow(command)
+        elif key == ord('('):
+            # The left paren activates a call tip and cancels an
+            # active auto completion.
+            if self.AutoCompActive():
+                self.AutoCompCancel()
+            # Get the command between the prompt and the cursor.  Add
+            # the '(' to the end of the command.
+            self.ReplaceSelection('')
+            command = self.GetTextRange(stoppos, currpos) + '('
+            self.write('(')
+            self.autoCallTipShow(command)
+        else:
+            # Allow the normal event handling to take place.
+            event.Skip()
+
+    def OnKeyDown(self, event):
+        """Key down event handler."""
+
+        key = event.KeyCode()
+        # If the auto-complete window is up let it do its thing.
+        if self.AutoCompActive():
+            event.Skip()
+            return
+        # Prevent modification of previously submitted
+        # commands/responses.
+        controlDown = event.ControlDown()
+        altDown = event.AltDown()
+        shiftDown = event.ShiftDown()
+        currpos = self.GetCurrentPos()
+        endpos = self.GetTextLength()
+        selecting = self.GetSelectionStart() != self.GetSelectionEnd()
+        # Return (Enter) is used to submit a command to the
+        # interpreter.
+        if not controlDown and key == wx.WXK_RETURN:
+            if self.CallTipActive():
+                self.CallTipCancel()
+            self.processLine()
+        # Ctrl+Return (Cntrl+Enter) is used to insert a line break.
+        elif controlDown and key == wx.WXK_RETURN:
+            if self.CallTipActive():
+                self.CallTipCancel()
+            if currpos == endpos:
+                self.processLine()
+            else:
+                self.insertLineBreak()
+        # Let Ctrl-Alt-* get handled normally.
+        elif controlDown and altDown:
+            event.Skip()
+        # Clear the current, unexecuted command.
+        elif key == wx.WXK_ESCAPE:
+            if self.CallTipActive():
+                event.Skip()
+            else:
+                self.clearCommand()
+        # Increase font size.
+        elif controlDown and key in (ord(']'),):
+            dispatcher.send(signal='FontIncrease')
+        # Decrease font size.
+        elif controlDown and key in (ord('['),):
+            dispatcher.send(signal='FontDecrease')
+        # Default font size.
+        elif controlDown and key in (ord('='),):
+            dispatcher.send(signal='FontDefault')
+        # Cut to the clipboard.
+        elif (controlDown and key in (ord('X'), ord('x'))) \
+        or (shiftDown and key == wx.WXK_DELETE):
+            self.Cut()
+        # Copy to the clipboard.
+        elif controlDown and not shiftDown \
+            and key in (ord('C'), ord('c'), wx.WXK_INSERT):
+            self.Copy()
+        # Copy to the clipboard, including prompts.
+        elif controlDown and shiftDown \
+            and key in (ord('C'), ord('c'), wx.WXK_INSERT):
+            self.CopyWithPrompts()
+        # Copy to the clipboard, including prefixed prompts.
+        elif altDown and not controlDown \
+            and key in (ord('C'), ord('c'), wx.WXK_INSERT):
+            self.CopyWithPromptsPrefixed()
+        # Home needs to be aware of the prompt.
+        elif key == wx.WXK_HOME:
+            home = self.promptPosEnd
+            if currpos > home:
+                self.SetCurrentPos(home)
+                if not selecting and not shiftDown:
+                    self.SetAnchor(home)
+                    self.EnsureCaretVisible()
+            else:
+                event.Skip()
+        #
+        # The following handlers modify text, so we need to see if
+        # there is a selection that includes text prior to the prompt.
+        #
+        # Don't modify a selection with text prior to the prompt.
+        elif selecting and key not in NAVKEYS and not self.CanEdit():
+            pass
+        # Paste from the clipboard.
+        elif (controlDown and not shiftDown and key in (ord('V'), ord('v'))) \
+                 or (shiftDown and not controlDown and key == wx.WXK_INSERT):
+            self.Paste()
+        # Paste from the clipboard, run commands.
+        elif controlDown and shiftDown and key in (ord('V'), ord('v')):
+            self.PasteAndRun()
+        # Replace with the previous command from the history buffer.
+        elif (controlDown and key == wx.WXK_UP) \
+                 or (altDown and key in (ord('P'), ord('p'))):
+            self.OnHistoryReplace(step=+1)
+        # Replace with the next command from the history buffer.
+        elif (controlDown and key == wx.WXK_DOWN) \
+                 or (altDown and key in (ord('N'), ord('n'))):
+            self.OnHistoryReplace(step=-1)
+        # Insert the previous command from the history buffer.
+        elif (shiftDown and key == wx.WXK_UP) and self.CanEdit():
+            self.OnHistoryInsert(step=+1)
+        # Insert the next command from the history buffer.
+        elif (shiftDown and key == wx.WXK_DOWN) and self.CanEdit():
+            self.OnHistoryInsert(step=-1)
+        # Search up the history for the text in front of the cursor.
+        elif key == wx.WXK_F8:
+            self.OnHistorySearch()
+        # Don't backspace over the latest non-continuation prompt.
+        elif key == wx.WXK_BACK:
+            if selecting and self.CanEdit():
+                event.Skip()
+            elif currpos > self.promptPosEnd:
+                event.Skip()
+        # Only allow these keys after the latest prompt.
+        elif key in (wx.WXK_TAB, wx.WXK_DELETE):
+            if self.CanEdit():
+                event.Skip()
+        # Don't toggle between insert mode and overwrite mode.
+        elif key == wx.WXK_INSERT:
+            pass
+        # Don't allow line deletion.
+        elif controlDown and key in (ord('L'), ord('l')):
+            pass
+        # Don't allow line transposition.
+        elif controlDown and key in (ord('T'), ord('t')):
+            pass
+        # Basic navigation keys should work anywhere.
+        elif key in NAVKEYS:
+            event.Skip()
+        # Protect the readonly portion of the shell.
+        elif not self.CanEdit():
+            pass
+        else:
+            event.Skip()
+
+    def clearCommand(self):
+        """Delete the current, unexecuted command."""
+        startpos = self.promptPosEnd
+        endpos = self.GetTextLength()
+        self.SetSelection(startpos, endpos)
+        self.ReplaceSelection('')
+        self.more = False
+
+    def OnHistoryReplace(self, step):
+        """Replace with the previous/next command from the history buffer."""
+        self.clearCommand()
+        self.replaceFromHistory(step)
+
+    def replaceFromHistory(self, step):
+        """Replace selection with command from the history buffer."""
+        ps2 = str(sys.ps2)
+        self.ReplaceSelection('')
+        newindex = self.historyIndex + step
+        if -1 <= newindex <= len(self.history):
+            self.historyIndex = newindex
+        if 0 <= newindex <= len(self.history)-1:
+            command = self.history[self.historyIndex]
+            command = command.replace('\n', os.linesep + ps2)
+            self.ReplaceSelection(command)
+
+    def OnHistoryInsert(self, step):
+        """Insert the previous/next command from the history buffer."""
+        if not self.CanEdit():
+            return
+        startpos = self.GetCurrentPos()
+        self.replaceFromHistory(step)
+        endpos = self.GetCurrentPos()
+        self.SetSelection(endpos, startpos)
+
+    def OnHistorySearch(self):
+        """Search up the history buffer for the text in front of the cursor."""
+        if not self.CanEdit():
+            return
+        startpos = self.GetCurrentPos()
+        # The text up to the cursor is what we search for.
+        numCharsAfterCursor = self.GetTextLength() - startpos
+        searchText = self.getCommand(rstrip=False)
+        if numCharsAfterCursor > 0:
+            searchText = searchText[:-numCharsAfterCursor]
+        if not searchText:
+            return
+        # Search upwards from the current history position and loop
+        # back to the beginning if we don't find anything.
+        if (self.historyIndex <= -1) \
+        or (self.historyIndex >= len(self.history)-2):
+            searchOrder = range(len(self.history))
+        else:
+            searchOrder = range(self.historyIndex+1, len(self.history)) + \
+                          range(self.historyIndex)
+        for i in searchOrder:
+            command = self.history[i]
+            if command[:len(searchText)] == searchText:
+                # Replace the current selection with the one we found.
+                self.ReplaceSelection(command[len(searchText):])
+                endpos = self.GetCurrentPos()
+                self.SetSelection(endpos, startpos)
+                # We've now warped into middle of the history.
+                self.historyIndex = i
+                break
+
+    def setStatusText(self, text):
+        """Display status information."""
+
+        # This method will likely be replaced by the enclosing app to
+        # do something more interesting, like write to a status bar.
+        print text
+
+    def insertLineBreak(self):
+        """Insert a new line break."""
+        if self.CanEdit():
+            self.write(os.linesep)
+            self.more = True
+            self.prompt()
+
+    def processLine(self):
+        """Process the line of text at which the user hit Enter."""
+
+        # The user hit ENTER and we need to decide what to do. They
+        # could be sitting on any line in the shell.
+
+        thepos = self.GetCurrentPos()
+        startpos = self.promptPosEnd
+        endpos = self.GetTextLength()
+        ps2 = str(sys.ps2)
+        # If they hit RETURN inside the current command, execute the
+        # command.
+        if self.CanEdit():
+            self.SetCurrentPos(endpos)
+            self.interp.more = False
+            command = self.GetTextRange(startpos, endpos)
+            lines = command.split(os.linesep + ps2)
+            lines = [line.rstrip() for line in lines]
+            command = '\n'.join(lines)
+            if self.reader.isreading:
+                if not command:
+                    # Match the behavior of the standard Python shell
+                    # when the user hits return without entering a
+                    # value.
+                    command = '\n'
+                self.reader.input = command
+                self.write(os.linesep)
+            else:
+                self.push(command)
+        # Or replace the current command with the other command.
+        else:
+            # If the line contains a command (even an invalid one).
+            if self.getCommand(rstrip=False):
+                command = self.getMultilineCommand()
+                self.clearCommand()
+                self.write(command)
+            # Otherwise, put the cursor back where we started.
+            else:
+                self.SetCurrentPos(thepos)
+                self.SetAnchor(thepos)
+
+    def getMultilineCommand(self, rstrip=True):
+        """Extract a multi-line command from the editor.
+
+        The command may not necessarily be valid Python syntax."""
+        # XXX Need to extract real prompts here. Need to keep track of
+        # the prompt every time a command is issued.
+        ps1 = str(sys.ps1)
+        ps1size = len(ps1)
+        ps2 = str(sys.ps2)
+        ps2size = len(ps2)
+        # This is a total hack job, but it works.
+        text = self.GetCurLine()[0]
+        line = self.GetCurrentLine()
+        while text[:ps2size] == ps2 and line > 0:
+            line -= 1
+            self.GotoLine(line)
+            text = self.GetCurLine()[0]
+        if text[:ps1size] == ps1:
+            line = self.GetCurrentLine()
+            self.GotoLine(line)
+            startpos = self.GetCurrentPos() + ps1size
+            line += 1
+            self.GotoLine(line)
+            while self.GetCurLine()[0][:ps2size] == ps2:
+                line += 1
+                self.GotoLine(line)
+            stoppos = self.GetCurrentPos()
+            command = self.GetTextRange(startpos, stoppos)
+            command = command.replace(os.linesep + ps2, '\n')
+            command = command.rstrip()
+            command = command.replace('\n', os.linesep + ps2)
+        else:
+            command = ''
+        if rstrip:
+            command = command.rstrip()
+        return command
+
+    def getCommand(self, text=None, rstrip=True):
+        """Extract a command from text which may include a shell prompt.
+
+        The command may not necessarily be valid Python syntax."""
+        if not text:
+            text = self.GetCurLine()[0]
+        # Strip the prompt off the front leaving just the command.
+        command = self.lstripPrompt(text)
+        if command == text:
+            command = ''  # Real commands have prompts.
+        if rstrip:
+            command = command.rstrip()
+        return command
+
+    def lstripPrompt(self, text):
+        """Return text without a leading prompt."""
+        ps1 = str(sys.ps1)
+        ps1size = len(ps1)
+        ps2 = str(sys.ps2)
+        ps2size = len(ps2)
+        # Strip the prompt off the front of text.
+        if text[:ps1size] == ps1:
+            text = text[ps1size:]
+        elif text[:ps2size] == ps2:
+            text = text[ps2size:]
+        return text
+
+    def push(self, command):
+        """Send command to the interpreter for execution."""
+        self.write(os.linesep)
+        busy = wx.BusyCursor()
+        self.waiting = True
+        self.more = self.interp.push(command)
+        self.waiting = False
+        del busy
+        if not self.more:
+            self.addHistory(command.rstrip())
+        self.prompt()
+
+    def addHistory(self, command):
+        """Add command to the command history."""
+        # Reset the history position.
+        self.historyIndex = -1
+        # Insert this command into the history, unless it's a blank
+        # line or the same as the last command.
+        if command != '' \
+        and (len(self.history) == 0 or command != self.history[0]):
+            self.history.insert(0, command)
+
+    def write(self, text):
+        """Display text in the shell.
+
+        Replace line endings with OS-specific endings."""
+        text = self.fixLineEndings(text)
+        self.AddText(text)
+        self.EnsureCaretVisible()
+
+    def fixLineEndings(self, text):
+        """Return text with line endings replaced by OS-specific endings."""
+        lines = text.split('\r\n')
+        for l in range(len(lines)):
+            chunks = lines[l].split('\r')
+            for c in range(len(chunks)):
+                chunks[c] = os.linesep.join(chunks[c].split('\n'))
+            lines[l] = os.linesep.join(chunks)
+        text = os.linesep.join(lines)
+        return text
+
+    def prompt(self):
+        """Display proper prompt for the context: ps1, ps2 or ps3.
+
+        If this is a continuation line, autoindent as necessary."""
+        isreading = self.reader.isreading
+        skip = False
+        if isreading:
+            prompt = str(sys.ps3)
+        elif self.more:
+            prompt = str(sys.ps2)
+        else:
+            prompt = str(sys.ps1)
+        pos = self.GetCurLine()[1]
+        if pos > 0:
+            if isreading:
+                skip = True
+            else:
+                self.write(os.linesep)
+        if not self.more:
+            self.promptPosStart = self.GetCurrentPos()
+        if not skip:
+            self.write(prompt)
+        if not self.more:
+            self.promptPosEnd = self.GetCurrentPos()
+            # Keep the undo feature from undoing previous responses.
+            self.EmptyUndoBuffer()
+        # XXX Add some autoindent magic here if more.
+        if self.more:
+            self.write(' '*4)  # Temporary hack indentation.
+        self.EnsureCaretVisible()
+        self.ScrollToColumn(0)
+
+    def readline(self):
+        """Replacement for stdin.readline()."""
+        input = ''
+        reader = self.reader
+        reader.isreading = True
+        self.prompt()
+        try:
+            while not reader.input:
+                wx.YieldIfNeeded()
+            input = reader.input
+        finally:
+            reader.input = ''
+            reader.isreading = False
+        input = str(input)  # In case of Unicode.
+        return input
+
+    def readlines(self):
+        """Replacement for stdin.readlines()."""
+        lines = []
+        while lines[-1:] != ['\n']:
+            lines.append(self.readline())
+        return lines
+
+    def raw_input(self, prompt=''):
+        """Return string based on user input."""
+        if prompt:
+            self.write(prompt)
+        return self.readline()
+
+    def ask(self, prompt='Please enter your response:'):
+        """Get response from the user using a dialog box."""
+        dialog = wx.TextEntryDialog(None, prompt,
+                                    'Input Dialog (Raw)', '')
+        try:
+            if dialog.ShowModal() == wx.ID_OK:
+                text = dialog.GetValue()
+                return text
+        finally:
+            dialog.Destroy()
+        return ''
+
+    def pause(self):
+        """Halt execution pending a response from the user."""
+        self.ask('Press enter to continue:')
+
+    def clear(self):
+        """Delete all text from the shell."""
+        self.ClearAll()
+
+    def run(self, command, prompt=True, verbose=True):
+        """Execute command as if it was typed in directly.
+        >>> shell.run('print "this"')
+        >>> print "this"
+        this
+        >>>
+        """
+        # Go to the very bottom of the text.
+        endpos = self.GetTextLength()
+        self.SetCurrentPos(endpos)
+        command = command.rstrip()
+        if prompt: self.prompt()
+        if verbose: self.write(command)
+        self.push(command)
+
+    def runfile(self, filename):
+        """Execute all commands in file as if they were typed into the
+        shell."""
+        file = open(filename)
+        try:
+            self.prompt()
+            for command in file.readlines():
+                if command[:6] == 'shell.':
+                    # Run shell methods silently.
+                    self.run(command, prompt=False, verbose=False)
+                else:
+                    self.run(command, prompt=False, verbose=True)
+        finally:
+            file.close()
+
+    def autoCompleteShow(self, command):
+        """Display auto-completion popup list."""
+        list = self.interp.getAutoCompleteList(command,
+                    includeMagic=self.autoCompleteIncludeMagic,
+                    includeSingle=self.autoCompleteIncludeSingle,
+                    includeDouble=self.autoCompleteIncludeDouble)
+        if list:
+            options = ' '.join(list)
+            offset = 0
+            self.AutoCompShow(offset, options)
+
+    def autoCallTipShow(self, command):
+        """Display argument spec and docstring in a popup window."""
+        if self.CallTipActive():
+            self.CallTipCancel()
+        (name, argspec, tip) = self.interp.getCallTip(command)
+        if tip:
+            dispatcher.send(signal='Shell.calltip', sender=self, calltip=tip)
+        if not self.autoCallTip:
+            return
+        if argspec:
+            startpos = self.GetCurrentPos()
+            self.write(argspec + ')')
+            endpos = self.GetCurrentPos()
+            self.SetSelection(endpos, startpos)
+        if tip:
+            curpos = self.GetCurrentPos()
+            tippos = curpos - (len(name) + 1)
+            fallback = curpos - self.GetColumn(curpos)
+            # In case there isn't enough room, only go back to the
+            # fallback.
+            tippos = max(tippos, fallback)
+            self.CallTipShow(tippos, tip)
+
+    def writeOut(self, text):
+        """Replacement for stdout."""
+        self.write(text)
+
+    def writeErr(self, text):
+        """Replacement for stderr."""
+        self.write(text)
+
+    def redirectStdin(self, redirect=True):
+        """If redirect is true then sys.stdin will come from the shell."""
+        if redirect:
+            sys.stdin = self.reader
+        else:
+            sys.stdin = self.stdin
+
+    def redirectStdout(self, redirect=True):
+        """If redirect is true then sys.stdout will go to the shell."""
+        if redirect:
+            sys.stdout = PseudoFileOut(self.writeOut)
+        else:
+            sys.stdout = self.stdout
+
+    def redirectStderr(self, redirect=True):
+        """If redirect is true then sys.stderr will go to the shell."""
+        if redirect:
+            sys.stderr = PseudoFileErr(self.writeErr)
+        else:
+            sys.stderr = self.stderr
+
+    def CanCut(self):
+        """Return true if text is selected and can be cut."""
+        if self.GetSelectionStart() != self.GetSelectionEnd() \
+               and self.GetSelectionStart() >= self.promptPosEnd \
+               and self.GetSelectionEnd() >= self.promptPosEnd:
+            return True
+        else:
+            return False
+
+    def CanPaste(self):
+        """Return true if a paste should succeed."""
+        if self.CanEdit() and editwindow.EditWindow.CanPaste(self):
+            return True
+        else:
+            return False
+
+    def CanEdit(self):
+        """Return true if editing should succeed."""
+        if self.GetSelectionStart() != self.GetSelectionEnd():
+            if self.GetSelectionStart() >= self.promptPosEnd \
+                   and self.GetSelectionEnd() >= self.promptPosEnd:
+                return True
+            else:
+                return False
+        else:
+            return self.GetCurrentPos() >= self.promptPosEnd
+
+    def Cut(self):
+        """Remove selection and place it on the clipboard."""
+        if self.CanCut() and self.CanCopy():
+            if self.AutoCompActive():
+                self.AutoCompCancel()
+            if self.CallTipActive():
+                self.CallTipCancel()
+            self.Copy()
+            self.ReplaceSelection('')
+
+    def Copy(self):
+        """Copy selection and place it on the clipboard."""
+        if self.CanCopy():
+            ps1 = str(sys.ps1)
+            ps2 = str(sys.ps2)
+            command = self.GetSelectedText()
+            command = command.replace(os.linesep + ps2, os.linesep)
+            command = command.replace(os.linesep + ps1, os.linesep)
+            command = self.lstripPrompt(text=command)
+            data = wx.TextDataObject(command)
+            self._clip(data)
+
+    def CopyWithPrompts(self):
+        """Copy selection, including prompts, and place it on the clipboard."""
+        if self.CanCopy():
+            command = self.GetSelectedText()
+            data = wx.TextDataObject(command)
+            self._clip(data)
+
+    def CopyWithPromptsPrefixed(self):
+        """Copy selection, including prompts prefixed with four
+        spaces, and place it on the clipboard."""
+        if self.CanCopy():
+            command = self.GetSelectedText()
+            spaces = ' ' * 4
+            command = spaces + command.replace(os.linesep,
+                                               os.linesep + spaces)
+            data = wx.TextDataObject(command)
+            self._clip(data)
+
+    def _clip(self, data):
+        if wx.TheClipboard.Open():
+            wx.TheClipboard.UsePrimarySelection(False)
+            wx.TheClipboard.SetData(data)
+            wx.TheClipboard.Flush()
+            wx.TheClipboard.Close()
+
+    def Paste(self):
+        """Replace selection with clipboard contents."""
+        if self.CanPaste() and wx.TheClipboard.Open():
+            ps2 = str(sys.ps2)
+            if wx.TheClipboard.IsSupported(wx.DataFormat(wx.DF_TEXT)):
+                data = wx.TextDataObject()
+                if wx.TheClipboard.GetData(data):
+                    self.ReplaceSelection('')
+                    command = data.GetText()
+                    command = command.rstrip()
+                    command = self.fixLineEndings(command)
+                    command = self.lstripPrompt(text=command)
+                    command = command.replace(os.linesep + ps2, '\n')
+                    command = command.replace(os.linesep, '\n')
+                    command = command.replace('\n', os.linesep + ps2)
+                    self.write(command)
+            wx.TheClipboard.Close()
+
+    def PasteAndRun(self):
+        """Replace selection with clipboard contents, run commands."""
+        if wx.TheClipboard.Open():
+            ps1 = str(sys.ps1)
+            ps2 = str(sys.ps2)
+            if wx.TheClipboard.IsSupported(wx.DataFormat(wx.DF_TEXT)):
+                data = wx.TextDataObject()
+                if wx.TheClipboard.GetData(data):
+                    endpos = self.GetTextLength()
+                    self.SetCurrentPos(endpos)
+                    startpos = self.promptPosEnd
+                    self.SetSelection(startpos, endpos)
+                    self.ReplaceSelection('')
+                    text = data.GetText()
+                    text = text.lstrip()
+                    text = self.fixLineEndings(text)
+                    text = self.lstripPrompt(text)
+                    text = text.replace(os.linesep + ps1, '\n')
+                    text = text.replace(os.linesep + ps2, '\n')
+                    text = text.replace(os.linesep, '\n')
+                    lines = text.split('\n')
+                    commands = []
+                    command = ''
+                    for line in lines:
+                        if line.strip() == ps2.strip():
+                            # If we are pasting from something like a
+                            # web page that drops the trailing space
+                            # from the ps2 prompt of a blank line.
+                            line = ''
+                        if line.strip() != '' and line.lstrip() == line:
+                            # New command.
+                            if command:
+                                # Add the previous command to the list.
+                                commands.append(command)
+                            # Start a new command, which may be multiline.
+                            command = line
+                        else:
+                            # Multiline command. Add to the command.
+                            command += '\n'
+                            command += line
+                    commands.append(command)
+                    for command in commands:
+                        command = command.replace('\n', os.linesep + ps2)
+                        self.write(command)
+                        self.processLine()
+            wx.TheClipboard.Close()
+
+    def wrap(self, wrap=True):
+        """Sets whether text is word wrapped."""
+        try:
+            self.SetWrapMode(wrap)
+        except AttributeError:
+            return 'Wrapping is not available in this version.'
+
+    def zoom(self, points=0):
+        """Set the zoom level.
+
+        This number of points is added to the size of all fonts.  It
+        may be positive to magnify or negative to reduce."""
+        self.SetZoom(points)
diff --git a/wxPython/wxPython/py/tests/test_interpreter.py b/wxPython/wxPython/py/tests/test_interpreter.py
new file mode 100644
index 0000000000..9ab26a091f
--- /dev/null
+++ b/wxPython/wxPython/py/tests/test_interpreter.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import unittest
+
+# Import from this module's parent directory.
+import os
+import sys
+sys.path.insert(0, os.pardir)
+import interpreter
+del sys.path[0]
+del sys
+del os
+
+
+"""
+These unittest methods are preferred:
+-------------------------------------
+self.assert_(expr, msg=None)
+self.assertEqual(first, second, msg=None)
+self.assertRaises(excClass, callableObj, *args, **kwargs)
+self.fail(msg=None)
+self.failIf(expr, msg=None)
+"""
+
+
+class ModuleTestCase(unittest.TestCase):
+
+    def test_module(self):
+        module = interpreter
+        self.assert_(module.__author__)
+        self.assert_(module.__cvsid__)
+        self.assert_(module.__revision__)
+        self.assert_(module.Interpreter)
+        self.assert_(module.Interpreter.push)
+        self.assert_(module.Interpreter.runsource)
+        self.assert_(module.Interpreter.getAutoCompleteList)
+        self.assert_(module.Interpreter.getCallTip)
+        self.assert_(module.InterpreterAlaCarte)
+
+
+class InterpreterTestCase(unittest.TestCase):
+
+    def setUp(self):
+        self.output = ''
+        self.i = interpreter.Interpreter(stdout=self)
+
+    def write(self, text):
+        """Capture output from self.i.push()."""
+        self.output += text
+
+    def tearDown(self):
+        self.output = ''
+        self.i = None
+        del self.i
+
+    def test_more(self):
+        self.assertEqual(self.i.push('dir()'), 0)
+        self.assertEqual(self.i.push('for n in range(3):'), 1)
+
+    def test_push(self):
+        values = (
+        ('dir', '<built-in function dir>'),
+        ('dir()', "['__builtins__', '__doc__', '__name__']"),
+        ('2 + 2', '4'),
+        ('d = {}', ''),
+        ('d', '{}'),
+        ('del d', ''),
+        ('len([4,5,6])', '3'),
+        )
+        for input, output in values:
+            if output: output += '\n'
+            self.i.push(input)
+            self.assertEqual(self.output, output)
+            self.output = ''
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/wxPython/wxPython/py/tests/test_introspect.py b/wxPython/wxPython/py/tests/test_introspect.py
new file mode 100644
index 0000000000..887b40c39e
--- /dev/null
+++ b/wxPython/wxPython/py/tests/test_introspect.py
@@ -0,0 +1,862 @@
+#!/usr/bin/env python
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import unittest
+
+# Import from this module's parent directory.
+import os
+import sys
+sys.path.insert(0, os.pardir)
+import introspect
+del sys.path[0]
+del sys
+del os
+
+
+"""
+These unittest methods are preferred:
+-------------------------------------
+self.assert_(expr, msg=None)
+self.assertEqual(first, second, msg=None)
+self.assertRaises(excClass, callableObj, *args, **kwargs)
+self.fail(msg=None)
+self.failIf(expr, msg=None)
+"""
+
+
+class ModuleTestCase(unittest.TestCase):
+
+    def test_module(self):
+        module = introspect
+        self.assert_(module.__author__)
+        self.assert_(module.__cvsid__)
+        self.assert_(module.__revision__)
+        self.assert_(module.getAllAttributeNames)
+        self.assert_(module.getAttributeNames)
+        self.assert_(module.getAutoCompleteList)
+        self.assert_(module.getBaseObject)
+        self.assert_(module.getCallTip)
+        self.assert_(module.getConstructor)
+        self.assert_(module.getRoot)
+        self.assert_(module.rtrimTerminus)
+
+
+class RtrimTerminusTestCase(unittest.TestCase):
+
+    def test_rtrimTerminus(self):
+        values = (
+            ('', '', ''),
+            ('', None, ''),
+            ('', '.', ''),
+            ('', '(', ''),
+            
+            ('.', '', '.'),
+            ('.', None, '.'),
+            ('.', '.', '.'),
+            ('.', '(', '.'),
+            
+            ('(', '', '('),
+            ('(', None, '('),
+            ('(', '.', '('),
+            ('(', '(', '('),
+            
+            ('spam', '', 'spam'),
+            ('spam', None, 'spam'),
+            ('spam', '.', 'spam'),
+            ('spam', '(', 'spam'),
+            
+            ('spam.', '', 'spam.'),
+            ('spam.', None, 'spam.'),
+            ('spam.', '.', 'spam.'),
+            ('spam.', '(', 'spam.'),
+            
+            ('spam(', '', 'spam('),
+            ('spam(', None, 'spam('),
+            ('spam(', '.', 'spam('),
+            ('spam(', '(', 'spam('),
+            
+            ('spam.eggs', '.', 'spam.'),
+            ('spam.eggs.', '.', 'spam.eggs.'),
+            ('spam.eggs(', '(', 'spam.eggs('),
+            ('spam.eggs.', '(', 'spam.eggs.'),
+            ('spam.eggs(', '.', 'spam.'),
+            
+            ('x = spam.', '.', 'x = spam.'),
+            ('x = spam.eggs', '.', 'x = spam.'),
+            ('x = spam.eggs.', '.', 'x = spam.eggs.'),
+            ('x = spam.eggs(', '(', 'x = spam.eggs('),
+        )
+        for input, terminator, output in values:
+            result = introspect.rtrimTerminus(input, terminator)
+            self.assertEqual(result, output,
+                             ':in: %r :t: %r :out: %r :result: %r' %
+                             (input, terminator, output, result))
+
+
+class GetRootTestCase(unittest.TestCase):
+
+    def _checkRoot(self, input, terminator, output):
+        root = introspect.getRoot(command=input, terminator=terminator)
+        self.assertEqual(root, output,
+                         ':in: %r :t: %r :out: %r :root: %r' %
+                         (input, terminator, output, root))
+
+    def test_getRoot(self):
+        values = (
+            ('', '', ''),
+            ('', None, ''),
+            ('', '.', ''),
+            ('', '(', ''),
+            
+            ('.', '', '.'),
+            ('.', None, '.'),
+            ('.', '.', ''),
+            ('.', '(', '.'),
+            
+            ('(', '', ''),
+            ('(', None, ''),
+            ('(', '.', ''),
+            ('(', '(', ''),
+            
+            ('spam', '', 'spam'),
+            ('spam', None, 'spam'),
+            ('spam', '.', ''),
+            ('spam', '(', 'spam'),
+            
+            ('spam.', '', 'spam.'),
+            ('spam.', None, 'spam.'),
+            ('spam.', '.', 'spam'),
+            ('spam.', '(', 'spam.'),
+            
+            ('spam(', '', ''),
+            ('spam(', None, ''),
+            ('spam(', '.', ''),
+            ('spam(', '(', 'spam'),
+            
+            ('spam.eggs', '.', 'spam'),
+            ('spam.eggs.', '.', 'spam.eggs'),
+            ('spam.eggs(', '(', 'spam.eggs'),
+            ('spam.eggs.', '(', 'spam.eggs.'),
+            ('spam.eggs(', '.', 'spam'),
+            
+            ('x = spam.', '.', 'spam'),
+            ('x = spam.eggs', '.', 'spam'),
+            ('x = spam.eggs.', '.', 'spam.eggs'),
+            ('x = spam.eggs(', '(', 'spam.eggs'),
+
+            ('for n in range(3):\n    d.', '.', 'd'),
+            ('for n in range(3):\n...    d.', '.', 'd'),
+        )
+        for input, terminator, output in values:
+            self._checkRoot(input, terminator, output)
+
+    def test_getRoot_Advanced(self):
+        values = (
+            ('spam_', '', 'spam_'),
+            ('spam_', None, 'spam_'),
+            ('spam_', '.', ''),
+            ('spam_', '(', 'spam_'),
+            
+            ('_spam', '', '_spam'),
+            ('_spam', None, '_spam'),
+            ('_spam', '.', ''),
+            ('_spam', '(', '_spam'),
+            
+            ('spam_eggs', '', 'spam_eggs'),
+            ('spam_eggs', None, 'spam_eggs'),
+            ('spam_eggs', '.', ''),
+            ('spam_eggs', '(', 'spam_eggs'),
+            
+            ('spam123', '', 'spam123'),
+            ('spam123', None, 'spam123'),
+            ('spam123', '.', ''),
+            ('spam123', '(', 'spam123'),
+
+            ('spam_123', '', 'spam_123'),
+            ('spam_123', None, 'spam_123'),
+            ('spam_123', '.', ''),
+            ('spam_123', '(', 'spam_123'),
+        )
+        for input, terminator, output in values:
+            self._checkRoot(input, terminator, output)
+
+## The original intent was to detect when we were inside a string.
+## That has proven to be very difficult, for little benefit.
+## The fact that autocomplete or calltips might be triggered inside
+## a string is not a big deal. Sometimes it is even helpful.
+
+##    def test_getRoot_InsideStrings(self):
+##        values = (
+##            ('x = ".', '.', ''),
+##            ("x = '.", '.', ''),
+##            ('x = """.', '.', ''),
+##            ("x = '''.", '.', ''),
+##
+##            ('x = "(', '(', ''),
+##            ("x = '(", '(', ''),
+##            ('x = """(', '(', ''),
+##            ("x = '''(", '(', ''),
+##
+##            ('x = "spam', '.', ''),
+##            ('x = "spam.', '.', ''),
+##            ("x = 'spam.", '.', ''),
+##            ('x = """spam.', '.', ''),
+##            ("x = '''spam.", '.', ''),
+##            
+##            ('x = "spam', '(', ''),
+##            ('x = "spam(', '(', ''),
+##            ("x = 'spam(", '(', ''),
+##            ('x = """spam(', '(', ''),
+##            ("x = '''spam(", '(', ''),
+##            
+##            ('x = "spam.eggs.', '.', ''),
+##            ("x = 'spam.eggs.", '.', ''),
+##            ('x = """spam.eggs.', '.', ''),
+##            ("x = '''spam.eggs.", '.', ''),
+##            
+##            ('x = "spam.eggs(', '(', ''),
+##            ("x = 'spam.eggs(", '(', ''),
+##            ('x = """spam.eggs(', '(', ''),
+##            ("x = '''spam.eggs(", '(', ''),
+##        )
+##        for input, terminator, output in values:
+##            self._checkRoot(input, terminator, output)
+
+    def test_getRoot_EmptyTypes(self):
+        values = (
+            ("''.", '.', "''"),
+            ('"".', '.', '""'),
+            ('"""""".', '.', '""""""'),
+            ("''''''.", '.', "''''''"),
+
+            ('[].', '.', '[]'),
+            ('().', '.', '()'),
+            ('{}.', '.', '{}'),
+            
+            ('[](', '(', '[]'),
+            ('()(', '(', '()'),
+            ('{}(', '(', '{}'),
+            
+            ("x = ''.", '.', "''"),
+            ('x = "".', '.', '""'),
+            ('x = """""".', '.', '""""""'),
+            ("x = ''''''.", '.', "''''''"),
+
+            ('x = [].', '.', '[]'),
+            ('x = ().', '.', '()'),
+            ('x = {}.', '.', '{}'),
+            
+            ('x = [](', '(', '[]'),
+            ('x = ()(', '(', '()'),
+            ('x = {}(', '(', '{}'),
+
+            ('print [].', '.', '[]'),
+            ('print ().', '.', '()'),
+            ('print {}.', '.', '{}'),
+            
+            ('print [](', '(', '[]'),
+            ('print ()(', '(', '()'),
+            ('print {}(', '(', '{}'),
+
+            ("''.attr.", '.', "''.attr"),
+            ('"".attr.', '.', '"".attr'),
+            ('"""""".attr.', '.', '"""""".attr'),
+            ("''''''.attr.", '.', "''''''.attr"),
+
+            ('[].attr.', '.', '[].attr'),
+            ('().attr.', '.', '().attr'),
+            ('{}.attr.', '.', '{}.attr'),
+            
+            ('[].attr(', '(', '[].attr'),
+            ('().attr(', '(', '().attr'),
+            ('{}.attr(', '(', '{}.attr'),
+
+            ('spam().', '.', ''),
+            ('spam_().', '.', ''),
+            ('spam5().', '.', ''),
+            ('spam[]().', '.', ''),
+            ('spam()[].', '.', ''),
+            ('spam[]{}.', '.', ''),
+
+            ("spam(''.", '.', "''"),
+            ('spam("".', '.', '""'),
+            ('spam("""""".', '.', '""""""'),
+            ("spam(''''''.", '.', "''''''"),
+
+            ('spam([].', '.', '[]'),
+            ('spam(().', '.', '()'),
+            ('spam({}.', '.', '{}'),
+            ('spam[[].', '.', '[]'),
+            ('spam[().', '.', '()'),
+            ('spam[{}.', '.', '{}'),
+            ('x = {[].', '.', '[]'),
+            ('x = {().', '.', '()'),
+            ('x = {{}.', '.', '{}'),
+
+            ('spam,[].', '.', '[]'),
+            ('spam+[].', '.', '[]'),
+            ('spam-[].', '.', '[]'),
+            ('spam*[].', '.', '[]'),
+            ('spam/[].', '.', '[]'),
+            ('spam=[].', '.', '[]'),
+            ('spam%[].', '.', '[]'),
+            ('spam<[].', '.', '[]'),
+            ('spam>[].', '.', '[]'),
+            ('spam&[].', '.', '[]'),
+            ('spam|[].', '.', '[]'),
+            ('spam^[].', '.', '[]'),
+            ('spam~[].', '.', '[]'),
+            ('spam:[].', '.', '[]'),
+
+            ('spam,().', '.', '()'),
+            ('spam+().', '.', '()'),
+            ('spam-().', '.', '()'),
+            ('spam*().', '.', '()'),
+            ('spam/().', '.', '()'),
+            ('spam=().', '.', '()'),
+            ('spam%().', '.', '()'),
+            ('spam<().', '.', '()'),
+            ('spam>().', '.', '()'),
+            ('spam&().', '.', '()'),
+            ('spam|().', '.', '()'),
+            ('spam^().', '.', '()'),
+            ('spam~().', '.', '()'),
+            ('spam:().', '.', '()'),
+
+            ('spam,{}.', '.', '{}'),
+            ('spam+{}.', '.', '{}'),
+            ('spam-{}.', '.', '{}'),
+            ('spam*{}.', '.', '{}'),
+            ('spam/{}.', '.', '{}'),
+            ('spam={}.', '.', '{}'),
+            ('spam%{}.', '.', '{}'),
+            ('spam<{}.', '.', '{}'),
+            ('spam>{}.', '.', '{}'),
+            ('spam&{}.', '.', '{}'),
+            ('spam|{}.', '.', '{}'),
+            ('spam^{}.', '.', '{}'),
+            ('spam~{}.', '.', '{}'),
+            ('spam:{}.', '.', '{}'),
+        )
+        for input, terminator, output in values:
+            self._checkRoot(input, terminator, output)
+
+
+# Support for GetBaseObjectTestCase and GetAttributeNamesTestCase.
+
+class Foo:
+    def __init__(self):
+        pass
+
+    def __del__(self):
+        pass
+
+    def _private(self):
+        pass
+
+class Bar:
+    pass
+
+class Spam:
+    def __call__(self):
+        pass
+
+    def foo(self):
+        pass
+
+    def bar(spam):
+        # It shouldn't matter what we call "self".
+        pass
+
+    def eggs(self):
+        pass
+
+def ham(eggs):
+    pass
+
+class GetBaseObjectTestCase(unittest.TestCase):
+
+    def test_getBaseObject(self):
+        spam = Spam()
+        eggs = Spam.eggs
+        listappend = [].append
+        spamda = lambda: None
+        values = (
+            ('spam', 'spam', 0),
+            (123, 123, 0),
+            (12.3, 12.3, 0),
+            ([], [], 0),
+            ((), (), 0),
+            ({}, {}, 0),
+            # Builtin function.
+            (len, len, 0),
+            # Builtin method.
+            (listappend, listappend, 0),
+            # User function.
+            (ham, ham, 0),
+            # Byte-compiled code.
+            (ham.func_code, ham.func_code, 0),
+            # Lambda.
+            (spamda, spamda, 0),
+            # Class with init.
+            (Foo, Foo.__init__.im_func, 1),
+            # Class with no init.
+            (Bar, Bar, 0),
+            # Bound method.
+            (spam.foo, spam.foo.im_func, 1),
+            # Bound method with self named something else (spam).
+            (spam.bar, spam.bar.im_func, 1),
+            # Unbound method. (Do not drop the self argument.)
+            (eggs, eggs.im_func, 0),
+            # Callable instance.
+            (spam, spam.__call__.im_func, 1),
+        )
+        for object, baseObject, dropSelf in values:
+            result = introspect.getBaseObject(object)
+            self.assertEqual(result, (baseObject, dropSelf))
+
+
+class GetAttributeTestCase(unittest.TestCase):
+    """Base class for other test case classes."""
+
+    def setUp(self):
+        self.values = (
+            '__abs__',
+            '__add__',
+            '__and__',
+            '__base__',
+            '__bases__',
+            '__basicsize__',
+            '__builtins__',
+            '__call__',
+            '__class__',
+            '__cmp__',
+            '__coerce__',
+            '__contains__',
+            '__del__',
+            '__delattr__',
+            '__delitem__',
+            '__delslice__',
+            '__dict__',
+            '__dictoffset__',
+            '__div__',
+            '__divmod__',
+            '__doc__',
+            '__eq__',
+            '__file__',
+            '__flags__',
+            '__float__',
+            '__floordiv__',
+            '__ge__',
+            '__get__',
+            '__getattr__',
+            '__getattribute__',
+            '__getitem__',
+            '__getslice__',
+            '__gt__',
+            '__hash__',
+            '__hex__',
+            '__iadd__',
+            '__imul__',
+            '__init__',
+            '__int__',
+            '__invert__',
+            '__itemsize__',
+            '__iter__',
+            '__le__',
+            '__len__',
+            '__long__',
+            '__lshift__',
+            '__lt__',
+            '__mod__',
+            '__module__',
+            '__mro__',
+            '__mul__',
+            '__name__',
+            '__ne__',
+            '__neg__',
+            '__new__',
+            '__nonzero__',
+            '__oct__',
+            '__or__',
+            '__path__',
+            '__pos__',
+            '__pow__',
+            '__radd__',
+            '__rand__',
+            '__rdiv__',
+            '__rdivmod__',
+            '__reduce__',
+            '__repr__',
+            '__rfloordiv__',
+            '__rlshift__',
+            '__rmod__',
+            '__rmul__',
+            '__ror__',
+            '__rpow__',
+            '__rrshift__',
+            '__rshift__',
+            '__rsub__',
+            '__rtruediv__',
+            '__rxor__',
+            '__self__',
+            '__setattr__',
+            '__setitem__',
+            '__setslice__',
+            '__str__',
+            '__sub__',
+            '__subclasses__',
+            '__truediv__',
+            '__warningregistry__',
+            '__weakrefoffset__',
+            '__xor__',
+            'append',
+            'capitalize',
+            'center',
+            'clear',
+            'close',
+            'closed',
+            'co_argcount',
+            'co_cellvars',
+            'co_code',
+            'co_consts',
+            'co_filename',
+            'co_firstlineno',
+            'co_flags',
+            'co_freevars',
+            'co_lnotab',
+            'co_name',
+            'co_names',
+            'co_nlocals',
+            'co_stacksize',
+            'co_varnames',
+            'conjugate',
+            'copy',
+            'count',
+            'decode',
+            'encode',
+            'endswith',
+            'expandtabs',
+            'extend',
+            'fileno',
+            'find',
+            'flush',
+            'func_closure',
+            'func_code',
+            'func_defaults',
+            'func_dict',
+            'func_doc',
+            'func_globals',
+            'func_name',
+            'get',
+            'has_key',
+            'im_class',
+            'im_func',
+            'im_self',
+            'imag',
+            'index',
+            'insert',
+            'isalnum',
+            'isalpha',
+            'isatty',
+            'isdigit',
+            'islower',
+            'isspace',
+            'istitle',
+            'isupper',
+            'items',
+            'iteritems',
+            'iterkeys',
+            'itervalues',
+            'join',
+            'keys',
+            'ljust',
+            'lower',
+            'lstrip',
+            'mode',
+            'mro',
+            'name',
+            'pop',
+            'popitem',
+            'real',
+            'read',
+            'readinto',
+            'readline',
+            'readlines',
+            'remove',
+            'replace',
+            'reverse',
+            'rfind',
+            'rindex',
+            'rjust',
+            'rstrip',
+            'seek',
+            'setdefault',
+            'softspace',
+            'sort',
+            'split',
+            'splitlines',
+            'start',
+            'startswith',
+            'step',
+            'stop',
+            'strip',
+            'swapcase',
+            'tell',
+            'title',
+            'tolist',
+            'translate',
+            'truncate',
+            'update',
+            'upper',
+            'values',
+            'write',
+            'writelines',
+            'xreadlines',
+        )
+
+# Since getAllAttributeNames() calls str(object),
+# we need to test for a broken __str__ method.
+class BrokenStr:
+    def __str__(self):
+        raise Exception
+    
+brokenStr = BrokenStr()
+
+class GetAttributeNamesTestCase(GetAttributeTestCase):
+
+    def setUp(self):
+        GetAttributeTestCase.setUp(self)
+        import PyCrust
+        spam = Spam()
+        self.f = open('test_introspect.py')
+        self.items = (
+            None,
+            int(123),
+            long(123),
+            float(123),
+            complex(123),
+            "",
+            unicode(""),
+            [],
+            (),
+            xrange(0),
+            {},
+            # Builtin function.
+            len,
+            # Builtin method.
+            [].append,
+            # User function.
+            ham,
+            # Byte-compiled code.
+            ham.func_code,
+            # Lambda.
+            lambda: None,
+            # Class with no init.
+            Bar,
+            # Instance with no init.
+            Bar(),
+            # Class with init and del.
+            Foo,
+            # Instance with init and del.
+            Foo(),
+            # Bound method.
+            spam.foo,
+            # Unbound method.
+            Spam.eggs,
+            # Callable instance.
+            spam,
+            # Module.
+            introspect,
+            # Package.
+            PyCrust,
+            # Buffer.
+            buffer(''),
+            # File.
+            self.f,
+            # Slice.
+            slice(0),
+            # Ellipsis.
+            Ellipsis,
+            # BrokenStr class.
+            BrokenStr,
+            # BrokenStr instance.
+            brokenStr,
+        )
+
+    def tearDown(self):
+        self.items = None
+        self.f.close()
+
+    def test_getAttributeNames(self):
+        for item in self.items:
+            self._checkAttributeNames(item)
+        if __builtins__.has_key('object'):
+            self._checkAttributeNames(object)
+
+    def test_getAttributeNames_NoSingle(self):
+        for item in self.items:
+            result = introspect.getAttributeNames(item, includeSingle=0)
+            attributes = [attribute for attribute in result \
+                          if attribute[0] != '_' or attribute[:2] == '__']
+            self.assertEqual(result, attributes, 
+                             ':item: %r' % (item,))
+
+    def test_getAttributeNames_NoDouble(self):
+        for item in self.items:
+            result = introspect.getAttributeNames(item, includeDouble=0)
+            attributes = [attribute for attribute in result \
+                          if attribute[:2] != '__']
+            self.assertEqual(result, attributes, 
+                             ':item: %r' % (item,))
+
+    def test_getAttributeNames_NoSingleOrDouble(self):
+        for item in self.items:
+            result = introspect.getAttributeNames(item, includeSingle=0, 
+                                                  includeDouble=0)
+            attributes = [attribute for attribute in result \
+                          if attribute[0] != '_']
+            self.assertEqual(result, attributes, 
+                             ':item: %r' % (item,))
+
+    def _checkAttributeNames(self, item):
+        result = introspect.getAttributeNames(item)
+        attributes = [attribute for attribute in self.values \
+                      if hasattr(item, attribute)]
+        for attribute in attributes:
+            self.assert_(attribute in result, 
+                         ':item: %r :attribute: %r' % (item, attribute))
+
+
+class GetAutoCompleteListTestCase(GetAttributeTestCase):
+
+    def setUp(self):
+        GetAttributeTestCase.setUp(self)
+        self.items = (
+            'None.',
+            '123 .',
+            '"".',
+            '[].',
+            '().',
+            '{}.',
+            # Builtin function.
+            'len.',
+            # Builtin method.
+            '[].append.',
+        )
+
+    def test_getAutoCompleteList(self):
+        for item in self.items:
+            result = introspect.getAutoCompleteList(item)
+            object = eval(item[:-1])
+            attributes = [attribute for attribute in self.values \
+                          if hasattr(object, attribute)]
+            for attribute in attributes:
+                self.assert_(attribute in result, 
+                             ':item: %r :attribute: %r' % (item, attribute))
+
+    def test_getAutoCompleteList_NoSingle(self):
+        for item in self.items:
+            result = introspect.getAutoCompleteList(item, includeSingle=0)
+            attributes = [attribute for attribute in result \
+                          if attribute[0] != '_' or attribute[:2] == '__']
+            self.assertEqual(result, attributes, 
+                             ':item: %r' % (item,))
+
+    def test_getAutoCompleteList_NoDouble(self):
+        for item in self.items:
+            result = introspect.getAutoCompleteList(item, includeDouble=0)
+            attributes = [attribute for attribute in result \
+                          if attribute[:2] != '__']
+            self.assertEqual(result, attributes, 
+                             ':item: %r' % (item,))
+
+    def test_getAutoCompleteList_NoSingleOrDouble(self):
+        for item in self.items:
+            result = introspect.getAutoCompleteList(item, includeSingle=0, 
+                                                    includeDouble=0)
+            attributes = [attribute for attribute in result \
+                          if attribute[0] != '_']
+            self.assertEqual(result, attributes, 
+                             ':item: %r' % (item,))
+
+
+# Support for GetConstructorTestCase.
+
+class A1:
+    def __init__(self, a):
+        self.a = a
+
+class B1(A1):
+    def __init__(self, b):
+        self.b = b
+
+class C1(A1):
+    pass
+
+class D1(C1, B1):
+    pass
+
+if __builtins__.has_key('object'):
+    class A2(object):
+        def __init__(self, a):
+            self.a = a
+
+    class B2(A2):
+        def __init__(self, b):
+            self.b = b
+
+    class C2(A2):
+        pass
+
+    class D2(C2, B2):
+        pass
+    
+class N:
+    pass
+
+class O:
+    def __init__(self, a, b=2, *args, **kwargs):
+        pass
+
+class P(O):
+    pass
+
+class Q(P):
+    def __init__(self, c, d=4):
+        pass
+
+class GetConstructorTestCase(unittest.TestCase):
+
+    def test_getConstructor(self):
+        args = ('self', 'a', 'b', 'args', 'kwargs')
+        varnames = introspect.getConstructor(O).func_code.co_varnames
+        self.assertEqual(varnames, args)
+        varnames = introspect.getConstructor(P).func_code.co_varnames
+        self.assertEqual(varnames, args)
+        args = ('self', 'c', 'd')
+        varnames = introspect.getConstructor(Q).func_code.co_varnames
+        self.assertEqual(varnames, args)
+
+    def test_getConstructor_None(self):
+        values = (N, 1, 'spam', {}, [], (), dir)
+        for value in values:
+            self.assertEqual(introspect.getConstructor(N), None)
+
+    def test_getConstructor_MultipleInheritance(self):
+        # Test old style inheritance rules.
+        args = ('self', 'a')
+        varnames = introspect.getConstructor(D1).func_code.co_varnames
+        self.assertEqual(varnames, args)
+        if __builtins__.has_key('object'):
+            # Test new style inheritance rules as well.
+            args = ('self', 'b')
+            varnames = introspect.getConstructor(D2).func_code.co_varnames
+            self.assertEqual(varnames, args)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/wxPython/wxPython/py/tests/test_pseudo.py b/wxPython/wxPython/py/tests/test_pseudo.py
new file mode 100644
index 0000000000..b6064b283e
--- /dev/null
+++ b/wxPython/wxPython/py/tests/test_pseudo.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import unittest
+
+# Import from this module's parent directory.
+import os
+import sys
+sys.path.insert(0, os.pardir)
+import pseudo
+del sys.path[0]
+del sys
+del os
+
+
+"""
+These unittest methods are preferred:
+-------------------------------------
+self.assert_(expr, msg=None)
+self.assertEqual(first, second, msg=None)
+self.assertRaises(excClass, callableObj, *args, **kwargs)
+self.fail(msg=None)
+self.failIf(expr, msg=None)
+"""
+
+
+class ModuleTestCase(unittest.TestCase):
+
+    def test_module(self):
+        module = pseudo
+        self.assert_(module.__author__)
+        self.assert_(module.__cvsid__)
+        self.assert_(module.__revision__)
+        self.assert_(module.PseudoFile)
+        self.assert_(module.PseudoFileErr)
+        self.assert_(module.PseudoFileIn)
+        self.assert_(module.PseudoFileOut)
+        self.assert_(module.PseudoKeyword)
+
+
+class PseudoTestCase(unittest.TestCase):
+
+    def setUp(self):
+        pass
+
+    def tearDown(self):
+        pass
+
+
+class PseudoFileTestCase(unittest.TestCase):
+
+    def setUp(self):
+        pass
+
+    def tearDown(self):
+        pass
+
+
+class PseudoFileOutTestCase(unittest.TestCase):
+
+    def setUp(self):
+        pass
+
+    def tearDown(self):
+        pass
+
+    def _write(self):
+        pass
+
+    def test_PseudoFileOut_goodInit(self):
+        self.assert_(pseudo.PseudoFileOut(write=self._write))
+
+    def test_PseudoFileOut_badInit(self):
+        self.assertRaises(ValueError, pseudo.PseudoFileOut, write='bad')
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/wxPython/wxPython/py/tests/test_version.py b/wxPython/wxPython/py/tests/test_version.py
new file mode 100644
index 0000000000..9eb40fb7cd
--- /dev/null
+++ b/wxPython/wxPython/py/tests/test_version.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+import unittest
+
+import types
+
+# Import from this module's parent directory.
+import os
+import sys
+sys.path.insert(0, os.pardir)
+import version
+del sys.path[0]
+del sys
+del os
+
+
+"""
+These unittest methods are preferred:
+-------------------------------------
+self.assert_(expr, msg=None)
+self.assertEqual(first, second, msg=None)
+self.assertRaises(excClass, callableObj, *args, **kwargs)
+self.fail(msg=None)
+self.failIf(expr, msg=None)
+"""
+
+
+class ModuleTestCase(unittest.TestCase):
+
+    def test_module(self):
+        module = version
+        self.assert_(module.__author__)
+        self.assert_(module.__cvsid__)
+        self.assert_(module.__revision__)
+        self.assert_(module.VERSION)
+
+
+class VersionTestCase(unittest.TestCase):
+
+    def test_VERSION(self):
+        self.assert_(type(version.VERSION) is types.StringType)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/wxPython/wxPython/py/tests/testall.py b/wxPython/wxPython/py/tests/testall.py
new file mode 100644
index 0000000000..22669e777d
--- /dev/null
+++ b/wxPython/wxPython/py/tests/testall.py
@@ -0,0 +1,25 @@
+#!/usr/bin/env python
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+
+import unittest
+import glob
+import os
+
+
+def suite():
+    """Return a test suite containing all test cases in all test modules. 
+    Searches the current directory for any modules matching test_*.py."""
+    suite = unittest.TestSuite()
+    for filename in glob.glob('test_*.py'):
+        module = __import__(os.path.splitext(filename)[0])
+        suite.addTest(unittest.defaultTestLoader.loadTestsFromModule(module))
+    return suite
+
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='suite')
+
diff --git a/wxPython/wxPython/lib/PyCrust/version.py b/wxPython/wxPython/py/version.py
similarity index 52%
rename from wxPython/wxPython/lib/PyCrust/version.py
rename to wxPython/wxPython/py/version.py
index 3950c4a402..57d43f99f7 100644
--- a/wxPython/wxPython/lib/PyCrust/version.py
+++ b/wxPython/wxPython/py/version.py
@@ -1,11 +1,9 @@
 """Provides an object representing the current 'version' or 'release'
-of PyCrust as a whole.  Individual classes, such as the shell, filling
-and interpreter, each have a revision property based on the CVS
-Revision."""
+of Py as a whole.  Individual classes, such as the shell, filling and
+interpreter, each have a revision property based on the CVS Revision."""
 
 __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
 __cvsid__ = "$Id$"
 __revision__ = "$Revision$"[11:-2]
 
-VERSION = '0.9'
- 
+VERSION = '0.9.2'
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Accelerators.py b/wxPython/wxPython/py/wxd/Accelerators.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Accelerators.py
rename to wxPython/wxPython/py/wxd/Accelerators.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/App.py b/wxPython/wxPython/py/wxd/App.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/App.py
rename to wxPython/wxPython/py/wxd/App.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Base.py b/wxPython/wxPython/py/wxd/Base.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Base.py
rename to wxPython/wxPython/py/wxd/Base.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/ClipDragDrop.py b/wxPython/wxPython/py/wxd/ClipDragDrop.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/ClipDragDrop.py
rename to wxPython/wxPython/py/wxd/ClipDragDrop.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Config.py b/wxPython/wxPython/py/wxd/Config.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Config.py
rename to wxPython/wxPython/py/wxd/Config.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Controls.py b/wxPython/wxPython/py/wxd/Controls.py
similarity index 97%
rename from wxPython/wxPython/lib/PyCrust/wxd/Controls.py
rename to wxPython/wxPython/py/wxd/Controls.py
index 1d1fad0210..0ae01ea9ec 100644
--- a/wxPython/wxPython/lib/PyCrust/wxd/Controls.py
+++ b/wxPython/wxPython/py/wxd/Controls.py
@@ -503,6 +503,19 @@ class GenericDirCtrl(Control):
         pass
 
 
+class DirFilterListCtrl(Choice):
+    """"""
+
+    def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
+                 size=wx.DefaultSize, style=0):
+        """"""
+        pass
+
+    def FillFilterList(filter, defaultFilter):
+        """"""
+        pass
+
+
 class ListBox(ControlWithItems):
     """"""
 
@@ -1126,11 +1139,11 @@ class Notebook(Control):
         """"""
         pass
 
-    def AddPage(self, pPage, strText, bSelect=False, imageId=-1):
+    def AddPage(self, page, text, select=False, imageId=-1):
         """"""
         pass
 
-    def AdvanceSelection(self, bForward=True):
+    def AdvanceSelection(self, forward=True):
         """"""
         pass
 
@@ -1147,7 +1160,7 @@ class Notebook(Control):
         """"""
         pass
 
-    def DeletePage(self, nPage):
+    def DeletePage(self, page):
         """"""
         pass
 
@@ -1155,7 +1168,7 @@ class Notebook(Control):
         """"""
         pass
 
-    def GetPage(self, nPage):
+    def GetPage(self, page):
         """"""
         pass
 
@@ -1163,11 +1176,11 @@ class Notebook(Control):
         """"""
         pass
 
-    def GetPageImage(self, nPage):
+    def GetPageImage(self, page):
         """"""
         pass
 
-    def GetPageText(self, nPage):
+    def GetPageText(self, page):
         """"""
         pass
 
@@ -1179,11 +1192,11 @@ class Notebook(Control):
         """"""
         pass
 
-    def InsertPage(self, nPage, pPage, strText, bSelect=False, imageId=-1):
+    def InsertPage(self, index, page, text, select=False, imageId=-1):
         """"""
         pass
 
-    def RemovePage(self, nPage):
+    def RemovePage(self, page):
         """"""
         pass
 
@@ -1199,7 +1212,7 @@ class Notebook(Control):
         """"""
         pass
 
-    def SetPageImage(self, nPage, nImage):
+    def SetPageImage(self, page, image):
         """"""
         pass
 
@@ -1207,11 +1220,11 @@ class Notebook(Control):
         """"""
         pass
 
-    def SetPageText(self, nPage, strText):
+    def SetPageText(self, page, text):
         """"""
         pass
 
-    def SetSelection(self, nPage):
+    def SetSelection(self, page):
         """"""
         pass
 
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/DataStructures.py b/wxPython/wxPython/py/wxd/DataStructures.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/DataStructures.py
rename to wxPython/wxPython/py/wxd/DataStructures.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/DateTime.py b/wxPython/wxPython/py/wxd/DateTime.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/DateTime.py
rename to wxPython/wxPython/py/wxd/DateTime.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Dialogs.py b/wxPython/wxPython/py/wxd/Dialogs.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Dialogs.py
rename to wxPython/wxPython/py/wxd/Dialogs.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Drawing.py b/wxPython/wxPython/py/wxd/Drawing.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Drawing.py
rename to wxPython/wxPython/py/wxd/Drawing.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Errors.py b/wxPython/wxPython/py/wxd/Errors.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Errors.py
rename to wxPython/wxPython/py/wxd/Errors.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/EventFunctions.py b/wxPython/wxPython/py/wxd/EventFunctions.py
similarity index 98%
rename from wxPython/wxPython/lib/PyCrust/wxd/EventFunctions.py
rename to wxPython/wxPython/py/wxd/EventFunctions.py
index 24be2c9a13..b9e7f8a822 100644
--- a/wxPython/wxPython/lib/PyCrust/wxd/EventFunctions.py
+++ b/wxPython/wxPython/py/wxd/EventFunctions.py
@@ -788,7 +788,14 @@ def EVT_WINDOW_CREATE(win, func):
     """"""
     pass
 
+def EVT_WINDOW_CREATE_ID(win, id, func):
+    """"""
+    pass
+
 def EVT_WINDOW_DESTROY(win, func):
     """"""
     pass
 
+def EVT_WINDOW_DESTROY_ID(win, id, func):
+    """"""
+    pass
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Events.py b/wxPython/wxPython/py/wxd/Events.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Events.py
rename to wxPython/wxPython/py/wxd/Events.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/FileSystem.py b/wxPython/wxPython/py/wxd/FileSystem.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/FileSystem.py
rename to wxPython/wxPython/py/wxd/FileSystem.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Frames.py b/wxPython/wxPython/py/wxd/Frames.py
similarity index 67%
rename from wxPython/wxPython/lib/PyCrust/wxd/Frames.py
rename to wxPython/wxPython/py/wxd/Frames.py
index 94c0e72074..49b5b21306 100644
--- a/wxPython/wxPython/lib/PyCrust/wxd/Frames.py
+++ b/wxPython/wxPython/py/wxd/Frames.py
@@ -37,9 +37,9 @@ class Frame(TopLevelWindow):
                  name=wx.PyFrameNameStr):
         """Create a Frame instance.
 
-        parent - The window parent. This may be NULL. If it is
-        non-NULL, the frame will always be displayed on top of the
-        parent window on Windows.
+        parent - The window parent.  This may be None.  If it is not
+        None, the frame will always be displayed on top of the parent
+        window on Windows.
 
         id - The window identifier. It may take a value of -1 to
         indicate a default value.
@@ -93,8 +93,8 @@ class Frame(TopLevelWindow):
         By default, the status bar is an instance of wx.StatusBar."""
         pass
 
-    def CreateToolBar(self, style=wx.NO_BORDER|wx.TB_HORIZONTAL, id=-1,
-                      name=wx.PyToolBarNameStr):
+    def CreateToolBar(self, style=wx.NO_BORDER | wx.TB_HORIZONTAL,
+                      id=-1, name=wx.PyToolBarNameStr):
         """Create a toolbar at the top or left of frame.
 
         style - The toolbar style. See wxToolBar for a list of valid
@@ -141,8 +141,7 @@ class Frame(TopLevelWindow):
         pass
 
     def GetStatusBarPane(self):
-        """Return status bar pane used to display menu and toolbar
-        help."""
+        """Return status bar pane used to display menu/toolbar help."""
         pass
 
     def GetToolBar(self):
@@ -237,22 +236,102 @@ class Frame(TopLevelWindow):
 
 
 class LayoutAlgorithm(Object):
-    """"""
+    """LayoutAlgorithm implements layout of subwindows in MDI or SDI
+    frames.  It sends a wx.CalculateLayoutEvent event to children of
+    the frame, asking them for information about their size.  For MDI
+    parent frames, the algorithm allocates the remaining space to the
+    MDI client window (which contains the MDI child frames).  For SDI
+    (normal) frames, a 'main' window is specified as taking up the
+    remaining space.
+
+    Because the event system is used, this technique can be applied to
+    any windows, which are not necessarily 'aware' of the layout
+    classes.  However, you may wish to use wx.SashLayoutWindow for
+    your subwindows since this class provides handlers for the
+    required events, and accessors to specify the desired size of the
+    window.  The sash behaviour in the base class can be used,
+    optionally, to make the windows user-resizable.
+
+    LayoutAlgorithm is typically used in IDE (integrated development
+    environment) applications, where there are several resizable
+    windows in addition to the MDI client window, or other primary
+    editing window.  Resizable windows might include toolbars, a
+    project window, and a window for displaying error and warning
+    messages.
+
+    When a window receives an OnCalculateLayout event, it should call
+    SetRect in the given event object, to be the old supplied
+    rectangle minus whatever space the window takes up.  It should
+    also set its own size accordingly.
+    SashLayoutWindow.OnCalculateLayout generates an OnQueryLayoutInfo
+    event which it sends to itself to determine the orientation,
+    alignment and size of the window, which it gets from internal
+    member variables set by the application.
+
+    The algorithm works by starting off with a rectangle equal to the
+    whole frame client area.  It iterates through the frame children,
+    generating OnCalculateLayout events which subtract the window size
+    and return the remaining rectangle for the next window to process.
+    It is assumed (by SashLayoutWindow.OnCalculateLayout) that a
+    window stretches the full dimension of the frame client, according
+    to the orientation it specifies.  For example, a horizontal window
+    will stretch the full width of the remaining portion of the frame
+    client area.  In the other orientation, the window will be fixed
+    to whatever size was specified by OnQueryLayoutInfo.  An alignment
+    setting will make the window 'stick' to the left, top, right or
+    bottom of the remaining client area.  This scheme implies that
+    order of window creation is important.  Say you wish to have an
+    extra toolbar at the top of the frame, a project window to the
+    left of the MDI client window, and an output window above the
+    status bar.  You should therefore create the windows in this
+    order: toolbar, output window, project window.  This ensures that
+    the toolbar and output window take up space at the top and bottom,
+    and then the remaining height in-between is used for the project
+    window.
+
+    LayoutAlgorithm is quite independent of the way in which
+    OnCalculateLayout chooses to interpret a window's size and
+    alignment.  Therefore you could implement a different window class
+    with a new OnCalculateLayout event handler, that has a more
+    sophisticated way of laying out the windows.  It might allow
+    specification of whether stretching occurs in the specified
+    orientation, for example, rather than always assuming
+    stretching. (This could, and probably should, be added to the
+    existing implementation).
+
+    The algorithm object does not respond to events, but itself
+    generates the following events in order to calculate window sizes:
+    EVT_QUERY_LAYOUT_INFO(func), EVT_CALCULATE_LAYOUT(func)."""
 
     def __init__(self):
-        """"""
+        """Create a LayoutAlgorithm instance."""
         pass
 
-    def LayoutFrame(self):
-        """"""
+    def LayoutFrame(self, frame, mainWindow=wx.NULL):
+        """Lay out the children of a normal frame.
+
+        mainWindow is set to occupy the remaining space.  This
+        function simply calls LayoutWindow()."""
         pass
 
-    def LayoutMDIFrame(self):
-        """"""
+    def LayoutMDIFrame(self, frame, rect=wx.NULL):
+        """Lay out the children of an MDI parent frame.
+
+        If rect is non-NULL, the given rectangle will be used as a
+        starting point instead of the frame's client area.
+
+        The MDI client window is set to occupy the remaining space."""
         pass
 
-    def LayoutWindow(self):
-        """"""
+    def LayoutWindow(self, parent, mainWindow=wx.NULL):
+        """Lay out the children of a normal frame or other window.
+
+        mainWindow is set to occupy the remaining space.  If this is
+        not specified, then the last window that responds to a
+        calculate layout event in query mode will get the remaining
+        space (that is, a non-query OnCalculateLayout event will not
+        be sent to this window and the window will be set to the
+        remaining size)."""
         pass
 
 
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Functions.py b/wxPython/wxPython/py/wxd/Functions.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Functions.py
rename to wxPython/wxPython/py/wxd/Functions.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Help.py b/wxPython/wxPython/py/wxd/Help.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Help.py
rename to wxPython/wxPython/py/wxd/Help.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/ImageHandlers.py b/wxPython/wxPython/py/wxd/ImageHandlers.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/ImageHandlers.py
rename to wxPython/wxPython/py/wxd/ImageHandlers.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Joystick.py b/wxPython/wxPython/py/wxd/Joystick.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Joystick.py
rename to wxPython/wxPython/py/wxd/Joystick.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/LayoutConstraints.py b/wxPython/wxPython/py/wxd/LayoutConstraints.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/LayoutConstraints.py
rename to wxPython/wxPython/py/wxd/LayoutConstraints.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Logging.py b/wxPython/wxPython/py/wxd/Logging.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Logging.py
rename to wxPython/wxPython/py/wxd/Logging.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Menus.py b/wxPython/wxPython/py/wxd/Menus.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Menus.py
rename to wxPython/wxPython/py/wxd/Menus.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/MimeTypes.py b/wxPython/wxPython/py/wxd/MimeTypes.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/MimeTypes.py
rename to wxPython/wxPython/py/wxd/MimeTypes.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Misc.py b/wxPython/wxPython/py/wxd/Misc.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Misc.py
rename to wxPython/wxPython/py/wxd/Misc.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Panel.py b/wxPython/wxPython/py/wxd/Panel.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Panel.py
rename to wxPython/wxPython/py/wxd/Panel.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Parameters.py b/wxPython/wxPython/py/wxd/Parameters.py
similarity index 98%
rename from wxPython/wxPython/lib/PyCrust/wxd/Parameters.py
rename to wxPython/wxPython/py/wxd/Parameters.py
index 2bc3c79592..60db3e157a 100644
--- a/wxPython/wxPython/lib/PyCrust/wxd/Parameters.py
+++ b/wxPython/wxPython/py/wxd/Parameters.py
@@ -36,6 +36,7 @@ _params = (
     'DefaultValidator',
     'EmptyString',
     'EVT_NULL',
+    'HORIZONTAL',
     'HSCROLL',
     'NO_BORDER',
     'NULL',
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Printing.py b/wxPython/wxPython/py/wxd/Printing.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Printing.py
rename to wxPython/wxPython/py/wxd/Printing.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Process.py b/wxPython/wxPython/py/wxd/Process.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Process.py
rename to wxPython/wxPython/py/wxd/Process.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/SashSplitter.py b/wxPython/wxPython/py/wxd/SashSplitter.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/SashSplitter.py
rename to wxPython/wxPython/py/wxd/SashSplitter.py
diff --git a/wxPython/wxPython/py/wxd/Sizers.py b/wxPython/wxPython/py/wxd/Sizers.py
new file mode 100644
index 0000000000..918a80b7c2
--- /dev/null
+++ b/wxPython/wxPython/py/wxd/Sizers.py
@@ -0,0 +1,605 @@
+"""Decorator classes for documentation and shell scripting.
+
+Sizer is the abstract base class used for laying out subwindows in a
+window.  You cannot use Sizer directly; instead, you will have to use
+one of the sizer classes derived from it.  Currently there are
+BoxSizer, StaticBoxSizer, NotebookSizer, GridSizer, and FlexGridSizer.
+
+The layout algorithm used by sizers in wxPython is closely related to
+layout in other GUI toolkits, such as Java's AWT, the GTK toolkit or
+the Qt toolkit.  It is based upon the idea of the individual
+subwindows reporting their minimal required size and their ability to
+get stretched if the size of the parent window has changed.  This will
+most often mean, that the programmer does not set the original size of
+a dialog in the beginning, rather the dialog will assigned a sizer and
+this sizer will be queried about the recommended size.  The sizer in
+turn will query its children, which can be normal windows, empty space
+or other sizers, so that a hierarchy of sizers can be constructed.
+Note that wxSizer does not derive from wxWindow and thus do not
+interfere with tab ordering and requires very little resources
+compared to a real window on screen.
+
+What makes sizers so well fitted for use in wxPython is the fact that
+every control reports its own minimal size and the algorithm can
+handle differences in font sizes or different window (dialog item)
+sizes on different platforms without problems.  If e.g. the standard
+font as well as the overall design of Motif widgets requires more
+space than on Windows, the initial dialog size will automatically be
+bigger on Motif than on Windows.
+
+If you wish to create a sizer class in wxPython you should derive the
+class from PySizer in order to get Python-aware capabilities for the
+various virtual methods.
+"""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+
+# These are not the real wxPython classes. These are Python versions
+# for documentation purposes. They are also used to apply docstrings
+# to the real wxPython classes, which are SWIG-generated wrappers for
+# C-language classes.
+
+
+from Base import Object
+import Parameters as wx
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+
+
+class Sizer(Object):
+    """Sizer is the abstract base class used for laying out subwindows
+    in a window. You shouldn't use Sizer directly; instead, you should
+    use one of the sizer classes derived from it.
+
+    If you wish to create a sizer class in wxPython you should derive
+    the class from PySizer in order to get Python-aware capabilities
+    for the various virtual methods.
+
+    Placing a child sizer in a sizer allows you to create hierarchies
+    of sizers (typically a vertical box as the top sizer and several
+    horizontal boxes on the level beneath).
+
+    When you place a window in a sizer the window's initial size
+    (either set explicitly by the user or calculated internally when
+    using wxDefaultSize) is interpreted as the minimal and in many
+    cases also the initial size.  This is particularly useful in
+    connection with SetSizeHints.
+
+    Adding spacers to sizers gives more flexibility in the design of
+    dialogs.  Imagine for example a horizontal box with two buttons at
+    the bottom of a dialog: you might want to insert a space between
+    the two buttons and make that space stretchable using the
+    proportion flag and the result will be that the left button will
+    be aligned with the left side of the dialog and the right button
+    with the right side - the space in between will shrink and grow
+    with the dialog.
+
+    Several methods (Add, Insert, Prepend) take the following
+    parameters:
+
+    proportion - Used only by BoxSizer to indicate if a child of a
+    sizer can change its size in the main orientation of the BoxSizer,
+    where 0 stands for not changeable and a value of more than zero is
+    interpreted relative to the value of other children of the same
+    BoxSizer.  For example, you might have a horizontal BoxSizer with
+    three children, two of which are supposed to change their size
+    with the sizer.  Then the two stretchable windows would each get a
+    value of 1 to make them grow and shrink equally with the sizer's
+    horizontal dimension.
+
+    flag - This parameter can be used to set a number of flags which
+    can be combined using the binary OR operator |.  Two main
+    behaviours are defined using these flags.  One is the border
+    around a window: the border parameter determines the border width
+    whereas the flags given here determine where the border may be
+    (wx.TOP, wx.BOTTOM, wx.LEFT, wx.RIGHT or wx.ALL).  The other flags
+    determine the child window's behaviour if the size of the sizer
+    changes.  However this is not - in contrast to the proportion flag
+    - in the main orientation, but in the respectively other
+    orientation.  So if you created a BoxSizer with the wx.VERTICAL
+    option, these flags will be relevant if the sizer changes its
+    horizontal size.  A child may get resized to completely fill out
+    the new size (using either wx.GROW or wx.EXPAND), it may get
+    proportionally resized (wx.SHAPED), it may get centered
+    (wx.ALIGN_CENTER or wx.ALIGN_CENTRE) or it may get aligned to
+    either side (wx.ALIGN_LEFT and wx.ALIGN_TOP are set to 0 and thus
+    represent the default, wx.ALIGN_RIGHT and wx.ALIGN_BOTTOM have
+    their obvious meaning).  With proportional resize, a child may
+    also be centered in the main orientation using
+    wx.ALIGN_CENTER_VERTICAL (same as wx.ALIGN_CENTRE_VERTICAL) and
+    wx.ALIGN_CENTER_HORIZONTAL (same as wx.ALIGN_CENTRE_HORIZONTAL)
+    flags.  Finally, you can also specify wx.ADJUST_MINSIZE flag to
+    make the minimal size of the control dynamically adjust to the
+    value returned by its GetAdjustedBestSize() method - this allows,
+    for example, for correct relayouting of a static text control even
+    if its text is changed during run-time.
+
+    border - Determines the border width, if the flag parameter is set
+    to any border.  A border is not a visible element, but rather a
+    margin of empty space surrounding the item.
+
+    userData - Allows an extra object to be attached to the sizer
+    item, for use in derived classes when sizing information is more
+    complex than the option and flag parameters will allow."""
+
+    def __init__(self):
+        """Must be defined by subclasses."""
+        pass
+
+    def Add(self, item, proportion=0, flag=0, border=0,
+            userData=wx.NULL):
+        """Add item to sizer.
+
+        item - window, sizer, or spacer.  Spacer is specified with a
+        (width, height) tuple or wx.Size representing the spacer size.
+
+        Call Layout() to update the layout on-screen after adding."""
+        pass
+
+    def Clear(self, delete_windows=False):
+        """Remove all items from this sizer.
+
+        If delete_windows is True, destroy any window items."""
+        pass
+
+    def DeleteWindows(self):
+        """Destroy windows associated with this sizer."""
+        pass
+
+    def Destroy(self):
+        """Destroy the sizer."""
+        pass
+
+    def Fit(self, window):
+        """Resize window to match sizer's minimal size; return size.
+
+        This is commonly done in the constructor of the window itself."""
+        pass
+
+    def FitInside(self, window):
+        """Resize window virtual size to match sizer's minimal size.
+
+        This will not alter the on screen size of the window, but may
+        cause the addition/removal/alteration of scrollbars required
+        to view the virtual area in windows which manage it."""
+        pass
+
+    def GetChildren(self):
+        """Return list of SizerItem instances."""
+        pass
+
+    def GetMinSize(self):
+        """Return the minimal size of the sizer.
+
+        This is either the combined minimal size of all the children
+        and their borders or the minimal size set by SetMinSize,
+        whichever is larger."""
+        pass
+
+    def GetMinSizeTuple(self):
+        """Return the minimal size of the sizer as a tuple.
+
+        This is either the combined minimal size of all the children
+        and their borders or the minimal size set by SetMinSize,
+        whichever is larger."""
+        pass
+
+    def GetPosition(self):
+        """Return the current position of the sizer."""
+        pass
+
+    def GetPositionTuple(self):
+        """Return the current position of the sizer as a tuple."""
+        pass
+
+    def GetSize(self):
+        """Return the current size of the sizer."""
+        pass
+
+    def GetSizeTuple(self):
+        """Return the current size of the sizer as a tuple."""
+        pass
+
+    def Hide(self, item):
+        """Hide item (sizer or window).  To make a sizer item
+        disappear on-screen, use Hide() followed by Layout()."""
+        pass
+
+    def Insert(self, before, item, proportion=0, flag=0, border=0,
+               userData=wx.NULL):
+        """Same as Add, but inserts item into list of items (windows,
+        subsizers or spacers) owned by this sizer.
+
+        Call Layout() to update the layout on-screen after inserting."""
+        pass
+
+    def IsShown(self, item):
+        """Return True if item (sizer or window) is shown."""
+        pass
+
+    def Layout(self):
+        """Force layout of children anew.
+
+        Use after adding or removing a child (window, other sizer, or
+        spacer) from the sizer while keeping the current dimension."""
+        pass
+
+    def Prepend(self, item, proportion=0, flag=0, border=0,
+                userData=wx.NULL):
+        """Same as Add, but prepends item to beginning of list of
+        items (windows, subsizers or spacers) owned by this sizer.
+
+        Call Layout() to update the layout on-screen after prepending."""
+        pass
+
+    def Remove(self, item):
+        """Remove item from the sizer.
+
+        item - sizer, window, or index of item in the sizer, typically
+        0 for the first item.
+
+        Does not cause any layout or resizing to take place, and does
+        not delete the child itself.  Call Layout() to update the
+        layout on-screen after removing child.
+
+        Return True if child found and removed, False otherwise."""
+        pass
+
+    def SetDimension(self, x, y, width, height):
+        """Force sizer to take the given dimension and thus force
+        items owned by sizer to resize themselves according to the
+        rules defined by the parameter in the Add and Prepend methods."""
+        pass
+
+    def SetItemMinSize(self, item, width, height):
+        """Set minimal size of item.
+
+        item - sizer, window, or index of item in the sizer, typically
+        0 for the first item.
+
+        The item will be found recursively in the sizer's descendants.
+        Enables application to set size of item after initialization."""
+        pass
+
+    def SetMinSize(self, size):
+        """Set minimal size.
+
+        Normally, sizer will calculate minimal size based on how much
+        space its children need.  After calling this method,
+        GetMinSize will return the minimal size as requested by its
+        children or the minimal size set here, whichever is larger."""
+        pass
+
+    def SetSizeHints(self, window):
+        """Set (and Fit) minimal size of window to match sizer's
+        minimal size.  Commonly called in the window's init."""
+        pass
+
+    def SetVirtualSizeHints(self, window):
+        """Set minimal size of window virtual area to match sizer's
+        minimal size.  For windows with managed scrollbars this will
+        set them appropriately."""
+        pass
+
+    def Show(self, item, show=True):
+        """Show or hide item (sizer or window).  To make item
+        disappear or reappear on-screen, use Show() followed by
+        Layout()."""
+        pass
+
+    def ShowItems(self, show):
+        """Recursively call Show() on all sizer items."""
+        pass
+
+
+class PySizer(Sizer):
+    """If you wish to create a custom sizer class you should derive
+    the class from PySizer in order to get Python-aware capabilities
+    for the various virtual methods."""
+
+    def __init__(self):
+        """Create a PySizer instance.  Override in subclass."""
+        pass
+
+
+class BoxSizer(Sizer):
+    """A box sizer is used to lay out a rather simple geometry,
+    typically a row or column or several hierarchies of either."""
+
+    def __init__(self, orient=wx.HORIZONTAL):
+        """Create BoxSizer instance.
+
+        orient is either wx.VERTICAL or wx.HORIZONTAL"""
+        pass
+
+    def CalcMin(self):
+        """Calculate minimum size.  Do not call directly."""
+        pass
+
+    def GetOrientation(self):
+        """Return orientation: wx.VERTICAL or wx.HORIZONTAL."""
+        pass
+
+    def RecalcSizes(self):
+        """Recalculate sizes, then set the size of its children
+        (calling SetSize if child is a window).  Do not call directly."""
+        pass
+
+    def SetOrientation(self, orient):
+        """Set orientation to either wx.VERTICAL or wx.HORIZONTAL."""
+        pass
+
+
+class StaticBoxSizer(BoxSizer):
+    """Like BoxSizer, but adds a static box around the sizer.  Note
+    that the static box has to be created separately."""
+
+    def __init__(self, box, orient=wx.HORIZONTAL):
+        """Create StaticBoxSizer instance.
+
+        box - instance of wx.StaticBox
+
+        orient - either wx.VERTICAL or wx.HORIZONTAL"""
+        pass
+
+    def CalcMin(self):
+        """Calculate minimum size.  Do not call directly."""
+        pass
+
+    def GetStaticBox(self):
+        """Return the static box associated with the sizer."""
+        pass
+
+    def RecalcSizes(self):
+        """Recalculate sizes, then set the size of its children
+        (calling SetSize if child is a window).  Do not call directly."""
+        pass
+
+
+class GridSizer(Sizer):
+    """A grid sizer lays out its children in a two-dimensional table
+    where all cells have the same size: the width of each cell is the
+    width of the widest child, the height of each cell is the height
+    of the tallest child.  See also the FlexGridSizer."""
+
+    def __init__(self, rows=1, cols=0, vgap=0, hgap=0):
+        """Create a GridSizer instance.
+
+        rows and cols - the number of rows and columns in the grid; if
+        either is zero, it will be calculated as the number of
+        children in the sizer, allowing the sizer grow dynamically.
+
+        vgap and hgap - extra space between all cells, in pixels."""
+        pass
+
+    def CalcMin(self):
+        """Calculate minimum size.  Do not call directly."""
+        pass
+
+    def GetCols(self):
+        """Return the number of columns in the grid."""
+        pass
+
+    def GetHGap(self):
+        """Return the horizontal gap (in pixels) between cells."""
+        pass
+
+    def GetRows(self):
+        """Return the number of rows in the grid."""
+        pass
+
+    def GetVGap(self):
+        """Return the vertical gap (in pixels) between cells."""
+        pass
+
+    def RecalcSizes(self):
+        """Recalculate sizes, then set the size of its children
+        (calling SetSize if child is a window).  Do not call directly."""
+        pass
+
+    def SetCols(self, cols):
+        """Set the number of columns in the grid."""
+        pass
+
+    def SetHGap(self, gap):
+        """Set the horizontal gap (in pixels) between cells."""
+        pass
+
+    def SetRows(self, rows):
+        """Sets the number of rows in the grid."""
+        pass
+
+    def SetVGap(self, gap):
+        """Set the vertical gap (in pixels) between cells."""
+        pass
+
+
+class FlexGridSizer(GridSizer):
+    """A flex grid sizer lays out its children in a two-dimensional
+    table where all cells in one row have the same height and all
+    cells in one column have the same width, but all cells are not
+    necessarily the same height and width, as in the GridSizer."""
+
+    def __init__(self, rows=1, cols=0, vgap=0, hgap=0):
+        """Create a GridSizer instance.
+
+        rows and cols - the number of rows and columns in the grid; if
+        either is zero, it will be calculated as the number of
+        children in the sizer, allowing the sizer grow dynamically.
+
+        vgap and hgap - extra space between all cells, in pixels."""
+        pass
+
+    def AddGrowableCol(self, idx):
+        """Specify that column idx (starting from zero) should expand
+        if there is extra space available to the sizer."""
+        pass
+
+    def AddGrowableRow(self, idx):
+        """Specify that row idx (starting from zero) should expand if
+        there is extra space available to the sizer."""
+        pass
+
+    def CalcMin(self):
+        """Calculate minimum size.  Do not call directly."""
+        pass
+
+    def RecalcSizes(self):
+        """Recalculate sizes, then set the size of its children
+        (calling SetSize if child is a window).  Do not call directly."""
+        pass
+
+    def RemoveGrowableCol(self, idx):
+        """Specify that column idx is no longer growable."""
+        pass
+
+    def RemoveGrowableRow(self, idx):
+        """Specify that row idx is no longer growable."""
+        pass
+
+
+class NotebookSizer(Sizer):
+    """NotebookSizer works with a notebook to determine the size of
+    the biggest page and report an adjusted minimal size to a more
+    toplevel sizer.  Do not add children to a NotebookSizer."""
+
+    def __init__(self, nb):
+        """Create a NotebookSizer instance for notebook."""
+        pass
+
+    def CalcMin(self):
+        """Calculate minimum size.  Do not call directly."""
+        pass
+
+    def GetNotebook(self):
+        """Return the notebook associated with the sizer."""
+        pass
+
+    def RecalcSizes(self):
+        """Recalculate size.  Do not call directly."""
+        pass
+
+
+class SizerItem(Object):
+    """SizerItem class.  Wrapper for items managed by a sizer."""
+
+    def __init__(self, this):
+        """Create a SizerItem instance.  You don't normally create one
+        directly."""
+        pass
+
+    def CalcMin(self):
+        """Calculate minimum size.  Do not call directly."""
+        pass
+
+    def DeleteWindows(self):
+        """Recursively destroy windows associated with this SizerItem."""
+        pass
+
+    def GetBorder(self):
+        """Return border width."""
+        pass
+
+    def GetFlag(self):
+        """Return flag value."""
+        pass
+
+    def GetOption(self):
+        """Return option value."""
+        pass
+
+    def GetPosition(self):
+        """Return wx.Point instance representing position relative to
+        the client area."""
+        pass
+
+    def GetRatio(self):
+        """Return a floating point aspect ratio (width/height).  If
+        wx.SHAPED flag is used item will maintain ratio when resized."""
+        pass
+
+    def GetSize(self):
+        """Return wx.Size instance with size."""
+        pass
+
+    def GetSizer(self):
+        """If IsSizer() return the sizer; otherwise return None."""
+        pass
+
+    def GetUserData(self):
+        """Return a wx.PyUserData object."""
+        pass
+
+    def GetWindow(self):
+        """If IsWindow() return the window; otherwise return None."""
+        pass
+
+    def IsShown(self):
+        """Return True if item is shown."""
+        pass
+
+    def IsSizer(self):
+        """Return True if SizerItem represents a sizer."""
+        pass
+
+    def IsSpacer(self):
+        """Return True if SizerItem represents a spacer."""
+        pass
+
+    def IsWindow(self):
+        """Return True if SizerItem represents a window."""
+        pass
+
+    def SetBorder(self, border):
+        """Set border width for item."""
+        pass
+
+    def SetDimension(self, pos, size):
+        """Set position and size for item."""
+        pass
+
+    def SetFlag(self, flag):
+        """Set flag for item."""
+        pass
+
+    def SetInitSize(self, x, y):
+        """Set initial size of item."""
+        pass
+
+    def SetOption(self, option):
+        """Set option for item."""
+        pass
+
+    def SetRatio(self, ratio):
+        """Set a floating point aspect ratio (width/height).  If
+        wx.SHAPED flag is used item will maintain ratio when resized."""
+        pass
+
+    def SetRatioSize(self, size):
+        """Set a floating point aspect ratio (width/height).  If
+        wx.SHAPED flag is used item will maintain ratio when resized."""
+        pass
+
+    def SetRatioWH(self, width, height):
+        """Set a floating point aspect ratio (width/height).  If
+        wx.SHAPED flag is used item will maintain ratio when resized."""
+        pass
+
+    def SetSizer(self, sizer):
+        """Set sizer associated with SizerItem."""
+        pass
+
+    def SetWindow(self, window):
+        """Set window associated with SizerItem."""
+        pass
+
+    def Show(self, show):
+        """Is show is True, show item, otherwise hide item."""
+        pass
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Streams.py b/wxPython/wxPython/py/wxd/Streams.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Streams.py
rename to wxPython/wxPython/py/wxd/Streams.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/StyledTextConstants.py b/wxPython/wxPython/py/wxd/StyledTextConstants.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/StyledTextConstants.py
rename to wxPython/wxPython/py/wxd/StyledTextConstants.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Threading.py b/wxPython/wxPython/py/wxd/Threading.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Threading.py
rename to wxPython/wxPython/py/wxd/Threading.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/ToolBar.py b/wxPython/wxPython/py/wxd/ToolBar.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/ToolBar.py
rename to wxPython/wxPython/py/wxd/ToolBar.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Tree.py b/wxPython/wxPython/py/wxd/Tree.py
similarity index 82%
rename from wxPython/wxPython/lib/PyCrust/wxd/Tree.py
rename to wxPython/wxPython/py/wxd/Tree.py
index 46ae981f33..9b71efd20e 100644
--- a/wxPython/wxPython/lib/PyCrust/wxd/Tree.py
+++ b/wxPython/wxPython/py/wxd/Tree.py
@@ -18,7 +18,10 @@ import Parameters as wx
 
 
 class TreeCtrl(Control):
-    """"""
+    """A tree control presents information as a hierarchy, with items
+    that may be expanded to show further items. Items in a tree
+    control are referenced by wx.TreeItemId handles, which may be
+    tested for validity by calling TreeItemId.IsOk()."""
 
     def AddRoot(self):
         """"""
@@ -354,49 +357,47 @@ class TreeItemAttr:
 
 
 class TreeItemData(Object):
-    """"""
+    """TreeItemData is some (arbitrary) user class associated with
+    some item. The main advantage of having this class is that
+    TreeItemData objects are destroyed automatically by the tree and
+    the memory and any other resources associated with a tree item
+    will be automatically freed when it is deleted."""
 
-    def GetData(self):
-        """"""
+    def __init__(self, obj=wx.NULL):
+        """Associate any Python object with tree item using
+        wxTreeItemData as container."""
         pass
 
-    def GetId(self):
-        """"""
+    def GetData(self):
+        """Return the Python object."""
         pass
 
-    def SetData(self):
-        """"""
+    def GetId(self):
+        """Return the item associated with this node."""
         pass
 
-    def SetId(self):
-        """"""
+    def SetData(self, obj):
+        """Associate Python object with tree item."""
         pass
 
-    def __init__(self):
-        """"""
+    def SetId(self, id):
+        """Set the item associated with this node."""
         pass
 
 
 class TreeItemId:
-    """"""
-
-    def IsOk(self):
-        """"""
-        pass
+    """Item in a TreeCtrl."""
 
-    def Ok(self):
-        """"""
-        pass
+## You wouldn't create these directly.
 
-    def __cmp__(self):
-        """"""
-        pass
+##     def __init__(self):
+##         """"""
+##         pass
 
-    def __del__(self):
-        """"""
+    def IsOk(self):
+        """Return True if item is valid."""
         pass
 
-    def __init__(self):
-        """"""
+    def Ok(self):
+        """Synonym for IsOk."""
         pass
-
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Validators.py b/wxPython/wxPython/py/wxd/Validators.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Validators.py
rename to wxPython/wxPython/py/wxd/Validators.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/Window.py b/wxPython/wxPython/py/wxd/Window.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/Window.py
rename to wxPython/wxPython/py/wxd/Window.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/__init__.py b/wxPython/wxPython/py/wxd/__init__.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/__init__.py
rename to wxPython/wxPython/py/wxd/__init__.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/d_stc.py b/wxPython/wxPython/py/wxd/d_stc.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/d_stc.py
rename to wxPython/wxPython/py/wxd/d_stc.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/d_wx.py b/wxPython/wxPython/py/wxd/d_wx.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/d_wx.py
rename to wxPython/wxPython/py/wxd/d_wx.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/decorator.py b/wxPython/wxPython/py/wxd/decorator.py
similarity index 98%
rename from wxPython/wxPython/lib/PyCrust/wxd/decorator.py
rename to wxPython/wxPython/py/wxd/decorator.py
index 6765268f5b..1139d0b75c 100644
--- a/wxPython/wxPython/lib/PyCrust/wxd/decorator.py
+++ b/wxPython/wxPython/py/wxd/decorator.py
@@ -29,7 +29,8 @@ def decorateClass(item, realdict):
     try:
         wxclass = realdict[classname]
     except:
-        print classname
+        # print classname
+        pass
     else:
         if item.__doc__:
             wxclass.__doc__ = item.__doc__
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/gen.py b/wxPython/wxPython/py/wxd/gen.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/gen.py
rename to wxPython/wxPython/py/wxd/gen.py
diff --git a/wxPython/wxPython/py/wxd/genapi.py b/wxPython/wxPython/py/wxd/genapi.py
new file mode 100644
index 0000000000..8b09cc3380
--- /dev/null
+++ b/wxPython/wxPython/py/wxd/genapi.py
@@ -0,0 +1,133 @@
+"""API generator for decorator classes.
+"""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+__cvsid__ = "$Id$"
+__revision__ = "$Revision$"[11:-2]
+
+
+import inspect
+import os
+import sys
+import types
+
+
+header = '''\
+"""wxPython decorator classes.
+
+This file is automatically generated, and these are not the real
+wxPython classes.  These are Python versions for API documentation
+purposes only.
+
+Please send corrections, questions, and suggestions to:
+
+Patrick K. O'Brien <pobrien@orbtech.com>
+"""
+
+__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
+
+from wxd import Parameters as wx
+
+try:
+    True
+except NameError:
+    True = 1==1
+    False = 1==0
+'''
+
+modlist = [
+    'Base',
+    'Window',
+    'Frames',
+    'Accelerators',
+    'App',
+    'ClipDragDrop',
+    'Config',
+    'Controls',
+    'DataStructures',
+    'DateTime',
+    'Dialogs',
+    'Drawing',
+    'Errors',
+    'EventFunctions',
+    'Events',
+    'FileSystem',
+    'Functions',
+    'Help',
+    'ImageHandlers',
+    'Joystick',
+    'LayoutConstraints',
+    'Logging',
+    'Menus',
+    'MimeTypes',
+    'Misc',
+    'Panel',
+    'Printing',
+    'Process',
+    'SashSplitter',
+    'Sizers',
+    'Streams',
+    'Threading',
+    'ToolBar',
+    'Tree',
+    'Validators',
+    ]
+
+dir = os.path.realpath('api/wx/')
+filename = os.path.join(dir, '__init__.py')
+
+def main():
+    modules = {}
+    f = file(filename, 'w')
+    f.write(header)
+    for modname in modlist:
+        modules[modname] = __import__(modname, globals())
+    for modname in modlist:
+        module = modules[modname]
+        try:
+            source = inspect.getsource(module)
+        except IOError:
+            print 'No source for', module
+        else:
+            # Remove everything up to the first class or function definition.
+            splitter = '\n\nclass '
+            parts = source.split(splitter, 1)
+            if len(parts) == 2:
+                source = splitter + parts[1]
+            else:
+                splitter = '\n\ndef '
+                parts = source.split(splitter, 1)
+                if len(parts) == 2:
+                    source = splitter + parts[1]
+            source = '\n\n\n' + source.strip()
+            f.write(source)
+            print 'Writing', modname
+    f.write('\n')
+    f.close()
+
+    # Add constants and any other missing stuff.
+    f = file(filename, 'a')
+    f.write('\n\n## Other Stuff:\n\n')
+    import wx as old
+    old = old.__dict__
+    sys.path.insert(0, dir) # Munge the sys.path so that we can
+    import __init__         # import the file we just created.
+    new = __init__.__dict__
+    l = [(k, v) for (k, v) in old.items() if (not k.startswith('_')
+                                              and not k.endswith('Ptr')
+                                              and not (k == 'cvar'))]
+    l.sort()
+    from wxPython import wx
+    for key, value in l:
+        if key not in new:
+            if (inspect.isclass(value)
+                or inspect.isroutine(value)
+                or type(value) is types.InstanceType):
+                value = repr(value)
+            text = '%s = %r' % (key, value)
+            f.write(text + '\n')
+            print 'Writing', text
+    f.close()
+
+if __name__ == '__main__':
+    main()
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/stc_.py b/wxPython/wxPython/py/wxd/stc_.py
similarity index 100%
rename from wxPython/wxPython/lib/PyCrust/wxd/stc_.py
rename to wxPython/wxPython/py/wxd/stc_.py
diff --git a/wxPython/wxPython/lib/PyCrust/wxd/wx_.py b/wxPython/wxPython/py/wxd/wx_.py
similarity index 89%
rename from wxPython/wxPython/lib/PyCrust/wxd/wx_.py
rename to wxPython/wxPython/py/wxd/wx_.py
index 492d623714..90fea4db74 100644
--- a/wxPython/wxPython/lib/PyCrust/wxd/wx_.py
+++ b/wxPython/wxPython/py/wxd/wx_.py
@@ -1,4 +1,8 @@
 """Decorator classes for documentation and shell scripting.
+
+Information contained in this module, and all modules imported by this
+module, is covered by the wxWindows Free Documentation Licence.  See
+the LICENSE.txt file for details.
 """
 
 __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
diff --git a/wxPython/wxPython/tools/XRCed/CHANGES.txt b/wxPython/wxPython/tools/XRCed/CHANGES.txt
index 3945253906..567f7b7932 100644
--- a/wxPython/wxPython/tools/XRCed/CHANGES.txt
+++ b/wxPython/wxPython/tools/XRCed/CHANGES.txt
@@ -1,3 +1,39 @@
+0.1.1-3
+-------
+
+Sizes of some controls were not normal on wxMSW. Fixed.
+
+Some changes to test window code to make it resize better and to 
+have focus control with sawfish for all types of windows.
+
+0.1.1-2
+-------
+
+Bugs with currentEncoding and frame testing fixed.
+
+Some required parameters are set to default if missing.
+
+Unsupported classes are tolerated, with warning message.
+
+wxScrolledWindow added (to 'control' pulldown menu, not yet to the
+tool palette).
+
+Multi-line editing for labels and some values (wxTextCtrl,
+wxHtmlWindow).
+
+0.1.1-1
+-------
+
+Changed internationalization support. '-i' option removed, default
+encoding is used (should be defined in sitecustomize.py, or 'ascii' by
+default). When XRC file is opened with encoding specified,
+translations are not used.
+
+0.1.1
+-----
+
+Replace command added (not quite finished yet).
+
 0.1.0
 -----
 
@@ -11,6 +47,7 @@ Fixed double-refreshing after Ctrl+R.
 
 Maybe something else that I've forgot. It's been a looong day... :)
 
+
 0.0.9-6
 -------
 
diff --git a/wxPython/wxPython/tools/XRCed/XRCed_16.png b/wxPython/wxPython/tools/XRCed/XRCed_16.png
new file mode 100644
index 0000000000000000000000000000000000000000..e47a565a064f8af91669b7f5dabb4135f8aff467
GIT binary patch
literal 542
zcmV+(0^$9MP)<h;3K|Lk000e1NJLTq000mG000mO0ssI2kdbIM00009a7bBm000XU
z000XU0RWnu7ytkP&`Cr=RCt_~kuhi!Q5eVnsd85w-jrl|Q<C9$!*SVeDCZz_2$|$f
zb(ia4a5#cP=wOq<(m}d3L&?-ihk_EMg-0El>8L{vkt0Li)!}t965)aHDj6KC)`}tc
z@h#u?@#Ft}|1W1|2LBUFTI*mX7^S23^Y+$@Eg^*GdY<bAD?u_$05qO7Jl9)&u$svX
zz@5#`=B2vq^?E{xz207$rqjt(yb~AlLP}|_O#e;)M4U{&PP@C^wMT0(Go!z0%eER%
z8)jzq5BDjhob!AkpL|F-=dF#FnVH|Y1YmGBAcPFg20yoCjI}mem2zb)#}0FpQUH=+
z(%tP|-w;L7(d#42wsv0b03d`o%%PNOt;6;3JU(wm&G2zpEEECc#-GM<9COYynJJ}8
z<&sj$_x)s;ShmF&Q%c2gTr3oW`vHL5LR-IIA(L>}FIyKHpGkP`O?mgv*_R387?us+
z2O$`x_?Y6JeT%;Z)N5F_p*7qpwzpBQfiWmG2N<PDQ-teK3Wo=%ltC%_$2b+J*XAe?
z0<Q{(!K)%)03p}Se=C&AShjI0@Oc74(C*+_gl2?H&H*eN@q4^F0Ht`y0pRU1gh0Ck
guX+P4{=;AK1D^xT3Fa|0#sB~S07*qoM6N<$f^PxzHUIzs

literal 0
HcmV?d00001

diff --git a/wxPython/wxPython/tools/XRCed/XRCed_32.png b/wxPython/wxPython/tools/XRCed/XRCed_32.png
new file mode 100644
index 0000000000000000000000000000000000000000..33e1908b6fdcc5456f7838a94e3640d61f0fc77a
GIT binary patch
literal 677
zcmV;W0$TlvP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800004b3#c}2nYxW
zd<bNS00079Nkl<Zc%1E4F_NS(4D7wyM>ue>&v0<TKEVM2&roo|K7oLMXDFCpo<J~x
zpW%RDp5TBgU%=Yf#xt;cbw#qOasfgTZK);m;%4V@qWn7Z;{fmq0LB;$!vFvn`T;@;
z0Kmte57^0qh@h0hFbpupY=S7I&^B%K3sTy*O$*)V+}X{}yV-fAln3C6$h+D3uJ1em
z55NZ--RP(*mu_^lbF=e8imF|RA65h~-bN3=3n~0~8)Ja+Hf{hgbJSUDH$Ve;-RS5a
z;+HXzq6t|D*K$`i0G}kTW~#Ic`ZR6^Al*%gGz~yRo|!!}XF4}K&&(S@&(>?o2O$N7
z6u3|KNUoX$!lpt*Rogwu+RzviKMnxb%eCr6L||qxa|Brfbx6|mr?tl?A@?{CQl8c|
z*mZrE`PaA=Gr$*yF$TKPVCGngwr#(>skT{su9s_^1ICzm&&+uSYHgRcjkR_+14^lE
zw?tH(17&B#Nf>IGUWo{HvN1E^T{`iUQrqbUpzAvbDRw8}%g<r-KZD;VAXGp%Cjc-8
z2u<YXy3Oe&I32*D5?n7!I_<PPE48j5_X!w=)#gp+?;pzEX*J%Q2ewN{R}7x5jZ*9V
zqxic3(qPQX3Oe0{X}Ic$mgf@Cw*Z8|LN1wD51TbG^ZKk*?tdf$hd6MbfcM|~cI7Vt
z(b|TO<PZSygit~riSUmA-Xt*e>&J{)vQh#wCZBkfKlrUY<AAj}xq@EEoP=G!+6AtZ
z-Sh1(sI^xa)Y_bIDd;@_yOXf%0p>i_%=v5=vTk!^5dHiQoDSeGrge!+LXS9400000
LNkvXXu0mjf<T5jn

literal 0
HcmV?d00001

diff --git a/wxPython/wxPython/tools/XRCed/globals.py b/wxPython/wxPython/tools/XRCed/globals.py
index a9147ae687..148c36db01 100644
--- a/wxPython/wxPython/tools/XRCed/globals.py
+++ b/wxPython/wxPython/tools/XRCed/globals.py
@@ -15,7 +15,7 @@ modernFont = wxFont(sysFont.GetPointSize(), wxMODERN, wxNORMAL, wxNORMAL)
 smallerFont = wxFont(sysFont.GetPointSize()-2, wxDEFAULT, wxNORMAL, wxNORMAL)
 
 progname = 'XRCed'
-version = '0.1.0'
+version = '0.1.1-3'
 
 try:
     True
@@ -34,6 +34,6 @@ class Globals:
     testWin = None
     testWinPos = wxDefaultPosition
     currentXXX = None
-    xmlFlags = wxXRC_USE_LOCALE | wxXRC_NO_SUBCLASSING
+    currentEncoding = sys.getdefaultencoding() # wxLocale_GetSystemEncodingName()
 
 g = Globals()
diff --git a/wxPython/wxPython/tools/XRCed/params.py b/wxPython/wxPython/tools/XRCed/params.py
index a0c71474cf..2e3ed4f163 100644
--- a/wxPython/wxPython/tools/XRCed/params.py
+++ b/wxPython/wxPython/tools/XRCed/params.py
@@ -140,9 +140,9 @@ class ParamColour(PPanel):
         self.SetBackgroundColour(g.panel.GetBackgroundColour())
         sizer = wxBoxSizer()
         self.text = wxTextCtrl(self, self.ID_TEXT_CTRL, size=(65,-1))
-        sizer.Add(self.text, 0, wxRIGHT, 5)
-        self.button = wxPanel(self, self.ID_BUTTON, wxDefaultPosition, wxSize(20, 20))
-        sizer.Add(self.button, 0, wxGROW)
+        sizer.Add(self.text, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 5)
+        self.button = wxPanel(self, self.ID_BUTTON, wxDefaultPosition, wxSize(20, 1))
+        sizer.Add(self.button, 0, wxGROW | wxALIGN_CENTER_VERTICAL)
         self.SetAutoLayout(True)
         self.SetSizer(sizer)
         sizer.Fit(self)
@@ -199,7 +199,7 @@ class ParamFont(PPanel):
         self.ID_BUTTON_SELECT = wxNewId()
         self.SetBackgroundColour(g.panel.GetBackgroundColour())
         sizer = wxBoxSizer()
-        self.text = wxTextCtrl(self, self.ID_TEXT_CTRL, size=wxSize(200,-1))
+        self.text = wxTextCtrl(self, self.ID_TEXT_CTRL, size=(200,-1))
         sizer.Add(self.text, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 5)
         self.button = wxButton(self, self.ID_BUTTON_SELECT, 'Select...', size=buttonSize)
         sizer.Add(self.button, 0, wxALIGN_CENTER_VERTICAL)
@@ -290,7 +290,7 @@ class ParamInt(PPanel):
         PPanel.__init__(self, parent, name)
         self.ID_SPIN_CTRL = wxNewId()
         sizer = wxBoxSizer()
-        self.spin = wxSpinCtrl(self, self.ID_SPIN_CTRL, size=wxSize(50,-1))
+        self.spin = wxSpinCtrl(self, self.ID_SPIN_CTRL, size=(50,-1))
         self.SetBackgroundColour(g.panel.GetBackgroundColour())
         sizer.Add(self.spin)
         self.SetAutoLayout(True)
@@ -312,12 +312,12 @@ class ParamUnit(PPanel):
         self.ID_TEXT_CTRL = wxNewId()
         self.ID_SPIN_BUTTON = wxNewId()
         sizer = wxBoxSizer()
-        self.text = wxTextCtrl(self, self.ID_TEXT_CTRL, size=wxSize(35,-1))
-        self.spin = wxSpinButton(self, self.ID_SPIN_BUTTON, style = wxSP_VERTICAL)
+        self.text = wxTextCtrl(self, self.ID_TEXT_CTRL, size=(35,-1))
+        self.spin = wxSpinButton(self, self.ID_SPIN_BUTTON, style = wxSP_VERTICAL, size=(-1,1))
         self.spin.SetRange(-10000, 10000)
         self.SetBackgroundColour(g.panel.GetBackgroundColour())
         sizer.Add(self.text, 0, wxEXPAND | wxRIGHT, 2)
-        sizer.Add(self.spin)
+        sizer.Add(self.spin, 0, wxEXPAND)
         self.SetAutoLayout(True)
         self.SetSizer(sizer)
         sizer.Fit(self)
@@ -350,6 +350,50 @@ class ParamUnit(PPanel):
     def OnSpinDown(self, evt):
         self.Change(-1)
 
+# Dialog for editing multi-line text
+class TextDialog(wxDialog):
+    def __init__(self, parent, value):
+	pre = wxPreDialog()
+        g.frame.res.LoadOnDialog(pre, parent, 'DIALOG_TEXT')
+        self.this = pre.this
+	self._setOORInfo(self)
+        self.text = self.FindWindowByName('TEXT')
+        self.text.SetValue(value)
+        self.SetAutoLayout(True)
+        self.SetSize((300,200))
+    def GetValue(self):
+        return self.text.GetValue()
+
+class ParamMultilineText(PPanel):
+    def __init__(self, parent, name, textWidth=-1):
+        PPanel.__init__(self, parent, name)
+        self.ID_TEXT_CTRL = wxNewId()
+        self.ID_BUTTON_EDIT = wxNewId()
+        self.SetBackgroundColour(g.panel.GetBackgroundColour())
+        sizer = wxBoxSizer()
+        self.SetBackgroundColour(g.panel.GetBackgroundColour())
+        self.text = wxTextCtrl(self, self.ID_TEXT_CTRL, size=wxSize(200,-1))
+        sizer.Add(self.text, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 5)
+        self.button = wxButton(self, self.ID_BUTTON_EDIT, 'Edit...', size=buttonSize)
+        sizer.Add(self.button, 0, wxALIGN_CENTER_VERTICAL)
+        self.SetAutoLayout(True)
+        self.SetSizer(sizer)
+        sizer.Fit(self)
+        EVT_BUTTON(self, self.ID_BUTTON_EDIT, self.OnButtonEdit)
+        EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange)
+    def GetValue(self):
+        return self.text.GetValue()
+    def SetValue(self, value):
+        self.freeze = True              # disable other handlers
+        self.text.SetValue(value)
+        self.freeze = False             # disable other handlers
+    def OnButtonEdit(self, evt):
+        dlg = TextDialog(self, self.text.GetValue())
+        if dlg.ShowModal() == wxID_OK:
+            self.text.SetValue(dlg.GetValue())
+            self.SetModified()
+        dlg.Destroy()
+
 class ParamText(PPanel):
     def __init__(self, parent, name, textWidth=-1):
         PPanel.__init__(self, parent, name)
@@ -388,14 +432,13 @@ class ParamEncoding(ParamText):
     def __init__(self, parent, name):
         ParamText.__init__(self, parent, name, 100)
 
-class ContentDialog(wxDialogPtr):
+class ContentDialog(wxDialog):
     def __init__(self, parent, value):
         # Load from resource
-        w = g.frame.res.LoadDialog(parent, 'DIALOG_CONTENT')
-        # Perform initialization with class pointer
-        wxDialogPtr.__init__(self, w.this)
-        self.thisown = 1
-        self.Center()
+	pre = wxPreDialog()
+        g.frame.res.LoadOnDialog(pre, parent, 'DIALOG_CONTENT')
+        self.this = pre.this
+	self._setOORInfo(self)
         self.list = self.FindWindowByName('LIST')
         # Set list items
         for v in value:
@@ -440,12 +483,12 @@ class ContentDialog(wxDialogPtr):
             evt.Enable(self.list.GetSelection() != -1 and \
                        self.list.GetSelection() < self.list.Number() - 1)
 
-class ContentCheckListDialog(wxDialogPtr):
+class ContentCheckListDialog(wxDialog):
     def __init__(self, parent, value):
-        w = g.frame.res.LoadDialog(parent, 'DIALOG_CONTENT_CHECK_LIST')
-        wxDialogPtr.__init__(self, w.this)
-        self.thisown = 1
-        self.Center()
+	pre = wxPreDialog()
+        g.frame.res.LoadOnDialog(pre, parent, 'DIALOG_CONTENT_CHECK_LIST')
+        self.this = pre.this
+	self._setOORInfo(self)
         self.list = self.FindWindowByName('CHECK_LIST')
         # Set list items
         i = 0
@@ -573,13 +616,12 @@ class ParamContentCheckList(ParamContent):
             self.textModified = False
         dlg.Destroy()
 
-class IntListDialog(wxDialogPtr):
+class IntListDialog(wxDialog):
     def __init__(self, parent, value):
-        # Is this normal???
-        w = g.frame.res.LoadDialog(parent, 'DIALOG_INTLIST')
-        wxDialogPtr.__init__(self, w.this)
-        self.thisown = 1
-        self.Center()
+	pre = wxPreDialog()
+        g.frame.res.LoadOnDialog(pre, parent, 'DIALOG_INTLIST')
+        self.this = pre.this
+	self._setOORInfo(self)
         self.list = self.FindWindowByName('LIST')
         # Set list items
         value.sort()
@@ -598,6 +640,7 @@ class IntListDialog(wxDialogPtr):
         EVT_UPDATE_UI(self, self.ID_BUTTON_REMOVE, self.OnUpdateUI)
     def OnButtonAppend(self, evt):
         s = wxGetTextFromUser('Enter new number:', 'Add', '', self)
+        if not s: return
         # Check that it's unique
         try:
             v = int(s)
@@ -742,11 +785,10 @@ class ParamFile(PPanel):
 
 class ParamBitmap(PPanel):
     def __init__(self, parent, name):
-        # Load from resource
-        w = g.frame.res.LoadPanel(parent, 'PANEL_BITMAP')
-        # Perform initialization with class pointer
-        wxPanelPtr.__init__(self, w.this)
-        self.thisown = 1
+	pre = wxPrePanel()
+        g.frame.res.LoadOnPanel(pre, parent, 'PANEL_BITMAP')
+        self.this = pre.this
+	self._setOORInfo(self)
         self.modified = self.freeze = False
         self.SetBackgroundColour(g.panel.GetBackgroundColour())
         self.radio_std = self.FindWindowByName('RADIO_STD')
@@ -827,11 +869,13 @@ paramDict = {
     'vgap': ParamUnit, 'hgap': ParamUnit,
     'checkable': ParamBool, 'checked': ParamBool, 'radio': ParamBool,
     'accel': ParamAccel,
-    'label': ParamText, 'title': ParamText, 'value': ParamText,
+    'label': ParamMultilineText, 'title': ParamText, 'value': ParamText,
     'content': ParamContent, 'selection': ParamInt,
     'min': ParamInt, 'max': ParamInt,
     'fg': ParamColour, 'bg': ParamColour, 'font': ParamFont,
     'enabled': ParamBool, 'focused': ParamBool, 'hidden': ParamBool,
     'tooltip': ParamText, 'bitmap': ParamBitmap, 'icon': ParamBitmap,
-    'label': ParamLabel, 'encoding': ParamEncoding
+    'encoding': ParamEncoding
     }
+
+
diff --git a/wxPython/wxPython/tools/XRCed/src-images/TreeToolBar.png b/wxPython/wxPython/tools/XRCed/src-images/TreeToolBar.png
index bae7ec3efc30dc5f1065840bed645deaa61edbab..aaaae233a09d4dec7f1b2623d37f512adf340c59 100644
GIT binary patch
delta 157
zcmV;O0Al~b0l5K?B!7TOL_t(|ob8jl4TLZdM4yoZLYJ|DgDt@&5?rw5xD1y<fCLdA
zbJ8Jjasd<hX*46-t92m+TGTbA|DwQ+(>Om3_rAvilu~YobI!ow2@(~Fx)~yh$j&N?
z9(YyrANciPpP@3$Y93DfRghAuj4R#>%<S@-zvO_&V+3&TE*7u=vX32KBIDu700000
LNkvXXu0mjfMBqk0

delta 166
zcmV;X09pUJ0m1>0B!2{RLP=Bz2nYy#2xN!=004POL_t(|ob8i44uBvKL?4ENl4DR<
za9obV5hyG;iiL?5ATcKRfyTn=9x#&$n-yAXdNg#oKM^42WnNp&N-88kjPbSEdk>HT
z0L*ApDiEfCF_~pzo0-hJy8oawP^SweYcDIu$68Og1UTnzN*`WJ0L^0r5dSW)0YI7@
UiCEYGv;Y7A07*qoM6N<$f`SY^zW@LL

diff --git a/wxPython/wxPython/tools/XRCed/tools.py b/wxPython/wxPython/tools/XRCed/tools.py
index 718385ed99..5cca5d282b 100644
--- a/wxPython/wxPython/tools/XRCed/tools.py
+++ b/wxPython/wxPython/tools/XRCed/tools.py
@@ -178,6 +178,7 @@ class Tools(wxPanel):
 
     # Update interface
     def UpdateUI(self):
+        if not self.IsShown(): return
         # Update status bar
         pullDownMenu = g.pullDownMenu
         tree = g.tree
diff --git a/wxPython/wxPython/tools/XRCed/tree.py b/wxPython/wxPython/tools/XRCed/tree.py
index 4036f5d249..6e8c192550 100644
--- a/wxPython/wxPython/tools/XRCed/tree.py
+++ b/wxPython/wxPython/tools/XRCed/tree.py
@@ -6,6 +6,9 @@
 
 from xxx import *                       # xxx imports globals and params
 
+# Constant to define standart window name
+STD_NAME = '_XRCED_T_W'
+
 # Icons
 import images
 
@@ -68,6 +71,7 @@ class ID_NEW:
     LIST_CTRL = wxNewId()
     CHECK_LIST = wxNewId()
     NOTEBOOK = wxNewId()
+    SCROLLED_WINDOW = wxNewId()
     HTML_WINDOW = wxNewId()
     CALENDAR_CTRL = wxNewId()
     GENERIC_DIR_CTRL = wxNewId()
@@ -84,7 +88,7 @@ class ID_NEW:
     MENU = wxNewId()
     MENU_ITEM = wxNewId()
     SEPARATOR = wxNewId()
-    LAST = wxNewId()    
+    LAST = wxNewId()
 
 class PullDownMenu:
     ID_EXPAND = wxNewId()
@@ -94,6 +98,7 @@ class PullDownMenu:
     def __init__(self, parent):
         self.ID_DELETE = parent.ID_DELETE
         EVT_MENU_RANGE(parent, ID_NEW.PANEL, ID_NEW.LAST, parent.OnCreate)
+        EVT_MENU_RANGE(parent, 1000 + ID_NEW.PANEL, 1000 + ID_NEW.LAST, parent.OnReplace)
         EVT_MENU(parent, self.ID_COLLAPSE, parent.OnCollapse)
         EVT_MENU(parent, self.ID_EXPAND, parent.OnExpand)
         EVT_MENU(parent, self.ID_PASTE_SIBLING, parent.OnPaste)
@@ -136,6 +141,7 @@ class PullDownMenu:
             ID_NEW.LIST_CTRL: 'wxListCtrl',
             ID_NEW.CHECK_LIST: 'wxCheckList',
             ID_NEW.NOTEBOOK: 'wxNotebook',
+            ID_NEW.SCROLLED_WINDOW: 'wxScrolledWindow',
             ID_NEW.HTML_WINDOW: 'wxHtmlWindow',
             ID_NEW.CALENDAR_CTRL: 'wxCalendarCtrl',
             ID_NEW.GENERIC_DIR_CTRL: 'wxGenericDirCtrl',
@@ -148,6 +154,29 @@ class PullDownMenu:
             ID_NEW.SPACER: 'spacer',
             ID_NEW.UNKNOWN: 'unknown',
             }
+        self.topLevel = [
+            (ID_NEW.PANEL, 'Panel', 'Create panel'),
+            (ID_NEW.DIALOG, 'Dialog', 'Create dialog'),
+            (ID_NEW.FRAME, 'Frame', 'Create frame'),
+            None,
+            (ID_NEW.TOOL_BAR, 'ToolBar', 'Create toolbar'),
+            (ID_NEW.MENU_BAR, 'MenuBar', 'Create menubar'),
+            (ID_NEW.MENU, 'Menu', 'Create menu')
+            ]
+        self.containers = [
+             (ID_NEW.PANEL, 'Panel', 'Create panel'),
+             (ID_NEW.NOTEBOOK, 'Notebook', 'Create notebook control'),
+             (ID_NEW.TOOL_BAR, 'ToolBar', 'Create toolbar'),
+            ]
+        self.sizers = [
+             (ID_NEW.BOX_SIZER, 'BoxSizer', 'Create box sizer'),
+             (ID_NEW.STATIC_BOX_SIZER, 'StaticBoxSizer',
+              'Create static box sizer'),
+             (ID_NEW.GRID_SIZER, 'GridSizer', 'Create grid sizer'),
+             (ID_NEW.FLEX_GRID_SIZER, 'FlexGridSizer',
+              'Create flexgrid sizer'),
+             (ID_NEW.SPACER, 'Spacer', 'Create spacer'),
+             ]
         self.controls = [
             ['control', 'Various controls',
              (ID_NEW.STATIC_TEXT, 'Label', 'Create label'),
@@ -162,6 +191,7 @@ class PullDownMenu:
              (ID_NEW.TREE_CTRL, 'TreeCtrl', 'Create tree'),
              (ID_NEW.LIST_CTRL, 'ListCtrl', 'Create list'),
              (ID_NEW.CHECK_LIST, 'CheckList', 'Create check list'),
+             (ID_NEW.SCROLLED_WINDOW, 'ScrolledWindow', 'Create scrolled window'),
              (ID_NEW.HTML_WINDOW, 'HtmlWindow', 'Create HTML window'),
              (ID_NEW.CALENDAR_CTRL, 'CalendarCtrl', 'Create calendar control'),
              (ID_NEW.GENERIC_DIR_CTRL, 'GenericDirCtrl', 'Create generic dir control'),
@@ -246,6 +276,19 @@ def SetMenu(m, list):
             m.AppendMenu(wxNewId(), l[0], subMenu, l[1])
         else:                           # separator
             m.AppendSeparator()
+# Same, but adds 1000 to all IDs
+def SetMenu2(m, list):
+    for l in list:
+        if type(l) == types.TupleType:
+            # Shift ID
+            l = (1000 + l[0],) + l[1:]
+            apply(m.Append, l)
+        elif type(l) == types.ListType:
+            subMenu = wxMenu()
+            SetMenu2(subMenu, l[2:])
+            m.AppendMenu(wxNewId(), l[0], subMenu, l[1])
+        else:                           # separator
+            m.AppendSeparator()
 
 ################################################################################
 
@@ -279,11 +322,10 @@ class HighLightBox:
 ################################################################################
 
 class XML_Tree(wxTreeCtrl):
-    # Constant to define standart window name
-    stdName = '_XRCED_T_W'
     def __init__(self, parent, id):
         wxTreeCtrl.__init__(self, parent, id, style = wxTR_HAS_BUTTONS)
         self.SetBackgroundColour(wxColour(224, 248, 224))
+        # Register events
         EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged)
         # One works on Linux, another on Windows
         if wxPlatform == '__WXGTK__':
@@ -291,7 +333,10 @@ class XML_Tree(wxTreeCtrl):
         else:
             EVT_LEFT_DCLICK(self, self.OnDClick)
         EVT_RIGHT_DOWN(self, self.OnRightDown)
+        EVT_TREE_ITEM_EXPANDED(self, self.GetId(), self.OnItemExpandedCollapsed)
+        EVT_TREE_ITEM_COLLAPSED(self, self.GetId(), self.OnItemExpandedCollapsed)
 
+        self.selection = None
         self.needUpdate = False
         self.pendingHighLight = None
         self.ctrl = self.shift = False
@@ -413,6 +458,7 @@ class XML_Tree(wxTreeCtrl):
                 elif n.nodeType != minidom.Node.ELEMENT_NODE:
                     treeObj.element.removeChild(n)
                     n.unlink()
+
     # Insert new item at specific position
     def InsertNode(self, itemParent, parent, elem, nextItem):
         # Insert in XML tree and wxWin
@@ -471,6 +517,7 @@ class XML_Tree(wxTreeCtrl):
         pos = obj.GetPosition()
         if pos == (-1,-1): pos = (0,0)
         return parentPos + pos
+
     # Find window (or sizer) corresponding to a tree item.
     def FindNodeObject(self, item):
         testWin = g.testWin
@@ -493,6 +540,7 @@ class XML_Tree(wxTreeCtrl):
                 if isinstance(child, wxNotebookSizerPtr):
                     child = child.GetNotebook()
         return child
+
     def OnSelChanged(self, evt):
         # Apply changes
         # !!! problem with wxGTK - GetOldItem is Ok if nothing selected
@@ -523,6 +571,7 @@ class XML_Tree(wxTreeCtrl):
         g.tools.UpdateUI()
         # Hightlighting is done in OnIdle
         self.pendingHighLight = self.selection
+
     # Check if item is in testWin subtree
     def IsHighlatable(self, item):
         if item == g.testWin.item: return False
@@ -530,6 +579,7 @@ class XML_Tree(wxTreeCtrl):
             item = self.GetItemParent(item)
             if item == g.testWin.item: return True
         return False
+
     # Highlight selected item
     def HighLight(self, item):
         self.pendingHighLight = None
@@ -551,6 +601,7 @@ class XML_Tree(wxTreeCtrl):
         else:
             g.testWin.highLight = HighLightBox(pos, size)
         g.testWin.highLight.item = item
+
     def ShowTestWindow(self, item):
         xxx = self.GetPyData(item)
         if g.panel.IsModified():
@@ -566,10 +617,12 @@ class XML_Tree(wxTreeCtrl):
         self.CreateTestWin(item)
         # Maybe an error occured, so we need to test
         if g.testWin: self.SetItemBold(g.testWin.item)
+
     # Double-click on Linux
     def OnItemActivated(self, evt):
         if evt.GetItem() != self.root:
             self.ShowTestWindow(evt.GetItem())
+
     # Double-click on Windows
     def OnDClick(self, evt):
         item, flags = self.HitTest(evt.GetPosition())
@@ -577,13 +630,32 @@ class XML_Tree(wxTreeCtrl):
             if item != self.root: self.ShowTestWindow(item)
         else:
             evt.Skip()
+
+    def OnItemExpandedCollapsed(self, evt):
+        # Update tool palette
+        g.tools.UpdateUI()
+        evt.Skip()
+
     # (re)create test window
     def CreateTestWin(self, item):
         testWin = g.testWin
-        wxBeginBusyCursor()
-        wxYield()
         # Create a window with this resource
         xxx = self.GetPyData(item).treeObject()
+
+        # If frame
+#        if xxx.__class__ == xxxFrame:
+            # Frame can't have many children,
+            # but it's first child possibly can...
+#            child = self.GetFirstChild(item, 0)[0]
+#            if child.IsOk() and self.GetPyData(child).__class__ == xxxPanel:
+#                # Clean-up before recursive call or error
+#                wxMemoryFSHandler_RemoveFile('xxx.xrc')
+#                wxEndBusyCursor()
+#                self.CreateTestWin(child)
+#                return
+
+        wxBeginBusyCursor()
+        wxYield()
         # Close old window, remember where it was
         highLight = None
         if testWin:
@@ -623,7 +695,7 @@ class XML_Tree(wxTreeCtrl):
             name = 'noname'
         else:
             name = xxx.name
-        elem.setAttribute('name', self.stdName)
+        elem.setAttribute('name', STD_NAME)
         parent = elem.parentNode
         next = elem.nextSibling
         parent.replaceChild(self.dummyNode, elem)
@@ -640,60 +712,70 @@ class XML_Tree(wxTreeCtrl):
         else:
             elem.setAttribute('name', xxx.name)
         memFile.close()                 # write to wxMemoryFS
-        res = wxXmlResource('', g.xmlFlags)
+        xmlFlags = wxXRC_NO_SUBCLASSING
+        # Use translations if encoding is not specified
+        if g.currentEncoding == 'ascii':
+            xmlFlags != wxXRC_USE_LOCALE
+        res = wxXmlResource('', xmlFlags)
         res.Load('memory:xxx.xrc')
         if xxx.__class__ == xxxFrame:
             # Frame can't have many children,
             # but it's first child possibly can...
-            child = self.GetFirstChild(item, 0)[0]
-            if child.IsOk() and self.GetPyData(child).__class__ == xxxPanel:
-                # Clean-up before recursive call or error
-                wxMemoryFSHandler_RemoveFile('xxx.xrc')
-                wxEndBusyCursor()
-                self.CreateTestWin(child)
-                return
+#            child = self.GetFirstChild(item, 0)[0]
+#            if child.IsOk() and self.GetPyData(child).__class__ == xxxPanel:
+#                # Clean-up before recursive call or error
+#                wxMemoryFSHandler_RemoveFile('xxx.xrc')
+#                wxEndBusyCursor()
+#                self.CreateTestWin(child)
+#                return
             # This currently works under GTK, but not under MSW
             testWin = g.testWin = wxPreFrame()
-            res.LoadOnFrame(testWin, g.frame, self.stdName)
+            res.LoadOnFrame(testWin, g.frame, STD_NAME)
             # Create status bar
+            testWin.panel = testWin
             testWin.CreateStatusBar()
+            testWin.SetClientSize(testWin.GetBestSize())
             testWin.panel = testWin
             testWin.SetPosition(pos)
             testWin.Show(True)
         elif xxx.__class__ == xxxPanel:
             # Create new frame
             if not testWin:
-                testWin = g.testWin = wxFrame(g.frame, -1, 'Panel: ' + name, pos=pos)
-            testWin.panel = res.LoadPanel(testWin, self.stdName)
-            testWin.SetClientSize(testWin.panel.GetSize())
+                testWin = g.testWin = wxFrame(g.frame, -1, 'Panel: ' + name,
+                                              pos=pos, name=STD_NAME)
+            testWin.panel = res.LoadPanel(testWin, STD_NAME)
+            testWin.SetClientSize(testWin.GetBestSize())
             testWin.Show(True)
         elif xxx.__class__ == xxxDialog:
-            testWin = g.testWin = res.LoadDialog(None, self.stdName)
+            testWin = g.testWin = res.LoadDialog(None, STD_NAME)
             testWin.panel = testWin
             testWin.Layout()
             testWin.SetPosition(pos)
             testWin.Show(True)
+            # Dialog's default code does not produce EVT_CLOSE
+            EVT_BUTTON(testWin, wxID_OK, self.OnCloseTestWin)
+            EVT_BUTTON(testWin, wxID_CANCEL, self.OnCloseTestWin)
         elif xxx.__class__ == xxxMenuBar:
-            testWin = g.testWin = wxFrame(g.frame, -1, 'MenuBar: ' + name, pos=pos)
+            testWin = g.testWin = wxFrame(g.frame, -1, 'MenuBar: ' + name,
+                                          pos=pos, name=STD_NAME)
             testWin.panel = None
             # Set status bar to display help
             testWin.CreateStatusBar()
-            testWin.menuBar = res.LoadMenuBar(self.stdName)
+            testWin.menuBar = res.LoadMenuBar(STD_NAME)
             testWin.SetMenuBar(testWin.menuBar)
             testWin.Show(True)
         elif xxx.__class__ == xxxToolBar:
-            testWin = g.testWin = wxFrame(g.frame, -1, 'ToolBar: ' + name, pos=pos)
+            testWin = g.testWin = wxFrame(g.frame, -1, 'ToolBar: ' + name,
+                                          pos=pos, name=STD_NAME)
             testWin.panel = None
             # Set status bar to display help
             testWin.CreateStatusBar()
-            testWin.toolBar = res.LoadToolBar(testWin, self.stdName)
+            testWin.toolBar = res.LoadToolBar(testWin, STD_NAME)
             testWin.SetToolBar(testWin.toolBar)
             testWin.Show(True)
         wxMemoryFSHandler_RemoveFile('xxx.xrc')
         testWin.item = item
         EVT_CLOSE(testWin, self.OnCloseTestWin)
-        EVT_BUTTON(testWin, wxID_OK, self.OnCloseTestWin)
-        EVT_BUTTON(testWin, wxID_CANCEL, self.OnCloseTestWin)
         testWin.highLight = None
         if highLight and not self.pendingHighLight:
             self.HighLight(highLight)
@@ -764,13 +846,7 @@ class XML_Tree(wxTreeCtrl):
             else:
                 needInsert = self.NeedInsert(item)
             if item == self.root or needInsert and self.GetItemParent(item) == self.root:
-                m.Append(ID_NEW.PANEL, 'Panel', 'Create panel')
-                m.Append(ID_NEW.DIALOG, 'Dialog', 'Create dialog')
-                m.Append(ID_NEW.FRAME, 'Frame', 'Create frame')
-                m.AppendSeparator()
-                m.Append(ID_NEW.TOOL_BAR, 'ToolBar', 'Create toolbar')
-                m.Append(ID_NEW.MENU_BAR, 'MenuBar', 'Create menubar')
-                m.Append(ID_NEW.MENU, 'Menu', 'Create menu')
+                SetMenu(m, pullDownMenu.topLevel)
             else:
                 xxx = self.GetPyData(item).treeObject()
                 # Check parent for possible child nodes if inserting sibling
@@ -803,6 +879,29 @@ class XML_Tree(wxTreeCtrl):
                 else:
                     menu.AppendMenu(wxNewId(), 'Create Sibling', m,
                                     'Create sibling after selected object')
+            # Build replace menu
+            if item != self.root:
+                xxx = self.GetPyData(item).treeObject()
+                m = wxMenu()                  # create replace menu
+                if xxx.__class__ == xxxMenuBar:
+                    m.Append(1000 + ID_NEW.MENU, 'Menu', 'Create menu')
+                elif xxx.__class__ in [xxxMenu, xxxMenuItem]:
+                    SetMenu2(m, pullDownMenu.menuControls)
+                elif xxx.__class__ == xxxToolBar and \
+                         self.GetItemParent(item) == self.root:
+                    SetMenu2(m, [])
+                elif xxx.__class__ in [xxxFrame, xxxDialog, xxxPanel]:
+                    SetMenu2(m, [
+                        (ID_NEW.PANEL, 'Panel', 'Create panel'),
+                        (ID_NEW.DIALOG, 'Dialog', 'Create dialog'),
+                        (ID_NEW.FRAME, 'Frame', 'Create frame')])
+                elif xxx.isSizer:
+                    SetMenu2(m, pullDownMenu.sizers)
+                else:
+                    SetMenu2(m, pullDownMenu.controls)
+                id = wxNewId()
+                menu.AppendMenu(id, 'Replace With', m)
+                if not m.GetMenuItemCount(): menu.Enable(id, False)
             menu.AppendSeparator()
             # Not using standart IDs because we don't want to show shortcuts
             menu.Append(wxID_CUT, 'Cut', 'Cut to the clipboard')
diff --git a/wxPython/wxPython/tools/XRCed/xrced.py b/wxPython/wxPython/tools/XRCed/xrced.py
index bc5a8513ad..8674d1c12b 100644
--- a/wxPython/wxPython/tools/XRCed/xrced.py
+++ b/wxPython/wxPython/tools/XRCed/xrced.py
@@ -11,14 +11,12 @@ xrced -- Simple resource editor for XRC format used by wxWindows/wxPython
 
 Usage:
 
-    xrced [ -h ] [ -i ] [ -v ] [ XRC-file ]
+    xrced [ -h ] [ -v ] [ XRC-file ]
 
 Options:
 
     -h          output short usage info and exit
 
-    -i          use international character set instead of translations
-
     -v          output version info and exit
 """
 
@@ -272,6 +270,7 @@ class Frame(wxFrame):
         EVT_KEY_UP(self, tools.OnKeyUp)
 
     def OnNew(self, evt):
+        if not self.AskSave(): return
         self.Clear()
 
     def OnOpen(self, evt):
@@ -527,7 +526,7 @@ class Frame(wxFrame):
         else:
             self.toolsSizer.Remove(g.tools)
         self.toolsSizer.Layout()
-
+        
     def OnTest(self, evt):
         if not tree.selection: return   # key pressed event
         tree.ShowTestWindow(tree.selection)
@@ -637,6 +636,92 @@ Homepage: http://xrced.sourceforge.net\
             else:
                 tree.pendingHighLight = None
         tree.SetFocus()
+        self.modified = True
+
+    # Replace one object with another
+    def OnReplace(self, evt):
+        selected = tree.selection
+        xxx = tree.GetPyData(selected).treeObject()
+        elem = xxx.element
+        parent = elem.parentNode
+        parentXXX = xxx.parent
+        # New class
+        className = pullDownMenu.createMap[evt.GetId() - 1000]
+        # Create temporary empty node (with default values)
+        dummy = MakeEmptyDOM(className)
+        xxxClass = xxxDict[className]
+        # Remove non-compatible children
+        if tree.ItemHasChildren(selected) and not xxxClass.hasChildren:
+            tree.DeleteChildren(selected)
+        nodes = elem.childNodes[:]
+        tags = []
+        for node in nodes:
+            remove = False
+            tag = node.tagName
+            if tag == 'object':
+                if not xxxClass.hasChildren:
+                    remove = True
+            elif tag not in xxxClass.allParams and \
+                     (not xxxClass.hasStyle or tag not in xxxClass.styles):
+                remove = True
+            else:
+                tags.append(tag)
+            if remove:
+                elem.removeChild(node)
+                node.unlink()
+        
+        # Copy parameters present in dummy but not in elem
+        for node in dummy.childNodes:
+            tag = node.tagName
+            if tag not in tags:
+                elem.appendChild(node.cloneNode(True))
+        dummy.unlink()
+        # Change class name
+        elem.setAttribute('class', className)        
+        # Re-create xxx element
+        xxx = MakeXXXFromDOM(parentXXX, elem)
+        # Update parent in child objects
+        if tree.ItemHasChildren(selected):
+            i, cookie = tree.GetFirstChild(selected, 0)
+            while i.IsOk():
+                x = tree.GetPyData(i)
+                x.parent = xxx
+                if x.hasChild: x.child.parent = xxx
+                i, cookie = tree.GetNextChild(selected, cookie)
+    
+        # Update tree
+        if tree.GetPyData(selected).hasChild: # child container
+            container = tree.GetPyData(selected)
+            container.child = xxx
+            container.hasChildren = xxx.hasChildren
+            container.isSizer = xxx.isSizer
+        else:
+            tree.SetPyData(selected, xxx)
+        tree.SetItemText(selected, xxx.treeName())
+        tree.SetItemImage(selected, xxx.treeImage())
+
+        # Set default name for top-level windows
+        if parent.__class__ == xxxMainNode:
+            cl = xxx.treeObject().__class__
+            frame.maxIDs[cl] += 1
+            xxx.treeObject().name = '%s%d' % (defaultIDs[cl], frame.maxIDs[cl])
+            xxx.treeObject().element.setAttribute('name', xxx.treeObject().name)
+
+        # Update panel
+        g.panel.SetData(xxx)
+        # Update tools
+        g.tools.UpdateUI()
+
+        #undoMan.RegisterUndo(UndoPasteCreate(parentLeaf, parent, newItem, selected))
+        # Update view?
+        if g.testWin and tree.IsHighlatable(selected):
+            if conf.autoRefresh:
+                tree.needUpdate = True
+                tree.pendingHighLight = selected
+            else:
+                tree.pendingHighLight = None
+        tree.SetFocus()
+        self.modified = True
 
     # Expand/collapse subtree
     def OnExpand(self, evt):
@@ -736,11 +821,12 @@ Homepage: http://xrced.sourceforge.net\
             f.seek(0)
             dom = minidom.parse(f)
             # Set encoding global variable and document encoding property
-            import xxx
             if mo:
-                dom.encoding = xxx.currentEncoding = mo.group('encd')
+                dom.encoding = g.currentEncoding = mo.group('encd')
+                if dom.encoding not in ['ascii', sys.getdefaultencoding()]:
+                    wxLogWarning('Encoding is different from system default')
             else:
-                xxx.currentEncoding = 'iso-8859-1'
+                g.currentEncoding = 'ascii'
                 dom.encoding = ''
             f.close()
             # Change dir
@@ -819,14 +905,13 @@ Homepage: http://xrced.sourceforge.net\
 ################################################################################
 
 def usage():
-    print >> sys.stderr, 'usage: xrced [-dhlv] [file]'
+    print >> sys.stderr, 'usage: xrced [-dhiv] [file]'
 
 class App(wxApp):
     def OnInit(self):
         global debug
         # Process comand-line
         try:
-            opts = args = []  #give empty values in case of exception
             opts, args = getopt.getopt(sys.argv[1:], 'dhiv')
         except getopt.GetoptError:
             if wxPlatform != '__WXMAC__': # macs have some extra parameters
@@ -839,8 +924,6 @@ class App(wxApp):
                 sys.exit(0)
             elif o == '-d':
                 debug = True
-            elif o == '-i':
-                g.xmlFlags &= ~wxXRC_USE_LOCALE
             elif o == '-v':
                 print 'XRCed version', version
                 sys.exit(0)
diff --git a/wxPython/wxPython/tools/XRCed/xrced.xrc b/wxPython/wxPython/tools/XRCed/xrced.xrc
index f79590b319..cc9554f0c5 100644
--- a/wxPython/wxPython/tools/XRCed/xrced.xrc
+++ b/wxPython/wxPython/tools/XRCed/xrced.xrc
@@ -1,7 +1,55 @@
 <?xml version="1.0" ?>
 <resource>
+  <object class="wxDialog" name="DIALOG_TEXT">
+    <title>Text Dialog</title>
+    <centered>1</centered>
+    <object class="wxBoxSizer">
+      <orient>wxVERTICAL</orient>
+      <object class="sizeritem">
+        <object class="wxBoxSizer">
+          <orient>wxHORIZONTAL</orient>
+          <object class="sizeritem">
+            <object class="wxTextCtrl" name="TEXT">
+              <style>wxTE_MULTILINE</style>
+            </object>
+            <option>1</option>
+            <flag>wxALL|wxEXPAND</flag>
+            <border>5</border>
+          </object>
+        </object>
+        <option>1</option>
+        <flag>wxEXPAND</flag>
+      </object>
+      <object class="sizeritem">
+        <object class="wxStaticLine"/>
+        <flag>wxEXPAND</flag>
+      </object>
+      <object class="sizeritem">
+        <object class="wxBoxSizer">
+          <orient>wxHORIZONTAL</orient>
+          <object class="sizeritem">
+            <object class="wxButton" name="wxID_OK">
+              <label>OK</label>
+              <default>1</default>
+            </object>
+            <flag>wxRIGHT</flag>
+            <border>10</border>
+          </object>
+          <object class="sizeritem">
+            <object class="wxButton" name="wxID_CANCEL">
+              <label>Cancel</label>
+            </object>
+          </object>
+        </object>
+        <flag>wxALL|wxALIGN_CENTRE_HORIZONTAL</flag>
+        <border>10</border>
+      </object>
+    </object>
+    <style>wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</style>
+  </object>
   <object class="wxDialog" name="DIALOG_CONTENT">
     <title>Content</title>
+    <centered>1</centered>
     <size>250,300</size>
     <object class="wxBoxSizer">
       <orient>wxVERTICAL</orient>
@@ -86,6 +134,7 @@
   </object>
   <object class="wxDialog" name="DIALOG_CONTENT_CHECK_LIST">
     <title>Content</title>
+    <centered>1</centered>
     <size>250,300</size>
     <object class="wxBoxSizer">
       <orient>wxVERTICAL</orient>
@@ -170,6 +219,7 @@
   </object>
   <object class="wxDialog" name="DIALOG_INTLIST">
     <title>Numbers</title>
+    <centered>1</centered>
     <size>100,300</size>
     <object class="wxBoxSizer">
       <orient>wxVERTICAL</orient>
diff --git a/wxPython/wxPython/tools/XRCed/xxx.py b/wxPython/wxPython/tools/XRCed/xxx.py
index ac93753e72..a9526b547b 100644
--- a/wxPython/wxPython/tools/XRCed/xxx.py
+++ b/wxPython/wxPython/tools/XRCed/xxx.py
@@ -8,10 +8,6 @@ from xml.dom import minidom
 from globals import *
 from params import *
 
-currentEncoding = wxLocale_GetSystemEncodingName()
-if not currentEncoding:
-    currentEncoding = 'ascii'
-
 # Base class for interface parameter classes
 class xxxNode:
     def __init__(self, node):
@@ -32,6 +28,15 @@ class xxxParam(xxxNode):
         else:
             text = node.childNodes[0] # first child must be text node
             assert text.nodeType == minidom.Node.TEXT_NODE
+            # Append other text nodes if present and delete them
+            extraText = ''
+            for n in node.childNodes[1:]:
+                if n.nodeType == minidom.Node.TEXT_NODE:
+                    extraText += n.data
+                    node.removeChild(n)
+                    n.unlink()
+                else: break
+            if extraText: text.data = text.data + extraText
         # Use convertion from unicode to current encoding
         self.textNode = text
     # Value returns string
@@ -42,9 +47,9 @@ class xxxParam(xxxNode):
             self.textNode.data = value
     else:
         def value(self):
-            return self.textNode.data.encode(currentEncoding)
+            return self.textNode.data.encode(g.currentEncoding)
         def update(self, value):
-            self.textNode.data = unicode(value, currentEncoding)
+            self.textNode.data = unicode(value, g.currentEncoding)
 
 # Integer parameter
 class xxxParamInt(xxxParam):
@@ -238,7 +243,13 @@ class xxxObject:
                 # If default is specified, set it
                 if self.default.has_key(param):
                     elem = g.tree.dom.createElement(param)
-                    self.params[param] = xxxParam(elem)
+                    if param == 'content':
+                        if self.className == 'wxCheckList':
+                            self.params[param] = xxxParamContentCheckList(elem)
+                        else:
+                            self.params[param] = xxxParamContent(elem)
+                    else:
+                        self.params[param] = xxxParam(elem)
                     # Find place to put new element: first present element after param
                     found = False
                     paramStyles = self.allParams + self.styles
@@ -325,12 +336,13 @@ class xxxEncoding:
 # Special class for root node
 class xxxMainNode(xxxContainer):
     allParams = ['encoding']
-    required = ['encoding']
-    default = {'encoding': ''}
     hasStyle = hasName = False
     def __init__(self, dom):
         xxxContainer.__init__(self, None, dom.documentElement)
         self.className = 'XML tree'
+        # Reset required parameters after processing XML, because encoding is
+        # a little special
+        self.required = ['encoding']
         self.params['encoding'] = xxxEncoding(dom.encoding)
 
 ################################################################################
@@ -347,6 +359,7 @@ class xxxDialog(xxxContainer):
     allParams = ['title', 'centered', 'pos', 'size', 'style']
     paramDict = {'centered': ParamBool}
     required = ['title']
+    default = {'title': ''}
     winStyles = ['wxDEFAULT_DIALOG_STYLE', 'wxSTAY_ON_TOP',
                  'wxDIALOG_MODAL', 'wxDIALOG_MODELESS',
                  'wxCAPTION', 'wxSYSTEM_MENU', 'wxRESIZE_BORDER', 'wxRESIZE_BOX',
@@ -360,6 +373,7 @@ class xxxFrame(xxxContainer):
     allParams = ['title', 'centered', 'pos', 'size', 'style']
     paramDict = {'centered': ParamBool}
     required = ['title']
+    default = {'title': ''}
     winStyles = ['wxDEFAULT_FRAME_STYLE', 'wxDEFAULT_DIALOG_STYLE',
                  'wxSTAY_ON_TOP',
                  'wxCAPTION', 'wxSYSTEM_MENU', 'wxRESIZE_BORDER',
@@ -418,10 +432,12 @@ class xxxTextCtrl(xxxObject):
     allParams = ['value', 'pos', 'size', 'style']
     winStyles = ['wxTE_PROCESS_ENTER', 'wxTE_PROCESS_TAB', 'wxTE_MULTILINE',
               'wxTE_PASSWORD', 'wxTE_READONLY', 'wxHSCROLL']
+    paramDict = {'value': ParamMultilineText}
 
 class xxxChoice(xxxObject):
     allParams = ['content', 'selection', 'pos', 'size', 'style']
     required = ['content']
+    default = {'content': '[]'}
     winStyles = ['wxCB_SORT']
 
 class xxxSlider(xxxObject):
@@ -462,7 +478,7 @@ class xxxTreeCtrl(xxxObject):
 
 class xxxHtmlWindow(xxxObject):
     allParams = ['pos', 'size', 'style', 'borders', 'url', 'htmlcode']
-    paramDict = {'borders': ParamInt}
+    paramDict = {'borders': ParamInt, 'htmlcode':ParamMultilineText}
     winStyles = ['wxHW_SCROLLBAR_NEVER', 'wxHW_SCROLLBAR_AUTO']
 
 class xxxCalendarCtrl(xxxObject):
@@ -479,6 +495,10 @@ class xxxGenericDirCtrl(xxxObject):
     winStyles = ['wxDIRCTRL_DIR_ONLY', 'wxDIRCTRL_3D_INTERNAL', 'wxDIRCTRL_SELECT_FIRST',
                  'wxDIRCTRL_SHOW_FILTERS', 'wxDIRCTRL_EDIT_LABELS']
 
+class xxxScrolledWindow(xxxContainer):
+    allParams = ['pos', 'size', 'style']
+    winStyles = ['wxHSCROLL', 'wxVSCROLL']
+
 ################################################################################
 # Buttons
 
@@ -522,6 +542,7 @@ class xxxRadioBox(xxxObject):
     allParams = ['label', 'content', 'selection', 'dimension', 'pos', 'size', 'style']
     paramDict = {'dimension': ParamInt}
     required = ['label', 'content']
+    default = {'content': '[]'}
     winStyles = ['wxRA_SPECIFY_ROWS', 'wxRA_SPECIFY_COLS']
 
 class xxxCheckBox(xxxObject):
@@ -532,17 +553,20 @@ class xxxCheckBox(xxxObject):
 class xxxComboBox(xxxObject):
     allParams = ['content', 'selection', 'value', 'pos', 'size', 'style']
     required = ['content']
+    default = {'content': '[]'}
     winStyles = ['wxCB_SIMPLE', 'wxCB_SORT', 'wxCB_READONLY', 'wxCB_DROPDOWN']
 
 class xxxListBox(xxxObject):
     allParams = ['content', 'selection', 'pos', 'size', 'style']
     required = ['content']
+    default = {'content': '[]'}
     winStyles = ['wxLB_SINGLE', 'wxLB_MULTIPLE', 'wxLB_EXTENDED', 'wxLB_HSCROLL',
               'wxLB_ALWAYS_SB', 'wxLB_NEEDED_SB', 'wxLB_SORT']
 
 class xxxCheckList(xxxObject):
     allParams = ['content', 'pos', 'size', 'style']
     required = ['content']
+    default = {'content': '[]'}
     winStyles = ['wxLC_LIST', 'wxLC_REPORT', 'wxLC_ICON', 'wxLC_SMALL_ICON',
               'wxLC_ALIGN_TOP', 'wxLC_ALIGN_LEFT', 'wxLC_AUTOARRANGE',
               'wxLC_USER_TEXT', 'wxLC_EDIT_LABELS', 'wxLC_NO_HEADER',
@@ -733,6 +757,7 @@ xxxDict = {
     'wxCalendarCtrl': xxxCalendarCtrl,
     'wxGenericDirCtrl': xxxGenericDirCtrl,
     'wxSpinCtrl': xxxSpinCtrl,
+    'wxScrolledWindow': xxxScrolledWindow,
 
     'wxBoxSizer': xxxBoxSizer,
     'wxStaticBoxSizer': xxxStaticBoxSizer,
@@ -772,9 +797,9 @@ def MakeXXXFromDOM(parent, element):
     try:
         klass = xxxDict[element.getAttribute('class')]
     except KeyError:
-        # Verify that it's not recursive exception
-        print 'ERROR: unknown class:', element.getAttribute('class')
-        raise
+        # If we encounter a weird class, use unknown template
+        print 'WARNING: unsupported class:', element.getAttribute('class')
+        klass = xxxUnknown
     return klass(parent, element)
 
 # Make empty DOM element
diff --git a/wxPython/wxSWIG/Modules/pycpp.cxx b/wxPython/wxSWIG/Modules/pycpp.cxx
index 89cd85ffd5..b4021d7256 100644
--- a/wxPython/wxSWIG/Modules/pycpp.cxx
+++ b/wxPython/wxSWIG/Modules/pycpp.cxx
@@ -146,7 +146,7 @@ void PYTHON::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l)
     if (docstring && doc_entry) {
       *pyclass << tab8 << "\"\"\"" << add_docstring(doc_entry) << "\"\"\"\n";
     }
-    *pyclass << tab8 << "val = apply(" << module << "." << name_member(realname,class_name) << ",(self,) + _args, _kwargs)\n";
+    *pyclass << tab8 << "val = " << module << "." << name_member(realname,class_name) << "(self, *_args, **_kwargs)\n";
 
     // Check to see if the return type is an object
     if ((hash.lookup(t->name)) && (t->is_pointer <= 1)) {
@@ -216,7 +216,7 @@ void PYTHON::cpp_constructor(char *name, char *iname, ParmList *l) {
       if (docstring && doc_entry)
 	*construct << tab8 << "\"\"\"" << add_docstring(doc_entry) << "\"\"\"\n";
 
-      *construct << tab8 << "self.this = apply(" << module << "." << name_construct(realname) << ",_args,_kwargs)\n";
+      *construct << tab8 << "self.this = " << module << "." << name_construct(realname) << "(*_args,**_kwargs)\n";
       *construct << tab8 << "self.thisown = 1\n";
       emitAddPragmas(*construct,"__init__",tab8);
       have_constructor = 1;
@@ -226,8 +226,8 @@ void PYTHON::cpp_constructor(char *name, char *iname, ParmList *l) {
       // function for it.
 
       *additional << "def " << realname << "(*_args,**_kwargs):\n";
-      *additional << tab4 << "val = " << class_name << "Ptr(apply("
-		  << module << "." << name_construct(realname) << ",_args,_kwargs))\n"
+      *additional << tab4 << "val = " << class_name << "Ptr("
+		  << module << "." << name_construct(realname) << "(*_args,**_kwargs))\n"
                   << tab4 << "val.thisown = 1\n";
       emitAddPragmas(*additional, realname, tab4);
       *additional << tab4 << "return val\n\n";
@@ -322,7 +322,7 @@ void PYTHON::cpp_close_class() {
     if (!have_repr) {
       // Supply a repr method for this class
       repr << tab4 << "def __repr__(self):\n"
-	   << tab8 << "return \"<C " << class_name <<" instance at %s>\" % (self.this,)\n";
+	   << tab8 << "return \"<%s.%s instance; proxy of C++ " << class_name <<" instance at %s>\" % (self.__class__.__module__, self.__class__.__name__, self.this)\n";
 
       classes << repr;
       emitAddPragmas(classes,"__class__",tab4);
diff --git a/wxPython/wxSWIG/Modules/python.cxx b/wxPython/wxSWIG/Modules/python.cxx
index 8d26c6f8f2..9abad191f2 100644
--- a/wxPython/wxSWIG/Modules/python.cxx
+++ b/wxPython/wxSWIG/Modules/python.cxx
@@ -1071,7 +1071,7 @@ void PYTHON::create_function(char *name, char *iname, DataType *d, ParmList *l)
 	func << tab4 << "\"\"\"" << add_docstring(doc_entry) << "\"\"\"\n";
       }
 
-      func << tab4 << "val = apply(" << module << "." << iname << ",_args,_kwargs)\n";
+      func << tab4 << "val = " << module << "." << iname << "(*_args,**_kwargs)\n";
 
       if (munge_return) {
 	//  If the output of this object has been remapped in any way, we're
-- 
2.47.2