From baba4aa5ece7924db50d1cb1390deec695a6b028 Mon Sep 17 00:00:00 2001 From: Roman Rolinsky Date: Mon, 15 Aug 2005 19:53:33 +0000 Subject: [PATCH] 0.1.6-4: replace working for sizeritems and spacers git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35192 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- wxPython/wx/tools/XRCed/CHANGES.txt | 6 ++++ wxPython/wx/tools/XRCed/globals.py | 2 +- wxPython/wx/tools/XRCed/undo.py | 44 +++++++++++++++++++++++ wxPython/wx/tools/XRCed/xrced.py | 55 ++++++++++++++++++++--------- 4 files changed, 90 insertions(+), 17 deletions(-) diff --git a/wxPython/wx/tools/XRCed/CHANGES.txt b/wxPython/wx/tools/XRCed/CHANGES.txt index 65d814885e..0e6603c071 100644 --- a/wxPython/wx/tools/XRCed/CHANGES.txt +++ b/wxPython/wx/tools/XRCed/CHANGES.txt @@ -1,3 +1,9 @@ +0.1.6-4 +------- + +Fixed replacing op for sizer children and spacer objects. +UndoReplace is not yet implemented. + 0.1.6-3 ------- diff --git a/wxPython/wx/tools/XRCed/globals.py b/wxPython/wx/tools/XRCed/globals.py index c130ac2762..572629efea 100644 --- a/wxPython/wx/tools/XRCed/globals.py +++ b/wxPython/wx/tools/XRCed/globals.py @@ -15,7 +15,7 @@ import sys # Global constants progname = 'XRCed' -version = '0.1.6-3' +version = '0.1.6-4' # Can be changed to set other default encoding different #defaultEncoding = '' # you comment above and can uncomment this: diff --git a/wxPython/wx/tools/XRCed/undo.py b/wxPython/wx/tools/XRCed/undo.py index cc249884ee..ebc0832394 100644 --- a/wxPython/wx/tools/XRCed/undo.py +++ b/wxPython/wx/tools/XRCed/undo.py @@ -5,6 +5,7 @@ # RCS-ID: $Id$ from globals import * +from xxx import MakeXXXFromDOM #from panel import * # Undo/redo classes @@ -119,6 +120,49 @@ class UndoPasteCreate: else: g.tree.pendingHighLight = None +class UndoReplace: + def __init__(self, item): + self.itemIndex = g.tree.ItemFullIndex(item) + self.xxx = g.tree.GetPyData(item) + def destroy(self): + if self.xxx: self.xxx.element.unlink() + def undo(self): + print 'Sorry, UndoReplace is not yet implemented.' + return + item = g.tree.ItemAtFullIndex(self.itemIndex) + xxx = g.tree.GetPyData(item) + # Replace with old element + parent = xxx.parent.element + 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) + self.xxx.parent = xxx.parent + xxx = self.xxx + g.tree.SetPyData(item, xxx) + g.tree.SetItemText(item, xxx.treeName()) + g.tree.SetItemImage(item, xxx.treeImage()) + + # Update panel + g.panel.SetData(xxx) + # Update tools + g.tools.UpdateUI() + g.tree.EnsureVisible(item) + g.tree.SelectItem(item) + # Delete testWin? + if g.testWin: + # If deleting top-level item, delete testWin + if selected == g.testWin.item: + g.testWin.Destroy() + g.testWin = None + else: + # Remove highlight, update testWin + if g.testWin.highLight: + g.testWin.highLight.Remove() + g.tree.needUpdate = True + def redo(self): + return + class UndoEdit: def __init__(self): self.pages = map(ParamPage.GetState, g.panel.pages) diff --git a/wxPython/wx/tools/XRCed/xrced.py b/wxPython/wx/tools/XRCed/xrced.py index 04303b345d..5ef935b9f3 100644 --- a/wxPython/wx/tools/XRCed/xrced.py +++ b/wxPython/wx/tools/XRCed/xrced.py @@ -800,21 +800,25 @@ Homepage: http://xrced.sourceforge.net\ tree.SetFocus() self.SetModified() - # Replace one object with another def OnReplace(self, evt): selected = tree.selection xxx = tree.GetPyData(selected).treeObject() elem = xxx.element parent = elem.parentNode - parentXXX = xxx.parent + undoMan.RegisterUndo(UndoReplace(selected)) # New class className = pullDownMenu.createMap[evt.GetId() - 1000] # Create temporary empty node (with default values) dummy = MakeEmptyDOM(className) - xxxClass = xxxDict[className] + if className == 'spacer' and xxx.className != 'spacer': + klass = xxxSpacer + elif xxx.className == 'spacer' and className != 'spacer': + klass = xxxSizerItem + else: + klass = xxxDict[className] # Remove non-compatible children - if tree.ItemHasChildren(selected) and not xxxClass.hasChildren: + if tree.ItemHasChildren(selected) and not klass.hasChildren: tree.DeleteChildren(selected) nodes = elem.childNodes[:] tags = [] @@ -823,10 +827,9 @@ Homepage: http://xrced.sourceforge.net\ remove = False tag = node.tagName if tag == 'object': - if not xxxClass.hasChildren: - remove = True - elif tag not in xxxClass.allParams and \ - (not xxxClass.hasStyle or tag not in xxxClass.styles): + if not klass.hasChildren: remove = True + elif tag not in klass.allParams and \ + (not klass.hasStyle or tag not in klass.styles): remove = True else: tags.append(tag) @@ -834,18 +837,37 @@ Homepage: http://xrced.sourceforge.net\ elem.removeChild(node) node.unlink() - # Copy parameters present in dummy but not in elem - for node in dummy.childNodes: - tag = node.tagName - if tag not in tags: - elem.appendChild(node.cloneNode(True)) + # Remove sizeritem child if spacer + if className == 'spacer' and xxx.className != 'spacer': + sizeritem = elem.parentNode + assert sizeritem.getAttribute('class') == 'sizeritem' + sizeritem.removeChild(elem) + elem.unlink() + elem = sizeritem + tree.GetPyData(selected).hasChild = false + elif xxx.className == 'spacer' and className != 'spacer': + # Create sizeritem element + assert xxx.parent.isSizer + elem.setAttribute('class', 'sizeritem') + node = MakeEmptyDOM(className) + elem.appendChild(node) + # Replace to point to new object + xxx = xxxSizerItem(xxx.parent, elem) + elem = node + tree.SetPyData(selected, xxx) + xxx = xxx.child + else: + # Copy parameters present in dummy but not in elem + for node in dummy.childNodes: + if node.tagName not in tags: elem.appendChild(node.cloneNode(True)) dummy.unlink() + # Change class name - elem.setAttribute('class', className) + elem.setAttribute('class', className) if elem.hasAttribute('subclass'): elem.removeAttribute('subclass') # clear subclassing # Re-create xxx element - xxx = MakeXXXFromDOM(parentXXX, elem) + xxx = MakeXXXFromDOM(xxx.parent, elem) # Update parent in child objects if tree.ItemHasChildren(selected): i, cookie = tree.GetFirstChild(selected) @@ -854,13 +876,14 @@ Homepage: http://xrced.sourceforge.net\ x.parent = xxx if x.hasChild: x.child.parent = xxx i, cookie = tree.GetNextChild(selected, cookie) - + # Update tree if tree.GetPyData(selected).hasChild: # child container container = tree.GetPyData(selected) container.child = xxx container.hasChildren = xxx.hasChildren container.isSizer = xxx.isSizer + xxx = container else: tree.SetPyData(selected, xxx) tree.SetItemText(selected, xxx.treeName()) -- 2.45.2