[pitivi] undo: Clarify how property_names are set



commit 4afddc85b12b1d226d84d7b64e696c30191a31be
Author: Alexandru Băluț <alexandru balut gmail com>
Date:   Thu Apr 28 00:52:08 2016 +0200

    undo: Clarify how property_names are set
    
    Differential Revision: https://phabricator.freedesktop.org/D978

 pitivi/undo/timeline.py |   32 ++++++++++++++------------------
 pitivi/undo/undo.py     |   36 ++++++++++++++++--------------------
 2 files changed, 30 insertions(+), 38 deletions(-)
---
diff --git a/pitivi/undo/timeline.py b/pitivi/undo/timeline.py
index 5fe7fdd..c48a89e 100644
--- a/pitivi/undo/timeline.py
+++ b/pitivi/undo/timeline.py
@@ -225,15 +225,12 @@ class TrackElementRemoved(UndoableAction):
 
 
 class ClipPropertyChangeTracker(PropertyChangeTracker):
-    # no out-point
-    property_names = ["start", "duration", "in-point", "priority"]
 
-    def __init__(self):
-        PropertyChangeTracker.__init__(self)
-
-    def connectToObject(self, obj):
-        PropertyChangeTracker.connectToObject(self, obj)
-        self.timeline = obj.timeline
+    def __init__(self, ges_clip):
+        PropertyChangeTracker.__init__(self, ges_clip,
+            # No out-point as that's calculated.
+            property_names=["start", "duration", "in-point", "priority"])
+        self.timeline = ges_clip.timeline
         self.timeline.connect("commited", self._timelineCommitedCb)
 
     def disconnectFromObject(self, obj):
@@ -241,12 +238,12 @@ class ClipPropertyChangeTracker(PropertyChangeTracker):
         PropertyChangeTracker.disconnectFromObject(self, obj)
 
     def _timelineCommitedCb(self, timeline):
-        properties = self._takeCurrentSnapshot(self.obj)
+        properties = self._takeCurrentSnapshot(self.gobject)
         for property_name, property_value in properties.items():
             old_value = self.properties[property_name]
             if old_value != property_value:
                 self._propertyChangedCb(
-                    self.obj, property_value, property_name)
+                    self.gobject, property_value, property_name)
 
 
 class KeyframeChangeTracker(GObject.Object):
@@ -586,20 +583,19 @@ class TimelineObserver(Loggable):
         ges_layer.disconnect_by_func(self._clipRemovedCb)
         ges_layer.disconnect_by_func(self._layer_moved_cb)
 
-    def _connectToClip(self, clip):
-        tracker = ClipPropertyChangeTracker()
-        tracker.connectToObject(clip)
+    def _connectToClip(self, ges_clip):
+        tracker = ClipPropertyChangeTracker(ges_clip)
         for property_name in tracker.property_names:
             attr_name = "last-%s" % property_name
-            last_value = clip.get_property(property_name)
+            last_value = ges_clip.get_property(property_name)
             setattr(tracker, attr_name, last_value)
         tracker.connect(
             "monitored-property-changed", self._clipPropertyChangedCb)
-        self.clip_property_trackers[clip] = tracker
+        self.clip_property_trackers[ges_clip] = tracker
 
-        clip.connect("child-added", self._clipTrackElementAddedCb)
-        clip.connect("child-removed", self._clipTrackElementRemovedCb)
-        for track_element in clip.get_children(True):
+        ges_clip.connect("child-added", self._clipTrackElementAddedCb)
+        ges_clip.connect("child-removed", self._clipTrackElementRemovedCb)
+        for track_element in ges_clip.get_children(True):
             self._connectToTrackElement(track_element)
 
     def _disconnectFromClip(self, clip):
diff --git a/pitivi/undo/undo.py b/pitivi/undo/undo.py
index 6e300ed..a9b3e33 100644
--- a/pitivi/undo/undo.py
+++ b/pitivi/undo/undo.py
@@ -300,45 +300,41 @@ class UndoableActionLog(GObject.Object, Loggable):
 
 class PropertyChangeTracker(GObject.Object):
     """
-    BaseClass to track a class property, Used for undo/redo
+    Monitors a GObject.Object's props and reports UndoableActions.
+
+    Attributes:
+        gobject (GObject.Object): The object to be monitored.
+        property_names (List[str]): The props to be monitored.
     """
 
     __gsignals__ = {
         "monitored-property-changed": (GObject.SIGNAL_RUN_LAST, None, (object, str, object, object)),
     }
 
-    # The properties monitored by this class
-    property_names = []
-
-    def __init__(self):
+    def __init__(self, gobject, property_names):
         GObject.Object.__init__(self)
-        self.properties = {}
-        self.obj = None
-
-    def connectToObject(self, obj):
-        self.obj = obj
-        self.properties = self._takeCurrentSnapshot(obj)
-        # Connect to obj to keep track when the monitored properties
-        # are changed.
+        self.property_names = property_names
+        self.gobject = gobject
+        self.properties = self._takeCurrentSnapshot(gobject)
+        # Connect to obj to keep track when the monitored props change.
         for property_name in self.property_names:
             signal_name = "notify::%s" % property_name
-            obj.connect(signal_name, self._propertyChangedCb, property_name)
+            gobject.connect(signal_name, self._propertyChangedCb, property_name)
 
-    @classmethod
-    def _takeCurrentSnapshot(cls, obj):
+    def _takeCurrentSnapshot(self, obj):
         properties = {}
-        for property_name in cls.property_names:
+        for property_name in self.property_names:
             properties[property_name] = obj.get_property(
                 property_name.replace("-", "_"))
 
         return properties
 
     def disconnectFromObject(self, obj):
-        self.obj = None
+        self.gobject = None
         obj.disconnect_by_func(self._propertyChangedCb)
 
-    def _propertyChangedCb(self, object, property_value, property_name):
+    def _propertyChangedCb(self, gobject, property_value, property_name):
         old_value = self.properties[property_name]
         self.properties[property_name] = property_value
-        self.emit("monitored-property-changed", object,
+        self.emit("monitored-property-changed", gobject,
                   property_name, old_value, property_value)


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