Home | Trees | Indices | Help |
|
---|
|
1 # Copyright (C) 2012 Vaadin Ltd. 2 # Copyright (C) 2012 Richard Lincoln 3 # 4 # Licensed under the Apache License, Version 2.0 (the "License"); 5 # you may not use this file except in compliance with the License. 6 # You may obtain a copy of the License at 7 # 8 # http://www.apache.org/licenses/LICENSE-2.0 9 # 10 # Unless required by applicable law or agreed to in writing, software 11 # distributed under the License is distributed on an "AS IS" BASIS, 12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 # See the License for the specific language governing permissions and 14 # limitations under the License. 15 16 from muntjac.addon.colorpicker.color import Color 17 18 from muntjac.ui.css_layout import CssLayout 19 from muntjac.ui.text_field import TextField 20 21 from muntjac.data.property import IValueChangeListener 22 23 from muntjac.addon.colorpicker.color_change_event import ColorChangeEvent 24 from muntjac.addon.colorpicker.color_picker import IColorChangeListener 25 from muntjac.addon.colorpicker.color_selector import IColorSelector 26 from muntjac.data.validators.regexp_validator import RegexpValidator 27 28 29 _COLOR_CHANGE_METHOD = getattr(IColorChangeListener, 'colorChanged') 30 3133 """The Class ColorPickerPreview. 34 35 @author: John Ahlroos / ITMill Oy 2010 36 @author: Richard Lincoln 37 """ 38 39 _STYLE_DARK_COLOR = 'v-textfield-dark' 40 _STYLE_LIGHT_COLOR = 'v-textfield-light' 4118943 """Instantiates a new color picker preview.""" 44 super(ColorPickerPreview, self).__init__() 45 46 self.setStyleName('v-colorpicker-preview') 47 self.setImmediate(True) 48 49 self._color = color 50 51 self._field = TextField() 52 self._field.setReadOnly(True) 53 self._field.setImmediate(True) 54 self._field.setSizeFull() 55 self._field.setStyleName('v-colorpicker-preview-textfield') 56 self._field.setData(self) 57 self._field.addListener(self, IValueChangeListener) 58 self._field.addValidator(RegexpValidator('#[0-9a-fA-F]{6}', True, '')) 59 self._oldValue = None 60 self.addComponent(self._field) 61 62 self.setColor(color)63 6466 self._color = color 67 68 red = '%.2x' % color.getRed() 69 # red = '0' + red if len(red) < 2 else red 70 71 green = '%.2x' % color.getGreen() 72 # green = '0' + green if len(green) < 2 else green 73 74 blue = '%.2x' % color.getBlue() 75 # blue = '0' + blue if len(blue) < 2 else blue 76 77 # Unregister listener 78 self._field.removeListener(self, IValueChangeListener) 79 self._field.setReadOnly(False) 80 81 self._field.setValue('#' + red + green + blue) 82 83 if self._field.isValid(): 84 self._oldValue = '#' + red + green + blue 85 else: 86 self._field.setValue(self._oldValue) 87 88 # Re-register listener 89 self._field.setReadOnly(True) 90 self._field.addListener(self, IValueChangeListener) 91 92 # Set the text color 93 self._field.removeStyleName(self._STYLE_DARK_COLOR) 94 self._field.removeStyleName(self._STYLE_LIGHT_COLOR) 95 if (self._color.getRed() + self._color.getGreen() 96 + self._color.getBlue() < 3 * 128): 97 self._field.addStyleName(self._STYLE_DARK_COLOR) 98 else: 99 self._field.addStyleName(self._STYLE_LIGHT_COLOR) 100 101 self.requestRepaint()102 103 106 107109 """Adds a color change listener 110 111 @param listener: 112 The color change listener 113 """ 114 if (isinstance(listener, IColorChangeListener) and 115 (iface is None or issubclass(iface, IColorChangeListener))): 116 self.registerListener(ColorChangeEvent, listener, 117 _COLOR_CHANGE_METHOD) 118 119 super(ColorPickerPreview, self).addListener(listener, iface)120 121123 if eventType is None: 124 eventType = callback._eventType # set by decorator 125 126 if issubclass(eventType, ColorChangeEvent): 127 self.registerCallback(ColorChangeEvent, callback, None, *args) 128 else: 129 super(ColorPickerPreview, self).addCallback(callback, eventType, 130 *args)131 132134 """Removes a color change listener 135 136 @param listener: 137 The listener 138 """ 139 if (isinstance(listener, IColorChangeListener) and 140 (iface is None or issubclass(iface, IColorChangeListener))): 141 self.withdrawListener(ColorChangeEvent, listener) 142 143 super(ColorPickerPreview, self).removeListener(listener, iface)144 145147 if eventType is None: 148 eventType = callback._eventType 149 150 if issubclass(eventType, ColorChangeEvent): 151 self.withdrawCallback(ColorChangeEvent, callback) 152 153 else: 154 super(ColorPickerPreview, self).removeCallback(callback, eventType)155 156158 value = event.getProperty().getValue() 159 160 if not self._field.isValid(): 161 self._field.setValue(self._oldValue) 162 return 163 else: 164 self._oldValue = value 165 166 if value is not None and len(value) == 7: 167 red = int(value[1:3], 16) 168 green = int(value[3:5], 16) 169 blue = int(value[5:7], 16) 170 self._color = Color(red, green, blue) 171 172 evt = ColorChangeEvent(self._field.getData(), self._color) 173 self.fireEvent(evt)174 175177 """Called when the component is refreshing""" 178 red = '%.2x' % self._color.getRed() 179 # red = '0' + red if len(red) < 2 else red 180 181 green = '%.2x' % self._color.getGreen() 182 # green = '0' + green if len(green) < 2 else green 183 184 blue = '%.2x' % self._color.getBlue() 185 # blue = '0' + blue if len(blue) < 2 else blue 186 187 css = 'background: #' + red + green + blue 188 return css
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Wed Jun 10 22:40:32 2015 | http://epydoc.sourceforge.net |