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