[pitivi] undo: Reimplement undo redo for effect properties.
- From: Mathieu Duponchelle <mathieudu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pitivi] undo: Reimplement undo redo for effect properties.
- Date: Wed, 2 Apr 2014 21:15:23 +0000 (UTC)
commit 6e6b4aa8b1890652b2b6cbb2feba75dcc509d28b
Author: Mathieu Duponchelle <mathieu duponchelle opencreed com>
Date: Wed Apr 2 23:03:51 2014 +0200
undo: Reimplement undo redo for effect properties.
pitivi/effects.py | 1 -
pitivi/undo/effect.py | 48 ++++++++++++++--------------------------------
pitivi/undo/timeline.py | 2 +-
pitivi/utils/widgets.py | 9 +++----
4 files changed, 20 insertions(+), 40 deletions(-)
---
diff --git a/pitivi/effects.py b/pitivi/effects.py
index ebc49b4..8614800 100644
--- a/pitivi/effects.py
+++ b/pitivi/effects.py
@@ -43,7 +43,6 @@ from gi.repository import Gst
from gi.repository import Gtk
from gi.repository import Gdk
from gi.repository import Pango
-from gi.repository import GObject
from gi.repository import GdkPixbuf
from gettext import gettext as _
diff --git a/pitivi/undo/effect.py b/pitivi/undo/effect.py
index 3e8322e..9b2a836 100644
--- a/pitivi/undo/effect.py
+++ b/pitivi/undo/effect.py
@@ -21,7 +21,7 @@
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
-from gi.repository import GObject, GES
+from gi.repository import GObject
from pitivi.undo.undo import UndoableAction
from pitivi.effects import PROPS_TO_IGNORE
@@ -54,42 +54,24 @@ class EffectGstElementPropertyChangeTracker:
self.action_log = action_log
self.pipeline = None
- def addEffectElement(self, gst_element):
+ def addEffectElement(self, effect):
+ if effect in self._tracked_effects:
+ return
+
properties = {}
- if gst_element in self._tracked_effects:
- return
+ effect.connect('deep-notify', self._propertyChangedCb)
+
+ for prop in effect.list_children_properties():
+ properties[prop.name] = effect.get_child_property(prop.name)[1]
+
+ self._tracked_effects[effect] = properties
- for prop in GObject.list_properties(gst_element):
- gst_element.connect('notify::' + prop.name,
- self._propertyChangedCb,
- gst_element)
- if prop.flags & GObject.PARAM_READABLE:
- properties[prop.name] = gst_element.get_property(prop.name)
- self._tracked_effects[gst_element] = properties
-
- def getPropChangedFromTrackObj(self, effect):
- prop_changed = []
-
- for undo_stack in self.action_log.undo_stacks:
- for done_prop_change in undo_stack.done_actions:
- if isinstance(done_prop_change, EffectPropertyChanged):
- if done_prop_change.gst_element is effect.getElement():
- prop_changed.append(done_prop_change)
-
- for redo_stack in self.action_log.redo_stacks:
- for done_prop_change in redo_stack.done_actions:
- if isinstance(done_prop_change, EffectPropertyChanged):
- if done_prop_change.gst_element is effect.getElement():
- prop_changed.append(done_prop_change)
-
- return prop_changed
-
- def _propertyChangedCb(self, gst_element, pspec, unused):
- old_value = self._tracked_effects[gst_element][pspec.name]
- new_value = gst_element.get_property(pspec.name)
+ def _propertyChangedCb(self, effect, gst_element, pspec):
+ old_value = self._tracked_effects[effect][pspec.name]
+ new_value = effect.get_child_property(pspec.name)[1]
action = EffectPropertyChanged(gst_element, pspec.name, old_value, new_value)
- self._tracked_effects[gst_element][pspec.name] = new_value
+ self._tracked_effects[effect][pspec.name] = new_value
self.action_log.push(action)
diff --git a/pitivi/undo/timeline.py b/pitivi/undo/timeline.py
index 3149f6e..5651417 100644
--- a/pitivi/undo/timeline.py
+++ b/pitivi/undo/timeline.py
@@ -287,7 +287,7 @@ class TimelineLogObserver(object):
#for prop, interpolator in track_element.getInterpolators().itervalues():
#self._connectToInterpolator(interpolator)
if isinstance(track_element, GES.BaseEffect):
- self.effect_properties_tracker.addEffectElement(track_element.getElement())
+ self.effect_properties_tracker.addEffectElement(track_element)
def _disconnectFromTrackElement(self, track_element):
pass
diff --git a/pitivi/utils/widgets.py b/pitivi/utils/widgets.py
index 4fdea9b..e499fe5 100644
--- a/pitivi/utils/widgets.py
+++ b/pitivi/utils/widgets.py
@@ -695,7 +695,6 @@ class GstElementSettingsWidget(Gtk.VBox, Loggable):
# The "reset to default" button associated with this property
if default_btn:
widget.propName = prop.name.split("-")[0]
- name = prop.name
if self.isControllable:
# If this element is controlled, the value means nothing anymore.
@@ -707,15 +706,15 @@ class GstElementSettingsWidget(Gtk.VBox, Loggable):
table.attach(button, 2, 3, y, y + 1, xoptions=Gtk.AttachOptions.FILL,
yoptions=Gtk.AttachOptions.FILL)
self.buttons[button] = widget
- self.element.connect('notify::' + prop.name, self._propertyChangedCb, widget)
-
y += 1
+ self.element.connect('deep-notify', self._propertyChangedCb)
self.pack_start(table, expand=True, fill=True, padding=0)
self.show_all()
- def _propertyChangedCb(self, unused_element, pspec, widget):
- widget.setWidgetValue(self.element.get_property(pspec.name))
+ def _propertyChangedCb(self, effect, gst_element, pspec):
+ widget = self.properties[pspec]
+ widget.setWidgetValue(self.element.get_child_property(pspec.name)[1])
def _getKeyframeToggleButton(self, prop):
button = Gtk.ToggleButton()
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]