Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/activities
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-10-13 13:46:11 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-10-13 13:46:11 (GMT)
commit75b158c3d76eca9b13c4c1cced7a4cfd009927e9 (patch)
treec42f97ce189b0b0754006999971b988de97353c9 /activities
parent4ac331200d3a40853ea483fe9840c430d7db35ba (diff)
First go at shared links (not functional)
Diffstat (limited to 'activities')
-rw-r--r--activities/web/linkscontroller.py19
-rw-r--r--activities/web/linksmodel.py35
-rw-r--r--activities/web/linksview.py36
-rw-r--r--activities/web/toolbar.py21
-rw-r--r--activities/web/webactivity.py25
5 files changed, 132 insertions, 4 deletions
diff --git a/activities/web/linkscontroller.py b/activities/web/linkscontroller.py
new file mode 100644
index 0000000..e9d4cab
--- /dev/null
+++ b/activities/web/linkscontroller.py
@@ -0,0 +1,19 @@
+from sugar.presence import PresenceService
+
+class LinksController(object):
+ def __init__(self, service, model):
+ self._model = model
+
+ self._pservice = PresenceService.get_instance()
+
+ self._stream = Stream.new_from_service(service)
+ self._stream.set_data_listener(self._recv_message)
+ self._stream_writer = self._stream.new_writer()
+
+ def post_link(self, title, address):
+ self._stream_writer.write('test')
+
+ def _recv_message(self, address, msg):
+ buddy = self._pservice.get_buddy_by_address(address)
+ if buddy:
+ self._model.add_link(buddy, 'Test title', 'Test address')
diff --git a/activities/web/linksmodel.py b/activities/web/linksmodel.py
new file mode 100644
index 0000000..db9e411
--- /dev/null
+++ b/activities/web/linksmodel.py
@@ -0,0 +1,35 @@
+import gobject
+
+class Link(object):
+ def __init__(self, buddy, title, url):
+ self.buddy = buddy
+ self.title = title
+ self.url = url
+
+class LinksModel(gobject.GObject):
+ __gsignals__ = {
+ 'link-added': (gobject.SIGNAL_RUN_FIRST,
+ gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])),
+ 'link-removed': (gobject.SIGNAL_RUN_FIRST,
+ gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])),
+ }
+
+ def __init__(self):
+ gobject.GObject.__init__(self)
+ self._links = {}
+
+ def add_link(buddy, title, url):
+ link = Link(buddy, title, url)
+ self._links[(buddy.get_name(), url)] = link
+
+ self.emit('link-added', link)
+
+ def remove_link(buddy, url):
+ key = (buddy.get_name(), url)
+ if self._links.haskey(key):
+ link = self._links[key]
+ del self._links[key]
+ self.emit('link-removed', link)
+
+ def __iter__(self):
+ return self._links.values().__iter__()
diff --git a/activities/web/linksview.py b/activities/web/linksview.py
new file mode 100644
index 0000000..fde1156
--- /dev/null
+++ b/activities/web/linksview.py
@@ -0,0 +1,36 @@
+import hippo
+
+from sugar.graphics.bubble import Bubble
+
+class LinksView(hippo.Canvas):
+ def __init__(self, model):
+ hippo.Canvas.__init__(self)
+
+ self._bubbles = {}
+
+ self._box = hippo.CanvasBox(background_color=0x414141ff)
+ self.set_root(self._box)
+
+ for link in model:
+ self._add_link(link)
+
+ model.connect('link_added', self._link_added_cb)
+ model.connect('link_removed', self._link_removed_cb)
+
+ def _add_link(self, link):
+ bubble = Bubble(color=link.buddy.get_color())
+ self._box.append(link)
+
+ self._bubbles[link] = bubble
+
+ def _remove_link(self, link):
+ bubble = self._bubbles[link]
+ self._box.remove(bubble)
+
+ del self._bubbles[link]
+
+ def _link_added_cb(self, model, link):
+ self._add_link(link)
+
+ def _link_removed_cb(self, model, link):
+ self._removed_link(link)
diff --git a/activities/web/toolbar.py b/activities/web/toolbar.py
index a820b8f..a191143 100644
--- a/activities/web/toolbar.py
+++ b/activities/web/toolbar.py
@@ -43,6 +43,18 @@ class Toolbar(gtk.Toolbar):
self.insert(address_item, -1)
address_item.show()
+ separator = gtk.SeparatorToolItem()
+ separator.set_draw(False)
+ self.insert(separator, -1)
+ separator.show()
+
+ self._post = gtk.ToolButton()
+ self._post.props.sensitive = False
+ self._post.set_icon_name('stock-add')
+ self._post.connect("clicked", self._post_cb)
+ self.insert(self._post, -1)
+ self._post.show()
+
self._insert_spring()
self._embed = embed
@@ -53,6 +65,10 @@ class Toolbar(gtk.Toolbar):
self._embed.connect("notify::can-go-forward",
self._can_go_forward_changed_cb)
+ def set_links_controller(self, links_controller):
+ self._links_controller = links_controller
+ self._post.props.sensitive = False
+
def _progress_changed_cb(self, embed, spec):
self._entry.props.progress = embed.props.progress
@@ -74,6 +90,11 @@ class Toolbar(gtk.Toolbar):
def _go_forward_cb(self, button):
self._embed.go_forward()
+ def _post_cb(self, button):
+ title = self._embed.get_title()
+ address = self._embed.get_location()
+ self._links_controller.post_link(title, address)
+
def _insert_spring(self):
separator = gtk.SeparatorToolItem()
separator.set_draw(False)
diff --git a/activities/web/webactivity.py b/activities/web/webactivity.py
index 452fcae..518d8bb 100644
--- a/activities/web/webactivity.py
+++ b/activities/web/webactivity.py
@@ -6,6 +6,9 @@ from sugar.activity.Activity import Activity
from sugar import env
from webbrowser import WebBrowser
from toolbar import Toolbar
+from linksmodel import LinksModel
+from linksview import LinksView
+from linkscontroller import LinksController
_HOMEPAGE = 'http://www.google.com'
@@ -20,13 +23,24 @@ class WebActivity(Activity):
self._browser = WebBrowser()
self._browser.connect('notify::title', self._title_changed_cb)
- toolbar = Toolbar(self._browser)
- vbox.pack_start(toolbar, False)
- toolbar.show()
+ links_model = LinksModel()
+ links_view = LinksView(links_model)
- vbox.pack_start(self._browser)
+ self._toolbar = Toolbar(self._browser)
+ vbox.pack_start(self._toolbar, False)
+ self._toolbar.show()
+
+ hbox = gtk.HBox()
+
+ hbox.pack_start(links_view, False)
+ links_view.show()
+
+ hbox.pack_start(self._browser)
self._browser.show()
+ vbox.pack_start(hbox)
+ hbox.show()
+
self.add(vbox)
vbox.show()
@@ -35,6 +49,9 @@ class WebActivity(Activity):
def join(self, activity_ps):
Activity.join(self, activity_ps)
+ links_controller = LinksController(service, links_model)
+ self._toolbar.set_links_controller(links_controller)
+
url = self._service.get_published_value('URL')
if url:
self._browser.load_url(url)