]> git.saurik.com Git - wxWidgets.git/commitdiff
0.1.7-0
authorRoman Rolinsky <rolinsky@femagsoft.com>
Fri, 11 Nov 2005 00:23:31 +0000 (00:23 +0000)
committerRoman Rolinsky <rolinsky@femagsoft.com>
Fri, 11 Nov 2005 00:23:31 +0000 (00:23 +0000)
-------

Added new controls (Choicebook, Listbook, StatusBar, DatePicker), and
completed style flags. Test window is opened for an available parent
control if no specific view defined. Better handling of exceptions
(highlighting does not 'stick' anymore). Tested on wxGTK 2.6.1.0.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36156 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

wxPython/wx/tools/XRCed/CHANGES.txt
wxPython/wx/tools/XRCed/README.txt
wxPython/wx/tools/XRCed/globals.py
wxPython/wx/tools/XRCed/panel.py
wxPython/wx/tools/XRCed/params.py
wxPython/wx/tools/XRCed/tools.py
wxPython/wx/tools/XRCed/tree.py
wxPython/wx/tools/XRCed/undo.py
wxPython/wx/tools/XRCed/xrced.py
wxPython/wx/tools/XRCed/xxx.py

index 345f9888a75bea102c9aad87acf72c2e4b5afff6..877cc306a3d7a703bf2538e3c8dfcb9f8d8f9979 100644 (file)
@@ -1,3 +1,11 @@
+0.1.7-0
+-------
+
+Added new controls (Choicebook, Listbook, StatusBar, DatePicker), and
+completed style flags. Test window is opened for an available parent
+control if no specific view defined. Better handling of exceptions
+(highlighting does not 'stick' anymore). Tested on wxGTK 2.6.1.0.
+
 0.1.6-7
 -------
 
index 83377f1317cd1df8458f2a8f4e816ac753dc1410..a0b1738bda0b19fe6f3fc44a640c05290bc12c95 100644 (file)
@@ -7,10 +7,16 @@
 System requirements
 -------------------
 
-XRCed requires wxWindows and wxPython greater or equal to 2.3.3, and 
-Python 2.2 or newer (it may work with earlier version, but was not tested).
+wxPython version must be recent enough to support all features (a warning
+message is shown if not).
 
-wxPython must be compiled with XRC support.
+
+User requirements
+-----------------
+
+To use XRCed it is really important to be familiar with wxWindows class names
+and at least partially with XRC resource format (read
+wxWindows/doc/tech/tn0014.txt for reference).
 
 
 Short manual
@@ -51,8 +57,11 @@ should be "checked" first. This panel can be made separate by unchecking
 All properties can be edited as text, and some are supplied with special
 editing controls.
 
+When no 'Edit' button is provided for editing a property's value, it is
+supposed to be copied verbatim to XRC file.
+
 The names of the properties are exactly as in XRC file, and it's usually not
-hard to guess what they do. XML ID is the name of the window, and must be
+hard to guess what they do. "XML ID" is the name of the window, and must be
 present for top-level windows (though this is not enforced by XRCed).
 
 To display the preview window double-click a top-level object (you should
@@ -61,8 +70,22 @@ from View menu, or press F5. After that, if you select a child object, it
 becomes highlighted, and if you change it, preview is updated when you select
 another item or press Ctrl-R (refresh). To turn off automatic update, toggle
 "View->Auto-refresh" or toolbar auto-refresh button (to the right of the
-refresh button).
+refresh button). If you double-click a non-window object (a button for
+example), then test view is created for a closest ancestor which is a window.
+
+
+Bugs
+----
+
+- Some combinations of parent/child windows are not valid but possible to put
+  into XML tree by using XRCed. Usually this produces a meaningful error
+  message from XRC library when test view is opened.
+
+- Be careful when replacing a non-empty container control with another class,
+  and check parameters which can be copied from the previous object but not
+  valid for the new one. Is it not possible to undo replacement yet.
+
 
 --------------------------------------------------------------------------------
 
-Copyright 2001-2003 Roman Rolinsky <rollrom@xrced.sourceforge.net>
+Copyright 2001-2005 Roman Rolinsky <rollrom@xrced.sourceforge.net>
index 9b5b12dc969926224747ce0c5cb91300ded87fac..ece468e8cecb6e17afc4cb1cbecbb05ed365caac 100644 (file)
@@ -15,7 +15,16 @@ import sys
 # Global constants
 
 progname = 'XRCed'
-version = '0.1.6-7'
+version = '0.1.7-0'
+# Minimal wxWindows version
+MinWxVersion = (2,6,0)
+if wxVERSION[:3] < MinWxVersion:
+    print '''\
+******************************* WARNING **************************************
+  This version of XRCed may not work correctly on your version of wxWindows.
+  Please upgrade wxWindows to %d.%d.%d or higher.
+******************************************************************************''' % MinWxVersion    
+
 # Can be changed to set other default encoding different
 #defaultEncoding = ''
 # you comment above and can uncomment this:
index 407888f52c19b92dd29b3566f6ea80f8b0d211e3..785cca2c87e7c2dd1d56342dc78a326624cdbc16 100644 (file)
@@ -272,13 +272,13 @@ class PropPage(ParamPage):
         self.box = wxStaticBox(self, -1, label)
         self.box.SetFont(g.labelFont())
         topSizer = wxStaticBoxSizer(self.box, wxVERTICAL)
-        sizer = wxFlexGridSizer(len(xxx.allParams), 2, 1, 1)
+        sizer = wxFlexGridSizer(len(xxx.allParams), 2, 0, 1)
         sizer.AddGrowableCol(1)
         if xxx.hasName:
             label = wxStaticText(self, -1, 'XML ID:', size=(LABEL_WIDTH,-1))
             control = ParamText(self, 'XML_name', 200)
             sizer.AddMany([ (label, 0, wxALIGN_CENTER_VERTICAL),
-                            (control, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxGROW, 5) ])
+                            (control, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxGROW, 10) ])
             self.controlName = control
         for param in xxx.allParams:
             present = xxx.params.has_key(param)
@@ -345,7 +345,7 @@ class StylePage(ParamPage):
         box = wxStaticBox(self, -1, label)
         box.SetFont(g.labelFont())
         topSizer = wxStaticBoxSizer(box, wxVERTICAL)
-        sizer = wxFlexGridSizer(len(xxx.styles), 2, 1, 1)
+        sizer = wxFlexGridSizer(len(xxx.styles), 2, 0, 1)
         sizer.AddGrowableCol(1)
         for param in xxx.styles:
             present = xxx.params.has_key(param)
