]> 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
 -------
 
 0.1.6-7
 -------
 
index 83377f1317cd1df8458f2a8f4e816ac753dc1410..a0b1738bda0b19fe6f3fc44a640c05290bc12c95 100644 (file)
@@ -7,10 +7,16 @@
 System requirements
 -------------------
 
 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
 
 
 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.
 
 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
 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
 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
 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'
 # 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:
 # 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)
         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),
         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)
             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)
         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)
         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 = [
 from wxPython.xrc import *
 
 genericStyles = [
-    'wxSIMPLE_BORDER', 'wxDOUBLE_BORDER', 'wxSUNKEN_BORDER',
+    'wxSIMPLE_BORDER', 'wxSUNKEN_BORDER', 'wxDOUBLE_BORDER',
     'wxRAISED_BORDER', 'wxSTATIC_BORDER', 'wxNO_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 = [
     ]
 
 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)
         # 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)
     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',
 
 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',
               ]
     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)
 
     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.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)
         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):
         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:
     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
                 self.value = self._defaultValue()
         # Make initial font
         # Default values
-        size = 12
+        size = g._sysFont.GetPointSize()
         family = wxDEFAULT
         style = weight = wxNORMAL
         underlined = 0
         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
         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)
         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,
     '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)
                                         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)
                 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)
                                       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 state == STATE_ELSE:
-            if xxx.__class__ == xxxNotebook:
+            if xxx.__class__ in [xxxNotebook, xxxChoicebook, xxxListbook]:
                 self.EnableGroup(GROUP_SIZERS, False)
             else:
                 self.EnableGroup(GROUP_SIZERS)
                 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()
     TOOL = wxNewId()
     MENU_BAR = wxNewId()
     MENU = wxNewId()
+    STATUS_BAR = wxNewId()
 
     STATIC_TEXT = wxNewId()
     TEXT_CTRL = wxNewId()
 
     STATIC_TEXT = wxNewId()
     TEXT_CTRL = wxNewId()
@@ -82,16 +83,21 @@ class ID_NEW:
     LIST_CTRL = wxNewId()
     CHECK_LIST = wxNewId()
     NOTEBOOK = wxNewId()
     LIST_CTRL = wxNewId()
     CHECK_LIST = wxNewId()
     NOTEBOOK = wxNewId()
+    CHOICEBOOK = wxNewId()
+    LISTBOOK = wxNewId()
     SPLITTER_WINDOW = wxNewId()
     SCROLLED_WINDOW = wxNewId()
     HTML_WINDOW = wxNewId()
     CALENDAR_CTRL = 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()
     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()
     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.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.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',
             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.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',
 
             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.SCROLL_BAR: 'wxScrollBar',
             ID_NEW.TREE_CTRL: 'wxTreeCtrl',
             ID_NEW.LIST_CTRL: 'wxListCtrl',
-            ID_NEW.CHECK_LIST: 'wxCheckListBox',
             ID_NEW.NOTEBOOK: 'wxNotebook',
             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.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',
 
             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'),
             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'),
             ]
         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.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'),
             ]
 #             (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.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.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'),
              ],
              (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.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'),
              ],
             ['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.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'),
              ],
 #             (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.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'),
              ],
             ['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.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 = [
              ],
             ]
         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)
         # 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 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
             # 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()
                         # 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()
         # 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
         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
                 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
         # 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()
             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):
                 if isinstance(child, wxNotebookSizer):
-                    child = child.GetNotebook()
+                    child = child.GetNotebook()        
         return child
 
     def OnSelChanged(self, evt):
         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
         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)
             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
         # 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):
 
     # Double-click on Linux
     def OnItemActivated(self, evt):
@@ -778,7 +816,6 @@ class XML_Tree(wxTreeCtrl):
 #                self.CreateTestWin(child)
 #                return
 
 #                self.CreateTestWin(child)
 #                return
 
-        wxBeginBusyCursor()
         # Close old window, remember where it was
         highLight = None
         if testWin:
         # 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
                 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)
                 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')
             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
 
     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)
                     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)
                         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
         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)
             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',
 
 defaultIDs = {xxxPanel:'PANEL', xxxDialog:'DIALOG', xxxFrame:'FRAME',
               xxxMenuBar:'MENUBAR', xxxMenu:'MENU', xxxToolBar:'TOOLBAR',
-              xxxWizard:'WIZARD'}
+              xxxWizard:'WIZARD', xxxBitmap:'BITMAP', xxxIcon:'ICON'}
 
 defaultName = 'UNTITLED.xrc'
 
 
 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)
                          '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()
  
         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
             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
         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)
         # 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 \
         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
             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
             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))
         # 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
     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):
 
     # 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 = {}
             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
 
     def SetModified(self, state=True):
         self.modified = state
@@ -1138,6 +1158,11 @@ def usage():
 
 class App(wxApp):
     def OnInit(self):
 
 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
         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']
 
 class xxxPanel(xxxContainer):
     allParams = ['pos', 'size', 'style']
+    winStyles = ['wxNO_3D', 'wxTAB_TRAVERSAL']
     styles = ['fg', 'bg', 'font', 'enabled', 'focused', 'hidden', 'exstyle',
               'tooltip']
 
     styles = ['fg', 'bg', 'font', 'enabled', 'focused', 'hidden', 'exstyle',
               'tooltip']
 
