[pitivi] elements: Allow undo keyframe operations



commit b5fdcfb295f8110608eb2261d775e09d7b623407
Author: Fabian Orccon <fabian orccon pucp pe>
Date:   Mon Apr 18 20:15:07 2016 +0000

    elements: Allow undo keyframe operations
    
    Differential Revision: https://phabricator.freedesktop.org/D917

 pitivi/timeline/elements.py |   18 ++++++++++++++++--
 1 files changed, 16 insertions(+), 2 deletions(-)
---
diff --git a/pitivi/timeline/elements.py b/pitivi/timeline/elements.py
index b7f0c3e..58b7d9f 100644
--- a/pitivi/timeline/elements.py
+++ b/pitivi/timeline/elements.py
@@ -88,6 +88,7 @@ class KeyframeCurve(FigureCanvas, Loggable):
         Loggable.__init__(self)
 
         self.__timeline = timeline
+        self.__action_log = timeline.app.action_log
         self.__source = binding.props.control_source
         self.__source.connect("value-added", self.__controlSourceChangedCb)
         self.__source.connect("value-removed", self.__controlSourceChangedCb)
@@ -209,7 +210,9 @@ class KeyframeCurve(FigureCanvas, Loggable):
         if line_contains and not keyframe_existed:
             res, value = self.__source.control_source_get_value(event.xdata)
             assert res
-            self.__source.set(event.xdata, value)
+            self.debug("Create keyframe at (%lf, %lf)", event.xdata, value)
+            with self.__action_log.started("Keyframe added"):
+                self.__source.set(event.xdata, value)
 
     # Callbacks
     def __controlSourceChangedCb(self, unused_control_source, unused_timed_value):
@@ -250,9 +253,11 @@ class KeyframeCurve(FigureCanvas, Loggable):
                 # A keyframe has been double-clicked, remove it.
                 self.debug("Removing keyframe at timestamp %lf", offset)
                 self.__keyframe_removed = True
-                self.__source.unset(offset)
+                with self.__action_log.started("Remove keyframe"):
+                    self.__source.unset(offset)
             else:
                 # Remember the clicked frame for drag&drop.
+                self.__action_log.begin("Move keyframe")
                 self.__offset = offset
                 self.handling_motion = True
             return
@@ -260,6 +265,8 @@ class KeyframeCurve(FigureCanvas, Loggable):
         result = self.__line.contains(event)
         if result[0]:
             # The line has been clicked.
+            self.debug("The keyframe curve has been clicked")
+            self.__action_log.begin("Move keyframe curve segment")
             x = event.xdata
             offsets = self.__keyframes.get_offsets()
             keyframes = offsets[:,0]
@@ -318,6 +325,13 @@ class KeyframeCurve(FigureCanvas, Loggable):
         if event.button != 1:
             return
 
+        if self.__offset is not None:
+            self.debug("Keyframe released")
+            self.__action_log.commit("Move keyframe")
+        elif self.__clicked_line is not None:
+            self.debug("Line released")
+            self.__action_log.commit("Move keyframe curve segment")
+
         self.handling_motion = False
         self.__offset = None
         self.__clicked_line = None


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