wingo - in flumotion-template/trunk: . flumotion/component/sample flumotion/test

flumotion-commit at lists.fluendo.com flumotion-commit at lists.fluendo.com
Wed Jun 13 17:39:00 CEST 2007


Author: wingo
Date: Wed Jun 13 17:38:58 2007
New Revision: 5171

Modified:
   flumotion-template/trunk/ChangeLog
   flumotion-template/trunk/flumotion/component/sample/admin_gtk.py
   flumotion-template/trunk/flumotion/component/sample/sample.py
   flumotion-template/trunk/flumotion/test/test_sample_admin_gtk.py
Log:
2007-06-13  Andy Wingo  <wingo at pobox.com>

	* flumotion/component/sample/sample.py: 
	* flumotion/component/sample/admin_gtk.py (FlipAdminGtkNode):
	Update to use UI states instead of adminCallRemote. Fixes #511.

	* flumotion/test/test_sample_admin_gtk.py: Fix up test to use
	uiState things instead of propertyChange notifications.



Modified: flumotion-template/trunk/ChangeLog
==============================================================================
--- flumotion-template/trunk/ChangeLog	(original)
+++ flumotion-template/trunk/ChangeLog	Wed Jun 13 17:38:58 2007
@@ -1,3 +1,12 @@
+2007-06-13  Andy Wingo  <wingo at pobox.com>
+
+	* flumotion/component/sample/sample.py: 
+	* flumotion/component/sample/admin_gtk.py (FlipAdminGtkNode):
+	Update to use UI states instead of adminCallRemote. Fixes #511.
+
+	* flumotion/test/test_sample_admin_gtk.py: Fix up test to use
+	uiState things instead of propertyChange notifications.
+
 2007-05-16  Thomas Vander Stichele  <thomas at apestaart dot org>
 
 	* conf/template.xml:

Modified: flumotion-template/trunk/flumotion/component/sample/admin_gtk.py
==============================================================================
--- flumotion-template/trunk/flumotion/component/sample/admin_gtk.py	(original)
+++ flumotion-template/trunk/flumotion/component/sample/admin_gtk.py	Wed Jun 13 17:38:58 2007
@@ -33,42 +33,21 @@
         'sample.glade')
     gettext_domain = "flumotion-template"
 
-    def __init__(self, *args, **kwargs):
-        BaseAdminGtkNode.__init__(self, *args, **kwargs)
-        self._cbh = None
-        self._cbv = None
-
-    def error_dialog(self, message):
-        # FIXME: dialogize
-        print 'ERROR:', message
-        
+    _cbh = None
+    _cbv = None
+    _cbh_toggled_id = None
+    _cbv_toggled_id = None
+    uiStateHandlers = None
+
     def haveWidgetTree(self):
-        self.widget = self.getWidget('sample-widget')
         self._cbh = self.getWidget('checkbutton_horizontal')
         self._cbv = self.getWidget('checkbutton_vertical')
 
-        d = self.callRemote("getElementProperty", "videoflip", "method")
-        d.addCallback(self._getMethodCallback)
-        d.addErrback(self._getMethodErrback)
-        return d
-
-    def _getMethodCallback(self, result):
-        self.debug('got videoflip pattern %d' % result)
-        self._setToggles(result)
         self._cbh_toggled_id = self._cbh.connect('toggled', self._cb_toggled)
         self._cbv_toggled_id = self._cbv.connect('toggled', self._cb_toggled)
 
-        return self.widget
-
-    # set the two toggles based on the method value
-    def _setToggles(self, method):
-        hor, ver = getBooleans(method)
-        self._cbh.set_active(hor)
-        self._cbv.set_active(ver)
-    
-    def _getMethodErrback(self, failure):
-        self.warning(failure.getErrorMessage())
-        self.error_dialog(failure.getErrorMessage())
+        # necessary to set self.widget
+        self.widget = self.getWidget('sample-widget')
 
     def _cb_toggled(self, _):
         hor = self._cbh.get_active()