@@ -418,11 +419,13 @@ class xxxDialog(xxxContainer):
     paramDict = {'centered': ParamBool}
     required = ['title']
     default = {'title': ''}
     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']
 
     styles = ['fg', 'bg', 'font', 'enabled', 'focused', 'hidden', 'exstyle',
               'tooltip']
 
@@ -431,13 +434,14 @@ class xxxFrame(xxxContainer):
     paramDict = {'centered': ParamBool}
     required = ['title']
     default = {'title': ''}
     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']
 
     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']
 
                  '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']
 class xxxWizard(xxxContainer):
     allParams = ['title', 'bitmap', 'pos']
     required = ['title']
@@ -505,8 +516,24 @@ class xxxStaticBitmap(xxxObject):
 
 class xxxTextCtrl(xxxObject):
     allParams = ['value', 'pos', 'size', 'style']
 
 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):
     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',
 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']
 
 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']
 
 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']
 
 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):
 
 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 }
 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',
 
 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']
 
 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
 
 ################################################################################
 # Buttons
@@ -588,20 +644,20 @@ class xxxButton(xxxObject):
     allParams = ['label', 'default', 'pos', 'size', 'style']
     paramDict = {'default': ParamBool}
     required = ['label']
     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']
 
 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']
 
 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']
 
 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': '[]'}
     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']
 
 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',
     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': '[]'}
 
 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}
 
 ################################################################################
     paramDict = {'content': ParamContentCheckList}
 
 ################################################################################
@@ -711,7 +766,7 @@ class xxxParamMulti:
 class xxxFlexGridSizer(xxxGridSizer):
     specials = ['growablecols', 'growablerows']
     allParams = ['cols', 'rows', 'vgap', 'hgap'] + specials
 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):
     # 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')
 
             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']
     allParams = ['label', 'selected']
     paramDict = {'selected': ParamBool}
     required = ['label']
@@ -845,6 +900,7 @@ class xxxSeparator(xxxObject):
 
 class xxxUnknown(xxxObject):
     allParams = ['pos', 'size', 'style']
 
 class xxxUnknown(xxxObject):
     allParams = ['pos', 'size', 'style']
+    winStyles = ['wxNO_FULL_REPAINT_ON_RESIZE']
 
 ################################################################################
 
 
 ################################################################################
 
@@ -854,6 +910,7 @@ xxxDict = {
     'wxFrame': xxxFrame,
     'tool': xxxTool,
     'wxToolBar': xxxToolBar,
     'wxFrame': xxxFrame,
     'tool': xxxTool,
     'wxToolBar': xxxToolBar,
+    'wxStatusBar': xxxStatusBar,
     'wxWizard': xxxWizard,
     'wxWizardPage': xxxWizardPage,
     'wxWizardPageSimple': xxxWizardPageSimple,
     'wxWizard': xxxWizard,
     'wxWizardPage': xxxWizardPage,
     'wxWizardPageSimple': xxxWizardPageSimple,
@@ -884,14 +941,19 @@ xxxDict = {
     'wxTreeCtrl': xxxTreeCtrl,
     'wxListCtrl': xxxListCtrl,
     'wxCheckListBox': xxxCheckList,
     'wxTreeCtrl': xxxTreeCtrl,
     'wxListCtrl': xxxListCtrl,
     'wxCheckListBox': xxxCheckList,
+    'notebookpage': xxxPage,
+    'choicebookpage': xxxPage,
+    'listbookpage': xxxPage,
     'wxNotebook': xxxNotebook,
     'wxNotebook': xxxNotebook,
+    'wxChoicebook': xxxChoicebook,
+    'wxListbook': xxxListbook,
     'wxSplitterWindow': xxxSplitterWindow,
     'wxSplitterWindow': xxxSplitterWindow,
-    'notebookpage': xxxNotebookPage,
     'wxHtmlWindow': xxxHtmlWindow,
     'wxCalendarCtrl': xxxCalendarCtrl,
     'wxGenericDirCtrl': xxxGenericDirCtrl,
     'wxSpinCtrl': xxxSpinCtrl,
     'wxScrolledWindow': xxxScrolledWindow,
     'wxHtmlWindow': xxxHtmlWindow,
     'wxCalendarCtrl': xxxCalendarCtrl,
     'wxGenericDirCtrl': xxxGenericDirCtrl,
     'wxSpinCtrl': xxxSpinCtrl,
     'wxScrolledWindow': xxxScrolledWindow,
+    'wxDatePickerCtrl': xxxDateCtrl,
 
     'wxBoxSizer': xxxBoxSizer,
     'wxStaticBoxSizer': xxxStaticBoxSizer,
 
     'wxBoxSizer': xxxBoxSizer,
     'wxStaticBoxSizer': xxxStaticBoxSizer,
@@ -979,6 +1041,14 @@ def MakeEmptyXXX(parent, className):
             pageElem = MakeEmptyDOM('notebookpage')
             pageElem.appendChild(elem)
             elem = pageElem
             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)
 
     # Now just make object
     return MakeXXXFromDOM(parent, elem)
 
@@ -1002,6 +1072,14 @@ def MakeEmptyRefXXX(parent, ref):
             pageElem = MakeEmptyDOM('notebookpage')
             pageElem.appendChild(elem)
             elem = pageElem
             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)
 
     # Now just make object
     return MakeXXXFromDOM(parent, elem)