From 0d4acb6e78ecd52b31b0b861bcf4a77b22936e59 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Sat, 19 Aug 2006 09:12:25 +0000 Subject: Start implementing friends/mesh --- (limited to 'shell/home') diff --git a/shell/home/FriendsModel.py b/shell/home/FriendsModel.py new file mode 100644 index 0000000..6f18083 --- /dev/null +++ b/shell/home/FriendsModel.py @@ -0,0 +1,40 @@ +import gobject + +from sugar.presence.PresenceService import PresenceService + +class Friend: + def __init__(self, buddy): + self._buddy = buddy + + def get_name(self): + return self._buddy.get_name() + +class FriendsModel(gobject.GObject): + __gsignals__ = { + 'friend-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + 'friend-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])) + } + + def __init__(self): + gobject.GObject.__init__(self) + + self._friends = [] + + self._pservice = PresenceService() + self._pservice.connect("buddy-appeared", self.__buddy_appeared_cb) + + for buddy in self._pservice.get_buddies(): + self.add_friend(buddy) + + def add_friend(self, buddy): + friend = Friend(buddy) + self._friends.append(friend) + self.emit('friend-added', friend) + + def __iter__(self): + return self._friends.__iter__() + + def __buddy_appeared_cb(self, pservice, buddy): + self.add_friend(buddy) diff --git a/shell/home/FriendsView.py b/shell/home/FriendsView.py index baa834b..b12616a 100644 --- a/shell/home/FriendsView.py +++ b/shell/home/FriendsView.py @@ -1,19 +1,44 @@ +import random + import goocanvas +from sugar.canvas.IconItem import IconItem + class Model(goocanvas.CanvasModelSimple): - def __init__(self, shell): + def __init__(self, data_model): goocanvas.CanvasModelSimple.__init__(self) root = self.get_root_item() + item = goocanvas.Rect(width=1200, height=900, + fill_color="#d8d8d8") + root.add_child(item) + + for friend in data_model: + self.add_friend(friend) + + data_model.connect('friend-added', self.__friend_added_cb) + + def add_friend(self, friend): + root = self.get_root_item() + + icon = IconItem('stock-buddy', 'green', 48) + icon.set_property('x', random.random() * 1100) + icon.set_property('y', random.random() * 800) + + root.add_child(icon) + + def __friend_added_cb(self, data_model, friend): + self.add_friend(friend) + class FriendsView(goocanvas.CanvasView): - def __init__(self, shell): + def __init__(self, shell, data_model): goocanvas.CanvasView.__init__(self) self._shell = shell self.connect("item_view_created", self.__item_view_created_cb) - canvas_model = Model(shell) + canvas_model = Model(data_model) self.set_model(canvas_model) def __item_view_created_cb(self, view, item_view, item): diff --git a/shell/home/HomeModel.py b/shell/home/HomeModel.py new file mode 100644 index 0000000..5f4965d --- /dev/null +++ b/shell/home/HomeModel.py @@ -0,0 +1,13 @@ +from home.FriendsModel import FriendsModel +from home.MeshModel import MeshModel + +class HomeModel: + def __init__(self, registry): + self._friends = FriendsModel() + self._mesh = MeshModel(registry) + + def get_friends(self): + return self._friends + + def get_mesh(self): + return self._mesh diff --git a/shell/home/HomeWindow.py b/shell/home/HomeWindow.py index ca3007d..86c83ab 100644 --- a/shell/home/HomeWindow.py +++ b/shell/home/HomeWindow.py @@ -9,7 +9,7 @@ class HomeWindow(gtk.Window): FRIENDS_VIEW = 1 MESH_VIEW = 2 - def __init__(self, shell): + def __init__(self, shell, model): gtk.Window.__init__(self) self.connect('realize', self.__realize_cb) @@ -23,12 +23,12 @@ class HomeWindow(gtk.Window): self._setup_canvas(home_view) home_view.show() - friends_view = FriendsView(shell) + friends_view = FriendsView(shell, model.get_friends()) self._nb.append_page(friends_view) self._setup_canvas(friends_view) friends_view.show() - mesh_view = MeshView(shell) + mesh_view = MeshView(shell, model.get_mesh()) self._setup_canvas(mesh_view) self._nb.append_page(mesh_view) mesh_view.show() diff --git a/shell/home/Makefile.am b/shell/home/Makefile.am index 72445ec..2a86a26 100644 --- a/shell/home/Makefile.am +++ b/shell/home/Makefile.am @@ -1,7 +1,10 @@ -sugardir = $(pkgdatadir)/shell +sugardir = $(pkgdatadir)/shell/home sugar_PYTHON = \ __init__.py \ + FriendsModel.py \ FriendsView.py \ + MeshModel.py \ MeshView.py \ HomeView.py \ - HomeWindow.py + HomeWindow.py \ + HomeModel.py diff --git a/shell/home/ActivitiesModel.py b/shell/home/MeshModel.py index c46256d..b2163ac 100644 --- a/shell/home/ActivitiesModel.py +++ b/shell/home/MeshModel.py @@ -19,7 +19,7 @@ class ActivityInfo: def get_service(self): return self._service -class ActivitiesModel(gobject.GObject): +class MeshModel(gobject.GObject): __gsignals__ = { 'activity-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])), diff --git a/shell/home/MeshView.py b/shell/home/MeshView.py index 7b2e5f6..611ad18 100644 --- a/shell/home/MeshView.py +++ b/shell/home/MeshView.py @@ -1,19 +1,23 @@ import goocanvas class Model(goocanvas.CanvasModelSimple): - def __init__(self, shell): + def __init__(self, data_model): goocanvas.CanvasModelSimple.__init__(self) root = self.get_root_item() + item = goocanvas.Rect(width=1200, height=900, + fill_color="#4f4f4f") + root.add_child(item) + class MeshView(goocanvas.CanvasView): - def __init__(self, shell): + def __init__(self, shell, data_model): goocanvas.CanvasView.__init__(self) self._shell = shell self.connect("item_view_created", self.__item_view_created_cb) - canvas_model = Model(shell) + canvas_model = Model(data_model) self.set_model(canvas_model) def __item_view_created_cb(self, view, item_view, item): -- cgit v0.9.1