This commit was manufactured by cvs2svn to create tag 'WX_2_8_4'.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/tags/WX_2_8_4@46016 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Bryan Petty
2007-05-14 08:18:10 +00:00
parent e86fbab1ba
commit 50c46e10bb
840 changed files with 30344 additions and 96262 deletions

View File

@@ -6,6 +6,7 @@
from globals import *
from xxx import MakeXXXFromDOM
from tree import *
#from panel import *
# Undo/redo classes
@@ -123,20 +124,21 @@ class UndoPasteCreate:
class UndoReplace:
def __init__(self, item):
self.itemIndex = g.tree.ItemFullIndex(item)
self.xxx = g.tree.GetPyData(item)
#self.xxx = g.tree.GetPyData(item)
self.elem = None
def destroy(self):
if self.xxx: self.xxx.element.unlink()
if self.elem: self.elem.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
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)
@@ -163,6 +165,99 @@ class UndoReplace:
def redo(self):
return
class UndoMove:
def __init__(self, oldParent, oldIndex, newParent, newIndex):
self.oldParent = oldParent
self.oldIndex = oldIndex
self.newParent = newParent
self.newIndex = newIndex
def destroy(self):
pass
def undo(self):
item = g.tree.GetFirstChild(self.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]
for i in range(self.oldIndex): nextItem = g.tree.GetNextSibling(nextItem)
parent = g.tree.GetPyData(self.oldParent).treeObject()
# Check parent and child relationships.
# If parent is sizer or notebook, child is of wrong class or
# parent is normal window, child is child container then detach child.
xxx = MakeXXXFromDOM(parent, elem)
isChildContainer = isinstance(xxx, xxxChildContainer)
if isChildContainer and \
((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.node) # detach child
elem.unlink() # delete child container
elem = xxx.child.node # replace
# This may help garbage collection
xxx.child.parent = None
isChildContainer = False
# Parent is sizer or notebook, child is not child container
if parent.isSizer and not isChildContainer and not isinstance(xxx, xxxSpacer):
# Create sizer item element
sizerItemElem = MakeEmptyDOM('sizeritem')
sizerItemElem.appendChild(elem)
elem = sizerItemElem
elif isinstance(parent, xxxNotebook) and not isChildContainer:
pageElem = MakeEmptyDOM('notebookpage')
pageElem.appendChild(elem)
elem = pageElem
selected = g.tree.InsertNode(self.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]
for i in range(self.oldIndex): item = g.tree.GetNextSibling(item)
elem = g.tree.RemoveLeaf(item)
parent = g.tree.GetPyData(self.newParent).treeObject()
# Check parent and child relationships.
# If parent is sizer or notebook, child is of wrong class or
# parent is normal window, child is child container then detach child.
xxx = MakeXXXFromDOM(parent, elem)
isChildContainer = isinstance(xxx, xxxChildContainer)
if isChildContainer and \
((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.node) # detach child
elem.unlink() # delete child container
elem = xxx.child.node # replace
# This may help garbage collection
xxx.child.parent = None
isChildContainer = False
# Parent is sizer or notebook, child is not child container
if parent.isSizer and not isChildContainer and not isinstance(xxx, xxxSpacer):
# Create sizer item element
sizerItemElem = MakeEmptyDOM('sizeritem')
sizerItemElem.appendChild(elem)
elem = sizerItemElem
elif isinstance(parent, xxxNotebook) and not isChildContainer:
pageElem = MakeEmptyDOM('notebookpage')
pageElem.appendChild(elem)
elem = pageElem
nextItem = g.tree.GetFirstChild(self.newParent)[0]
for i in range(self.newIndex): nextItem = g.tree.GetNextSibling(nextItem)
selected = g.tree.InsertNode(self.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:
def __init__(self):
self.pages = map(ParamPage.GetState, g.panel.pages)
@@ -187,7 +282,8 @@ 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):