[pitivi] Have a generci UI to configure effects and get configuration acts in live
- From: Edward Hervey <edwardrv src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pitivi] Have a generci UI to configure effects and get configuration acts in live
- Date: Wed, 22 Sep 2010 13:39:29 +0000 (UTC)
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]