From 306b6fe972cccc5022a5ec6096cf94b6b1e0b1cb Mon Sep 17 00:00:00 2001 From: Roman Rolinsky Date: Fri, 11 Nov 2005 00:23:31 +0000 Subject: [PATCH] 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. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36156 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- wxPython/wx/tools/XRCed/CHANGES.txt | 8 ++ wxPython/wx/tools/XRCed/README.txt | 35 ++++-- wxPython/wx/tools/XRCed/globals.py | 11 +- wxPython/wx/tools/XRCed/panel.py | 6 +- wxPython/wx/tools/XRCed/params.py | 41 ++++--- wxPython/wx/tools/XRCed/tools.py | 6 +- wxPython/wx/tools/XRCed/tree.py | 82 ++++++++++---- wxPython/wx/tools/XRCed/undo.py | 2 +- wxPython/wx/tools/XRCed/xrced.py | 69 ++++++++---- wxPython/wx/tools/XRCed/xxx.py | 162 ++++++++++++++++++++-------- 10 files changed, 300 insertions(+), 122 deletions(-) diff --git a/wxPython/wx/tools/XRCed/CHANGES.txt b/wxPython/wx/tools/XRCed/CHANGES.txt index 345f9888a7..877cc306a3 100644 --- a/wxPython/wx/tools/XRCed/CHANGES.txt +++ b/wxPython/wx/tools/XRCed/CHANGES.txt @@ -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 ------- diff --git a/wxPython/wx/tools/XRCed/README.txt b/wxPython/wx/tools/XRCed/README.txt index 83377f1317..a0b1738bda 100644 --- a/wxPython/wx/tools/XRCed/README.txt +++ b/wxPython/wx/tools/XRCed/README.txt @@ -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 +Copyright 2001-2005 Roman Rolinsky diff --git a/wxPython/wx/tools/XRCed/globals.py b/wxPython/wx/tools/XRCed/globals.py index 9b5b12dc96..ece468e8ce 100644 --- a/wxPython/wx/tools/XRCed/globals.py +++ b/wxPython/wx/tools/XRCed/globals.py @@ -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: diff --git a/wxPython/wx/tools/XRCed/panel.py b/wxPython/wx/tools/XRCed/panel.py index 407888f52c..785cca2c87 100644 --- a/wxPython/wx/tools/XRCed/panel.py +++ b/wxPython/wx/tools/XRCed/panel.py @@ -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) diff --git a/wxPython/wx/tools/XRCed/params.py b/wxPython/wx/tools/XRCed/params.py index 5ba1bccd68..07094c545a 100644 --- a/wxPython/wx/tools/XRCed/params.py +++ b/wxPython/wx/tools/XRCed/params.py @@ -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 } diff --git a/wxPython/wx/tools/XRCed/tools.py b/wxPython/wx/tools/XRCed/tools.py index 6f5c9a0f8b..00f7103b1e 100644 --- a/wxPython/wx/tools/XRCed/tools.py +++ b/wxPython/wx/tools/XRCed/tools.py @@ -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) diff --git a/wxPython/wx/tools/XRCed/tree.py b/wxPython/wx/tools/XRCed/tree.py index f11aa795c8..597c56a345 100644 --- a/wxPython/wx/tools/XRCed/tree.py +++ b/wxPython/wx/tools/XRCed/tree.py @@ -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) diff --git a/wxPython/wx/tools/XRCed/undo.py b/wxPython/wx/tools/XRCed/undo.py index ebc0832394..fe0c181739 100644 --- a/wxPython/wx/tools/XRCed/undo.py +++ b/wxPython/wx/tools/XRCed/undo.py @@ -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) diff --git a/wxPython/wx/tools/XRCed/xrced.py b/wxPython/wx/tools/XRCed/xrced.py index 0f50d477eb..fcc27120a7 100644 --- a/wxPython/wx/tools/XRCed/xrced.py +++ b/wxPython/wx/tools/XRCed/xrced.py @@ -54,7 +54,7 @@ Consult README file for the details. 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 diff --git a/wxPython/wx/tools/XRCed/xxx.py b/wxPython/wx/tools/XRCed/xxx.py index 609b6fc1cc..92df22cfe6 100644 --- a/wxPython/wx/tools/XRCed/xxx.py +++ b/wxPython/wx/tools/XRCed/xxx.py @@ -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) -- 2.45.2