index 5ba1bccd68a545fae3d5d255ae73d823fe262fa2..07094c545a8b199b7f389913cdae0f34eb58685a 100644 (file)
@@ -11,14 +11,10 @@ from types import *
 from wxPython.xrc import *
 
 genericStyles = [
-    'wxSIMPLE_BORDER', 'wxDOUBLE_BORDER', 'wxSUNKEN_BORDER',
+    'wxSIMPLE_BORDER', 'wxSUNKEN_BORDER', 'wxDOUBLE_BORDER',
     'wxRAISED_BORDER', 'wxSTATIC_BORDER', 'wxNO_BORDER',
-    'wxTRANSPARENT_WINDOW', 'wxTAB_TRAVERSAL', 
-    'wxWANTS_CHARS',
-    'wxNO_FULL_REPAINT_ON_RESIZE',
-    'wxVSCROLL', 'wxHSCROLL', 'wxALWAYS_SHOW_SB',
-    'wxCLIP_CHILDREN',
-    'wxFULL_REPAINT_ON_RESIZE'
+    'wxCLIP_CHILDREN', 'wxTRANSPARENT_WINDOW', 'wxWANTS_CHARS',
+    'wxNO_FULL_REPAINT_ON_RESIZE', 'wxFULL_REPAINT_ON_RESIZE'
     ]
 
 genericExStyles = [
@@ -41,7 +37,7 @@ class PPanel(wxPanel):
         # Something strange is going on with enable so we make sure...
         for w in self.GetChildren():
             w.Enable(value)
-        wxPanel.Enable(self, value)
+        #wxPanel.Enable(self, value)
     def SetModified(self):
         self.modified = True
         g.panel.SetModified(True)
@@ -108,14 +104,17 @@ class ParamBinaryOr(PPanel):
 
 class ParamFlag(ParamBinaryOr):
     values = ['wxTOP', 'wxBOTTOM', 'wxLEFT', 'wxRIGHT', 'wxALL',
-              'wxEXPAND', 'wxGROW', 'wxSHAPED', 'wxALIGN_CENTRE', 'wxALIGN_RIGHT',
-              'wxFIXED_MINSIZE',
-              'wxALIGN_BOTTOM', 'wxALIGN_CENTRE_VERTICAL',
-              'wxALIGN_CENTRE_HORIZONTAL',
+              'wxEXPAND', 'wxGROW', 'wxSHAPED', 'wxSTRETCH_NOT',
+              'wxALIGN_CENTRE', 'wxALIGN_LEFT', 'wxALIGN_RIGHT',
+              'wxALIGN_TOP', 'wxALIGN_BOTTOM', 
+              'wxALIGN_CENTRE_VERTICAL', 'wxALIGN_CENTRE_HORIZONTAL', 
+              'wxADJUST_MINSIZE', 'wxFIXED_MINSIZE'
               ]
     equal = {'wxALIGN_CENTER': 'wxALIGN_CENTRE',
              'wxALIGN_CENTER_VERTICAL': 'wxALIGN_CENTRE_VERTICAL',
-             'wxALIGN_CENTER_HORIZONTAL': 'wxALIGN_CENTRE_HORIZONTAL'}
+             'wxALIGN_CENTER_HORIZONTAL': 'wxALIGN_CENTRE_HORIZONTAL',
+             'wxUP': 'wxTOP', 'wxDOWN': 'wxBOTTOM', 'wxNORTH': 'wxTOP',
+             'wxSOUTH': 'wxBOTTOM', 'wxWEST': 'wxLEFT', 'wxEAST': 'wxRIGHT'}
     def __init__(self, parent, name):
         ParamBinaryOr.__init__(self, parent, name)
 
@@ -196,10 +195,10 @@ class ParamColour(PPanel):
         self.ID_TEXT_CTRL = wxNewId()
         self.ID_BUTTON = wxNewId()
         sizer = wxBoxSizer()
-        self.text = wxTextCtrl(self, self.ID_TEXT_CTRL, size=(65,-1))
-        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.text = wxTextCtrl(self, self.ID_TEXT_CTRL, size=(80,-1))
+        sizer.Add(self.text, 0, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM, 2)
+        self.button = wxPanel(self, self.ID_BUTTON, wxDefaultPosition, wxSize(20, 20))
+        sizer.Add(self.button, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 5)
         self.SetAutoLayout(True)
         self.SetSizer(sizer)
         sizer.Fit(self)
@@ -269,7 +268,7 @@ class ParamFont(PPanel):
         PPanel.OnChange(self, evt)
         self.textModified = True
     def _defaultValue(self):
-        return ['12', 'default', 'normal', 'normal', '0', '', '']
+        return [`g._sysFont.GetPointSize()`, 'default', 'normal', 'normal', '0', '', '']
     def GetValue(self):
         if self.textModified:           # text has newer value
             try:
@@ -293,7 +292,7 @@ class ParamFont(PPanel):
                 self.value = self._defaultValue()
         # Make initial font
         # Default values
-        size = 12
+        size = g._sysFont.GetPointSize()
         family = wxDEFAULT
         style = weight = wxNORMAL
         underlined = 0
@@ -472,7 +471,7 @@ class ParamText(PPanel):
         self.text = wxTextCtrl(self, self.ID_TEXT_CTRL, size=wxSize(textWidth,-1))
         if textWidth == -1: option = 1
         else: option = 0
-        sizer.Add(self.text, option, wxALIGN_CENTER_VERTICAL)
+        sizer.Add(self.text, option, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM, 2)
         self.SetAutoLayout(True)
         self.SetSizer(sizer)
         sizer.Fit(self)
@@ -951,5 +950,5 @@ paramDict = {
     'fg': ParamColour, 'bg': ParamColour, 'font': ParamFont,
     'enabled': ParamBool, 'focused': ParamBool, 'hidden': ParamBool,
     'tooltip': ParamText, 'bitmap': ParamBitmap, 'icon': ParamBitmap,
-    'encoding': ParamEncoding
+    'encoding': ParamEncoding, 'borders': ParamUnit
     }
index 6f5c9a0f8b7c8778b734fb655302c101d2eac7eb..00f7103b1eefadf3c363a065fa3e93fab41c4d91 100644 (file)
@@ -230,7 +230,7 @@ class Tools(wxPanel):
                                         ID_NEW.MENU_ITEM,
                                         ID_NEW.SEPARATOR ],
                                       False)
-            if state == STATE_STDDLGBTN:
+            elif state == STATE_STDDLGBTN:
                 pass                    # nothing can be added from toolbar
             elif state == STATE_MENUBAR:
                 self.EnableGroup(GROUP_MENUS)
@@ -277,9 +277,9 @@ class Tools(wxPanel):
                                       False)
                 self.EnableGroup(GROUP_SIZERS)
                 self.EnableGroup(GROUP_CONTROLS)
-        # Special case for notebook (always executed)
+        # Special case for *book (always executed)
         if state == STATE_ELSE:
