Features/GTK3/Shell: Difference between revisions
No edit summary |
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. | |||