Introduction
Hints on how to change the generated code sections of a Boa 0.3.1 (or earlier) file to make it work under Boa 0.4.0-pre.
Currently code generated with Boa 0.3.1 or earlier will not work with Boa 0.4.0-pre as it is using the wxPython 2.5.x code style. The following is a start in documenting what is needed and what tools are available to help.
This is in no way complete, but hopefully it will help someone. I also hope that over time we can make this much more complete so that the transition will become very easy and painless.
Steps to convert a module
* Run the wx25upgrade.py
- In the latest Boa 0.4.0 from CVS this is available from the Tools menu
* Review import statements
- Many of the standard ones are converted
Check "self.importNames" in wx25upgrade.py in boa/ExternalLib
- Cases not shown in "self.importNames" need to be changed by hand, e.g.
from wxPython.lib.anchors import LayoutAnchors to from wx.lib.anchors import LayoutAnchors
* Try to open the file in the Boa Designer, and fix problems as they are reported.
Tools
The "upgrade.py" tool written by PaulSorenson has been renamed to "wx25upgrade.py" and is now distributed with the latest Boa 0.4.0 pre version.
You can run the tool from the Boa "Tools" menu by selecting the option "wxPython 2.4 to 2.5 code upgrader".
It allows you to convert a single file or all .py files in a folder/directory.
When converting a single file the updated version has "Upg" appended to its name.
When converting a folder/directory it creates a folder/directory with "Upgraded" appended to the original name and the updated versions of the files are placed in it.
The tool converts the following:
- EVT_xxx change from wxPython 2.4 style to 2.5 style
- Append for menu, changes 'helpString' to 'help', 'item' to 'text' and wxITEM to wx.ITEM
changes the 'map(lambda _init_whatever: wxNewId()' to the new format
- changes the classes from wxName to wx.Name
check "self.specialNames" to see which special cases are handled
changes the 'init' from wxName.init to wx.Name.init
- changes imports
check "self.importNames" to see which imports are handled
- true and false to True and False
SetStatusText "(i=" keyword to "(number="
AddSpacer "n, n" to wx.Size(n, n)
- flag= i.e. flag=wxALL
- style= i.e. style=wxDEFAULT_DIALOG_STYLE
wxInitAllImageHandlers( to wx.InitAllImageHandlers(
- orient=wx to orient=wx.
- kind=wxITEM to kind=wx.ITEM
Following changes are handled, see "self.specialNames2"
- wxIcon( to wx.Icon(
wxBITMAP to wx.BITMAP
wxBitmap( to wx.Bitmap(
wxSize( to wx.Size(
wxNullBitmap to wx.NullBitmap
wxPoint( to wx.Point(
wxNewID to wx.NewID (used elsewhere then in the lambda statement)
wxColour to wx.Colour
wxOPEN to wx.OPEN
wxID_OK to wx.ID_OK
wxRED to wx.RED
wxGREEN to wx.GREEN
wxBLUE to wx.BLUE
wxGrid.wxGrid to wx.grid.Grid.wxGrid
wxACCEL to wx.ACCEL
wxAcceleratorTable to wx.AcceleratorTable
wxTheClipboard to wx.TheClipboard
wxID_YES to wx.ID_YES
wxOK to wx.OK
wxICON_ to wx.ICON_
wxPySimpleApp to wx.PySimpleApp
wxYES_NO to wx.YES_NO
wxYES_DEFAULT to wx.YES_DEFAULT
wxNO_DEFAULT to wx.NO_DEFAULT
wxID_YES to wx.ID_YES
wxID_NO to wx.ID_NO
wxID_OK to wx.ID_OK
wxID_CANCEL to wx.ID_CANCEL
wxCallAfter to wx.CallAfter
wxDefault to wx.Default
wxNamedColor to wx.NamedColor
wxIMAGE to wx.IMAGE
wxLIST to wx.LIST
- WXK_ to wx.WXK_
- wxTL_ to wx.gizmos.TL_
wxBeginBusyCursor to wx.BeginBusyCursor
wxEndBusyCursor to wx.EndBusyCursor
wxMessageBox to wx.MessageBox
wxTreeList to wx.gizmos.TreeList
wxEmptyBitmap to wx.EmptyBitmap
wxCOPY to wx.COPY
wxImage to wx.Image
wxWave to wx.Sound
wxUsleep to wx.Usleep
wxSafeYield to wx.SafeYield
wxToolTip to wx.ToolTip
wxCAP_ to wx.CAP_
wxJOIN_ to wx.JOIN_
wxSHORT_DASH to wx.SHORT_DASH
wxDOT_DASH to wx.DOT_DASH
wxDOT to wx.DOT
wxSAVE to wx.SAVE
wxOVERWRITE_PROMPT to wx.OVERWRITE_PROMPT
wxCHANGE_DIR to wx.CHANGE_DIR
wxMULTIPLE to wx.MULTIPLE
wxSOLID to wx.SOLID
wxLIGHT to wx.LIGHT
wxNORMAL to wx.NORMAL
wxBOLD to wx.BOLD
wxTRANSPARENT to wx.TRANSPARENT
wxITALIC to wx.ITALIC
wxSLANT to wx.SLANT
wxSWISS to wx.SWISS
wxROMAN to wx.ROMAN
wxSCRIPT to wx.SCRIPT
wxDECORATIVE to wx.DECORATIVE
wxMODERN to wx.MODERN
wxCURSOR to wx.CURSOR_
wxPen to wx.Pen
wxFont, i.e. wxFont(8,wxSWISS,wxNORMAL,wxNORMAL to wx.Font(8,wx.SWISS,wx.NORMAL,wx.NORMAL
- _custom_classes are changed
Other code changes
The following changes are not handled by the tool, i.e. you have to do them by hand - at least at this time. Whenever you find something which is not handled please update this section or send me an e-mail!
wx.Timer constructor change
- "evtHandler=" to "owner="
wx.SplitterWindow change
- wxSP_FULLSASH no longer supported
Troubleshooting
It some cases it has been necessary to re-indent the file before running it through the updater. You can do this by selecting in Boa the menu option File/Reindent whole file.
I believe that pyparsing gets confused and this shows that e.g. EVT_TEXT(.... gets converted to EVT_TEXself.bind etc or that the converted text does not show in the right place.
The latest version of wx25upgrade.py, delivered as of March 15, 2005 does the re-indent automatically. - Thanks to Riaan.
Note: Using the upgrader on a file which has been partially or totally converted to the 2.5 wx namespace might cause it to generate invalid code for certain things.
Note 2: You might have to get the most current version from CVS.
Comments
Please feel free to update this page or send changes you would like added to me at werner.bruhin@free.fr.