-            if xxx.__class__ == xxxNotebook:
+            if xxx.__class__ in [xxxNotebook, xxxChoicebook, xxxListbook]:
                 self.EnableGroup(GROUP_SIZERS, False)
             else:
                 self.EnableGroup(GROUP_SIZERS)
index f11aa795c8c278a575a5eca51b2dbb7e294b195a..597c56a345daa76461518f16db3831bc2530dfe0 100644 (file)
@@ -56,6 +56,7 @@ class ID_NEW:
     TOOL = wxNewId()
     MENU_BAR = wxNewId()
     MENU = wxNewId()
+    STATUS_BAR = wxNewId()
 
     STATIC_TEXT = wxNewId()
     TEXT_CTRL = wxNewId()
@@ -82,16 +83,21 @@ class ID_NEW:
     LIST_CTRL = wxNewId()
     CHECK_LIST = wxNewId()
     NOTEBOOK = wxNewId()
+    CHOICEBOOK = wxNewId()
+    LISTBOOK = wxNewId()
     SPLITTER_WINDOW = wxNewId()
     SCROLLED_WINDOW = wxNewId()
     HTML_WINDOW = wxNewId()
     CALENDAR_CTRL = wxNewId()
+    DATE_CTRL = wxNewId()
     GENERIC_DIR_CTRL = wxNewId()
     SPIN_CTRL = wxNewId()
     UNKNOWN = wxNewId()
     WIZARD = wxNewId()
     WIZARD_PAGE = wxNewId()
     WIZARD_PAGE_SIMPLE = wxNewId()
+    BITMAP = wxNewId()
+    ICON = wxNewId()
     STATUS_BAR = wxNewId()
 
     BOX_SIZER = wxNewId()
@@ -151,9 +157,12 @@ class PullDownMenu:
             ID_NEW.WIZARD_PAGE_SIMPLE: 'wxWizardPageSimple',
             ID_NEW.TOOL_BAR: 'wxToolBar',
             ID_NEW.TOOL: 'tool',
+            ID_NEW.STATUS_BAR: 'wxStatusBar',
             ID_NEW.MENU_BAR: 'wxMenuBar',
             ID_NEW.MENU: 'wxMenu',
             ID_NEW.MENU_ITEM: 'wxMenuItem',
+            ID_NEW.BITMAP: 'wxBitmap',
+            ID_NEW.ICON: 'wxIcon',
             ID_NEW.SEPARATOR: 'separator',
 
             ID_NEW.STATIC_TEXT: 'wxStaticText',
@@ -170,6 +179,7 @@ class PullDownMenu:
             ID_NEW.RADIO_BOX: 'wxRadioBox',
             ID_NEW.COMBO_BOX: 'wxComboBox',
             ID_NEW.LIST_BOX: 'wxListBox',
+            ID_NEW.CHECK_LIST: 'wxCheckListBox',
 
             ID_NEW.STATIC_LINE: 'wxStaticLine',
             ID_NEW.STATIC_BITMAP: 'wxStaticBitmap',
@@ -179,12 +189,14 @@ class PullDownMenu:
             ID_NEW.SCROLL_BAR: 'wxScrollBar',
             ID_NEW.TREE_CTRL: 'wxTreeCtrl',
             ID_NEW.LIST_CTRL: 'wxListCtrl',
-            ID_NEW.CHECK_LIST: 'wxCheckListBox',
             ID_NEW.NOTEBOOK: 'wxNotebook',
+            ID_NEW.CHOICEBOOK: 'wxChoicebook',
+            ID_NEW.LISTBOOK: 'wxListbook',
             ID_NEW.SPLITTER_WINDOW: 'wxSplitterWindow',
             ID_NEW.SCROLLED_WINDOW: 'wxScrolledWindow',
             ID_NEW.HTML_WINDOW: 'wxHtmlWindow',
             ID_NEW.CALENDAR_CTRL: 'wxCalendarCtrl',
+            ID_NEW.DATE_CTRL: 'wxDatePickerCtrl',
             ID_NEW.GENERIC_DIR_CTRL: 'wxGenericDirCtrl',
             ID_NEW.SPIN_CTRL: 'wxSpinCtrl',
 
@@ -214,13 +226,19 @@ class PullDownMenu:
             None,
             (ID_NEW.TOOL_BAR, 'ToolBar', 'Create toolbar'),
             (ID_NEW.MENU_BAR, 'MenuBar', 'Create menubar'),
-            (ID_NEW.MENU, 'Menu', 'Create menu')
+            (ID_NEW.MENU, 'Menu', 'Create menu'),
+            None,
+            (ID_NEW.BITMAP, 'Bitmap', 'Create bitmap'),
+            (ID_NEW.ICON, 'Icon', 'Create icon'),
             ]
         self.containers = [
              (ID_NEW.PANEL, 'Panel', 'Create panel'),
              (ID_NEW.NOTEBOOK, 'Notebook', 'Create notebook control'),
+             (ID_NEW.CHOICEBOOK, 'Choicebook', 'Create choicebook control'),
+             (ID_NEW.LISTBOOK, 'Listbook', 'Create listbook control'),
              (ID_NEW.SPLITTER_WINDOW, 'SplitterWindow', 'Create splitter window'),
              (ID_NEW.TOOL_BAR, 'ToolBar', 'Create toolbar'),
+             (ID_NEW.STATUS_BAR, 'StatusBar', 'Create status bar'),
 #             (ID_NEW.WIZARD_PAGE, 'WizardPage', 'Create wizard page'),
              (ID_NEW.WIZARD_PAGE_SIMPLE, 'WizardPageSimple', 'Create simple wizard page'),
             ]
@@ -250,10 +268,10 @@ class PullDownMenu:
              (ID_NEW.SCROLL_BAR, 'ScrollBar', 'Create scroll bar'),
              (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.DATE_CTRL, 'DatePickerCtrl', 'Create date picker control'),
              (ID_NEW.GENERIC_DIR_CTRL, 'GenericDirCtrl', 'Create generic dir control'),
              (ID_NEW.UNKNOWN, 'Unknown', 'Create custom control placeholder'),
              ],
@@ -270,12 +288,16 @@ class PullDownMenu:
              (ID_NEW.RADIO_BOX, 'RadioBox', 'Create radio box'),
              (ID_NEW.COMBO_BOX, 'ComboBox', 'Create combo box'),
              (ID_NEW.LIST_BOX, 'ListBox', 'Create list box'),
