Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-08-19 09:12:25 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-08-19 09:12:25 (GMT)
commit0d4acb6e78ecd52b31b0b861bcf4a77b22936e59 (patch)
tree527e35f29e54584400106db64cb8e2f2de6d7e8f /shell
parentde65daf5480b673df26c5144925c8041a766cc87 (diff)
Start implementing friends/mesh
Diffstat (limited to 'shell')
-rwxr-xr-xshell/Shell.py4
-rw-r--r--shell/home/FriendsModel.py40
-rw-r--r--shell/home/FriendsView.py31
-rw-r--r--shell/home/HomeModel.py13
-rw-r--r--shell/home/HomeWindow.py6
-rw-r--r--shell/home/Makefile.am7
-rw-r--r--shell/home/MeshModel.py (renamed from shell/home/ActivitiesModel.py)2
-rw-r--r--shell/home/MeshView.py10
8 files changed, 100 insertions, 13 deletions
diff --git a/shell/Shell.py b/shell/Shell.py
index c8ebe06..5876f70 100755
--- a/shell/Shell.py
+++ b/shell/Shell.py
@@ -9,6 +9,7 @@ import wnck
from ActivityRegistry import ActivityRegistry
from home.HomeWindow import HomeWindow
+from home.HomeModel import HomeModel
from sugar import env
from Owner import ShellOwner
from sugar.presence.PresenceService import PresenceService
@@ -77,7 +78,8 @@ class Shell(gobject.GObject):
self._chat_controller = ChatController(self)
self._chat_controller.listen()
- self._home_window = HomeWindow(self)
+ home_model = HomeModel(self._registry)
+ self._home_window = HomeWindow(self, home_model)
self._home_window.show()
self._screen.connect('window-opened', self.__window_opened_cb)
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):