From 3f792924ddf4dba301d06e496ac6e29296fbd4e9 Mon Sep 17 00:00:00 2001 From: flavio Date: Fri, 09 Nov 2012 23:58:22 +0000 Subject: Gtk 3 Port Base --- (limited to 'toolkit/toolbarbox.py') diff --git a/toolkit/toolbarbox.py b/toolkit/toolbarbox.py index 7172b8b..923bed1 100644 --- a/toolkit/toolbarbox.py +++ b/toolkit/toolbarbox.py @@ -15,12 +15,13 @@ # Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. -import gtk -import gobject +import gi +from gi.repository import Gtk +from gi.repository import GObject -from sugar.graphics import style -from sugar.graphics.toolbutton import ToolButton -from sugar.graphics import palettegroup +from sugar3.graphics import style +from sugar3.graphics.toolbutton import ToolButton +from sugar3.graphics import palettegroup from toolkit.internals.palettewindow import PaletteWindow from toolkit.internals.palettewindow import ToolInvoker @@ -31,8 +32,9 @@ _LINE_WIDTH = 2 class ToolbarButton(ToolButton): - def __init__(self, page=None, **kwargs): - ToolButton.__init__(self, **kwargs) + def __init__(self, page=None): + + ToolButton.__init__(self) self.page_widget = None @@ -43,31 +45,36 @@ class ToolbarButton(ToolButton): self.connect('size-allocate', self.__size_allocate_cb) def get_toolbar_box(self): + if not hasattr(self.parent, 'owner'): return None + return self.parent.owner toolbar_box = property(get_toolbar_box) def get_page(self): + if self.page_widget is None: return None + return _get_embedded_page(self.page_widget) def set_page(self, page): + if page is None: self.page_widget = None return self.page_widget, alignment_ = _embed_page(_Box, page) - w_, h = gtk.icon_size_lookup(gtk.ICON_SIZE_LARGE_TOOLBAR) + w_, h = Gtk.icon_size_lookup(Gtk.IconSize.LARGE_TOOLBAR) page.show() if self.props.palette is None: self.props.palette = _ToolbarPalette(invoker=ToolInvoker(self)) self._move_page_to_palette() - page = gobject.property(type=object, getter=get_page, setter=set_page) + page = GObject.property(type=object, getter=get_page, setter=set_page) def is_in_palette(self): return self.page is not None and \ @@ -97,14 +104,15 @@ class ToolbarButton(ToolButton): if box.expanded_button.window is not None: # need to redraw it to erase arrow box.expanded_button.window.invalidate_rect(None, True) + box.expanded_button.set_expanded(False) box.expanded_button = self self._unparent() - self.modify_bg(gtk.STATE_NORMAL, box.background) + self.modify_bg(Gtk.StateType.NORMAL, box.background) _setup_page(self.page_widget, box.background, box.props.padding) - box.pack_start(self.page_widget) + box.pack_start(self.page_widget, False, False, 0) def _move_page_to_palette(self): if self.is_in_palette(): @@ -121,50 +129,53 @@ class ToolbarButton(ToolButton): self.page_widget.parent.remove(self.page_widget) def do_expose_event(self, event): + if not self.is_expanded() or self.props.palette is not None and \ self.props.palette.is_up(): ToolButton.do_expose_event(self, event) - _paint_arrow(self, event, gtk.ARROW_DOWN) + _paint_arrow(self, event, Gtk.ArrowType.DOWN) return alloc = self.allocation self.get_style().paint_box(event.window, - gtk.STATE_NORMAL, gtk.SHADOW_IN, event.area, self, + Gtk.StateType.NORMAL, Gtk.ShadowType.IN, event.area, self, 'palette-invoker', alloc.x, 0, alloc.width, alloc.height + _LINE_WIDTH) - if self.child.state != gtk.STATE_PRELIGHT: + if self.child.state != Gtk.StateType.PRELIGHT: self.get_style().paint_box(event.window, - gtk.STATE_NORMAL, gtk.SHADOW_NONE, event.area, self, None, - alloc.x + _LINE_WIDTH, _LINE_WIDTH, - alloc.width - _LINE_WIDTH * 2, alloc.height) + Gtk.StateType.NORMAL, Gtk.ShadowType.NONE, event.area, self, None, + alloc.x + _LINE_WIDTH, _LINE_WIDTH, + alloc.width - _LINE_WIDTH * 2, alloc.height) - gtk.ToolButton.do_expose_event(self, event) - _paint_arrow(self, event, gtk.ARROW_UP) + Gtk.ToolButton.do_expose_event(self, event) + _paint_arrow(self, event, Gtk.ArrowType.UP) def __size_allocate_cb(self, button, allocation): if self.page_widget is not None: self.page_widget.set_size_request(-1, allocation.height) -class ToolbarBox(gtk.VBox): +class ToolbarBox(Gtk.VBox): def __init__(self, padding=style.TOOLBOX_HORIZONTAL_PADDING): - gtk.VBox.__init__(self) + + Gtk.VBox.__init__(self) + self._expanded_button_index = -1 self.background = None - self._toolbar = gtk.Toolbar() + self._toolbar = Gtk.Toolbar() self._toolbar.owner = self self._toolbar.connect('remove', self.__remove_cb) self._toolbar_widget, self._toolbar_alignment = \ - _embed_page(gtk.EventBox, self._toolbar) - self.pack_start(self._toolbar_widget) + _embed_page(Gtk.EventBox, self._toolbar) + self.pack_start(self._toolbar_widget, False, False, 0) self.props.padding = padding - self.modify_bg(gtk.STATE_NORMAL, + self.modify_bg(Gtk.StateType.NORMAL, style.COLOR_TOOLBAR_GREY.get_gdk_color()) def get_toolbar(self): @@ -173,14 +184,18 @@ class ToolbarBox(gtk.VBox): toolbar = property(get_toolbar) def get_expanded_button(self): + if self._expanded_button_index == -1: return None + return self.toolbar.get_nth_item(self._expanded_button_index) def set_expanded_button(self, button): + if not button in self.toolbar: self._expanded_button_index = -1 return + self._expanded_button_index = self.toolbar.get_item_index(button) expanded_button = property(get_expanded_button, set_expanded_button) @@ -191,19 +206,24 @@ class ToolbarBox(gtk.VBox): def set_padding(self, pad): self._toolbar_alignment.set_padding(0, 0, pad, pad) - padding = gobject.property(type=object, + padding = GObject.property(type=object, getter=get_padding, setter=set_padding) def modify_bg(self, state, color): - if state == gtk.STATE_NORMAL: + + if state == Gtk.StateType.NORMAL: self.background = color + self._toolbar_widget.modify_bg(state, color) self.toolbar.modify_bg(state, color) def __remove_cb(self, sender, button): + if not isinstance(button, ToolbarButton): return + button.popdown() + if button == self.expanded_button: self.remove(button.page_widget) self._expanded_button_index = -1 @@ -211,8 +231,9 @@ class ToolbarBox(gtk.VBox): class _ToolbarPalette(PaletteWindow): - def __init__(self, **kwargs): - PaletteWindow.__init__(self, **kwargs) + def __init__(self): + + PaletteWindow.__init__(self) self.set_border_width(0) self._has_focus = False @@ -242,24 +263,30 @@ class _ToolbarPalette(PaletteWindow): self._set_focus(False) def _set_focus(self, new_focus): + self._has_focus = new_focus + if not self._has_focus: group = palettegroup.get_group('default') if not group.is_up(): self.popdown() def do_size_request(self, requisition): - gtk.Window.do_size_request(self, requisition) + + Gtk.Window.do_size_request(self, requisition) requisition.width = max(requisition.width, - gtk.gdk.screen_width()) + Gdk.screen_width()) def popup(self, immediate=False): + button = self.expanded_button + if button.is_expanded(): return + box = button.toolbar_box _setup_page(button.page_widget, style.COLOR_BLACK.get_gdk_color(), - box.props.padding) + box.props.padding) PaletteWindow.popup(self, immediate) def __group_popdown_cb(self, group): @@ -267,52 +294,59 @@ class _ToolbarPalette(PaletteWindow): self.popdown(immediate=True) -class _Box(gtk.EventBox): +class _Box(Gtk.EventBox): def __init__(self): - gtk.EventBox.__init__(self) + + Gtk.EventBox.__init__(self) self.connect('expose-event', self.do_expose_event) self.set_app_paintable(True) def do_expose_event(self, widget, event): + if self.parent.expanded_button is None: return + alloc = self.parent.expanded_button.allocation self.get_style().paint_box(event.window, - gtk.STATE_NORMAL, gtk.SHADOW_IN, event.area, self, - 'palette-invoker', -_LINE_WIDTH, 0, - self.allocation.width + _LINE_WIDTH * 2, - self.allocation.height + _LINE_WIDTH) + Gtk.StateType.NORMAL, Gtk.ShadowType.IN, event.area, self, + 'palette-invoker', -_LINE_WIDTH, 0, + self.allocation.width + _LINE_WIDTH * 2, + self.allocation.height + _LINE_WIDTH) + self.get_style().paint_box(event.window, - gtk.STATE_NORMAL, gtk.SHADOW_NONE, event.area, self, None, - alloc.x + _LINE_WIDTH, 0, - alloc.width - _LINE_WIDTH * 2, _LINE_WIDTH) + Gtk.StateType.NORMAL, Gtk.ShadowType.NONE, event.area, self, None, + alloc.x + _LINE_WIDTH, 0, + alloc.width - _LINE_WIDTH * 2, _LINE_WIDTH) def _setup_page(page_widget, color, hpad): + vpad = _LINE_WIDTH page_widget.child.set_padding(vpad, vpad, hpad, hpad) page = _get_embedded_page(page_widget) - page.modify_bg(gtk.STATE_NORMAL, color) - if isinstance(page, gtk.Container): + page.modify_bg(Gtk.StateType.NORMAL, color) + + if isinstance(page, Gtk.Container): for i in page.get_children(): - i.modify_bg(gtk.STATE_INSENSITIVE, color) + i.modify_bg(Gtk.StateType.INSENSITIVE, color) - page_widget.modify_bg(gtk.STATE_NORMAL, color) - page_widget.modify_bg(gtk.STATE_PRELIGHT, color) + page_widget.modify_bg(Gtk.StateType.NORMAL, color) + page_widget.modify_bg(Gtk.StateType.PRELIGHT, color) def _embed_page(box_class, page): page.show() - alignment = gtk.Alignment(0.0, 0.0, 1.0, 1.0) + alignment = Gtk.Alignment() + alignment.set(0.0, 0.0, 1.0, 1.0) alignment.add(page) alignment.show() page_widget = box_class() - page_widget.modify_bg(gtk.STATE_ACTIVE, - style.COLOR_BUTTON_GREY.get_gdk_color()) + page_widget.modify_bg(Gtk.StateType.ACTIVE, + style.COLOR_BUTTON_GREY.get_gdk_color()) page_widget.add(alignment) page_widget.show() @@ -329,5 +363,5 @@ def _paint_arrow(widget, event, arrow_type): y = alloc.y + alloc.height - int(_ARROW_SIZE * .85) widget.get_style().paint_arrow(event.window, - gtk.STATE_NORMAL, gtk.SHADOW_NONE, event.area, widget, - None, arrow_type, True, x, y, _ARROW_SIZE, _ARROW_SIZE) + Gtk.StateType.NORMAL, Gtk.ShadowType.NONE, event.area, widget, + None, arrow_type, True, x, y, _ARROW_SIZE, _ARROW_SIZE) -- cgit v0.9.1