[pitivi] Handle the undo/redo active property



commit d880ddd97e49dfa3a1203600f9ae8ca3b5d203a6
Author: Thibault Saunier <tsaunier gnome org>
Date:   Sun Aug 8 20:54:43 2010 -0400

    Handle the undo/redo active property

 pitivi/timeline/timeline_undo.py |   30 ++++++++++++++++++++++++++++--
 pitivi/ui/clipproperties.py      |    2 ++
 2 files changed, 30 insertions(+), 2 deletions(-)
---
diff --git a/pitivi/timeline/timeline_undo.py b/pitivi/timeline/timeline_undo.py
index 274b9d4..0f8176c 100644
--- a/pitivi/timeline/timeline_undo.py
+++ b/pitivi/timeline/timeline_undo.py
@@ -222,7 +222,6 @@ class TrackEffectRemoved(UndoableAction):
         self.gnl_obj_props = [(prop.name, gnl_obj.get_property(prop.name))
                               for prop in gnl_props
                               if prop.flags & gobject.PARAM_WRITABLE]
-        print self.gnl_obj_props
 
         self.timeline_object.removeTrackObject(self.track_object)
         self.track_object.track.removeTrackObject(self.track_object)
@@ -293,6 +292,21 @@ class InterpolatorKeyframeChanged(UndoableAction):
         self.keyframe.setTime(time)
         self.keyframe.setValue(value)
 
+class ActivePropertyChanged(UndoableAction):
+    def __init__(self, effect_action, active):
+        self.effect_action = effect_action
+        self.active = not active
+
+    def do(self):
+        self.effect_action.track_object.active = self.active
+        self.active = not self.active
+        self._done()
+
+    def undo(self):
+        self.effect_action.track_object.active = self.active
+        self.active = not self.active
+        self._done()
+
 class TimelineLogObserver(object):
     timelinePropertyChangedAction = TimelineObjectPropertyChanged
     timelineObjectAddedAction = TimelineObjectAdded
@@ -302,6 +316,7 @@ class TimelineLogObserver(object):
     interpolatorKeyframeAddedAction = InterpolatorKeyframeAdded
     interpolatorKeyframeRemovedAction = InterpolatorKeyframeRemoved
     interpolatorKeyframeChangedAction = InterpolatorKeyframeChanged
+    activePropertyChangedAction = ActivePropertyChanged
 
     def __init__(self, log):
         self.log = log
@@ -391,11 +406,18 @@ class TimelineLogObserver(object):
     def _timelineObjectTrackObjectAddedCb(self, timeline_object, track_object):
         if isinstance(track_object, TrackEffect):
             action = self.trackEffectAddAction(timeline_object, track_object)
+            #We use the action instead of the track object 
+            #because the track_object changes when redoing
+            track_object.connect("active-changed",
+                                 self._trackObjectActiveChangedCb, action)
             self.log.push(action)
-            self.effect_properties_tracker.addEffectElement(track_object.getElement())
+            element = track_object.getElement()
+            if element:
+                self.effect_properties_tracker.addEffectElement(element)
         else:
             self._connectToTrackObject(track_object)
 
+
     def _timelineObjectTrackObjectRemovedCb(self, timeline_object,
                                             track_object):
         if isinstance(track_object, TrackEffect):
@@ -413,6 +435,10 @@ class TimelineLogObserver(object):
         action = self.interpolatorKeyframeRemovedAction(track_object, keyframe)
         self.log.push(action)
 
+    def _trackObjectActiveChangedCb(self, track_object, active, add_effect_action):
+        action = self.activePropertyChangedAction(add_effect_action, active)
+        self.log.push(action)
+
     def _interpolatorKeyframeMovedCb(self, tracker, track_object,
             keyframe, old_snapshot, new_snapshot):
         action = self.interpolatorKeyframeChangedAction(track_object,
diff --git a/pitivi/ui/clipproperties.py b/pitivi/ui/clipproperties.py
index 290f1cf..4545393 100644
--- a/pitivi/ui/clipproperties.py
+++ b/pitivi/ui/clipproperties.py
@@ -267,8 +267,10 @@ class EffectProperties(gtk.Expander):
     def _effectActiveToggleCb(self, cellrenderertoggle, path):
         iter = self.storemodel.get_iter(path)
         track_effect = self.storemodel.get_value(iter, COL_TRACK_EFFECT)
+        self.app.action_log.begin("change active state")
         activated = track_effect.gnl_object.get_property("active")
         track_effect.gnl_object.set_property("active", not activated)
+        self.app.action_log.commit()
 
     def expandedcb(self, expander, params):
         self._updateAll()



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]