1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 from collections import deque
17
18 from muntjac.addon.colorpicker.color import Color
19
20 from muntjac.ui.custom_component import CustomComponent
21
22 from muntjac.addon.colorpicker.color_picker_grid import ColorPickerGrid
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
27
28 _COLOR_CHANGE_METHOD = getattr(IColorChangeListener, 'colorChanged')
29
30
31 -class ColorPickerHistory(CustomComponent, IColorSelector,
32 IColorChangeListener):
33 """The Class ColorPickerHistory.
34
35 @author: John Ahlroos
36 @author: Richard lincoln
37 """
38
39 _STYLENAME = 'v-colorpicker-history'
40
41
42 _rows = 4
43
44
45 _columns = 15
46
47
48 _colorHistory = deque()
49
50
51 _grid = None
52
53
55 """Instantiates a new color picker history."""
56 super(ColorPickerHistory, self).__init__()
57
58 self.removeStyleName('v-customcomponent')
59 self.setStyleName(self._STYLENAME)
60
61 self._grid = ColorPickerGrid(self._rows, self._columns)
62 self._grid.setWidth('100%')
63 self._grid.setPosition(0, 0)
64 self._grid.addListener(self, IColorChangeListener)
65
66 self.setCompositionRoot(self._grid)
67
68
69 - def setHeight(self, height, unit=None):
72
73
74 - def setColor(self, color):
75
76 exists = False
77 for c in self._colorHistory:
78 if color == c:
79 exists = True
80 break
81
82
83 if not exists:
84 self._colorHistory.append(color)
85
86 colorList = list(self._colorHistory)
87
88
89 colorList.reverse()
90
91
92 colorList.insert(0, colorList.pop( colorList.index(color) ))
93
94
95 colors = [([None] * self._columns) for _ in range(self._rows)]
96 iterator = iter(colorList)
97
98 for row in range(self._rows):
99 for col in range(self._columns):
100 try:
101 colors[row][col] = iterator.next()
102 except StopIteration:
103 colors[row][col] = Color.WHITE
104
105 self._grid.setColorGrid(colors)
106 self._grid.requestRepaint()
107
108
109 - def getColor(self):
110 return self._colorHistory[0]
111
112
113 - def getHistory(self):
114 """Gets the history.
115
116 @return: the history
117 """
118 array = list(self._colorHistory)
119 return array
120
121
122 - def hasColor(self, c):
123 """Checks for color.
124
125 @param c:
126 the c
127 @return: true, if successful
128 """
129 return c in self._colorHistory
130
131
132 - def addListener(self, listener, iface=None):
133 """Adds a color change listener
134
135 @param listener:
136 The color change listener
137 """
138 if (isinstance(listener, IColorChangeListener) and
139 (iface is None or issubclass(iface, IColorChangeListener))):
140 self.registerListener(ColorChangeEvent, listener,
141 _COLOR_CHANGE_METHOD)
142
143 super(ColorPickerHistory, self).addListener(listener, iface)
144
145
146 - def addCallback(self, callback, eventType=None, *args):
147 if eventType is None:
148 eventType = callback._eventType
149
150 if issubclass(eventType, ColorChangeEvent):
151 self.registerCallback(ColorChangeEvent, callback, None, *args)
152 else:
153 super(ColorPickerHistory, self).addCallback(callback, eventType,
154 *args)
155
156
157 - def removeListener(self, listener, iface=None):
158 """Removes a color change listener
159
160 @param listener:
161 The listener
162 """
163 if (isinstance(listener, IColorChangeListener) and
164 (iface is None or issubclass(iface, IColorChangeListener))):
165 self.withdrawListener(ColorChangeEvent, listener)
166
167 super(ColorPickerHistory, self).removeListener(listener, iface)
168
169
170 - def removeCallback(self, callback, eventType=None):
171 if eventType is None:
172 eventType = callback._eventType
173
174 if issubclass(eventType, ColorChangeEvent):
175 self.withdrawCallback(ColorChangeEvent, callback)
176
177 else:
178 super(ColorPickerHistory, self).removeCallback(callback, eventType)
179
180
181 - def colorChanged(self, event):
183