Example #1
0
    def testAddInEventListener(self):
        tf = TextField()

        class Outer(IValueChangeListener):
            def __init__(self, test, tf):
                self._test = test
                self._tf = tf

            def valueChange(self, event):
                class Inner(IValueChangeListener):
                    def __init__(self, test):
                        self._test = test

                    def valueChange(self, event):
                        self._test._innerListenerCalls += 1
                        print 'The inner listener was called'

                self._tf.addListener(Inner(self._test), IValueChangeListener)

        tf.addListener(Outer(self, tf), IValueChangeListener)
        tf.setValue('abc')  # No inner listener calls, adds one inner
        tf.setValue('def')  # One inner listener call, adds one inner
        tf.setValue('ghi')  # Two inner listener calls, adds one inner

        self.assertEqual(self._innerListenerCalls, 3)
Example #2
0
    def testAddInEventListener(self):
        tf = TextField()

        class Outer(IValueChangeListener):

            def __init__(self, test, tf):
                self._test = test
                self._tf = tf

            def valueChange(self, event):

                class Inner(IValueChangeListener):

                    def __init__(self, test):
                        self._test = test

                    def valueChange(self, event):
                        self._test._innerListenerCalls += 1
                        print 'The inner listener was called'

                self._tf.addListener(Inner(self._test), IValueChangeListener)

        tf.addListener(Outer(self, tf), IValueChangeListener)
        tf.setValue('abc')  # No inner listener calls, adds one inner
        tf.setValue('def')  # One inner listener call, adds one inner
        tf.setValue('ghi')  # Two inner listener calls, adds one inner

        self.assertEqual(self._innerListenerCalls, 3)
    def __init__(self, color):
        """Instantiates a new color picker preview."""
        super(ColorPickerPreview, self).__init__()

        self.setStyleName('v-colorpicker-preview')
        self.setImmediate(True)

        self._color = color

        self._field = TextField()
        self._field.setReadOnly(True)
        self._field.setImmediate(True)
        self._field.setSizeFull()
        self._field.setStyleName('v-colorpicker-preview-textfield')
        self._field.setData(self)
        self._field.addListener(self, IValueChangeListener)
        self._field.addValidator(RegexpValidator('#[0-9a-fA-F]{6}', True, ''))
        self._oldValue = None
        self.addComponent(self._field)

        self.setColor(color)
    def __init__(self, color):
        """Instantiates a new color picker preview."""
        super(ColorPickerPreview, self).__init__()

        self.setStyleName('v-colorpicker-preview')
        self.setImmediate(True)

        self._color = color

        self._field = TextField()
        self._field.setReadOnly(True)
        self._field.setImmediate(True)
        self._field.setSizeFull()
        self._field.setStyleName('v-colorpicker-preview-textfield')
        self._field.setData(self)
        self._field.addListener(self, IValueChangeListener)
        self._field.addValidator(RegexpValidator('#[0-9a-fA-F]{6}', True, ''))
        self._oldValue = None
        self.addComponent(self._field)

        self.setColor(color)
Example #5
0
    def createFieldByPropertyType(cls, typ):
        """Creates fields based on the property type.

        The default field type is L{TextField}. Other field types
        generated by this method:

          - B{Boolean}: L{CheckBox}.
          - B{Date}: L{DateField}(resolution: day).
          - B{IItem}: L{Form}.
          - B{default field type}: L{TextField}.

        @param typ:
                   the type of the property
        @return: the most suitable generic L{Field} for given type
        """
        from muntjac.ui.date_field import DateField  # FIXME: circular import
        from muntjac.ui.text_field import TextField
        from muntjac.ui.check_box import CheckBox
        from muntjac.ui.form import Form

        # Null typed properties can not be edited
        if typ is None:
            return None

        # IItem field
        if issubclass(typ, IItem):
            return Form()

        # Date field
        if issubclass(typ, datetime):
            df = DateField()
            df.setResolution(DateField.RESOLUTION_DAY)
            return df

        # Boolean field
        if issubclass(typ, bool):
            return CheckBox()

        return TextField()
 def setUp(self):
     super(TestTextFieldValueChange, self).setUp(TextField())
 def testIntegerValidation(self):
     field = TextField()
     field.addValidator(IntegerValidator('Enter a Valid Number'))
     field.setValue(int(10))
     field.validate()
