[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/designer/src/base UndoManager.py
From: |
Jason Cater |
Subject: |
gnue/designer/src/base UndoManager.py |
Date: |
Fri, 30 May 2003 19:08:44 -0400 |
CVSROOT: /cvsroot/gnue
Module name: gnue
Changes by: Jason Cater <address@hidden> 03/05/30 19:08:44
Modified files:
designer/src/base: UndoManager.py
Log message:
more work on undo'ing deletions
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/designer/src/base/UndoManager.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
Patches:
Index: gnue/designer/src/base/UndoManager.py
diff -c gnue/designer/src/base/UndoManager.py:1.1
gnue/designer/src/base/UndoManager.py:1.2
*** gnue/designer/src/base/UndoManager.py:1.1 Fri May 30 01:02:55 2003
--- gnue/designer/src/base/UndoManager.py Fri May 30 19:08:44 2003
***************
*** 28,33 ****
--- 28,35 ----
__all__ = ['UndoManager']
+ import types
+
class UndoManager:
def __init__(self, instance):
self.objects = []
***************
*** 36,41 ****
--- 38,45 ----
self.future = []
self.instance = instance
+ self.deleteMap = {}
+
# True if we are in the middle of a REDO action
self.redo = 0
***************
*** 103,118 ****
else:
self.instance.dispatchEvent('Disable:RequestRedo')
class History:
def __init__(self, manager, event):
self.event = event
def reverse(self, manager):
orig = self.event
! object = orig.object
if orig.__event__ == 'ObjectCreated':
- object._parent._children.remove(object)
manager.instance.dispatchEvent('ObjectDeleted',
object=orig.object, originator=__name__)
elif orig.__event__ == 'ObjectModified':
--- 107,136 ----
else:
self.instance.dispatchEvent('Disable:RequestRedo')
+ # Return the current instance of this object
+ def getCurrObject(self, object):
+ print "Finding current version of %s" % object
+ while 1:
+ try:
+ object = self.deleteMap[id(object)]
+ except KeyError:
+ print "Found %s" % object
+ return object
class History:
def __init__(self, manager, event):
self.event = event
+ if event.__event__ == 'ObjectDeleted':
+ self.parentindex = event.object._parent._children.index(event.object)
+ self.parent = id(event.object._parent)
def reverse(self, manager):
orig = self.event
! print "-----"
! print orig.object
! object = manager.getCurrObject(orig.object)
! print object
if orig.__event__ == 'ObjectCreated':
manager.instance.dispatchEvent('ObjectDeleted',
object=orig.object, originator=__name__)
elif orig.__event__ == 'ObjectModified':
***************
*** 123,125 ****
--- 141,163 ----
manager.instance.dispatchEvent('ObjectModified',
object=orig.object, originator=__name__,
new=orig.old, old=orig.new)
+ elif orig.__event__ == 'ObjectDeleted':
+ attrs = {}
+ for key, val in object.__dict__.items():
+ if key[0] != '_' and type(val) != types.MethodType:
+ attrs[key] = val
+ parent = manager.getCurrObject(object._parent)
+ obj = object.__class__(parent)
+ obj.__dict__.update(attrs)
+ obj._buildObject()
+ manager.deleteMap[id(object)] = obj
+
+ # Move the child to its old, relative position
+ # in the parent's child list
+ obj._parent._children.pop()
+ obj._parent._children.insert(self.parentindex, obj)
+
+ # Notify our peeps...
+ manager.instance.dispatchEvent('ObjectCreated', originator=__name__,
+ object=obj)
+
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue/designer/src/base UndoManager.py,
Jason Cater <=