+             (ID_NEW.CHECK_LIST, 'CheckListBox', 'Create checklist box'),
              ],
             ['container', 'Containers',
              (ID_NEW.PANEL, 'Panel', 'Create panel'),
              (ID_NEW.NOTEBOOK, 'Notebook', 'Create notebook control'),
+             (ID_NEW.CHOICEBOOK, 'Choicebook', 'Create choicebook control'),
+             (ID_NEW.LISTBOOK, 'Listbook', 'Create listbook control'),
              (ID_NEW.SPLITTER_WINDOW, 'SplitterWindow', 'Create splitter window'),
              (ID_NEW.TOOL_BAR, 'ToolBar', 'Create toolbar'),
+             (ID_NEW.STATUS_BAR, 'StatusBar', 'Create status bar'),
 #             (ID_NEW.WIZARD_PAGE, 'Wizard Page', 'Create wizard page'),
              (ID_NEW.WIZARD_PAGE_SIMPLE, 'WizardPageSimple', 'Create simple wizard page'),
              ],
@@ -311,7 +333,6 @@ class PullDownMenu:
              (ID_NEW.GAUGE, 'Gauge', 'Create gauge'),
              (ID_NEW.SCROLL_BAR, 'ScrollBar', 'Create scroll bar'),
              (ID_NEW.LIST_CTRL, 'ListCtrl', 'Create list control'),
-             (ID_NEW.CHECK_LIST, 'CheckList', 'Create check list'),
              ],
             ['button', 'Buttons',
              (ID_NEW.BUTTON, 'Button', 'Create button'),
@@ -325,6 +346,7 @@ class PullDownMenu:
              (ID_NEW.RADIO_BOX, 'RadioBox', 'Create radio box'),
              (ID_NEW.COMBO_BOX, 'ComboBox', 'Create combo box'),
              (ID_NEW.LIST_BOX, 'ListBox', 'Create list box'),
+             (ID_NEW.CHECK_LIST, 'CheckListBox', 'Create checklist box'),
              ],
             ]
         self.stdButtons = [
@@ -592,15 +614,16 @@ class XML_Tree(wxTreeCtrl):
         # Root at (0,0)
         if item == g.testWin.item: return wxPoint(0, 0)
         itemParent = self.GetItemParent(item)
-        # Select NB page
+        # Select book page
         if not obj: obj = self.FindNodeObject(item)
-        if self.GetPyData(itemParent).treeObject().__class__ == xxxNotebook:
-            notebook = self.FindNodeObject(itemParent)
+        if self.GetPyData(itemParent).treeObject().__class__ in \
+               [xxxNotebook, xxxChoicebook, xxxListbook]:
+            book = self.FindNodeObject(itemParent)
             # Find position
-            for i in range(notebook.GetPageCount()):
-                if notebook.GetPage(i) == obj:
-                    if notebook.GetSelection() != i:
-                        notebook.SetSelection(i)
+            for i in range(book.GetPageCount()):
+                if book.GetPage(i) == obj:
+                    if book.GetSelection() != i:
+                        book.SetSelection(i)
                         # Remove highlight - otherwise highlight window won't be visible
                         if g.testWin.highLight:
                             g.testWin.highLight.Remove()
@@ -630,6 +653,7 @@ class XML_Tree(wxTreeCtrl):
         # Top-level sizer? return window's sizer
         if xxx.isSizer and isinstance(parentWin, wxWindow):
             return parentWin.GetSizer()
+        elif isinstance(xxx, xxxStatusBar):  return None
         elif isinstance(xxx, xxxToolBar):
             # If it's the main toolbar, we can't really select it
             if xxx.parent.__class__ == xxxFrame:  return None
@@ -642,6 +666,9 @@ class XML_Tree(wxTreeCtrl):
                 if ch.GetWindow() and ch.GetWindow().GetName() == xxx.name:
                     return ch.GetWindow()
             return None
+        elif xxx.parent.__class__ in [xxxChoicebook, xxxListbook]:
+            # First window is controld
+            return parentWin.GetChildren()[self.ItemIndex(item)+1]
         # Otherwise get parent's object and it's child
         child = parentWin.GetChildren()[self.ItemIndex(item)]
         # Return window or sizer for sizer items
@@ -649,9 +676,9 @@ class XML_Tree(wxTreeCtrl):
             if child.IsWindow(): child = child.GetWindow()
             elif child.IsSizer():
                 child = child.GetSizer()
-                # Test for notebook sizers
+                # Test for notebook sizers (deprecated)
                 if isinstance(child, wxNotebookSizer):
-                    child = child.GetNotebook()
+                    child = child.GetNotebook()        
         return child
 
     def OnSelChanged(self, evt):
@@ -729,18 +756,29 @@ class XML_Tree(wxTreeCtrl):
         xxx = self.GetPyData(item)
         if g.panel.IsModified():
             self.Apply(xxx, item)       # apply changes
-        treeObj = xxx.treeObject()
-        if treeObj.className not in ['wxFrame', 'wxPanel', 'wxDialog',
-                                     'wxMenuBar', 'wxToolBar', 'wxWizard',
-                                     'wxWizardPageSimple']:
+        availableViews = ['wxFrame', 'wxPanel', 'wxDialog',  
+                          'wxMenuBar', 'wxToolBar', 'wxWizard',  
+                          'wxWizardPageSimple']
+        originalItem = item
+        # Walk up the tree until we find an item that has a view
+        while item and self.GetPyData(item).treeObject().className not in availableViews:
+            item = self.GetItemParent(item)
+        if not item or not item.IsOk():
             wxLogMessage('No view for this element (yet)')
             return
         # Show item in bold
         if g.testWin:     # Reset old
             self.SetItemBold(g.testWin.item, False)
-        self.CreateTestWin(item)
+        try:
+            wxBeginBusyCursor()
+            self.CreateTestWin(item)
+        finally:
+            wxEndBusyCursor()
         # Maybe an error occurred, so we need to test
-        if g.testWin: self.SetItemBold(g.testWin.item)
+        if g.testWin:
+            self.SetItemBold(g.testWin.item)
+            # Select original item
+            self.ChangeSelection(originalItem)
 
     # Double-click on Linux
     def OnItemActivated(self, evt):
@@ -778,7 +816,6 @@ class XML_Tree(wxTreeCtrl):
 #                self.CreateTestWin(child)
 #                return
 
-        wxBeginBusyCursor()
         # Close old window, remember where it was
         highLight = None
         if testWin:
@@ -851,7 +888,7 @@ class XML_Tree(wxTreeCtrl):
                 res.LoadOnFrame(testWin, g.frame, STD_NAME)
                 # Create status bar
                 testWin.panel = testWin
-                testWin.CreateStatusBar()
+                #testWin.CreateStatusBar()
                 testWin.SetClientSize(testWin.GetBestSize())
                 testWin.SetPosition(pos)
                 testWin.Show(True)
@@ -932,7 +969,6 @@ class XML_Tree(wxTreeCtrl):
             wxLogError(traceback.format_exception(inf[0], inf[1], None)[-1])
             wxLogError('Error loading resource')
         wxMemoryFSHandler_RemoveFile('xxx.xrc')
-        wxEndBusyCursor()
 
     def CloseTestWindow(self):
         if not g.testWin: return
@@ -1030,7 +1066,7 @@ class XML_Tree(wxTreeCtrl):
                     SetMenu(m, pullDownMenu.stdButtons)
                 else:
                     SetMenu(m, pullDownMenu.controls)
-                    if xxx.__class__ == xxxNotebook:
+                    if xxx.__class__ in [xxxNotebook, xxxChoicebook, xxxListbook]:
                         m.Enable(m.FindItem('sizer'), False)
                     elif not (xxx.isSizer or xxx.parent and xxx.parent.isSizer):
                         m.Enable(ID_NEW.SPACER, False)
index ebc083239487d6c7f7b8accb9cf5b70a9cd8d941..fe0c1817396a74285beed3e53dc57bf7e04ded5a 100644 (file)
@@ -133,7 +133,7 @@ class UndoReplace:
         xxx = g.tree.GetPyData(item)
         # Replace with old element
         parent = xxx.parent.element
-        if xxx is self.xxx:             # sizeritem or notebookpage - replace child
+        if xxx is self.xxx:   # sizeritem or notebookpage - replace child
             parent.replaceChild(self.xxx.child.element, xxx.child.element)
         else:
             parent.replaceChild(self.xxx.element, xxx.element)
index 0f50d477eb227e4f995d27dd4bda4e24ce398b0c..fcc27120a7d601732c26321d8aa956d2c035fb01 100644 (file)
@@ -54,7 +54,7 @@ Consult README file for the details.</HTML>
 
 defaultIDs = {xxxPanel:'PANEL', xxxDialog:'DIALOG', xxxFrame:'FRAME',
               xxxMenuBar:'MENUBAR', xxxMenu:'MENU', xxxToolBar:'TOOLBAR',
-              xxxWizard:'WIZARD'}
+              xxxWizard:'WIZARD', xxxBitmap:'BITMAP', xxxIcon:'ICON'}
 
 defaultName = 'UNTITLED.xrc'
 
