From a5b7dc3a3664a278e700449d352554654e57905e Mon Sep 17 00:00:00 2001 From: erich koslovsky Date: Sat, 18 Aug 2007 22:02:09 +0000 Subject: Added the displaying of the creator of a link with an xo icon overlaight over the screenshot. Added the displaying of information of the link. --- 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 = '' % fill_color + data = re.sub('', entity, data) + + if stroke_color: + entity = '' % stroke_color + data = re.sub('', 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 @@ + + + + + + + +]> + + + + + + + + + + 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) -- cgit v0.9.1