class ColorPickerPreview(CssLayout, IColorSelector, IValueChangeListener):
    """The Class ColorPickerPreview.

    @author: John Ahlroos / ITMill Oy 2010
    @author: Richard Lincoln
    """

    _STYLE_DARK_COLOR = 'v-textfield-dark'
    _STYLE_LIGHT_COLOR = 'v-textfield-light'

    def __init__(self, color):
        """Instantiates a new color picker preview."""
        super(ColorPickerPreview, self).__init__()

        self.setStyleName('v-colorpicker-preview')
        self.setImmediate(True)

        self._color = color

        self._field = TextField()
        self._field.setReadOnly(True)
        self._field.setImmediate(True)
        self._field.setSizeFull()
        self._field.setStyleName('v-colorpicker-preview-textfield')
        self._field.setData(self)
        self._field.addListener(self, IValueChangeListener)
        self._field.addValidator(RegexpValidator('#[0-9a-fA-F]{6}', True, ''))
        self._oldValue = None
        self.addComponent(self._field)

        self.setColor(color)


    def setColor(self, color):
        self._color = color

        red = '%.2x' % color.getRed()
#        red = '0' + red if len(red) < 2 else red

        green = '%.2x' % color.getGreen()
#        green = '0' + green if len(green) < 2 else green

        blue = '%.2x' % color.getBlue()
#        blue = '0' + blue if len(blue) < 2 else blue

        # Unregister listener
        self._field.removeListener(self, IValueChangeListener)
        self._field.setReadOnly(False)

        self._field.setValue('#' + red + green + blue)

        if self._field.isValid():
            self._oldValue = '#' + red + green + blue
        else:
            self._field.setValue(self._oldValue)

        # Re-register listener
        self._field.setReadOnly(True)
        self._field.addListener(self, IValueChangeListener)

        # Set the text color
        self._field.removeStyleName(self._STYLE_DARK_COLOR)
        self._field.removeStyleName(self._STYLE_LIGHT_COLOR)
        if (self._color.getRed() + self._color.getGreen()
                + self._color.getBlue() < 3 * 128):
            self._field.addStyleName(self._STYLE_DARK_COLOR)
        else:
            self._field.addStyleName(self._STYLE_LIGHT_COLOR)

        self.requestRepaint()


    def getColor(self):
        return self._color


    def addListener(self, listener, iface=None):
        """Adds a color change listener

        @param listener:
                   The color change listener
        """
        if (isinstance(listener, IColorChangeListener) and
                (iface is None or issubclass(iface, IColorChangeListener))):
            self.registerListener(ColorChangeEvent, listener,
                    _COLOR_CHANGE_METHOD)

        super(ColorPickerPreview, self).addListener(listener, iface)


    def addCallback(self, callback, eventType=None, *args):
        if eventType is None:
            eventType = callback._eventType  # set by decorator

        if issubclass(eventType, ColorChangeEvent):
            self.registerCallback(ColorChangeEvent, callback, None, *args)
        else:
            super(ColorPickerPreview, self).addCallback(callback, eventType,
                    *args)


    def removeListener(self, listener, iface=None):
        """Removes a color change listener

        @param listener:
                   The listener
        """
        if (isinstance(listener, IColorChangeListener) and
                (iface is None or issubclass(iface, IColorChangeListener))):
            self.withdrawListener(ColorChangeEvent, listener)

        super(ColorPickerPreview, self).removeListener(listener, iface)


    def removeCallback(self, callback, eventType=None):
        if eventType is None:
            eventType = callback._eventType

        if issubclass(eventType, ColorChangeEvent):
            self.withdrawCallback(ColorChangeEvent, callback)

        else:
            super(ColorPickerPreview, self).removeCallback(callback, eventType)


    def valueChange(self, event):
        value = event.getProperty().getValue()

        if not self._field.isValid():
            self._field.setValue(self._oldValue)
            return
        else:
            self._oldValue = value

        if value is not None and len(value) == 7:
            red = int(value[1:3], 16)
            green = int(value[3:5], 16)
            blue = int(value[5:7], 16)
            self._color = Color(red, green, blue)

            evt = ColorChangeEvent(self._field.getData(), self._color)
            self.fireEvent(evt)


    def getCss(self, c):
        """Called when the component is refreshing"""
        red = '%.2x' % self._color.getRed()
#        red = '0' + red if len(red) < 2 else red

        green = '%.2x' % self._color.getGreen()
#        green = '0' + green if len(green) < 2 else green

        blue = '%.2x' % self._color.getBlue()
#        blue = '0' + blue if len(blue) < 2 else blue

        css = 'background: #' + red + green + blue
        return css
