Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--linkbutton.py50
-rw-r--r--linktoolbar.py7
-rw-r--r--messenger.py28
-rw-r--r--stock-buddy-link.svg23
-rwxr-xr-xwebactivity.py22
5 files changed, 100 insertions, 30 deletions
diff --git a/linkbutton.py b/linkbutton.py
index c363eaf..4e9bd68 100644
--- a/linkbutton.py
+++ b/linkbutton.py
@@ -16,18 +16,23 @@
# Boston, MA 02111-1307, USA.
import gtk
+import os
+
+import rsvg
+import re
from sugar.graphics.palette import Palette, WidgetInvoker
from sugar.graphics import style
+
class LinkButton(gtk.RadioToolButton):
- def __init__(self, buffer, pos, group=None):
+ def __init__(self, buffer, color, pos, group=None):
gtk.RadioToolButton.__init__(self, group=group)
- self._palette = None
- self.set_image(buffer)
+ self._palette = None
+ self.set_image(buffer, color.split(',')[1], color.split(',')[0])
self.pos = pos
- def set_image(self, buffer):
+ def set_image(self, buffer, fill='#0000ff', stroke='#4d4c4f'):
img = gtk.Image()
loader = gtk.gdk.PixbufLoader()
loader.write(buffer)
@@ -35,10 +40,47 @@ class LinkButton(gtk.RadioToolButton):
pixbuf = loader.get_pixbuf()
del loader
+ xo_buddy = os.path.join(os.path.dirname(__file__), "stock-buddy-link.svg")
+ pixbuf_xo = self._read_xo_icon(xo_buddy, fill, stroke)
+
+ width = pixbuf_xo.get_width()
+ height = pixbuf_xo.get_height()
+
+ print pixbuf.get_width()
+ print pixbuf.get_height()
+
+ print pixbuf_xo.get_width()
+ print pixbuf_xo.get_height()
+
+ dest_x = 100
+ dest_y = 66
+ w = width/2
+ h = height/2
+ scale_x = 0.5
+ scale_y = 0.5
+
+ pixbuf_xo.composite(pixbuf, dest_x, dest_y, w, h, dest_x, dest_y, scale_x, scale_y, gtk.gdk.INTERP_BILINEAR, 255)
+
img.set_from_pixbuf(pixbuf)
self.set_icon_widget(img)
img.show()
+ def _read_xo_icon(self, filename, fill_color, stroke_color):
+ icon_file = open(filename, 'r')
+ data = icon_file.read()
+ icon_file.close()
+
+ if fill_color:
+ entity = '<!ENTITY fill_color "%s">' % fill_color
+ data = re.sub('<!ENTITY fill_color .*>', entity, data)
+
+ if stroke_color:
+ entity = '<!ENTITY stroke_color "%s">' % stroke_color
+ data = re.sub('<!ENTITY stroke_color .*>', entity, data)
+
+ data_size = len(data)
+ return rsvg.Handle(data=data).get_pixbuf()
+
def get_palette(self):
return self._palette
diff --git a/linktoolbar.py b/linktoolbar.py
index ffadf45..315d724 100644
--- a/linktoolbar.py
+++ b/linktoolbar.py
@@ -42,17 +42,18 @@ class LinkToolbar(gtk.Toolbar):
def __init__(self):
gtk.Toolbar.__init__(self)
- def _add_link(self, url, buffer, pos):
+ def _add_link(self, url, buffer, color, title, owner, pos):
if self.get_children():
group = self.get_children()[0]
else:
group = None
- palette = Palette(url)
+ info = 'title: ' + title +'\nurl: '+ url + '\nowner: ' + owner
+ palette = Palette(info)
palette.props.position = Palette.TOP
- link = LinkButton(buffer, pos, group)
+ link = LinkButton(buffer, color, pos, group)
link.set_palette(palette)
link.connect('clicked', self._link_clicked_cb, url)
self.insert(link, 0)
diff --git a/messenger.py b/messenger.py
index 932f570..f989559 100644
--- a/messenger.py
+++ b/messenger.py
@@ -30,7 +30,7 @@ PATH = "/org/laptop/WebActivity"
_logger = logging.getLogger('messenger')
class Messenger(ExportedGObject):
- def __init__(self, tube, is_initiator, model, linkbar):
+ def __init__(self, tube, is_initiator, model, linkbar, owner):
ExportedGObject.__init__(self, tube, PATH)
self.tube = tube
self.is_initiator = is_initiator
@@ -38,6 +38,8 @@ class Messenger(ExportedGObject):
self.entered = False
self.linkbar = linkbar
self.model = model
+ self.owner = owner
+ _logger.debug('Owner=%s %s' %(self.owner.props.nick, self.owner.props.color))
self.tube.watch_participants(self.participant_change_cb)
def participant_change_cb(self, added, removed):
@@ -81,7 +83,7 @@ class Messenger(ExportedGObject):
self.tube.get_object(sender, PATH).init_members(self.members)
for link in self.model.links:
if link['deleted'] == 0:
- self.tube.get_object(sender, PATH).transfer_links(link['url'], link['title'], base64.b64encode(link['thumb']),dbus_interface=IFACE, reply_handler=self.reply_transfer, error_handler=lambda e:self.error_transfer(e, 'transfering file'))
+ self.tube.get_object(sender, PATH).transfer_links(link['url'], link['title'], link['color'], link['owner'], base64.b64encode(link['thumb']),dbus_interface=IFACE, reply_handler=self.reply_transfer, error_handler=lambda e:self.error_transfer(e, 'transfering file'))
def reply_transfer(self):
pass
@@ -96,32 +98,32 @@ class Messenger(ExportedGObject):
self.members = members
self.id = self.members.index(self.tube.get_unique_name())
- @dbus.service.method(dbus_interface=IFACE, in_signature='sss', out_signature='')
- def transfer_links(self, url, title, buffer):
+ @dbus.service.method(dbus_interface=IFACE, in_signature='sssss', out_signature='')
+ def transfer_links(self, url, title, color, owner, buffer):
'''Sync the link list with the others '''
_logger.debug('Data received to sync link list.')
thumb = base64.b64decode(buffer)
self.model.links.append( {'hash':sha.new(url).hexdigest(), 'url':url, 'title':title, 'thumb':thumb,
- 'owner':'me', 'color':'red', 'deleted':0} )
- self.linkbar._add_link(url, thumb, len(self.model.links)-1)
+ 'owner':owner, 'color':color, 'deleted':0} )
+ self.linkbar._add_link(url, thumb, color, title, owner, len(self.model.links)-1)
- def add_link(self, url, title, thumb):
+ def add_link(self, url, title, color, owner, thumb):
_logger.debug('Add Link: %s '%url)
- self._add_link(url, title, base64.b64encode(thumb))
+ self._add_link(url, title, color, owner, base64.b64encode(thumb))
- @dbus.service.signal(IFACE, signature='sss')
- def _add_link(self, url, title, thumb):
+ @dbus.service.signal(IFACE, signature='sssss')
+ def _add_link(self, url, title, color, owner, thumb):
'''Signal to send the link information (add)'''
- def _add_link_receiver(self, url, title, thumb, sender=None):
+ def _add_link_receiver(self, url, title, color, owner, thumb, sender=None):
'''Member sent a link'''
handle = self.tube.bus_name_to_handle[sender]
if self.tube.self_handle != handle:
buffer = base64.b64decode(thumb)
self.model.links.append( {'hash':sha.new(url).hexdigest(), 'url':url, 'title':title, 'thumb':buffer,
- 'owner':'me', 'color':'red', 'deleted':0} )
- self.linkbar._add_link(url, buffer, len(self.model.links)-1)
+ 'owner':owner, 'color':color, 'deleted':0} )
+ self.linkbar._add_link(url, buffer, color, title, owner, len(self.model.links)-1)
_logger.debug('Added link: %s to linkbar.'%(url))
def rm_link(self, linkname):
diff --git a/stock-buddy-link.svg b/stock-buddy-link.svg
new file mode 100644
index 0000000..7e79838
--- /dev/null
+++ b/stock-buddy-link.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+ <!ENTITY stroke_color "#020202">
+ <!ENTITY fill_color "#0000ff">
+ <!ENTITY b_fill "#B2B2B2">
+ <!ENTITY b_stroke "#000000">
+]>
+
+<svg version="1.1" id="Icon" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="64" height="64"
+ viewBox="0 0 64 64" overflow="visible" enable-background="new 0 0 64 64" xml:space="preserve">
+
+ <rect fill="&b_fill;" stroke="&b_stroke;" stroke-width="3px" x="3" y="2" width="60" height="60" rx="8"/>
+
+ <path
+ d="M 38.404455,39.235864 L 48.504455,49.335864 C 49.256455,50.085864 49.721455,51.120864 49.721455,52.267864 C 49.721455,54.554864 47.866455,56.410864 45.575455,56.410864 C 44.430455,56.410864 43.397455,55.947864 42.643455,55.199864 L 32.543455,45.097864 L 22.443455,55.197864 C 21.693455,55.947864 20.656455,56.408864 19.510455,56.408864 C 17.225455,56.408864 15.368455,54.554864 15.368455,52.267864 C 15.368455,51.121864 15.833455,50.083864 16.580455,49.333864 L 26.683455,39.233864 L 16.580455,29.131864 C 15.833455,28.382864 15.368455,27.346864 15.368455,26.201864 C 15.368455,23.912864 17.221455,22.056864 19.513455,22.056864 C 20.656455,22.056864 21.693455,22.521864 22.443455,23.270864 L 32.542455,33.371864 L 42.642455,23.269864 C 43.396455,22.520864 44.429455,22.055864 45.576455,22.055864 C 47.865455,22.055864 49.722455,23.911864 49.722455,26.200864 C 49.722455,27.345864 49.255455,28.379864 48.505455,29.130864 L 38.404455,39.235864 z "
+ fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" />
+
+ <circle cx="18.924999" cy="9.8719997" r="8.1219997" transform="translate(13.617455,5.111864)"
+ fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" />
+
+</svg>
diff --git a/webactivity.py b/webactivity.py
index 6752513..a0f4c43 100755
--- a/webactivity.py
+++ b/webactivity.py
@@ -130,7 +130,8 @@ class WebActivity(activity.Activity):
if self._shared_activity is not None:
_logger.debug('shared: %s' %self._shared_activity.props.joined)
-
+
+ self.owner = self.pservice.get_owner()
if self._shared_activity is not None:
# We are joining the activity
_logger.debug('Joined activity')
@@ -233,7 +234,7 @@ class WebActivity(activity.Activity):
id, group_iface=self.text_chan[telepathy.CHANNEL_INTERFACE_GROUP])
_logger.debug('Tube created')
- self.messenger = Messenger(self.tube_conn, self.initiating, self.model, self.linkbar)
+ self.messenger = Messenger(self.tube_conn, self.initiating, self.model, self.linkbar, self.owner)
def _load_homepage(self):
@@ -259,7 +260,7 @@ class WebActivity(activity.Activity):
self.model.read(file_path)
i=0
for link in self.model.links:
- _logger.debug('read: url=%s title=%s d=%s' % (link['url'], link['title'], link['deleted']))
+ _logger.debug('read: url=%s title=%s d=%s' % (link['url'], link['title'], link['color']))
if link['deleted'] == 0:
self.linkbar._add_link(link['url'], link['thumb'], i)
i+=1
@@ -280,7 +281,7 @@ class WebActivity(activity.Activity):
self.metadata['title'] = self._browser.props.title
for link in self.model.links:
- _logger.debug('write: url=%s title=%s d=%s' % (link['url'], link['title'], link['deleted']))
+ _logger.debug('write: url=%s title=%s d=%s' % (link['url'], link['title'], link['color']))
self.model.session_data = self._browser.get_session()
_logger.debug('Trying save session: %s.' % self.model.session_data)
@@ -308,12 +309,13 @@ class WebActivity(activity.Activity):
if gtk.gdk.keyval_name(event.keyval) == "l":
buffer = self._get_screenshot()
_logger.debug('Add link: %s.' % self.current)
- self.model.links.append( {'hash':sha.new(self.current).hexdigest(), 'url':self.current, 'title':self.webtitle, 'thumb':buffer,
- 'owner':'me', 'color':'red', 'deleted':0} )
+ self.model.links.append( {'hash':sha.new(self.current).hexdigest(), 'url':self.current, 'title':self.webtitle,
+ 'thumb':buffer, 'owner':self.owner.props.nick, 'color':self.owner.props.color, 'deleted':0} )
- self.linkbar._add_link(self.current, buffer, len(self.model.links)-1)
+ self.linkbar._add_link(self.current, buffer, self.owner.props.color, self.webtitle, self.owner.props.nick,
+ len(self.model.links)-1)
if self.messenger is not None:
- self.messenger.add_link(self.current, self.webtitle, buffer)
+ self.messenger.add_link(self.current, self.webtitle, self.owner.props.color, self.owner.props.nick, buffer)
return True
elif gtk.gdk.keyval_name(event.keyval) == "r":
_logger.debug('Remove link: %s.' % self.current)
@@ -344,8 +346,8 @@ class WebActivity(activity.Activity):
screenshot.get_from_drawable(window, window.get_colormap(), 0, 0, 0, 0,
width, height)
- screenshot = screenshot.scale_simple(style.zoom(150),
- style.zoom(150),
+ screenshot = screenshot.scale_simple(style.zoom(160),
+ style.zoom(120),
gtk.gdk.INTERP_BILINEAR)
buffer = self.get_buffer(screenshot)