+ wx.LogError('Incompatible parent/child: parent is %s, child is %s!' %
+ (parentClass, child.className))
+ return False
+ return True
+
+ def OnMoveUp(self, evt):
+ selected = tree.selection
+ if not selected: return
+
+ index = tree.ItemIndex(selected)
+ if index == 0: return # No previous sibling found
+
+ # Undo info
+ self.lastOp = 'MOVEUP'
+ status = 'Moved before previous sibling'
+
+ # Prepare undo data
+ panel.Apply()
+
+ parent = tree.GetItemParent(selected)
+ elem = tree.RemoveLeaf(selected)
+ nextItem = tree.GetFirstChild(parent)[0]
+ for i in range(index - 1): nextItem = tree.GetNextSibling(nextItem)
+ selected = tree.InsertNode(parent, tree.GetPyData(parent).treeObject(), elem, nextItem)
+ newIndex = tree.ItemIndex(selected)
+ tree.SelectItem(selected)
+
+ undoMan.RegisterUndo(UndoMove(parent, index, parent, newIndex))
+
+ self.modified = True
+ self.SetStatusText(status)
+
+ return
+
+ def OnMoveDown(self, evt):
+ selected = tree.selection
+ if not selected: return
+
+ index = tree.ItemIndex(selected)
+ next = tree.GetNextSibling(selected)
+ if not next: return
+
+ # Undo info
+ self.lastOp = 'MOVEDOWN'
+ status = 'Moved after next sibling'
+
+ # Prepare undo data
+ panel.Apply()
+
+ parent = tree.GetItemParent(selected)
+ elem = tree.RemoveLeaf(selected)
+ nextItem = tree.GetFirstChild(parent)[0]
+ for i in range(index + 1): nextItem = tree.GetNextSibling(nextItem)
+ selected = tree.InsertNode(parent, tree.GetPyData(parent).treeObject(), elem, nextItem)
+ newIndex = tree.ItemIndex(selected)
+ tree.SelectItem(selected)
+
+ undoMan.RegisterUndo(UndoMove(parent, index, parent, newIndex))
+
+ self.modified = True
+ self.SetStatusText(status)
+
+ return
+
+ def OnMoveLeft(self, evt):
+ selected = tree.selection
+ if not selected: return
+
+ oldParent = tree.GetItemParent(selected)
+ if not oldParent: return
+ pparent = tree.GetItemParent(oldParent)
+ if not pparent: return
+
+ # Check compatibility
+ if not self.ItemsAreCompatible(tree.GetPyData(pparent).treeObject(), tree.GetPyData(selected).treeObject()): return
+
+ # Undo info
+ self.lastOp = 'MOVELEFT'
+ status = 'Made next sibling of parent'
+
+ oldIndex = tree.ItemIndex(selected)
+ elem = tree.RemoveLeaf(selected)
+ nextItem = tree.GetFirstChild(pparent)[0]
+ parentIndex = tree.ItemIndex(oldParent)
+ for i in range(parentIndex + 1): nextItem = tree.GetNextSibling(nextItem)