X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a24d7726e6b5c1b727d97603a3b5e80fa27a9dd2..ea75e99e8f13bf5df8149ba8d2d6f55a4c81e8d8:/wxPython/wx/tools/XRCed/tree.py diff --git a/wxPython/wx/tools/XRCed/tree.py b/wxPython/wx/tools/XRCed/tree.py index 1d45918535..f11aa795c8 100644 --- a/wxPython/wx/tools/XRCed/tree.py +++ b/wxPython/wx/tools/XRCed/tree.py @@ -365,7 +365,7 @@ def SetMenu(m, list, shift=False): apply(m.Append, l) elif type(l) == types.ListType: subMenu = wxMenu() - SetMenu(subMenu, l[2:]) + SetMenu(subMenu, l[2:], shift) m.AppendMenu(wxNewId(), l[0], subMenu, l[1]) else: # separator m.AppendSeparator() @@ -475,6 +475,8 @@ class XML_Tree(wxTreeCtrl): # Clear tree def Clear(self): + self.selection = None + self.UnselectAll() self.DeleteAllItems() # Add minimal structure if self.dom: self.dom.unlink() @@ -487,11 +489,14 @@ class XML_Tree(wxTreeCtrl): self.root = self.AddRoot('XML tree', self.rootImage, data=wxTreeItemData(self.rootObj)) self.SetItemHasChildren(self.root) - self.UnselectAll() + self.testElem = self.dom.createElement('dummy') + self.mainNode.appendChild(self.testElem) self.Expand(self.root) # Clear old data and set new def SetData(self, dom): + self.selection = None + self.UnselectAll() self.DeleteAllItems() # Add minimal structure if self.dom: self.dom.unlink() @@ -510,8 +515,13 @@ class XML_Tree(wxTreeCtrl): else: self.mainNode.removeChild(node) node.unlink() + if self.mainNode.firstChild: + self.testElem = self.dom.createElement('dummy') + self.mainNode.insertBefore(self.testElem, self.mainNode.firstChild) + else: + self.testElem = self.dom.createElement('dummy') + self.mainNode.appendChild(self.testElem) self.Expand(self.root) - self.UnselectAll() # Add tree item for given parent item if node is DOM element node with # object/object_ref tag. xxxParent is parent xxx object @@ -620,8 +630,11 @@ class XML_Tree(wxTreeCtrl): # Top-level sizer? return window's sizer if xxx.isSizer and isinstance(parentWin, wxWindow): return parentWin.GetSizer() + 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.parent, xxxToolBar): - # How to get tool from toolbar? + # Select complete toolbar return parentWin elif isinstance(xxx.parent, xxxStdDialogButtonSizer): # This sizer returns non-existing children @@ -766,7 +779,6 @@ class XML_Tree(wxTreeCtrl): # return wxBeginBusyCursor() - wxYield() # Close old window, remember where it was highLight = None if testWin: @@ -792,33 +804,30 @@ class XML_Tree(wxTreeCtrl): # Save in memory FS memFile = MemoryFile('xxx.xrc') # Create memory XML file - elem = xxx.element - # Change window id to _XRCED_T_W. This gives some name for - # unnamed windows, and for named gives the possibility to - # write sawfish scripts. + elem = xxx.element.cloneNode(True) if not xxx.name: name = 'noname' else: name = xxx.name elem.setAttribute('name', STD_NAME) + oldTestNode = self.testElem + self.testElem = elem + self.mainNode.replaceChild(elem, oldTestNode) + oldTestNode.unlink() # Replace wizard page class temporarily if xxx.__class__ in [xxxWizardPage, xxxWizardPageSimple]: oldCl = elem.getAttribute('class') elem.setAttribute('class', 'wxPanel') parent = elem.parentNode - next = elem.nextSibling encd = self.rootObj.params['encoding'].value() if not encd: encd = None - self.dom.writexml(open('ttt.xrc','w'), encoding=encd) - self.dom.writexml(memFile, encoding=encd) - # Put back in place - # Remove temporary name or restore changed - if not xxx.name: - elem.removeAttribute('name') - else: - elem.setAttribute('name', xxx.name) - if xxx.__class__ in [xxxWizardPage, xxxWizardPageSimple]: - elem.setAttribute('class', oldCl) + try: + self.dom.writexml(memFile, encoding=encd) + except: + inf = sys.exc_info() + wxLogError(traceback.format_exception(inf[0], inf[1], None)[-1]) + wxLogError('Error writing temporary file') + if debug: raise memFile.close() # write to wxMemoryFS xmlFlags = wxXRC_NO_SUBCLASSING # Use translations if encoding is not specified