From e49146752ff322c53430419749be53b741f02540 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Thu, 26 Apr 2007 11:31:41 +0200 Subject: [PATCH] More work on the new graphics API. --- shell/view/frame/PanelWindow.py | 11 +-- shell/view/home/HomeWindow.py | 10 +-- sugar/activity/activity.py | 10 ++- sugar/{graphics2 => graphics}/toolbox.py | 20 ++++++ .../window.py => graphics/toolbutton.py} | 34 ++-------- sugar/graphics/window.py | 68 ++++++++++++++----- sugar/graphics2/Makefile.am | 5 -- sugar/graphics2/__init__.py | 0 tests/test-ui.py | 11 ++- 9 files changed, 95 insertions(+), 74 deletions(-) rename sugar/{graphics2 => graphics}/toolbox.py (69%) rename sugar/{graphics2/window.py => graphics/toolbutton.py} (51%) delete mode 100644 sugar/graphics2/Makefile.am delete mode 100644 sugar/graphics2/__init__.py diff --git a/shell/view/frame/PanelWindow.py b/shell/view/frame/PanelWindow.py index 7f585b6d..5dfe4461 100644 --- a/shell/view/frame/PanelWindow.py +++ b/shell/view/frame/PanelWindow.py @@ -18,11 +18,10 @@ import gtk import hippo from sugar.graphics import units -from sugar.graphics.window import Window -class PanelWindow(Window): +class PanelWindow(gtk.Window): def __init__(self, orientation): - Window.__init__(self) + gtk.Window.__init__(self) self.hover = False self._orientation = orientation @@ -32,9 +31,13 @@ class PanelWindow(Window): self.connect('enter-notify-event', self._enter_notify_cb) self.connect('leave-notify-event', self._leave_notify_cb) + self._canvas = hippo.Canvas() + self.add(self._canvas) + self._canvas.show() + self._bg = hippo.CanvasBox(background_color=0x414141ff, orientation=self._orientation) - self.set_root(self._bg) + self._canvas.set_root(self._bg) self._update_size() diff --git a/shell/view/home/HomeWindow.py b/shell/view/home/HomeWindow.py index 3f339190..c65432d9 100644 --- a/shell/view/home/HomeWindow.py +++ b/shell/view/home/HomeWindow.py @@ -54,7 +54,7 @@ class HomeWindow(Window): self._mesh_box = MeshBox(shell, MenuShell(self)) self._transition_box = TransitionBox() - self.set_root(self._home_box) + self.canvas.set_root(self._home_box) self._transition_box.connect('completed', self._transition_completed_cb) @@ -81,7 +81,7 @@ class HomeWindow(Window): def set_zoom_level(self, level): self._level = level - self.set_root(self._transition_box) + self.canvas.set_root(self._transition_box) if level == sugar.ZOOM_HOME: scale = units.XLARGE_ICON_SCALE @@ -94,11 +94,11 @@ class HomeWindow(Window): def _transition_completed_cb(self, transition_box): if self._level == sugar.ZOOM_HOME: - self.set_root(self._home_box) + self.canvas.set_root(self._home_box) elif self._level == sugar.ZOOM_FRIENDS: - self.set_root(self._friends_box) + self.canvas.set_root(self._friends_box) elif self._level == sugar.ZOOM_MESH: - self.set_root(self._mesh_box) + self.canvas.set_root(self._mesh_box) self._update_mesh_state() diff --git a/sugar/activity/activity.py b/sugar/activity/activity.py index 1fb77b82..f71cfdfc 100644 --- a/sugar/activity/activity.py +++ b/sugar/activity/activity.py @@ -68,14 +68,12 @@ class Activity(Window, gtk.Container): if service: self._join(service) - self.realize() - - group = gtk.Window() - group.realize() - self.window.set_group(group.window) - self._bus = ActivityService(self) + activity_toolbar = ActivityToolbar() + self.toolbox.add_toolbar('Activity', activity_toolbar) + activity_toolbar.show() + # DEPRECATED It will be removed after 3-6-2007 stable image def do_add(self, widget): if self.child: diff --git a/sugar/graphics2/toolbox.py b/sugar/graphics/toolbox.py similarity index 69% rename from sugar/graphics2/toolbox.py rename to sugar/graphics/toolbox.py index be7e5e09..52accbcc 100644 --- a/sugar/graphics2/toolbox.py +++ b/sugar/graphics/toolbox.py @@ -16,6 +16,9 @@ # Boston, MA 02111-1307, USA. import gtk +import gobject + +from sugar.graphics.toolbutton import ToolButton class Toolbox(gtk.VBox): __gtype_name__ = 'SugarToolbox' @@ -30,3 +33,20 @@ class Toolbox(gtk.VBox): def add_toolbar(self, name, toolbar): self._notebook.append_page(toolbar, gtk.Label(name)) + +class ActivityToolbar(gtk.Toolbar): + __gsignals__ = { + 'close': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, ([])), + } + + def __init__(self): + gtk.Toolbar.__init__(self) + + button = ToolButton('window-close') + button.connect('clicked', self._close_button_clicked_cb) + self.insert(button, -1) + button.show() + + def _close_button_clicked_cb(self, button): + self.emit('close') diff --git a/sugar/graphics2/window.py b/sugar/graphics/toolbutton.py similarity index 51% rename from sugar/graphics2/window.py rename to sugar/graphics/toolbutton.py index d03788b0..a8c7abae 100644 --- a/sugar/graphics2/window.py +++ b/sugar/graphics/toolbutton.py @@ -16,34 +16,10 @@ # Boston, MA 02111-1307, USA. import gtk -import hippo -from sugar.graphics2.toolbox import Toolbox - -class Window(gtk.Window): - def __init__(self): - gtk.Window.__init__(self) +class ToolButton(gtk.ToolButton): + def __init__(self, icon_name=None): + gtk.ToolButton.__init__(self) - vbox = gtk.VBox() - self.add(vbox) - - self.toolbox = Toolbox() - vbox.pack_start(self.toolbox, False) - self.toolbox.show() - - self._canvas_box = gtk.VBox() - vbox.pack_start(self._canvas_box) - self._canvas_box.show() - - self.canvas = hippo.Canvas() - self._canvas_box.pack_start(self.canvas) - self.canvas.show() - - vbox.show() - - def set_canvas(self, canvas): - if self.canvas: - self._canvas_box.remove(self.canvas) - - self._canvas_box.add(canvas) - self.canvas = canvas + if icon_name: + self.set_icon_name(icon_name) diff --git a/sugar/graphics/window.py b/sugar/graphics/window.py index 85cbc4e1..56ff59ff 100644 --- a/sugar/graphics/window.py +++ b/sugar/graphics/window.py @@ -1,24 +1,56 @@ -import hippo +# Copyright (C) 2007, Red Hat, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + import gtk +import hippo -from sugar.graphics import color - -class _Style(gtk.Style): - __gtype_name__ = 'SugarCanvasStyle' - def __init__(self): - gtk.Style.__init__(self) - - def do_set_background(self, window, state): - window.set_back_pixmap(None, False) +from sugar.graphics.toolbox import Toolbox class Window(gtk.Window): - def __init__(self, window_type=gtk.WINDOW_TOPLEVEL): - gtk.Window.__init__(self, window_type) + def __init__(self): + gtk.Window.__init__(self) - self._canvas = hippo.Canvas() - self._canvas.set_style(_Style()) - self.add(self._canvas) - self._canvas.show() + self.connect('realize', self._window_realize_cb) + + vbox = gtk.VBox() + self.add(vbox) + + self.toolbox = Toolbox() + vbox.pack_start(self.toolbox, False) + self.toolbox.show() - def set_root(self, root): - self._canvas.set_root(root) + self._canvas_box = gtk.VBox() + vbox.pack_start(self._canvas_box) + self._canvas_box.show() + + self.canvas = hippo.Canvas() + self._canvas_box.pack_start(self.canvas) + self.canvas.show() + + vbox.show() + + def set_canvas(self, canvas): + if self.canvas: + self._canvas_box.remove(self.canvas) + + self._canvas_box.add(canvas) + self.canvas = canvas + + def _window_realize_cb(self, window): + group = gtk.Window() + group.realize() + window.window.set_group(group.window) diff --git a/sugar/graphics2/Makefile.am b/sugar/graphics2/Makefile.am deleted file mode 100644 index f5bde18a..00000000 --- a/sugar/graphics2/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -sugardir = $(pythondir)/sugar/graphics2 -sugar_PYTHON = \ - __init__.py \ - window.py \ - toolbox.py diff --git a/sugar/graphics2/__init__.py b/sugar/graphics2/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/test-ui.py b/tests/test-ui.py index 26f3d127..38013fbd 100755 --- a/tests/test-ui.py +++ b/tests/test-ui.py @@ -18,11 +18,9 @@ import gtk -from sugar.graphics2.window import Window - -class ActivityToolbar(gtk.Toolbar): - def __init__(self): - gtk.Toolbar.__init__(self) +from sugar.graphics.window import Window +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.toolbox import ActivityToolbar class EditToolbar(gtk.Toolbar): def __init__(self): @@ -32,8 +30,7 @@ class TextToolbar(gtk.Toolbar): def __init__(self): gtk.Toolbar.__init__(self) - button = gtk.ToolButton() - button.set_icon_name('text-format-bold') + button = ToolButton('text-format-bold') self.insert(button, -1) button.show()