item = g.tree.ItemAtFullIndex(self.itemIndex)
xxx = g.tree.GetPyData(item)
# Replace with old element
- parent = xxx.parent.element
+ parent = xxx.parent.node
if xxx is self.xxx: # sizeritem or notebookpage - replace child
- parent.replaceChild(self.xxx.child.element, xxx.child.element)
+ parent.replaceChild(self.xxx.child.node, xxx.child.node)
else:
- parent.replaceChild(self.xxx.element, xxx.element)
+ parent.replaceChild(self.xxx.node, xxx.node)
self.xxx.parent = xxx.parent
xxx = self.xxx
g.tree.SetPyData(item, xxx)
class UndoMove:
def __init__(self, oldParent, oldIndex, newParent, newIndex):
- self.oldParent = oldParent
+ # Store indexes because items can be invalid already
+ self.oldParentIndex = g.tree.ItemFullIndex(oldParent)
self.oldIndex = oldIndex
- self.newParent = newParent
+ self.newParentIndex = g.tree.ItemFullIndex(newParent)
self.newIndex = newIndex
def destroy(self):
pass
def undo(self):
- item = g.tree.GetFirstChild(self.newParent)[0]
+ oldParent = g.tree.ItemAtFullIndex(self.oldParentIndex)
+ newParent = g.tree.ItemAtFullIndex(self.newParentIndex)
+ item = g.tree.GetFirstChild(newParent)[0]
for i in range(self.newIndex): item = g.tree.GetNextSibling(item)
elem = g.tree.RemoveLeaf(item)
- nextItem = g.tree.GetFirstChild(self.oldParent)[0]
+ nextItem = g.tree.GetFirstChild(oldParent)[0]
for i in range(self.oldIndex): nextItem = g.tree.GetNextSibling(nextItem)
- parent = g.tree.GetPyData(self.oldParent).treeObject()
+ parent = g.tree.GetPyData(oldParent).treeObject()
# Check parent and child relationships.
# If parent is sizer or notebook, child is of wrong class or
((parent.isSizer and not isinstance(xxx, xxxSizerItem)) or \
(isinstance(parent, xxxNotebook) and not isinstance(xxx, xxxNotebookPage)) or \
not (parent.isSizer or isinstance(parent, xxxNotebook))):
- elem.removeChild(xxx.child.element) # detach child
+ elem.removeChild(xxx.child.node) # detach child
elem.unlink() # delete child container
- elem = xxx.child.element # replace
+ elem = xxx.child.node # replace
# This may help garbage collection
xxx.child.parent = None
isChildContainer = False
pageElem.appendChild(elem)
elem = pageElem
- selected = g.tree.InsertNode(self.oldParent, parent, elem, nextItem)
+ selected = g.tree.InsertNode(oldParent, parent, elem, nextItem)
g.tree.EnsureVisible(selected)
+ # Highlight is outdated
+ if g.testWin and g.testWin.highLight:
+ g.testWin.highLight.Remove()
+ g.tree.needUpdate = True
g.tree.SelectItem(selected)
def redo(self):
- item = g.tree.GetFirstChild(self.oldParent)[0]
+ oldParent = g.tree.ItemAtFullIndex(self.oldParentIndex)
+ newParent = g.tree.ItemAtFullIndex(self.newParentIndex)
+ item = g.tree.GetFirstChild(oldParent)[0]
for i in range(self.oldIndex): item = g.tree.GetNextSibling(item)
elem = g.tree.RemoveLeaf(item)
- parent = g.tree.GetPyData(self.newParent).treeObject()
+ parent = g.tree.GetPyData(newParent).treeObject()
# Check parent and child relationships.
# If parent is sizer or notebook, child is of wrong class or
((parent.isSizer and not isinstance(xxx, xxxSizerItem)) or \
(isinstance(parent, xxxNotebook) and not isinstance(xxx, xxxNotebookPage)) or \
not (parent.isSizer or isinstance(parent, xxxNotebook))):
- elem.removeChild(xxx.child.element) # detach child
+ elem.removeChild(xxx.child.node) # detach child
elem.unlink() # delete child container
- elem = xxx.child.element # replace
+ elem = xxx.child.node # replace
# This may help garbage collection
xxx.child.parent = None
isChildContainer = False
pageElem.appendChild(elem)
elem = pageElem
- nextItem = g.tree.GetFirstChild(self.newParent)[0]
+ nextItem = g.tree.GetFirstChild(newParent)[0]
for i in range(self.newIndex): nextItem = g.tree.GetNextSibling(nextItem)
- selected = g.tree.InsertNode(self.newParent, parent, elem, nextItem)
+ selected = g.tree.InsertNode(newParent, parent, elem, nextItem)
g.tree.EnsureVisible(selected)
+ # Highlight is outdated
+ if g.testWin and g.testWin.highLight:
+ g.testWin.highLight.Remove()
+ g.tree.needUpdate = True
g.tree.SelectItem(selected)
class UndoEdit:
# Save current state for redo
map(ParamPage.SaveState, g.panel.pages)
pages = map(ParamPage.GetState, g.panel.pages)
- map(ParamPage.SetState, g.panel.pages, self.pages)
+ if self.pages:
+ map(ParamPage.SetState, g.panel.pages, self.pages)
self.pages = pages
self.update(selected)
def redo(self):