@@ -207,8 +207,8 @@ class Frame(wxFrame):
                          'Refresh', 'Refresh view')
         tb.AddSimpleTool(self.ID_AUTO_REFRESH, images.getAutoRefreshBitmap(),
                          'Auto-refresh', 'Toggle auto-refresh mode', True)
-        if wxPlatform == '__WXGTK__':
-            tb.AddSeparator()   # otherwise auto-refresh sticks in status line
+#        if wxPlatform == '__WXGTK__':
+#            tb.AddSeparator()   # otherwise auto-refresh sticks in status line
         tb.ToggleTool(self.ID_AUTO_REFRESH, conf.autoRefresh)
         tb.Realize()
  
@@ -482,7 +482,8 @@ class Frame(wxFrame):
             if not parent.__class__ in [xxxMainNode, xxxMenuBar, xxxMenu]: error = True
         elif x.__class__ == xxxMenuItem:
             if not parent.__class__ in [xxxMenuBar, xxxMenu]: error = True
-        elif x.isSizer and parent.__class__ == xxxNotebook: error = True
+        elif x.isSizer and parent.__class__ in [xxxNotebook, xxxChoicebook, xxxListbook]:
+            error = True
         else:                           # normal controls can be almost anywhere
             if parent.__class__ == xxxMainNode or \
                parent.__class__ in [xxxMenuBar, xxxMenu]: error = True
@@ -497,10 +498,11 @@ class Frame(wxFrame):
         # If parent is sizer or notebook, child is of wrong class or
         # parent is normal window, child is child container then detach child.
         isChildContainer = isinstance(xxx, xxxChildContainer)
+        parentIsBook = parent.__class__ in [xxxNotebook, xxxChoicebook, xxxListbook]
         if isChildContainer and \
            ((parent.isSizer and not isinstance(xxx, xxxSizerItem)) or \
-            (isinstance(parent, xxxNotebook) and not isinstance(xxx, xxxNotebookPage)) or \
-           not (parent.isSizer or isinstance(parent, xxxNotebook))):
+            (parentIsBook and not isinstance(xxx, xxxPage)) or \
+           not (parent.isSizer or parentIsBook)):
             elem.removeChild(xxx.child.element) # detach child
             elem.unlink()           # delete child container
             elem = xxx.child.element # replace
@@ -517,6 +519,14 @@ class Frame(wxFrame):
             pageElem = MakeEmptyDOM('notebookpage')
             pageElem.appendChild(elem)
             elem = pageElem
+        elif isinstance(parent, xxxChoicebook) and not isChildContainer:
+            pageElem = MakeEmptyDOM('choicebookpage')
+            pageElem.appendChild(elem)
+            elem = pageElem
+        elif isinstance(parent, xxxListbook) and not isChildContainer:
+            pageElem = MakeEmptyDOM('listbookpage')
+            pageElem.appendChild(elem)
+            elem = pageElem
         # Insert new node, register undo
         newItem = tree.InsertNode(parentLeaf, parent, elem, nextItem)
         undoMan.RegisterUndo(UndoPasteCreate(parentLeaf, parent, newItem, selected))
@@ -960,19 +970,28 @@ Homepage: http://xrced.sourceforge.net\
     def OnIdle(self, evt):
         if self.inIdle: return          # Recursive call protection
         self.inIdle = True
-        if tree.needUpdate:
-            if conf.autoRefresh:
-                if g.testWin:
-                    self.SetStatusText('Refreshing test window...')
-                    # (re)create
-                    tree.CreateTestWin(g.testWin.item)
-                    self.SetStatusText('')
-                tree.needUpdate = False
-        elif tree.pendingHighLight:
-            tree.HighLight(tree.pendingHighLight)
-        else:
-            evt.Skip()
-        self.inIdle = False
+        try:
+            if tree.needUpdate:
+                if conf.autoRefresh:
+                    if g.testWin:
+                        self.SetStatusText('Refreshing test window...')
+                        # (re)create
+                        tree.CreateTestWin(g.testWin.item)
+                        self.SetStatusText('')
+                    tree.needUpdate = False
+            elif tree.pendingHighLight:
+                try:
+                    tree.HighLight(tree.pendingHighLight)
+                except:
+                    # Remove highlight if any problem
+                    if g.testWin.highLight:
+                        g.testWin.highLight.Remove()
+                    tree.pendingHighLight = None
+                    raise
+            else:
+                evt.Skip()
+        finally:
+            self.inIdle = False
 
     # We don't let close panel window
     def OnCloseMiniFrame(self, evt):
@@ -1018,9 +1037,10 @@ Homepage: http://xrced.sourceforge.net\
             g.testWin = None
         # Numbers for new controls
         self.maxIDs = {}