@@ -78,15 +57,30 @@
         self.debug("toggled to value %d" % method)
         self.callRemote("setElementProperty", "videoflip", "method", method)
 
-    def propertyChanged(self, name, value):
-        self.debug("property %s changed to %r" % (name, value))
-        if name == "method":
-            self.debug("method changed to %r" % value)
-            self._cbh.handler_block(self._cbh_toggled_id)
-            self._cbv.handler_block(self._cbv_toggled_id)
-            self._setToggles(value)
-            self._cbh.handler_unblock(self._cbh_toggled_id)
-            self._cbv.handler_unblock(self._cbv_toggled_id)
+    def stateSet(self, state, key, value):
+        handler = self.uiStateHandlers.get(key, None)
+        if handler:
+            handler(value)
+
+    def setUIState(self, state):
+        BaseAdminGtkNode.setUIState(self, state)
+        if not self.uiStateHandlers:
+            self.uiStateHandlers = {'method': self.methodSet}
+        for k, handler in self.uiStateHandlers.items():
+            handler(state.get(k))
+
+    def methodSet(self, value):
+        self.debug("method changed to %r" % value)
+
+        self._cbh.handler_block(self._cbh_toggled_id)
+        self._cbv.handler_block(self._cbv_toggled_id)
+
+        hor, ver = getBooleans(value)
+        self._cbh.set_active(hor)
+        self._cbv.set_active(ver)
+
+        self._cbh.handler_unblock(self._cbh_toggled_id)
+        self._cbv.handler_unblock(self._cbv_toggled_id)
 
 class SampleAdminGtk(BaseAdminGtk):
     gettext_domain = 'flumotion-template'
@@ -100,8 +94,4 @@
         flip = FlipAdminGtkNode(self.state, self.admin, title=_('Flipping'))
         self.nodes['Flipping'] = flip
 
-    def component_propertyChanged(self, name, value):
-        # FIXME: tie to correct node better
-        self.nodes['Flipping'].propertyChanged(name, value)
-
 GUIClass = SampleAdminGtk

Modified: flumotion-template/trunk/flumotion/component/sample/sample.py
==============================================================================
--- flumotion-template/trunk/flumotion/component/sample/sample.py	(original)
+++ flumotion-template/trunk/flumotion/component/sample/sample.py	Wed Jun 13 17:38:58 2007
@@ -18,42 +18,28 @@
 
 # Headers in this file shall remain intact.
 
-from twisted.internet import defer
-
-from flumotion.common import log
-
 from flumotion.component import feedcomponent
 
 from flumotion.component.sample.common import getMethod
 
-class SampleMedium(feedcomponent.FeedComponentMedium):
-    __pychecker__ = "no-argsused" # we want to explicitly name unused args
-    
-    def __init__(self, comp):
-        feedcomponent.FeedComponentMedium.__init__(self, comp)
-
-    def setup(self, config):
-        # connect to method notify
-        videoflip = self.comp.get_element('videoflip')
-        videoflip.connect('notify::method', self._cb_method_notify)
-        return defer.succeed(None)
-
-    def _cb_method_notify(self, object, pspec):
-        method = object.get_property('method')
-        self.debug('method changed to %d, notifying admins' % method)
-        self.callRemote('adminCallRemote', 'propertyChanged', 'method',
-            int(method))
 
 # this is a sample converter component for video that will use videoflip
 # FIXME: check for videoflip plugin on worker
 class Sample(feedcomponent.ParseLaunchComponent):
+    def init(self):
+        self.uiState.addKey('pattern', 0)
 
-    component_medium_class = SampleMedium
-    
     def get_pipeline_string(self, properties):
+        return "ffmpegcolorspace ! videoflip name=videoflip ! ffmpegcolorspace"
+
+    def configure_pipeline(self, pipeline, properties):
+        def notify_method(obj, pspec):
+            self.uiState.set('method', int(obj.get_property('method')))
+
         hor = properties.get('horizontal', False)
         ver = properties.get('vertical', False)
         method = getMethod(hor, ver)
         
