]> git.saurik.com Git - wxWidgets.git/commitdiff
0.1.6-4: replace working for sizeritems and spacers
authorRoman Rolinsky <rolinsky@femagsoft.com>
Mon, 15 Aug 2005 19:53:33 +0000 (19:53 +0000)
committerRoman Rolinsky <rolinsky@femagsoft.com>
Mon, 15 Aug 2005 19:53:33 +0000 (19:53 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35192 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

wxPython/wx/tools/XRCed/CHANGES.txt
wxPython/wx/tools/XRCed/globals.py
wxPython/wx/tools/XRCed/undo.py
wxPython/wx/tools/XRCed/xrced.py

index 65d814885ecc65d17819f432a23a62329c0307b9..0e6603c071dfaa8933cc263f74f296558000a40b 100644 (file)
@@ -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
 -------
 
index c130ac2762824e3d4df0aea547cca6535bc45ac1..572629efea5567c79d361c11551c2faf6c297184 100644 (file)
@@ -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:
index cc249884ee761288633c55f5e99f1d42ae86b065..ebc083239487d6c7f7b8accb9cf5b70a9cd8d941 100644 (file)
@@ -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)
index 04303b345dd66f948b45ed9f1486ada3c91731fd..5ef935b9f3901a60ab297a4b7c85a139c6362d4a 100644 (file)
@@ -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())