Changes

3,518 bytes added ,  12:28, 31 January 2012
no edit summary
Line 57: Line 57:  
                               style.COLOR_SELECTION_GREY.get_gdk_color())
 
                               style.COLOR_SELECTION_GREY.get_gdk_color())
 
</pre>
 
</pre>
 +
 +
=== Palettes can't include menu and widgets at the same time ===
 +
 +
We can use anything like this:
 +
 +
<pre>
 +
 +
class SugarMenuItem(gtk.EventBox):
 +
 +
    __gsignals__ = {
 +
        'clicked': (gobject.SIGNAL_RUN_FIRST, None, [])
 +
    }
 +
 +
    def __init__(self, icon_name, label_text):
 +
        gtk.EventBox.__init__(self)
 +
        self._sensitive = True
 +
        vbox = gtk.VBox()
 +
        hbox = gtk.HBox()
 +
        vbox.set_border_width(style.DEFAULT_PADDING)
 +
        self.icon = Icon()
 +
        self.icon.props.icon_name = icon_name
 +
        hbox.pack_start(self.icon, expand=False, fill=False,
 +
                padding=style.DEFAULT_PADDING)
 +
        align = gtk.Alignment(xalign=0.0, yalign=0.5, xscale=0.0, yscale=0.0)
 +
        text = '<span foreground="%s">' % style.COLOR_WHITE.get_html() + \
 +
                    label_text + '</span>'
 +
        self.label = gtk.Label()
 +
        self.label.set_use_markup(True)
 +
        self.label.set_markup(text)
 +
        align.add(self.label)
 +
        hbox.pack_start(align, expand=True, fill=True,
 +
                padding=style.DEFAULT_PADDING)
 +
        vbox.pack_start(hbox, expand=False, fill=False,
 +
                padding=style.DEFAULT_PADDING)
 +
        self.add(vbox)
 +
        self.id_bt_release_cb = self.connect('button-release-event',
 +
                self.__button_release_cb)
 +
        self.id_enter_notify_cb = self.connect('enter-notify-event',
 +
                self.__enter_notify_cb)
 +
        self.id_leave_notify_cb = self.connect('leave-notify-event',
 +
                self.__leave_notify_cb)
 +
        self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())
 +
        self.show_all()
 +
        self.set_above_child(True)
 +
 +
    def __button_release_cb(self, widget, event):
 +
        self.emit('clicked')
 +
 +
    def __enter_notify_cb(self, widget, event):
 +
        self.modify_bg(gtk.STATE_NORMAL,
 +
                style.COLOR_BUTTON_GREY.get_gdk_color())
 +
 +
    def __leave_notify_cb(self, widget, event):
 +
        self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())
 +
 +
    def set_icon(self, icon_name):
 +
        self.icon.props.icon_name = icon_name
 +
 +
    def set_label(self, label_text):
 +
        text = '<span foreground="%s">' % style.COLOR_WHITE.get_html() + \
 +
                    label_text + '</span>'
 +
        self.label.set_markup(text)
 +
 +
    def set_sensitive(self, sensitive):
 +
        if self._sensitive == sensitive:
 +
            return
 +
 +
        self._sensitive = sensitive
 +
        if sensitive:
 +
            self.handler_unblock(self.id_bt_release_cb)
 +
            self.handler_unblock(self.id_enter_notify_cb)
 +
            self.handler_unblock(self.id_leave_notify_cb)
 +
        else:
 +
            self.handler_block(self.id_bt_release_cb)
 +
            self.handler_block(self.id_enter_notify_cb)
 +
            self.handler_block(self.id_leave_notify_cb)
 +
            self.modify_bg(gtk.STATE_NORMAL, style.COLOR_BLACK.get_gdk_color())
 +
 +
</pre>
 +
 +
And add them to a vbox:
 +
 +
<pre>
 +
 +
        # TODO: private!!!
 +
        self._content.set_border_width(0)
 +
 +
        self._play_pause_button = SugarMenuItem('player_play',
 +
                _('Say selected text'))
 +
        self._play_pause_button.connect('clicked', self.__play_clicked_cb)
 +
        vbox_menu.add(self._play_pause_button)
 +
 +
</pre>
 +
 +
To do the SegurMenuItem take all the width in the palette, we need set the border_width in _content to zero,
 +
but that is a private member. Then we need to look if we add a method to set the it,
 +
or change the api to make the first container (where is the menu today) useful for other type of widgets.
628

edits