-        self.maxIDs[xxxPanel] = self.maxIDs[xxxDialog] = self.maxIDs[xxxFrame] = \
-        self.maxIDs[xxxMenuBar] = self.maxIDs[xxxMenu] = self.maxIDs[xxxToolBar] = \
-        self.maxIDs[xxxWizard] = 0
+        for cl in [xxxPanel, xxxDialog, xxxFrame,
+                   xxxMenuBar, xxxMenu, xxxToolBar,
+                   xxxWizard, xxxBitmap, xxxIcon]:
+            self.maxIDs[cl] = 0
 
     def SetModified(self, state=True):
         self.modified = state
@@ -1138,6 +1158,11 @@ def usage():
 
 class App(wxApp):
     def OnInit(self):
+        # Check version
+        if wxVERSION[:3] < MinWxVersion:
+            wxLogWarning('''\
+This version of XRCed may not work correctly on your version of wxWindows. \
+Please upgrade wxWindows to %d.%d.%d or higher.''' % MinWxVersion)
         global debug
         # Process comand-line
         opts = args = None
index 609b6fc1ccebc7eb634b503eb21de3e5aff645e7..92df22cfe6b70c7bd8e0766d4c10c09dd76e942c 100644 (file)
@@ -410,6 +410,7 @@ class xxxMainNode(xxxContainer):
 
 class xxxPanel(xxxContainer):
     allParams = ['pos', 'size', 'style']
+    winStyles = ['wxNO_3D', 'wxTAB_TRAVERSAL']
     styles = ['fg', 'bg', 'font', 'enabled', 'focused', 'hidden', 'exstyle',
               'tooltip']
 
@@ -418,11 +419,13 @@ class xxxDialog(xxxContainer):
     paramDict = {'centered': ParamBool}
     required = ['title']
     default = {'title': ''}
-    winStyles = ['wxDEFAULT_DIALOG_STYLE', 
-                 'wxCAPTION', 'wxMINIMIZE_BOX', 'wxMAXIMIZE_BOX', 'wxCLOSE_BOX',
-                 'wxSTAY_ON_TOP',
-                 'wxTHICK_FRAME',
-                 'wxNO_3D', 'wxDIALOG_NO_PARENT']
+    winStyles = ['wxDEFAULT_DIALOG_STYLE', 'wxCAPTION', 
+                 'wxSTAY_ON_TOP', 'wxSYSTEM_MENU', 'wxTHICK_FRAME',
+                 'wxRESIZE_BORDER', 'wxRESIZE_BOX', 'wxCLOSE_BOX',
+                 'wxMAXIMIZE_BOX', 'wxMINIMIZE_BOX',
+                 'wxDIALOG_MODAL', 'wxDIALOG_MODELESS', 'wxDIALOG_NO_PARENT'
+                 'wxNO_3D', 'wxTAB_TRAVERSAL']                 
+    exStyles = ['wxWS_EX_VALIDATE_RECURSIVELY', 'wxDIALOG_EX_METAL']
     styles = ['fg', 'bg', 'font', 'enabled', 'focused', 'hidden', 'exstyle',
               'tooltip']
 
@@ -431,13 +434,14 @@ class xxxFrame(xxxContainer):
     paramDict = {'centered': ParamBool}
     required = ['title']
     default = {'title': ''}
-    winStyles = ['wxDEFAULT_FRAME_STYLE',
-                 'wxCAPTION', 'wxMINIMIZE_BOX', 'wxMAXIMIZE_BOX', 'wxCLOSE_BOX',
-                 'wxSTAY_ON_TOP',
-                 'wxSYSTEM_MENU', 'wxRESIZE_BORDER',
-                 'wxFRAME_TOOL_WINDOW', 'wxFRAME_NO_TASKBAR',
-                 'wxFRAME_FLOAT_ON_PARENT', 'wxFRAME_SHAPED'
-                 ]
+    winStyles = ['wxDEFAULT_FRAME_STYLE', 'wxDEFAULT_DIALOG_STYLE', 'wxCAPTION', 
+                 'wxSTAY_ON_TOP', 'wxSYSTEM_MENU', 'wxTHICK_FRAME',
+                 'wxRESIZE_BORDER', 'wxRESIZE_BOX', 'wxCLOSE_BOX',
+                 'wxMAXIMIZE_BOX', 'wxMINIMIZE_BOX',
+                 'wxFRAME_NO_TASKBAR', 'wxFRAME_SHAPED', 'wxFRAME_TOOL_WINDOW',
+                 'wxFRAME_FLOAT_ON_PARENT',
+                 'wxNO_3D', 'wxTAB_TRAVERSAL']                 
+    exStyles = ['wxWS_EX_VALIDATE_RECURSIVELY', 'wxFRAME_EX_METAL']
     styles = ['fg', 'bg', 'font', 'enabled', 'focused', 'hidden', 'exstyle',
               'tooltip']
 
@@ -458,6 +462,13 @@ class xxxToolBar(xxxContainer):
                  'wxTB_3DBUTTONS','wxTB_TEXT', 'wxTB_NOICONS', 'wxTB_NODIVIDER',
                  'wxTB_NOALIGN', 'wxTB_HORZ_LAYOUT', 'wxTB_HORZ_TEXT']
 
+class xxxStatusBar(xxxObject):
+    hasStyle = False
+    allParams = ['fields', 'widths', 'styles', 'style']
+    paramDict = {'fields': ParamIntNN, 'widths': ParamText, 'styles': ParamText,
+                 'style': ParamNonGenericStyle}
+    winStyles = ['wxST_SIZEGRIP']
+
 class xxxWizard(xxxContainer):
     allParams = ['title', 'bitmap', 'pos']
     required = ['title']
@@ -505,8 +516,24 @@ class xxxStaticBitmap(xxxObject):
 
 class xxxTextCtrl(xxxObject):
     allParams = ['value', 'pos', 'size', 'style']
-    winStyles = ['wxTE_PROCESS_ENTER', 'wxTE_PROCESS_TAB', 'wxTE_MULTILINE',
-              'wxTE_PASSWORD', 'wxTE_READONLY', 'wxHSCROLL']
+    winStyles = ['wxTE_NO_VSCROLL',
+                 'wxTE_AUTO_SCROLL',
+                 'wxTE_PROCESS_ENTER',
+                 'wxTE_PROCESS_TAB',
+                 'wxTE_MULTILINE',
+                 'wxTE_PASSWORD',
+                 'wxTE_READONLY',
+                 'wxHSCROLL',
+                 'wxTE_RICH',
+                 'wxTE_RICH2',
+                 'wxTE_AUTO_URL',
+                 'wxTE_NOHIDESEL',
+                 'wxTE_LEFT',
+                 'wxTE_CENTRE',
+                 'wxTE_RIGHT',
+                 'wxTE_DONTWRAP',
+                 'wxTE_LINEWRAP',
+                 'wxTE_WORDWRAP']
     paramDict = {'value': ParamMultilineText}
 
 class xxxChoice(xxxObject):