-        return ("ffmpegcolorspace ! videoflip name=videoflip method=%r ! "
-                "ffmpegcolorspace " % method)
+        source = self.get_element('videoflip')
+        source.connect('notify::method', notify_method)
+        source.set_property('method', method)

Modified: flumotion-template/trunk/flumotion/test/test_sample_admin_gtk.py
==============================================================================
--- flumotion-template/trunk/flumotion/test/test_sample_admin_gtk.py	(original)
+++ flumotion-template/trunk/flumotion/test/test_sample_admin_gtk.py	Wed Jun 13 17:38:58 2007
@@ -24,6 +24,7 @@
 from flumotion.test import gtkunit
 
 from twisted.internet import defer
+from twisted.spread import jelly
 
 _thisdir = os.path.dirname(os.path.abspath(__file__))
 
@@ -49,8 +50,9 @@
     logCategory = 'testadminmodel'
     
     def __init__(self):
-        self._uiState = componentui.AdminComponentUIState()
-        self._videoflip_method = 5
+        self._uiState = componentui.ManagerComponentUIState()
+        self._uiState.addKey('method')
+        self._uiState.set('method', 5)
         self.bundleLoader = TestBundleLoader()
 
     def componentCallRemote(self, componentName, methodName, *args, **kwargs):
@@ -62,17 +64,13 @@
         raise NotImplementedError, "local_" + methodName
 
     def local_getUIState(self):
+        self.astate = jelly.unjelly(jelly.jelly(self._uiState))
         return defer.succeed(self._uiState)
 
-    def local_getElementProperty(self, elementName, propertyName):
-        self.debug("getting %s.%s" % (elementName, propertyName))
-        return defer.succeed(getattr(self,
-            '_%s_%s' % (elementName, propertyName)))
-
     def local_setElementProperty(self, elementName, propertyName, value):
         self.debug("setting %s.%s to %r" % (elementName, propertyName,
             value))
-        setattr(self, '_%s_%s' % (elementName, propertyName), value)
+        self._uiState.set(propertyName, value)
 
 class SampleFlipNodeTest(gtkunit.GtkTestCase):
     def setUp(self):
@@ -81,27 +79,28 @@
         self.admin = TestAdminModel()
         self.node = admin_gtk.FlipAdminGtkNode(state, self.admin)
         d = self.node.render()
-        d.addCallback(lambda widget: self.set_widget(widget))
+        d.addCallback(lambda _: self.set_widget(self.node.widget))
+        d.addCallback(lambda _: self.admin.componentCallRemote(False, 'getUIState'))
+        d.addCallback(self.node.gotUIState)
         return d
         
+    def assertMethod(self, value):
+        self.assertEquals(self.admin._uiState.get('method'), value)
+
     def testToggle(self):
-        self.assertEquals(self.admin._videoflip_method, 5)
+        self.assertMethod(5)
 
         self.toggle('checkbutton_vertical')
-        self.assertEquals(self.admin._videoflip_method, 0)
+        self.assertMethod(0)
 
         self.toggle('checkbutton_horizontal')
-        self.assertEquals(self.admin._videoflip_method, 4)
+        self.assertMethod(4)
 
         self.toggle('checkbutton_vertical')
-        self.assertEquals(self.admin._videoflip_method, 2)
+        self.assertMethod(2)
 
         self.toggle('checkbutton_horizontal')
-        self.assertEquals(self.admin._videoflip_method, 5)
-
-    def testPropertyChanged(self):
-        self.node.propertyChanged('method', 5)
-        self.assertEquals(self.admin._videoflip_method, 5)
+        self.assertMethod(5)
 
 class SampleAdminTest(gtkunit.GtkTestCase):
     def setUp(self):


More information about the flumotion-commit mailing list