commit-gnue
[Top][All Lists]
Advanced

[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)
+ 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]