Package muntjac :: Package addon :: Package colorpicker :: Module color_picker_preview
[hide private]
[frames] | no frames]

Source Code for Module muntjac.addon.colorpicker.color_picker_preview

  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   
 31   
32 -class ColorPickerPreview(CssLayout, IColorSelector, IValueChangeListener):
33 """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' 41
42 - def __init__(self, color):
43 """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 64
65 - def setColor(self, color):
66 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
104 - def getColor(self):
105 return self._color
106 107
108 - def addListener(self, listener, iface=None):
109 """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 121
122 - def addCallback(self, callback, eventType=None, *args):
123 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 132
133 - def removeListener(self, listener, iface=None):
134 """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 145
146 - def removeCallback(self, callback, eventType=None):
147 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 156
157 - def valueChange(self, event):
158 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 175
176 - def getCss(self, c):
177 """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
189