class ColorPickerPreview(CssLayout, IColorSelector, IValueChangeListener):
    """The Class ColorPickerPreview.

    @author: John Ahlroos / ITMill Oy 2010
    @author: Richard Lincoln
    """

    _STYLE_DARK_COLOR = 'v-textfield-dark'
    _STYLE_LIGHT_COLOR = 'v-textfield-light'

    def __init__(self, color):
        """Instantiates a new color picker preview."""
        super(ColorPickerPreview, self).__init__()

        self.setStyleName('v-colorpicker-preview')
        self.setImmediate(True)

        self._color = color

        self._field = TextField()
        self._field.setReadOnly(True)
        self._field.setImmediate(True)
        self._field.setSizeFull()
        self._field.setStyleName('v-colorpicker-preview-textfield')
        self._field.setData(self)
        self._field.addListener(self, IValueChangeListener)
        self._field.addValidator(RegexpValidator('#[0-9a-fA-F]{6}', True, ''))
        self._oldValue = None
        self.addComponent(self._field)

        self.setColor(color)

    def setColor(self, color):
        self._color = color

        red = '%.2x' % color.getRed()
        #        red = '0' + red if len(red) < 2 else red

        green = '%.2x' % color.getGreen()
        #        green = '0' + green if len(green) < 2 else green

        blue = '%.2x' % color.getBlue()
        #        blue = '0' + blue if len(blue) < 2 else blue

        # Unregister listener
        self._field.removeListener(self, IValueChangeListener)
        self._field.setReadOnly(False)

        self._field.setValue('#' + red + green + blue)

        if self._field.isValid():
            self._oldValue = '#' + red + green + blue
        else:
            self._field.setValue(self._oldValue)

        # Re-register listener
        self._field.setReadOnly(True)
        self._field.addListener(self, IValueChangeListener)

        # Set the text color
        self._field.removeStyleName(self._STYLE_DARK_COLOR)
        self._field.removeStyleName(self._STYLE_LIGHT_COLOR)
        if (self._color.getRed() + self._color.getGreen() +
                self._color.getBlue() < 3 * 128):
            self._field.addStyleName(self._STYLE_DARK_COLOR)
        else:
            self._field.addStyleName(self._STYLE_LIGHT_COLOR)

        self.requestRepaint()

    def getColor(self):
        return self._color

    def addListener(self, listener, iface=None):
        """Adds a color change listener

        @param listener:
                   The color change listener
        """
        if (isinstance(listener, IColorChangeListener) and
            (iface is None or issubclass(iface, IColorChangeListener))):
            self.registerListener(ColorChangeEvent, listener,
                                  _COLOR_CHANGE_METHOD)

        super(ColorPickerPreview, self).addListener(listener, iface)

    def addCallback(self, callback, eventType=None, *args):
        if eventType is None:
            eventType = callback._eventType  # set by decorator

        if issubclass(eventType, ColorChangeEvent):
            self.registerCallback(ColorChangeEvent, callback, None, *args)
        else:
            super(ColorPickerPreview,
                  self).addCallback(callback, eventType, *args)

    def removeListener(self, listener, iface=None):
        """Removes a color change listener

        @param listener:
                   The listener
        """
        if (isinstance(listener, IColorChangeListener) and
            (iface is None or issubclass(iface, IColorChangeListener))):
            self.withdrawListener(ColorChangeEvent, listener)

        super(ColorPickerPreview, self).removeListener(listener, iface)

    def removeCallback(self, callback, eventType=None):
        if eventType is None:
            eventType = callback._eventType

        if issubclass(eventType, ColorChangeEvent):
            self.withdrawCallback(ColorChangeEvent, callback)

        else:
            super(ColorPickerPreview, self).removeCallback(callback, eventType)

    def valueChange(self, event):
        value = event.getProperty().getValue()

        if not self._field.isValid():
            self._field.setValue(self._oldValue)
            return
        else:
            self._oldValue = value

        if value is not None and len(value) == 7:
            red = int(value[1:3], 16)
            green = int(value[3:5], 16)
            blue = int(value[5:7], 16)
            self._color = Color(red, green, blue)

            evt = ColorChangeEvent(self._field.getData(), self._color)
            self.fireEvent(evt)

    def getCss(self, c):
        """Called when the component is refreshing"""
        red = '%.2x' % self._color.getRed()
        #        red = '0' + red if len(red) < 2 else red

        green = '%.2x' % self._color.getGreen()
        #        green = '0' + green if len(green) < 2 else green

        blue = '%.2x' % self._color.getBlue()
        #        blue = '0' + blue if len(blue) < 2 else blue

        css = 'background: #' + red + green + blue
        return css
Example #10
0
 def testIntegerValidation(self):
     field = TextField()
     field.addValidator(IntegerValidator('Enter a Valid Number'))
     field.setValue(int(10))
     field.validate()