[pitivi] Use the disable-updates signal to reduce the number of undo/redo actions.
- From: Edward Hervey <edwardrv src gnome org>
- To: svn-commits-list gnome org
- Subject: [pitivi] Use the disable-updates signal to reduce the number of undo/redo actions.
- Date: Thu, 11 Jun 2009 12:40:39 -0400 (EDT)
commit bb2d74666f31583b5426c971cf17be2470ea6228
Author: Alessandro Decina <alessandro d gmail com>
Date: Thu Jun 11 16:05:17 2009 +0200
Use the disable-updates signal to reduce the number of undo/redo actions.
pitivi/timeline/timeline.py | 7 ++++++-
pitivi/timeline/timeline_undo.py | 30 +++++++++++++++++++++++++++++-
pitivi/utils.py | 14 +++++++++++---
3 files changed, 46 insertions(+), 5 deletions(-)
---
diff --git a/pitivi/timeline/timeline.py b/pitivi/timeline/timeline.py
index 8d8aee2..3ffb1b3 100644
--- a/pitivi/timeline/timeline.py
+++ b/pitivi/timeline/timeline.py
@@ -81,7 +81,7 @@ class TimelineObject(Signallable, Loggable):
'out-point-changed': ['in-point'],
'media-duration-changed': ['media-duration'],
'priority-changed': ['priority'],
- 'selected-changed' : ['state'],
+ 'selected-changed' : ['state']
}
DEFAULT_START = 0
@@ -768,6 +768,7 @@ class Timeline(Signallable, Loggable):
'track-added': ['track'],
'track-removed': ['track'],
'selection-changed': [],
+ 'disable-updates': ['bool']
}
def __init__(self):
@@ -1094,9 +1095,13 @@ class Timeline(Signallable, Loggable):
for track in self.tracks:
track.disableUpdates()
+ self.emit("disable-updates", True)
+
def enableUpdates(self):
"""
Unblock internal updates. Use this after calling L{disableUpdates}.
"""
for track in self.tracks:
track.enableUpdates()
+
+ self.emit("disable-updates", False)
diff --git a/pitivi/timeline/timeline_undo.py b/pitivi/timeline/timeline_undo.py
index 1b7142e..cefb64d 100644
--- a/pitivi/timeline/timeline_undo.py
+++ b/pitivi/timeline/timeline_undo.py
@@ -23,9 +23,37 @@ from pitivi.utils import PropertyChangeTracker
from pitivi.undo import UndoableAction
class TimelineObjectPropertyChangeTracker(PropertyChangeTracker):
- property_names = ["start", "duration", "in-point", "out-point",
+ # no out-point
+ property_names = ["start", "duration", "in-point",
"media-duration", "priority", "selected"]
+ _disabled = False
+
+ def connectToObject(self, obj):
+ PropertyChangeTracker.connectToObject(self, obj)
+ self.timeline = obj.timeline
+ self.timeline.connect("disable-updates", self._timelineDisableUpdatesCb)
+
+ def disconnectFromObject(self, obj):
+ self.timeline.disconnect_by_func(self._timelineDisableUpdatesCb)
+ PropertyChangeTracker.disconnectFromObject(self, obj)
+
+ def _timelineDisableUpdatesCb(self, timeline, disabled):
+ if self._disabled and not disabled:
+ self._disabled = disabled
+ properties = self._takeCurrentSnapshot(self.obj)
+ for property_name, property_value in properties.iteritems():
+ old_value = self.properties[property_name]
+ if old_value != property_value:
+ self._propertyChangedCb(self.obj, property_value, property_name)
+ else:
+ self._disabled = disabled
+
+ def _propertyChangedCb(self, timeline_object, value, property_name):
+ if not self._disabled:
+ PropertyChangeTracker._propertyChangedCb(self,
+ timeline_object, value, property_name)
+
class TimelineObjectPropertyChanged(UndoableAction):
def __init__(self, timeline_object, property_name, old_value, new_value):
self.timeline_object = timeline_object
diff --git a/pitivi/utils.py b/pitivi/utils.py
index 43d4e54..ba03c99 100644
--- a/pitivi/utils.py
+++ b/pitivi/utils.py
@@ -239,19 +239,27 @@ def uri_is_reachable(uri):
class PropertyChangeTracker(Signallable):
def __init__(self):
self.properties = {}
+ self.obj = None
def connectToObject(self, obj):
+ self.obj = obj
+ self.properties = self._takeCurrentSnapshot(obj)
for property_name in self.property_names:
- self.properties[property_name] = \
- getattr(obj, property_name.replace("-", "_"))
-
signal_name = property_name + '-changed'
self.__signals__[signal_name] = []
obj.connect(signal_name,
self._propertyChangedCb, property_name)
+ def _takeCurrentSnapshot(self, obj):
+ properties = {}
+ for property_name in self.property_names:
+ properties[property_name] = \
+ getattr(obj, property_name.replace("-", "_"))
+
+ return properties
def disconnectFromObject(self, obj):
+ self.obj = None
obj.disconnect_by_func(self._propertyChangedCb)
def _propertyChangedCb(self, object, value, property_name):
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]