diff options
-rw-r--r-- | linkbutton.py | 50 | ||||
-rw-r--r-- | linktoolbar.py | 7 | ||||
-rw-r--r-- | messenger.py | 28 | ||||
-rw-r--r-- | stock-buddy-link.svg | 23 | ||||
-rwxr-xr-x | webactivity.py | 22 |
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) |