@@ -542,44 +569,73 @@ class xxxScrollBar(xxxObject):
 class xxxListCtrl(xxxObject):
     allParams = ['pos', 'size', 'style']
     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',
-              'wxLC_SINGLE_SEL', 'wxLC_SORT_ASCENDING', 'wxLC_SORT_DESCENDING']
+                 'wxLC_ALIGN_TOP', 'wxLC_ALIGN_LEFT', 'wxLC_AUTOARRANGE',
+                 'wxLC_USER_TEXT', 'wxLC_EDIT_LABELS', 'wxLC_NO_HEADER',
+                 'wxLC_SINGLE_SEL', 'wxLC_SORT_ASCENDING', 'wxLC_SORT_DESCENDING',
+                 'wxLC_VIRTUAL', 'wxLC_HRULES', 'wxLC_VRULES', 'wxLC_NO_SORT_HEADER']
 
 class xxxTreeCtrl(xxxObject):
     allParams = ['pos', 'size', 'style']
-    winStyles = ['wxTR_HAS_BUTTONS', 'wxTR_NO_LINES', 'wxTR_LINES_AT_ROOT',
-              'wxTR_EDIT_LABELS', 'wxTR_MULTIPLE']
+    winStyles = ['wxTR_EDIT_LABELS',
+                 'wxTR_NO_BUTTONS',
+                 'wxTR_HAS_BUTTONS',
+                 'wxTR_TWIST_BUTTONS',
+                 'wxTR_NO_LINES',
+                 'wxTR_FULL_ROW_HIGHLIGHT',
+                 'wxTR_LINES_AT_ROOT',
+                 'wxTR_HIDE_ROOT',
+                 'wxTR_ROW_LINES',
+                 'wxTR_HAS_VARIABLE_ROW_HEIGHT',
+                 'wxTR_SINGLE',
+                 'wxTR_MULTIPLE',
+                 'wxTR_EXTENDED',
+                 'wxTR_DEFAULT_STYLE']
 
 class xxxHtmlWindow(xxxObject):
     allParams = ['pos', 'size', 'style', 'borders', 'url', 'htmlcode']
-    paramDict = {'borders': ParamUnit, 'htmlcode':ParamMultilineText}
-    winStyles = ['wxHW_SCROLLBAR_NEVER', 'wxHW_SCROLLBAR_AUTO']
+    paramDict = {'htmlcode':ParamMultilineText}
+    winStyles = ['wxHW_SCROLLBAR_NEVER', 'wxHW_SCROLLBAR_AUTO', 'wxHW_NO_SELECTION']
 
 class xxxCalendarCtrl(xxxObject):
     allParams = ['pos', 'size', 'style']
+    winStyles = ['wxCAL_SUNDAY_FIRST', 'wxCAL_MONDAY_FIRST', 'wxCAL_SHOW_HOLIDAYS',
+                 'wxCAL_NO_YEAR_CHANGE', 'wxCAL_NO_MONTH_CHANGE',
+                 'wxCAL_SEQUENTIAL_MONTH_SELECTION', 'wxCAL_SHOW_SURROUNDING_WEEKS']
 
 class xxxNotebook(xxxContainer):
-    allParams = ['usenotebooksizer', 'pos', 'size', 'style']
-    paramDict = {'usenotebooksizer': ParamBool}
-    winStyles = ['wxNB_FIXEDWIDTH', 'wxNB_LEFT', 'wxNB_RIGHT', 'wxNB_BOTTOM']
+    allParams = ['pos', 'size', 'style']
+    winStyles = ['wxNB_DEFAULT', 'wxNB_LEFT', 'wxNB_RIGHT', 'wxNB_BOTTOM',
+                 'wxNB_FIXEDWIDTH', 'wxNB_MULTILINE', 'wxNB_NOPAGETHEME']
 
+class xxxChoicebook(xxxContainer):
+    allParams = ['pos', 'size', 'style']
+    winStyles = ['wxCHB_DEFAULT', 'wxCHB_LEFT', 'wxCHB_RIGHT', 'wxCHB_TOP', 'wxCHB_BOTTOM']
+    
+class xxxListbook(xxxContainer):
+    allParams = ['pos', 'size', 'style']
+    winStyles = ['wxLB_DEFAULT', 'wxLB_LEFT', 'wxLB_RIGHT', 'wxLB_TOP', 'wxLB_BOTTOM']
+    
 class xxxSplitterWindow(xxxContainer):
     allParams = ['orientation', 'sashpos', 'minsize', 'pos', 'size', 'style']
     paramDict = {'orientation': ParamOrientation, 'sashpos': ParamUnit, 'minsize': ParamUnit }
-    winStyles = ['wxSP_3D', 'wxSP_3DSASH', 'wxSP_3DBORDER', 'wxSP_BORDER',
-                         'wxSP_NOBORDER', 'wxSP_PERMIT_UNSPLIT', 'wxSP_LIVE_UPDATE',
-                         'wxSP_NO_XP_THEME' ]
+    winStyles = ['wxSP_3D', 'wxSP_3DSASH', 'wxSP_3DBORDER', 
+                 'wxSP_FULLSASH', 'wxSP_NOBORDER', 'wxSP_PERMIT_UNSPLIT', 'wxSP_LIVE_UPDATE',
+                 'wxSP_NO_XP_THEME' ]
 
 class xxxGenericDirCtrl(xxxObject):
     allParams = ['defaultfolder', 'filter', 'defaultfilter', 'pos', 'size', 'style']
     paramDict = {'defaultfilter': ParamIntNN}
     winStyles = ['wxDIRCTRL_DIR_ONLY', 'wxDIRCTRL_3D_INTERNAL', 'wxDIRCTRL_SELECT_FIRST',
-                 'wxDIRCTRL_SHOW_FILTERS', 'wxDIRCTRL_EDIT_LABELS']
+                 'wxDIRCTRL_SHOW_FILTERS']
 
 class xxxScrolledWindow(xxxContainer):
     allParams = ['pos', 'size', 'style']
-    winStyles = ['wxHSCROLL', 'wxVSCROLL']
+    winStyles = ['wxHSCROLL', 'wxVSCROLL', 'wxNO_3D', 'wxTAB_TRAVERSAL']
+
+class xxxDateCtrl(xxxObject):
+    allParams = ['pos', 'size', 'style', 'borders']
+    winStyles = ['wxDP_DEFAULT', 'wxDP_SPIN', 'wxDP_DROPDOWN',
+                 'wxDP_ALLOWNONE', 'wxDP_SHOWCENTURY']
 
 ################################################################################
 # Buttons
@@ -588,20 +644,20 @@ class xxxButton(xxxObject):
     allParams = ['label', 'default', 'pos', 'size', 'style']
     paramDict = {'default': ParamBool}
     required = ['label']
