diff --git a/extensions/cpsection/aboutme/view.py b/extensions/cpsection/aboutme/view.py
index cabd66a..85e8626 100644
a
|
b
|
from sugar.graphics.xocolor import XoColor |
25 | 25 | from jarabe.controlpanel.sectionview import SectionView |
26 | 26 | from jarabe.controlpanel.inlinealert import InlineAlert |
27 | 27 | |
| 28 | _DIRECTION_LEFT = 0 |
| 29 | _DIRECTION_TOP = 1 |
| 30 | _DIRECTION_CENTER = 2 |
| 31 | _DIRECTION_BOTTOM = 3 |
| 32 | _DIRECTION_RIGHT = 4 |
| 33 | |
28 | 34 | class EventIcon(gtk.EventBox): |
29 | 35 | __gtype_name__ = "SugarEventIcon" |
30 | 36 | def __init__(self, **kwargs): |
… |
… |
class ColorPicker(EventIcon): |
43 | 49 | __gsignals__ = { |
44 | 50 | 'color-changed': (gobject.SIGNAL_RUN_FIRST, |
45 | 51 | gobject.TYPE_NONE, |
46 | | ([str])) |
| 52 | ([object])) |
47 | 53 | } |
48 | | def __init__(self, xocolor=None): |
| 54 | def __init__(self, direction): |
49 | 55 | EventIcon.__init__(self) |
50 | | self.icon.props.xo_color = xocolor |
| 56 | |
51 | 57 | self.icon.props.icon_name = 'computer-xo' |
52 | | self.icon.props.pixel_size = style.XLARGE_ICON_SIZE |
| 58 | self._direction = direction |
| 59 | self._color = None |
| 60 | |
| 61 | if direction == _DIRECTION_CENTER: |
| 62 | self.icon.props.pixel_size = style.XLARGE_ICON_SIZE |
| 63 | else: |
| 64 | self.icon.props.pixel_size = style.STANDARD_ICON_SIZE |
| 65 | |
53 | 66 | self.connect('button_press_event', self.__pressed_cb) |
54 | 67 | |
55 | | def __pressed_cb(self, button, event): |
56 | | self._set_random_colors() |
| 68 | def update(self, color): |
| 69 | if self._direction == _DIRECTION_CENTER: |
| 70 | self._color = color |
| 71 | elif self._direction == _DIRECTION_LEFT: |
| 72 | self._color = XoColor(color.get_prev_fill_color()) |
| 73 | elif self._direction == _DIRECTION_RIGHT: |
| 74 | self._color = XoColor(color.get_next_fill_color()) |
| 75 | elif self._direction == _DIRECTION_TOP: |
| 76 | self._color = XoColor(color.get_prev_stroke_color()) |
| 77 | else: |
| 78 | self._color = XoColor(color.get_next_stroke_color()) |
| 79 | self.icon.props.xo_color = self._color |
57 | 80 | |
58 | | def _set_random_colors(self): |
59 | | xocolor = XoColor() |
60 | | self.icon.props.xo_color = xocolor |
61 | | self.emit('color-changed', xocolor.to_string()) |
| 81 | def __pressed_cb(self, button, event): |
| 82 | self.emit('color-changed', self._color) |
62 | 83 | |
63 | 84 | class AboutMe(SectionView): |
64 | 85 | def __init__(self, model, alerts): |
… |
… |
class AboutMe(SectionView): |
69 | 90 | self._nick_sid = 0 |
70 | 91 | self._color_valid = True |
71 | 92 | self._nick_valid = True |
72 | | self._color_change_handler = None |
73 | | self._nick_change_handler = None |
| 93 | self._handlers = [] |
74 | 94 | |
75 | 95 | self.set_border_width(style.DEFAULT_SPACING * 2) |
76 | 96 | self.set_spacing(style.DEFAULT_SPACING) |
… |
… |
class AboutMe(SectionView): |
84 | 104 | |
85 | 105 | self._color_box = gtk.HBox(spacing=style.DEFAULT_SPACING) |
86 | 106 | self._color_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING) |
87 | | self._color_picker = None |
88 | 107 | self._color_alert = None |
89 | | self._setup_color() |
| 108 | |
| 109 | self._pickers = { |
| 110 | _DIRECTION_CENTER: ColorPicker(_DIRECTION_CENTER), |
| 111 | _DIRECTION_LEFT: ColorPicker(_DIRECTION_LEFT), |
| 112 | _DIRECTION_RIGHT: ColorPicker(_DIRECTION_RIGHT), |
| 113 | _DIRECTION_TOP: ColorPicker(_DIRECTION_TOP), |
| 114 | _DIRECTION_BOTTOM: ColorPicker(_DIRECTION_BOTTOM)} |
| 115 | |
| 116 | self._setup_color() |
| 117 | initial_color = XoColor(self._model.get_color_xo()) |
| 118 | self._update_pickers(initial_color) |
90 | 119 | |
91 | 120 | self.setup() |
92 | 121 | |
… |
… |
class AboutMe(SectionView): |
131 | 160 | self._group.add_widget(label_color) |
132 | 161 | self._color_box.pack_start(label_color, expand=False) |
133 | 162 | label_color.show() |
134 | | |
135 | | self._color_picker = ColorPicker() |
136 | | self._color_box.pack_start(self._color_picker, expand=False) |
137 | | self._color_picker.show() |
| 163 | |
| 164 | # TODO implement '+' pattern |
| 165 | for direction in sorted(self._pickers.keys()): |
| 166 | picker = self._pickers[direction] |
| 167 | picker.show() |
| 168 | self._color_box.pack_start(picker, expand=False) |
138 | 169 | |
139 | 170 | label_color_error = gtk.Label() |
140 | 171 | self._group.add_widget(label_color_error) |
… |
… |
class AboutMe(SectionView): |
154 | 185 | |
155 | 186 | def setup(self): |
156 | 187 | self._nick_entry.set_text(self._model.get_nick()) |
157 | | color = XoColor(self._model.get_color_xo()) |
158 | | self._color_picker.icon.props.xo_color = color |
159 | | |
160 | 188 | self._color_valid = True |
161 | 189 | self._nick_valid = True |
162 | 190 | self.needs_restart = False |
163 | | self._nick_change_handler = self._nick_entry.connect( \ |
164 | | 'changed', self.__nick_changed_cb) |
165 | | self._color_change_handler = self._color_picker.connect( \ |
166 | | 'color-changed', self.__color_changed_cb) |
| 191 | |
| 192 | def connect(widget, signal, cb): |
| 193 | self._handlers.append((widget, widget.connect(signal, cb))) |
| 194 | |
| 195 | connect(self._nick_entry, 'changed', self.__nick_changed_cb) |
| 196 | for picker in self._pickers.values(): |
| 197 | connect(picker, 'color-changed', self.__color_changed_cb) |
167 | 198 | |
168 | 199 | def undo(self): |
169 | | self._color_picker.disconnect(self._color_change_handler) |
170 | | self._nick_entry.disconnect(self._nick_change_handler) |
| 200 | for widget, handler in self._handlers: |
| 201 | widget.disconnect(handler) |
171 | 202 | self._model.undo() |
172 | 203 | self._nick_alert.hide() |
173 | 204 | self._color_alert.hide() |
174 | 205 | |
| 206 | def _update_pickers(self, color): |
| 207 | for picker in self._pickers.values(): |
| 208 | picker.update(color) |
| 209 | |
175 | 210 | def _validate(self): |
176 | 211 | if self._nick_valid and self._color_valid: |
177 | 212 | self.props.is_valid = True |
… |
… |
class AboutMe(SectionView): |
203 | 238 | self._nick_alert.show() |
204 | 239 | return False |
205 | 240 | |
206 | | def __color_changed_cb(self, colorpicker, xocolor): |
207 | | self._model.set_color_xo(xocolor) |
| 241 | def __color_changed_cb(self, colorpicker, color): |
| 242 | self._model.set_color_xo(color.to_string()) |
208 | 243 | self.needs_restart = True |
209 | 244 | self._color_alert.props.msg = self.restart_msg |
210 | 245 | self._color_valid = True |
… |
… |
class AboutMe(SectionView): |
212 | 247 | |
213 | 248 | self._validate() |
214 | 249 | self._color_alert.show() |
| 250 | |
| 251 | self._update_pickers(color) |
| 252 | |
215 | 253 | return False |