[pitivi] Have a generci UI to configure effects and get configuration acts in live



commit 9776ce064b110f4fff5060950714a6d7e321c983
Author: Thibault Saunier <tsaunier gnome org>
Date:   Mon Jul 12 22:20:33 2010 -0400

    Have a  generci UI to configure effects and get configuration acts in live

 pitivi/ui/clipproperties.py       |   14 ++++--
 pitivi/ui/effectsconfiguration.py |   91 +++++++++++++++++++-----------------
 2 files changed, 57 insertions(+), 48 deletions(-)
---
diff --git a/pitivi/ui/clipproperties.py b/pitivi/ui/clipproperties.py
index ad37d7a..f4b2a74 100644
--- a/pitivi/ui/clipproperties.py
+++ b/pitivi/ui/clipproperties.py
@@ -36,7 +36,7 @@ from pitivi.receiver import receiver, handler
 from pitivi.timeline.track import TrackEffect
 from pitivi.stream import VideoStream
 
-from pitivi.ui.effectsconfiguration import EffectUIFactory
+from pitivi.ui.effectsconfiguration import EffectsPropertiesHandling
 from pitivi.ui.common import PADDING, SPACING
 
 (COL_ACTIVATED,
@@ -58,7 +58,9 @@ class ClipProperties(gtk.VBox, Loggable):
         self.settings = instance.settings
         self.project = None
 
-        self.effect_expander = EffectProperties(instance)
+        self.effect_properties_handling = EffectsPropertiesHandling()
+        self.effect_expander = EffectProperties(instance,
+                                                self.effect_properties_handling)
         self.pack_start(self.effect_expander, expand=True, fill=True)
 
         self.effect_expander.show()
@@ -66,6 +68,7 @@ class ClipProperties(gtk.VBox, Loggable):
     def _setProject(self):
         if self.project:
             self.effect_expander.connectTimelineSelection(self.project.timeline)
+            self.effect_properties_handling.pipeline = self.project.pipeline
 
     project = receiver(_setProject)
 
@@ -74,7 +77,7 @@ class EffectProperties(gtk.Expander):
     Widget for viewing and configuring effects
     """
 
-    def __init__(self, instance):
+    def __init__(self, instance, effect_properties_handling):
         gtk.Expander.__init__(self, "Effects")
         self.set_expanded(True)
 
@@ -82,8 +85,9 @@ class EffectProperties(gtk.Expander):
         self.timeline_object = None
         self.app = instance
         self.effectsHandler = self.app.effects
-        self._effectUIFactory = EffectUIFactory()
         self._effect_config_ui = None
+        self.pipeline = None
+        self.effect_properties_handling = effect_properties_handling
 
         self.VContent = gtk.VBox()
         self.add(self.VContent)
@@ -323,7 +327,7 @@ class EffectProperties(gtk.Expander):
             if self._effect_config_ui:
                 self._effect_config_ui.hide()
 
-            config_ui = self._effectUIFactory.getEffectConfigurationUI(element)
+            config_ui = self.effect_properties_handling.getEffectConfigurationUI(element)
             self._effect_config_ui =  config_ui
             if self._effect_config_ui:
                 self.VContent.pack_start(self._effect_config_ui,
diff --git a/pitivi/ui/effectsconfiguration.py b/pitivi/ui/effectsconfiguration.py
index 8fef395..5fb6151 100644
--- a/pitivi/ui/effectsconfiguration.py
+++ b/pitivi/ui/effectsconfiguration.py
@@ -24,59 +24,64 @@
 
 import gtk
 
-from gettext import gettext as _
+from pitivi.ui.gstwidget import GstElementSettingsWidget
+from pitivi.pipeline import PipelineError
 
-from pitivi.ui.common import SPACING
+PROPERTIES_TO_IGNORE = ['name', 'qos']
 
-class EffectUIFactory(object):
+class EffectsPropertiesHandling:
     def __init__(self):
         self.cache_dict = {}
+        self.pipeline = None
 
     def getEffectConfigurationUI(self, effect):
-        if "videobalance" in effect.get_name():
-            if effect not in self.cache_dict:
-                video_balance_ui =  VideoBalanceConfig(effect)
-                self.cache_dict[effect] = video_balance_ui
-                return video_balance_ui
-            else:
-                return self.cache_dict[effect]
+        """
+            Permit to get a configuration GUI for the effect
+            @param effect: The effect for which whe want the configuration UI
+            @type effect: C{gst.Element}
+        """
+        if effect in self.cache_dict:
+            return self.cache_dict[effect]
+        #elif "videobalance" in effect.get_name():
+            #Here we should handle special effects
         else:
-            return None
+            effect_configuration_ui =  GstElementSettingsWidget()
+            effect_configuration_ui.setElement(effect, ignore=PROPERTIES_TO_IGNORE)
+            self._connectAllWidgetCbs(effect_configuration_ui, effect)
+            self.cache_dict[effect] = effect_configuration_ui
+        return effect_configuration_ui
 
+    def _flushSeekVideo(self):
+        self.pipeline.pause()
+        if self.pipeline is not None:
+            try:
+                self.pipeline.seekRelative(0)
+            except PipelineError:
+                pass
 
-class VideoBalanceConfig(gtk.HBox):
-    def __init__(self, effect):
-        gtk.HBox.__init__(self, spacing=SPACING)
+    def _connectAllWidgetCbs(self, video_balance_ui, effect):
+        for prop, widget in video_balance_ui.properties.iteritems():
+            if type(widget) in [gtk.SpinButton]:
+                widget.connect("value-changed", self._onValueChangedCb, prop.name, effect)
+            elif type(widget) in [gtk.Entry]:
+                widget.connect("changed", self._onEntryChangedCb, prop.name, effect)
+            elif type(widget) in [gtk.ComboBox]:
+                widget.connect("changed", self._onComboboxChangedCb, prop.name, effect)
+            elif type(widget) in [gtk.CheckButton]:
+                widget.connect("clicked", self._onCheckButtonClickedCb, prop.name, effect)
 
-        self.balance = effect
-        brightness = effect.get_property("brightness")
-        contrast = effect.get_property("contrast")
-        hue = effect.get_property("hue")
-        saturation = effect.get_property("saturation")
+    def _onValueChangedCb(self, widget, prop, element):
+        element.set_property(prop, widget.get_value())
+        self._flushSeekVideo()
 
-        properties = [(_("contrast"), 0, 2, brightness),
-                      (_("brightness"), -1, 1, contrast),
-                      (_("hue"), -1, 1, hue),
-                      (_("saturation"), 0, 2, saturation)]
+    def _onComboboxChangedCb(self, widget, prop, element):
+        element.set_property(prop, widget.get_active_text())
+        self._flushSeekVideo()
 
+    def _onCheckButtonClickedCb(self, widget, prop, element):
+        element.set_property(prop, widget.get_active())
+        self._flushSeekVideo()
 
-        controls = gtk.VBox()
-        labels = gtk.VBox()
-
-        for prop, lower, upper, default in properties:
-            widget = gtk.HScale()
-            label = gtk.Label("\n  "+ prop + " :")
-            widget.set_update_policy(gtk.UPDATE_CONTINUOUS)
-            widget.set_value(default)
-            widget.set_draw_value(True)
-            widget.set_range(lower, upper)
-            widget.connect("value-changed", self.onValueChangedCb, prop)
-
-            controls.pack_start(widget, True, True)
-            labels.pack_start(label, True, True)
-
-        self.pack_start(labels, expand=False, fill=True)
-        self.pack_end(controls, expand=True, fill=True)
-
-    def onValueChangedCb(self, widget, prop):
-        self.balance.set_property(prop, widget.get_value())
+    def _onEntryChangedCb(self, widget, prop, element):
+        element.set_property(prop, widget.get_text())
+        self._flushSeekVideo()



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