Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-09-13 11:50:00 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-09-13 11:50:00 (GMT)
commit857b9cb659a2b482483196fc9d54387f820b9a9f (patch)
treef6bcdcc66808102147cf139f0f6e6af8399d9316
parent5ec92a2cab78828cfdebfee0407cca3ccc357da5 (diff)
Rewrite of the grid stuff. Simpler api and cleaner implementation.
Also follow the micro grids in pentagram design.
-rw-r--r--shell/frame/BottomPanel.py11
-rw-r--r--shell/frame/Frame.py60
-rw-r--r--shell/frame/PanelWindow.py19
-rw-r--r--shell/frame/RightPanel.py12
-rw-r--r--shell/frame/TopPanel.py70
-rw-r--r--sugar/canvas/CanvasView.py2
-rw-r--r--sugar/canvas/Makefile.am2
-rwxr-xr-xtests/test-grid.py22
8 files changed, 108 insertions, 90 deletions
diff --git a/shell/frame/BottomPanel.py b/shell/frame/BottomPanel.py
index 0348ccf..2da51e7 100644
--- a/shell/frame/BottomPanel.py
+++ b/shell/frame/BottomPanel.py
@@ -6,8 +6,7 @@ import conf
from sugar.canvas.IconItem import IconItem
from sugar.canvas.IconColor import IconColor
from sugar.presence import PresenceService
-from sugar.canvas.GridLayout import GridGroup
-from sugar.canvas.GridBox import GridBox
+from sugar.canvas.CanvasBox import CanvasBox
class ActivityItem(IconItem):
def __init__(self, activity):
@@ -33,9 +32,9 @@ class InviteItem(IconItem):
def get_invite(self):
return self._invite
-class BottomPanel(GridBox):
- def __init__(self, shell, invites):
- GridBox.__init__(self, GridBox.HORIZONTAL, 14, 6)
+class BottomPanel(CanvasBox):
+ def __init__(self, grid, shell, invites):
+ CanvasBox.__init__(self, grid, CanvasBox.HORIZONTAL, 1)
self._shell = shell
self._invite_to_item = {}
@@ -68,11 +67,13 @@ class BottomPanel(GridBox):
def add_activity(self, activity):
item = ActivityItem(activity)
item.connect('clicked', self.__activity_clicked_cb)
+ self.set_constraints(item, 3, 3)
self.add_child(item)
def add_invite(self, invite):
item = InviteItem(invite)
item.connect('clicked', self.__invite_clicked_cb)
+ self.set_constraints(item, 3, 3)
self.add_child(item, 0)
self._invite_to_item[invite] = item
diff --git a/shell/frame/Frame.py b/shell/frame/Frame.py
index df9ecfd..3425e3a 100644
--- a/shell/frame/Frame.py
+++ b/shell/frame/Frame.py
@@ -8,55 +8,43 @@ from frame.TopPanel import TopPanel
from frame.PanelWindow import PanelWindow
from sugar.canvas.ScreenContainer import ScreenContainer
-from sugar.canvas.GridLayout import GridLayout
-from sugar.canvas.GridLayout import GridConstraints
-from sugar.canvas.GridLayout import GridGroup
-from sugar.canvas.GridModel import GridModel
+from sugar.canvas.Grid import Grid
class Frame:
def __init__(self, shell, owner):
self._windows = []
- self._model = GridModel("#4f4f4f")
- layout = self._model.get_layout()
+ model = goocanvas.CanvasModelSimple()
+ root = model.get_root_item()
- self._screen_layout = GridLayout()
- self._screen_container = ScreenContainer(self._windows)
+ grid = Grid()
- constraints = GridConstraints(0, 0, 16, 1)
- self._create_window(constraints)
+ bg = goocanvas.Rect(fill_color="#4f4f4f")
+ grid.set_constraints(bg, 0, 0, 80, 60)
+ root.add_child(bg)
- panel = TopPanel(shell)
- layout.set_constraints(panel, constraints)
- self._model.add(panel)
+ panel = BottomPanel(grid, shell, owner.get_invites())
+ grid.set_constraints(panel, 5, 55)
+ root.add_child(panel)
- constraints = GridConstraints(15, 1, 1, 10)
- self._create_window(constraints)
+ panel_window = PanelWindow(grid, model, 0, 55, 80, 5)
+ self._windows.append(panel_window)
- panel = RightPanel(shell, owner.get_friends())
- layout.set_constraints(panel, constraints)
- self._model.add(panel)
+ panel = TopPanel(grid, shell)
+ root.add_child(panel)
- self._create_window(GridConstraints(0, 11, 16, 1))
+ panel_window = PanelWindow(grid, model, 0, 0, 80, 5)
+ self._windows.append(panel_window)
+
+ panel = RightPanel(grid, shell, owner.get_friends())
+ grid.set_constraints(panel, 75, 5)
+ root.add_child(panel)
- panel = BottomPanel(shell, owner.get_invites())
- layout.set_constraints(panel, GridConstraints(1, 11, 14, 1))
- self._model.add(panel)
+ panel_window = PanelWindow(grid, model, 75, 5, 5, 50)
+ self._windows.append(panel_window)
- # Left
- constraints = GridConstraints(0, 1, 1, 10)
- self._create_window(constraints)
-
- self._screen_container.set_layout(self._screen_layout)
-
- def _create_window(self, constraints):
- window = PanelWindow(self._model)
- self._screen_layout.set_constraints(window, constraints)
- self._windows.append(window)
-
- bounds = self._model.get_layout().get_bounds(self._model._root, constraints)
- window.scale_to_screen()
- window.set_bounds(constraints)
+ panel_window = PanelWindow(grid, model, 0, 5, 5, 50)
+ self._windows.append(panel_window)
def __hide_timeout_cb(self):
self.hide()
diff --git a/shell/frame/PanelWindow.py b/shell/frame/PanelWindow.py
index 43ae9b4..549776f 100644
--- a/shell/frame/PanelWindow.py
+++ b/shell/frame/PanelWindow.py
@@ -1,10 +1,13 @@
import gtk
+import goocanvas
-from sugar.canvas.GridWindow import GridWindow
+from sugar.canvas.CanvasView import CanvasView
-class PanelWindow(GridWindow):
- def __init__(self, model):
- GridWindow.__init__(self, model)
+class PanelWindow(gtk.Window):
+ def __init__(self, grid, model, x, y, width, height):
+ gtk.Window.__init__(self)
+
+ self._grid = grid
self.set_decorated(False)
@@ -14,3 +17,11 @@ class PanelWindow(GridWindow):
screen = gtk.gdk.screen_get_default()
self.window.set_transient_for(screen.get_root_window())
+
+ view = CanvasView()
+ view.show()
+ self.add(view)
+ view.set_model(model)
+
+ self._grid.set_constraints(self, x, y, width, height)
+ self._grid.set_constraints(view, x, y, width, height)
diff --git a/shell/frame/RightPanel.py b/shell/frame/RightPanel.py
index d66c711..80729fd 100644
--- a/shell/frame/RightPanel.py
+++ b/shell/frame/RightPanel.py
@@ -1,15 +1,13 @@
import goocanvas
-from frame.PanelWindow import PanelWindow
from sugar.canvas.IconItem import IconItem
from sugar.canvas.IconColor import IconColor
-from sugar.canvas.GridLayout import GridGroup
-from sugar.canvas.GridBox import GridBox
+from sugar.canvas.CanvasBox import CanvasBox
from sugar.presence import PresenceService
-class RightPanel(GridBox):
- def __init__(self, shell, friends):
- GridBox.__init__(self, GridBox.VERTICAL, 10, 6)
+class RightPanel(CanvasBox):
+ def __init__(self, grid, shell, friends):
+ CanvasBox.__init__(self, grid, CanvasBox.VERTICAL, 1)
self._shell = shell
self._friends = friends
self._activity_ps = None
@@ -26,7 +24,9 @@ class RightPanel(GridBox):
def add(self, buddy):
icon = IconItem(icon_name='stock-buddy',
color=IconColor(buddy.get_color()))
+ self.set_constraints(icon, 3, 3)
icon.connect('clicked', self.__buddy_clicked_cb, buddy)
+
self.add_child(icon)
self._buddies[buddy.get_name()] = icon
diff --git a/shell/frame/TopPanel.py b/shell/frame/TopPanel.py
index 05fefd6..14c0fb7 100644
--- a/shell/frame/TopPanel.py
+++ b/shell/frame/TopPanel.py
@@ -1,44 +1,58 @@
import goocanvas
-from sugar.canvas.GridLayout import GridGroup
-from sugar.canvas.GridLayout import GridConstraints
+from sugar.canvas.CanvasBox import CanvasBox
from sugar.canvas.IconItem import IconItem
import sugar
-class TopPanel(GridGroup):
- def __init__(self, shell):
- GridGroup.__init__(self, 16, 1)
+class TopPanel(goocanvas.Group):
+ def __init__(self, grid, shell):
+ goocanvas.Group.__init__(self)
+
+ self._grid = grid
self._shell = shell
- self.add_zoom_level(sugar.ZOOM_ACTIVITY, 'stock-zoom-activity', 1)
- self.add_zoom_level(sugar.ZOOM_HOME, 'stock-zoom-home', 2)
- self.add_zoom_level(sugar.ZOOM_FRIENDS, 'stock-zoom-friends', 3)
- self.add_zoom_level(sugar.ZOOM_MESH, 'stock-zoom-mesh', 4)
+ box = CanvasBox(grid, CanvasBox.HORIZONTAL, 1)
+ self._grid.set_constraints(box, 5, 0)
+ self.add_child(box)
- icon = IconItem(icon_name='stock-share', size=self._width)
- icon.connect('clicked', self.__share_clicked_cb)
- self.add_icon(icon, 12)
+ icon = IconItem(icon_name='stock-zoom-activity')
+ icon.connect('clicked', self.__level_clicked_cb, sugar.ZOOM_ACTIVITY)
+ box.set_constraints(icon, 3, 3)
+ box.add_child(icon)
- icon = IconItem(icon_name='stock-invite', size=self._width)
- icon.connect('clicked', self.__invite_clicked_cb)
- self.add_icon(icon, 13)
+ icon = IconItem(icon_name='stock-zoom-home')
+ icon.connect('clicked', self.__level_clicked_cb, sugar.ZOOM_HOME)
+ box.set_constraints(icon, 3, 3)
+ box.add_child(icon)
- icon = IconItem(icon_name='stock-chat', size=self._width)
- icon.connect('clicked', self.__chat_clicked_cb)
- self.add_icon(icon, 14)
+ icon = IconItem(icon_name='stock-zoom-friends')
+ icon.connect('clicked', self.__level_clicked_cb, sugar.ZOOM_FRIENDS)
+ box.set_constraints(icon, 3, 3)
+ box.add_child(icon)
- def add_zoom_level(self, level, icon_name, pos):
- icon = IconItem(icon_name=icon_name, size=self._height)
- icon.connect('clicked', self.__level_clicked_cb, level)
+ icon = IconItem(icon_name='stock-zoom-mesh')
+ icon.connect('clicked', self.__level_clicked_cb, sugar.ZOOM_MESH)
+ box.set_constraints(icon, 3, 3)
+ box.add_child(icon)
- constraints = GridConstraints(pos, 0, 1, 1, 6)
- self._layout.set_constraints(icon, constraints)
- self.add_child(icon)
+ box = CanvasBox(grid, CanvasBox.HORIZONTAL, 1)
+ self._grid.set_constraints(box, 60, 0)
+ self.add_child(box)
- def add_icon(self, icon, pos):
- constraints = GridConstraints(pos, 0, 1, 1, 6)
- self._layout.set_constraints(icon, constraints)
- self.add_child(icon)
+ icon = IconItem(icon_name='stock-share')
+ icon.connect('clicked', self.__share_clicked_cb)
+ box.set_constraints(icon, 3, 3)
+ box.add_child(icon)
+
+ icon = IconItem(icon_name='stock-invite')
+ icon.connect('clicked', self.__invite_clicked_cb)
+ box.set_constraints(icon, 3, 3)
+ box.add_child(icon)
+
+ icon = IconItem(icon_name='stock-chat')
+ icon.connect('clicked', self.__chat_clicked_cb)
+ box.set_constraints(icon, 3, 3)
+ box.add_child(icon)
def __level_clicked_cb(self, item, level):
self._shell.set_zoom_level(level)
diff --git a/sugar/canvas/CanvasView.py b/sugar/canvas/CanvasView.py
index 04e0308..c55e0c1 100644
--- a/sugar/canvas/CanvasView.py
+++ b/sugar/canvas/CanvasView.py
@@ -5,7 +5,5 @@ class CanvasView(goocanvas.CanvasView):
def __init__(self):
goocanvas.CanvasView.__init__(self)
- self.set_size_request(gtk.gdk.screen_width(),
- gtk.gdk.screen_height())
self.set_bounds(0, 0, 1200, 900)
self.set_scale(gtk.gdk.screen_width() / 1200.0)
diff --git a/sugar/canvas/Makefile.am b/sugar/canvas/Makefile.am
index b85a966..0ec1ac9 100644
--- a/sugar/canvas/Makefile.am
+++ b/sugar/canvas/Makefile.am
@@ -2,7 +2,9 @@ sugardir = $(pythondir)/sugar/canvas
sugar_PYTHON = \
__init__.py \
CanvasView.py \
+ CanvasBox.py \
Colors.py \
+ Grid.py \
GridBox.py \
GridLayout.py \
GridModel.py \
diff --git a/tests/test-grid.py b/tests/test-grid.py
index b664fa9..49d7e4f 100755
--- a/tests/test-grid.py
+++ b/tests/test-grid.py
@@ -13,9 +13,8 @@ import goocanvas
from sugar.canvas.IconColor import IconColor
from sugar.canvas.IconItem import IconItem
from sugar.canvas.CanvasView import CanvasView
-from sugar.canvas.GridBox import GridBox
-from sugar.canvas.GridModel import GridModel
-from sugar.canvas.GridLayout import GridConstraints
+from sugar.canvas.CanvasBox import CanvasBox
+from sugar.canvas.Grid import Grid
def _new_icon_clicked_cb(icon):
box.remove_child(icon)
@@ -25,21 +24,26 @@ def _icon_clicked_cb(icon):
icon.connect('clicked', _new_icon_clicked_cb)
box.add_child(icon, 0)
-model = GridModel('#4f4f4f')
-layout = model.get_layout()
+model = goocanvas.CanvasModelSimple()
+root = model.get_root_item()
-box = GridBox(GridBox.HORIZONTAL, 5, 6)
-layout.set_constraints(box, GridConstraints(0, 0, 5, 1))
-model.add(box)
+grid = Grid()
+
+box = CanvasBox(grid, CanvasBox.HORIZONTAL, 1)
+grid.set_constraints(box, 5, 5)
+root.add_child(box)
rect = goocanvas.Rect(fill_color='red')
+box.set_constraints(rect, 5, 5)
box.add_child(rect)
icon = IconItem(color=IconColor(), icon_name='activity-web')
icon.connect('clicked', _icon_clicked_cb)
+box.set_constraints(icon, 5, 5)
box.add_child(icon)
icon = IconItem(color=IconColor(), icon_name='activity-groupchat')
+box.set_constraints(icon, 5, 5)
box.add_child(icon)
window = gtk.Window()
@@ -49,6 +53,6 @@ window.show()
canvas = CanvasView()
canvas.show()
window.add(canvas)
-canvas.set_model(model.get())
+canvas.set_model(model)
gtk.main()