Merged the wxPy_newswig branch into the HEAD branch (main trunk)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24541 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1,8 +1,151 @@
|
||||
# Name: undo.py
|
||||
# Purpose: XRC editor, undo/redo module
|
||||
# Author: Roman Rolinsky <rolinsky@mema.ucl.ac.be>
|
||||
# Created: 01.12.2002
|
||||
# RCS-ID: $Id$
|
||||
|
||||
"""Renamer stub: provides a way to drop the wx prefix from wxPython objects."""
|
||||
from globals import *
|
||||
#from panel import *
|
||||
|
||||
from wx import _rename
|
||||
from wxPython.tools.XRCed import undo
|
||||
_rename(globals(), undo.__dict__, modulename='tools.XRCed.undo')
|
||||
del undo
|
||||
del _rename
|
||||
# Undo/redo classes
|
||||
class UndoManager:
|
||||
# Undo/redo stacks
|
||||
undo = []
|
||||
redo = []
|
||||
def RegisterUndo(self, undoObj):
|
||||
self.undo.append(undoObj)
|
||||
for i in self.redo: i.destroy()
|
||||
self.redo = []
|
||||
def Undo(self):
|
||||
undoObj = self.undo.pop()
|
||||
undoObj.undo()
|
||||
self.redo.append(undoObj)
|
||||
g.frame.modified = True
|
||||
g.frame.SetStatusText('Undone')
|
||||
def Redo(self):
|
||||
undoObj = self.redo.pop()
|
||||
undoObj.redo()
|
||||
self.undo.append(undoObj)
|
||||
g.frame.modified = True
|
||||
g.frame.SetStatusText('Redone')
|
||||
def Clear(self):
|
||||
for i in self.undo: i.destroy()
|
||||
self.undo = []
|
||||
for i in self.redo: i.destroy()
|
||||
self.redo = []
|
||||
def CanUndo(self):
|
||||
return not not self.undo
|
||||
def CanRedo(self):
|
||||
return not not self.redo
|
||||
|
||||
class UndoCutDelete:
|
||||
def __init__(self, itemIndex, parent, elem):
|
||||
self.itemIndex = itemIndex
|
||||
self.parent = parent
|
||||
self.elem = elem
|
||||
def destroy(self):
|
||||
if self.elem: self.elem.unlink()
|
||||
def undo(self):
|
||||
item = g.tree.InsertNode(g.tree.ItemAtFullIndex(self.itemIndex[:-1]),
|
||||
self.parent, self.elem,
|
||||
g.tree.ItemAtFullIndex(self.itemIndex))
|
||||
# Scroll to show new item (!!! redundant?)
|
||||
g.tree.EnsureVisible(item)
|
||||
g.tree.SelectItem(item)
|
||||
self.elem = None
|
||||
# Update testWin if needed
|
||||
if g.testWin and g.tree.IsHighlatable(item):
|
||||
if g.conf.autoRefresh:
|
||||
g.tree.needUpdate = True
|
||||
g.tree.pendingHighLight = item
|
||||
else:
|
||||
g.tree.pendingHighLight = None
|
||||
def redo(self):
|
||||
item = g.tree.ItemAtFullIndex(self.itemIndex)
|
||||
# Delete testWin?
|
||||
if g.testWin:
|
||||
# If deleting top-level item, delete testWin
|
||||
if item == 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
|
||||
self.elem = g.tree.RemoveLeaf(item)
|
||||
g.tree.Unselect()
|
||||
g.panel.Clear()
|
||||
|
||||
class UndoPasteCreate:
|
||||
def __init__(self, itemParent, parent, item, selected):
|
||||
self.itemParentIndex = g.tree.ItemFullIndex(itemParent)
|
||||
self.parent = parent
|
||||
self.itemIndex = g.tree.ItemFullIndex(item) # pasted item
|
||||
self.selectedIndex = g.tree.ItemFullIndex(selected) # maybe different from item
|
||||
self.elem = None
|
||||
def destroy(self):
|
||||
if self.elem: self.elem.unlink()
|
||||
def undo(self):
|
||||
self.elem = g.tree.RemoveLeaf(g.tree.ItemAtFullIndex(self.itemIndex))
|
||||
# Restore old selection
|
||||
selected = g.tree.ItemAtFullIndex(self.selectedIndex)
|
||||
g.tree.EnsureVisible(selected)
|
||||
g.tree.SelectItem(selected)
|
||||
# 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):
|
||||
item = g.tree.InsertNode(g.tree.ItemAtFullIndex(self.itemParentIndex),
|
||||
self.parent, self.elem,
|
||||
g.tree.ItemAtFullIndex(self.itemIndex))
|
||||
# Scroll to show new item
|
||||
g.tree.EnsureVisible(item)
|
||||
g.tree.SelectItem(item)
|
||||
self.elem = None
|
||||
# Update testWin if needed
|
||||
if g.testWin and g.tree.IsHighlatable(item):
|
||||
if g.conf.autoRefresh:
|
||||
g.tree.needUpdate = True
|
||||
g.tree.pendingHighLight = item
|
||||
else:
|
||||
g.tree.pendingHighLight = None
|
||||
|
||||
class UndoEdit:
|
||||
def __init__(self):
|
||||
self.pages = map(ParamPage.GetState, g.panel.pages)
|
||||
self.selectedIndex = g.tree.ItemFullIndex(g.tree.GetSelection())
|
||||
def destroy(self):
|
||||
pass
|
||||
# Update test view
|
||||
def update(self, selected):
|
||||
g.tree.Apply(g.tree.GetPyData(selected), selected)
|
||||
# Update view
|
||||
if g.testWin:
|
||||
if g.testWin.highLight:
|
||||
g.testWin.highLight.Remove()
|
||||
g.tree.pendingHighLight = selected
|
||||
if g.testWin:
|
||||
g.tree.needUpdate = True
|
||||
def undo(self):
|
||||
# Restore selection
|
||||
selected = g.tree.ItemAtFullIndex(self.selectedIndex)
|
||||
if selected != g.tree.GetSelection():
|
||||
g.tree.SelectItem(selected)
|
||||
# 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)
|
||||
self.pages = pages
|
||||
self.update(selected)
|
||||
def redo(self):
|
||||
self.undo()
|
||||
self.update(g.tree.GetSelection())
|
||||
|
Reference in New Issue
Block a user