[pitivi: 7/20] timeline.py: implement ripple mode for moving clips



commit cabda9f228636a125fda160e137aef6e589c52e3
Author: Brandon Lewis <brandon_lewis berkeley edu>
Date:   Tue Jul 7 00:26:08 2009 -0700

    timeline.py: implement ripple mode for moving clips

 pitivi/timeline/timeline.py |   54 ++++++++++++++++++++++++++++--------------
 1 files changed, 36 insertions(+), 18 deletions(-)
---
diff --git a/pitivi/timeline/timeline.py b/pitivi/timeline/timeline.py
index 2faca98..79a80bc 100644
--- a/pitivi/timeline/timeline.py
+++ b/pitivi/timeline/timeline.py
@@ -944,20 +944,24 @@ class EditingContext(object):
 
         return offsets
 
-    def _getTrackObjectValues(self, track_object):
-        return (track_object.start, track_object.duration,
-                track_object.in_point, track_object.media_duration,
-                track_object.priority)
-
-    def _restoreTrackObjectValues(self, values):
-        for track_object, (start, duration, in_point, media_dur, pri) in \
+    def _getTimelineObjectValues(self, timeline_object):
+        return (timeline_object.start, timeline_object.duration,
+                timeline_object.in_point, timeline_object.media_duration,
+                timeline_object.priority)
+
+    def _saveValues(self, timeline_objects):
+        return dict(((timeline_object,
+            self._getTimelineObjectValues(timeline_object))
+                for timeline_object in timeline_objects))
+
+    def _restoreValues(self, values):
+        for timeline_object, (start, duration, in_point, media_dur, pri) in \
             values.iteritems():
-            track_object.start = start
-            track_object.duration = duration
-            track_object.duration = duration
-            track_object.in_point = in_point
-            track_object.media_duration = media_dur
-            track_object.priority = pri
+            timeline_object.start = start
+            timeline_object.duration = duration
+            timeline_object.in_point = in_point
+            timeline_object.media_duration = media_dur
+            timeline_object.priority = pri
 
     def finish(self):
         """Clean up timeline for normal editing"""
@@ -1047,8 +1051,7 @@ class MoveContext(EditingContext):
             if timeline_object.priority < self.min_priority:
                 self.min_priority = timeline_object.min_priority
 
-            self.default_originals[track_object] = \
-                    self._getTrackObjectValues(track_object)
+        self.default_originals = self._saveValues(timeline_objects)
 
         # calculate offsets of clips relative to earliest time, min priority
         self.offsets = self._getOffsets(self.focus.start, self.focus.priority,
@@ -1057,21 +1060,36 @@ class MoveContext(EditingContext):
         self.focal_offset = (focus.start - self.earliest,
                 focus.priority - self.min_priority)
 
+        ripple = timeline.getObjsAfterObj(focus)
+
+        self.ripple_offsets = self._getOffsets(self.earliest,
+            self.min_priority, ripple)
+
+        self.ripple_originals = self._saveValues(ripple)
+
     def setMode(self, mode):
         if mode == self.ROLL:
             raise Exception("invalid mode ROLL")
         EditingContext.setMode(self, mode)
 
     def _finishDefault(self):
-        self._restoreTrackObjectValues(self.default_originals)
+        self._restoreValues(self.default_originals)
 
     def _defaultTo(self, position, priority):
-        position = max(position, self.focal_offset[0])
-        priority = max(priority, self.focal_offset[1])
+        position = max(0, position, self.focal_offset[0])
+        priority = max(0, priority, self.focal_offset[1])
         for obj, (s_offset, p_offset) in self.offsets.iteritems():
             obj.setStart(position + s_offset, snap=self._snap)
             obj.priority = priority + p_offset
 
+    def _finishRipple(self):
+        self._restoreValues(self.ripple_originals)
+
+    def _rippleTo(self, position, priority):
+        for obj, (s_offset, p_offset) in self.ripple_offsets.iteritems():
+            obj.setStart(position + s_offset, snap=self._snap)
+            obj.priority = priority + p_offset
+
     def _editFocus(self, position, priority):
         """Set the strart, priority of context objects relative to the focus
         object. 



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