Ticket #1592: just-another-view.patch

File just-another-view.patch, 6.3 KB (added by alsroot, 14 years ago)
  • extensions/cpsection/aboutme/view.py

    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 
    2525from jarabe.controlpanel.sectionview import SectionView
    2626from jarabe.controlpanel.inlinealert import InlineAlert
    2727
     28_DIRECTION_LEFT = 0
     29_DIRECTION_TOP = 1
     30_DIRECTION_CENTER = 2
     31_DIRECTION_BOTTOM = 3
     32_DIRECTION_RIGHT = 4
     33
    2834class EventIcon(gtk.EventBox):
    2935    __gtype_name__ = "SugarEventIcon"   
    3036    def __init__(self, **kwargs):         
    class ColorPicker(EventIcon): 
    4349    __gsignals__ = {
    4450        'color-changed': (gobject.SIGNAL_RUN_FIRST,
    4551                          gobject.TYPE_NONE,
    46                           ([str]))
     52                          ([object]))
    4753    }
    48     def __init__(self, xocolor=None):
     54    def __init__(self, direction):
    4955        EventIcon.__init__(self)
    50         self.icon.props.xo_color = xocolor
     56
    5157        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
    5366        self.connect('button_press_event', self.__pressed_cb)
    5467
    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
    5780
    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)
    6283
    6384class AboutMe(SectionView):
    6485    def __init__(self, model, alerts):
    class AboutMe(SectionView): 
    6990        self._nick_sid = 0
    7091        self._color_valid = True
    7192        self._nick_valid = True
    72         self._color_change_handler = None
    73         self._nick_change_handler = None
     93        self._handlers = []
    7494
    7595        self.set_border_width(style.DEFAULT_SPACING * 2)
    7696        self.set_spacing(style.DEFAULT_SPACING)
    class AboutMe(SectionView): 
    84104
    85105        self._color_box = gtk.HBox(spacing=style.DEFAULT_SPACING)
    86106        self._color_alert_box = gtk.HBox(spacing=style.DEFAULT_SPACING)
    87         self._color_picker = None
    88107        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)
    90119
    91120        self.setup()
    92121
    class AboutMe(SectionView): 
    131160        self._group.add_widget(label_color)
    132161        self._color_box.pack_start(label_color, expand=False)
    133162        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)
    138169
    139170        label_color_error = gtk.Label()
    140171        self._group.add_widget(label_color_error)
    class AboutMe(SectionView): 
    154185   
    155186    def setup(self):
    156187        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 
    160188        self._color_valid = True
    161189        self._nick_valid = True
    162190        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)
    167198
    168199    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)
    171202        self._model.undo()
    172203        self._nick_alert.hide()
    173204        self._color_alert.hide()       
    174205
     206    def _update_pickers(self, color):
     207        for picker in self._pickers.values():
     208            picker.update(color)
     209
    175210    def _validate(self):
    176211        if self._nick_valid and self._color_valid:
    177212            self.props.is_valid = True
    class AboutMe(SectionView): 
    203238        self._nick_alert.show()
    204239        return False
    205240
    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())
    208243        self.needs_restart = True
    209244        self._color_alert.props.msg = self.restart_msg
    210245        self._color_valid = True
    class AboutMe(SectionView): 
    212247
    213248        self._validate()
    214249        self._color_alert.show()
     250
     251        self._update_pickers(color)
     252
    215253        return False