Features/GTK3/Shell: Difference between revisions

Manuq (talk | contribs)
No edit summary
Godiard (talk | contribs)
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.