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
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.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
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:
# Toolbar can be top-level of child of panel or frame
if parent.__class__ not in [xxxMainNode, xxxPanel, xxxFrame] and \
not parent.isSizer: error = True
+ elif not parent.hasChildren:
+ error = True
elif child.__class__ == xxxPanel and parent.__class__ == xxxMainNode:
pass
elif child.__class__ == xxxSpacer:
if g.testWin and g.testWin.highLight:
g.testWin.highLight.Remove()
- tree.needUpdate = True
+ tree.needUpdate = True
# Undo info
self.lastOp = 'MOVELEFT'
status = 'Made next sibling of parent'
+ # Prepare undo data
+ panel.Apply()
+ tree.UnselectAll()
+
oldIndex = tree.ItemIndex(selected)
elem = tree.RemoveLeaf(selected)
nextItem = tree.GetFirstChild(pparent)[0]
# Remove highlight, update testWin
if g.testWin and g.testWin.highLight:
g.testWin.highLight.Remove()
- tree.needUpdate = True
+ tree.needUpdate = True
+
+ # Prepare undo data
+ panel.Apply()
+ tree.UnselectAll()
# Undo info
self.lastOp = 'MOVERIGHT'
selected = tree.InsertNode(newParent, tree.GetPyData(newParent).treeObject(), elem, wx.TreeItemId())
newIndex = tree.ItemIndex(selected)
+ tree.Expand(selected)
tree.SelectItem(selected)
undoMan.RegisterUndo(UndoMove(oldParent, oldIndex, newParent, newIndex))