-    winStyles = ['wxBU_LEFT', 'wxBU_TOP', 'wxBU_RIGHT', 'wxBU_BOTTOM']
+    winStyles = ['wxBU_LEFT', 'wxBU_TOP', 'wxBU_RIGHT', 'wxBU_BOTTOM', 'wxBU_EXACTFIT']
 
 class xxxBitmapButton(xxxObject):
     allParams = ['bitmap', 'selected', 'focus', 'disabled', 'default',
                  'pos', 'size', 'style']
     required = ['bitmap']
-    winStyles = ['wxBU_AUTODRAW', 'wxBU_LEFT', 'wxBU_TOP',
-                 'wxBU_RIGHT', 'wxBU_BOTTOM']
+    winStyles = ['wxBU_AUTODRAW', 'wxBU_LEFT', 'wxBU_RIGHT',
+                 'wxBU_TOP', 'wxBU_BOTTOM', 'wxBU_EXACTFIT']
 
 class xxxRadioButton(xxxObject):
     allParams = ['label', 'value', 'pos', 'size', 'style']
     paramDict = {'value': ParamBool}
     required = ['label']
-    winStyles = ['wxRB_GROUP']
+    winStyles = ['wxRB_GROUP', 'wxRB_SINGLE']
 
 class xxxSpinButton(xxxObject):
     allParams = ['value', 'min', 'max', 'pos', 'size', 'style']
@@ -630,7 +686,8 @@ class xxxRadioBox(xxxObject):
     paramDict = {'dimension': ParamIntNN}
     required = ['label', 'content']
     default = {'content': '[]'}
-    winStyles = ['wxRA_SPECIFY_ROWS', 'wxRA_SPECIFY_COLS']
+    winStyles = ['wxRA_SPECIFY_ROWS', 'wxRA_SPECIFY_COLS', 'wxRA_HORIZONTAL',
+                 'wxRA_VERTICAL']
 
 class xxxCheckBox(xxxObject):
     allParams = ['label', 'checked', 'pos', 'size', 'style']
@@ -650,16 +707,14 @@ class xxxListBox(xxxObject):
     required = ['content']
     default = {'content': '[]'}
     winStyles = ['wxLB_SINGLE', 'wxLB_MULTIPLE', 'wxLB_EXTENDED', 'wxLB_HSCROLL',
-              'wxLB_ALWAYS_SB', 'wxLB_NEEDED_SB', 'wxLB_SORT']
+                 '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',
-              'wxLC_SINGLE_SEL', 'wxLC_SORT_ASCENDING', 'wxLC_SORT_DESCENDING']
+    winStyles = ['wxLB_SINGLE', 'wxLB_MULTIPLE', 'wxLB_EXTENDED', 'wxLB_HSCROLL',
+                 'wxLB_ALWAYS_SB', 'wxLB_NEEDED_SB', 'wxLB_SORT']
     paramDict = {'content': ParamContentCheckList}
 
 ################################################################################
@@ -711,7 +766,7 @@ class xxxParamMulti:
 class xxxFlexGridSizer(xxxGridSizer):
     specials = ['growablecols', 'growablerows']
     allParams = ['cols', 'rows', 'vgap', 'hgap'] + specials
-    paramDict = {'growablecols':ParamIntList, 'growablerows':ParamIntList}
+    paramDict = {'growablecols': ParamIntList, 'growablerows': ParamIntList}
     # Special processing for growable* parameters
     # (they are represented by several nodes)
     def special(self, tag, node):
@@ -800,7 +855,7 @@ class xxxSizerItemButton(xxxSizerItem):
             self.child.allParams = self.child.allParams[:]
             self.child.allParams.remove('pos')
 
-class xxxNotebookPage(xxxChildContainer):
+class xxxPage(xxxChildContainer):
     allParams = ['label', 'selected']
     paramDict = {'selected': ParamBool}
     required = ['label']
@@ -845,6 +900,7 @@ class xxxSeparator(xxxObject):
 
 class xxxUnknown(xxxObject):
     allParams = ['pos', 'size', 'style']
+    winStyles = ['wxNO_FULL_REPAINT_ON_RESIZE']
 
 ################################################################################
 
@@ -854,6 +910,7 @@ xxxDict = {
     'wxFrame': xxxFrame,
     'tool': xxxTool,
     'wxToolBar': xxxToolBar,
+    'wxStatusBar': xxxStatusBar,
     'wxWizard': xxxWizard,
     'wxWizardPage': xxxWizardPage,
     'wxWizardPageSimple': xxxWizardPageSimple,
@@ -884,14 +941,19 @@ xxxDict = {
     'wxTreeCtrl': xxxTreeCtrl,
     'wxListCtrl': xxxListCtrl,
     'wxCheckListBox': xxxCheckList,
+    'notebookpage': xxxPage,
+    'choicebookpage': xxxPage,
+    'listbookpage': xxxPage,
     'wxNotebook': xxxNotebook,
+    'wxChoicebook': xxxChoicebook,
+    'wxListbook': xxxListbook,
     'wxSplitterWindow': xxxSplitterWindow,
-    'notebookpage': xxxNotebookPage,
     'wxHtmlWindow': xxxHtmlWindow,
     'wxCalendarCtrl': xxxCalendarCtrl,
     'wxGenericDirCtrl': xxxGenericDirCtrl,
     'wxSpinCtrl': xxxSpinCtrl,
     'wxScrolledWindow': xxxScrolledWindow,
+    'wxDatePickerCtrl': xxxDateCtrl,
 
     'wxBoxSizer': xxxBoxSizer,
     'wxStaticBoxSizer': xxxStaticBoxSizer,
@@ -979,6 +1041,14 @@ def MakeEmptyXXX(parent, className):
             pageElem = MakeEmptyDOM('notebookpage')
             pageElem.appendChild(elem)
             elem = pageElem
+        elif isinstance(parent, xxxChoicebook):
+            pageElem = MakeEmptyDOM('choicebookpage')
+            pageElem.appendChild(elem)
+            elem = pageElem
+        elif isinstance(parent, xxxListbook):
+            pageElem = MakeEmptyDOM('listbookpage')
+            pageElem.appendChild(elem)
+            elem = pageElem
     # Now just make object
     return MakeXXXFromDOM(parent, elem)
 
@@ -1002,6 +1072,14 @@ def MakeEmptyRefXXX(parent, ref):
             pageElem = MakeEmptyDOM('notebookpage')
             pageElem.appendChild(elem)
             elem = pageElem
+        elif isinstance(parent, xxxChoicebook):
+            pageElem = MakeEmptyDOM('choicebookpage')
+            pageElem.appendChild(elem)
+            elem = pageElem
+        elif isinstance(parent, xxxListbook):
+            pageElem = MakeEmptyDOM('listbookpage')
+            pageElem.appendChild(elem)
+            elem = pageElem
     # Now just make object
     return MakeXXXFromDOM(parent, elem)