[pitivi] Workaournd to make aspectcropratio working



commit 9644892dd874eab73e19843095e640e0b4ad3660
Author: Thibault Saunier <tsaunier gnome org>
Date:   Fri Sep 17 15:42:37 2010 +0200

    Workaournd to make aspectcropratio working

 pitivi/ui/dynamic.py              |   18 +++++++++++++++++
 pitivi/ui/effectsconfiguration.py |   38 +++++++++++++++++++++++-------------
 pitivi/ui/gstwidget.py            |    2 +-
 3 files changed, 43 insertions(+), 15 deletions(-)
---
diff --git a/pitivi/ui/dynamic.py b/pitivi/ui/dynamic.py
index e03ac12..10001af 100644
--- a/pitivi/ui/dynamic.py
+++ b/pitivi/ui/dynamic.py
@@ -134,6 +134,10 @@ class TextWidget(gtk.HBox, DynamicWidget):
             return self.last_valid
         return self.text.get_text()
 
+    def addChoices(self, choices):
+        for choice in choices:
+            self.combo.append_text(choice)
+
     def _textChanged(self, unused_widget):
         text = self.text.get_text()
         if self.matches:
@@ -258,6 +262,20 @@ class FractionWidget(TextWidget, DynamicWidget):
                 return True
         return False
 
+    def addPresets(self, presets):
+        choices = []
+        for preset in presets:
+            if type(preset) is str:
+                strval = preset
+                preset = self._parseText(preset)
+            else:
+                strval = "%g:%g" % (preset.num, preset.denom)
+            fpreset = float(preset)
+            if self.low <= fpreset and fpreset <= self.high:
+               choices.append(strval)
+
+        self.addChoices(choices)
+
     def setWidgetValue(self, value):
         if type(value) is str:
             value = self._parseText(value)
diff --git a/pitivi/ui/effectsconfiguration.py b/pitivi/ui/effectsconfiguration.py
index 052ef50..9c503dd 100644
--- a/pitivi/ui/effectsconfiguration.py
+++ b/pitivi/ui/effectsconfiguration.py
@@ -22,11 +22,12 @@
 # the Free Software Foundation; either version 3, or (at your option)
 # any later version.
 
+import gst
 import gtk
 import gobject
 
-from pitivi.pipeline import PipelineError
 from pitivi.ui.gstwidget import GstElementSettingsWidget
+from pitivi.ui.dynamic import FractionWidget
 
 PROPS_TO_IGNORE = ['name', 'qos', 'silent', 'message']
 
@@ -45,19 +46,17 @@ class EffectsPropertiesHandling:
         """
         if effect not in self.cache_dict:
             #Here we should handle special effects configuration UI
-            if 'aspectratiocrop' in effect.get_name():
-                effect_set_ui = AspectRatioUi()
-            else:
-                effect_set_ui = GstElementSettingsWidget()
-                effect_set_ui.setElement(effect, ignore=PROPS_TO_IGNORE,
-                                         default_btn=True, use_element_props=True)
-                nb_rows = effect_set_ui.get_children()[0].get_property('n-rows')
-                effect_configuration_ui = gtk.ScrolledWindow()
-                effect_configuration_ui.add_with_viewport(effect_set_ui)
-                effect_configuration_ui.set_policy(gtk.POLICY_AUTOMATIC,
-                                                   gtk.POLICY_AUTOMATIC)
-                self.cache_dict[effect] = effect_configuration_ui
-                self._connectAllWidgetCbs(effect_set_ui, effect)
+            effect_set_ui = GstElementSettingsWidget()
+            effect_set_ui.setElement(effect, ignore=PROPS_TO_IGNORE,
+                                     default_btn=True, use_element_props=True)
+            nb_rows = effect_set_ui.get_children()[0].get_property('n-rows')
+            effect_configuration_ui = gtk.ScrolledWindow()
+            effect_configuration_ui.add_with_viewport(effect_set_ui)
+            effect_configuration_ui.set_policy(gtk.POLICY_AUTOMATIC,
+                                               gtk.POLICY_AUTOMATIC)
+            self.cache_dict[effect] = effect_configuration_ui
+            self._connectAllWidgetCbs(effect_set_ui, effect)
+            self._postConfiguration(effect, effect_set_ui)
 
         effect_set_ui = self._getUiToSetEffect(effect)
 
@@ -75,6 +74,12 @@ class EffectsPropertiesHandling:
             self.cache_dict.pop(effect)
             return conf_ui
 
+    def _postConfiguration(self, effect, effect_set_ui):
+        if 'aspectratiocrop' in effect.get_name():
+            for widget in effect_set_ui.get_children()[0].get_children():
+                if isinstance(widget, FractionWidget):
+                    widget.addPresets(["4:3", "5:4", "9:3", "16:9", "16:10"])
+
     def _getUiToSetEffect(self, effect):
         """ Permit to get the widget to set the effect and not its container """
         if type(self.cache_dict[effect]) is gtk.ScrolledWindow:
@@ -93,6 +98,11 @@ class EffectsPropertiesHandling:
 
     def _onValueChangedCb(self, widget, dynamic, prop):
         value = dynamic.getWidgetValue()
+
+        #FIXME Workaround in order to make aspectratiocrop working
+        if isinstance(value, gst.Fraction):
+            value = gst.Fraction(int(value.num),int(value.denom))
+
         if value != self._current_element_values.get(prop.name):
             self.action_log.begin("Effect property change")
             self._current_effect_setting_ui.element.set_property(prop.name, value)
diff --git a/pitivi/ui/gstwidget.py b/pitivi/ui/gstwidget.py
index 1aa6880..9802fc0 100644
--- a/pitivi/ui/gstwidget.py
+++ b/pitivi/ui/gstwidget.py
@@ -60,7 +60,7 @@ def make_property_widget(unused_element, prop, value=None):
             choices.append([val.value_name, int(val)])
         widget = dynamic.ChoiceWidget(choices, default=prop.default_value)
     elif type_name == 'GstFraction':
-        widget = dynamic.FractionWidget(None, None, default = prop.default_value)
+        widget = dynamic.FractionWidget(None, presets=["0:1"], default=prop.default_value)
     else:
         widget = dynamic.DefaultWidget(type_name)
 



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