From 31075369737c275ea1da2e7bffcf4b21ce542024 Mon Sep 17 00:00:00 2001 From: Morgan Collett Date: Mon, 02 Jul 2007 15:34:14 +0000 Subject: Better reflect status messages as different to chat text --- diff --git a/chat.py b/chat.py index 3795bec..200b34d 100644 --- a/chat.py +++ b/chat.py @@ -1,4 +1,4 @@ - Copyright 2007 Collabora Ltd. +# Copyright 2007 Collabora Ltd. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,7 +20,6 @@ import gtk import pango import logging from datetime import datetime -from types import FunctionType from sugar import profile from sugar.activity.activity import Activity, ActivityToolbox @@ -39,6 +38,7 @@ from telepathy.interfaces import ( CHANNEL_TYPE_TEXT) from telepathy.constants import ( + CHANNEL_GROUP_FLAG_CHANNEL_SPECIFIC_HANDLES, CONNECTION_HANDLE_TYPE_NONE, CONNECTION_HANDLE_TYPE_CONTACT, CONNECTION_HANDLE_TYPE_ROOM, CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, CONNECTION_STATUS_CONNECTED, CONNECTION_STATUS_DISCONNECTED, @@ -82,6 +82,8 @@ class Chat(Activity): self._joined_cb() else: # we are creating the activity + self.add_status(self.owner.props.nick, + self._buddy_icon(self.owner), 'Connecting') self.share() # Share immediately since there are no invites yet def _shared_cb(self, activity): @@ -91,6 +93,8 @@ class Chat(Activity): def _setup(self): self.text_channel = TextChannelWrapper(self) self.text_channel.set_received_callback(self._received_cb) + self.add_status(self.owner.props.nick, self._buddy_icon(self.owner), + 'Connected') self._shared_activity.connect('buddy-joined', self._buddy_joined_cb) self._shared_activity.connect('buddy-left', self._buddy_left_cb) @@ -121,7 +125,7 @@ class Chat(Activity): else: nick = '???' icon = self._buddy_icon(buddy) - self.add_text(nick, icon, 'joined the chat') + self.add_status(nick, icon, 'joined the chat') def _buddy_left_cb (self, activity, buddy): """Show a buddy who joined""" @@ -132,7 +136,7 @@ class Chat(Activity): else: nick = '???' icon = self._buddy_icon(buddy) - self.add_text(nick, icon, 'left the chat') + self.add_status(nick, icon, 'left the chat') def _buddy_already_exists(self, buddy): """Show a buddy already in the chat.""" @@ -143,7 +147,7 @@ class Chat(Activity): else: nick = '???' icon = self._buddy_icon(buddy) - self.add_text(nick, icon, 'is here') + self.add_status(nick, icon, 'is here') def _buddy_icon(self, buddy): """Make a CanvasIcon for this Buddy""" @@ -193,6 +197,12 @@ class Chat(Activity): return box def add_text(self, name, icon, text): + """Display text on screen, with name and icon. + + name -- string, buddy nick + icon -- buddy icon - see self._buddy_icon + text -- string, what the buddy said + """ self._add_log(name, text) text = hippo.CanvasText( text=text, @@ -224,6 +234,43 @@ class Chat(Activity): adj = self.scrolled_window.get_vadjustment() adj.set_value(adj.upper - adj.page_size - 804) + def add_status(self, name, icon, text): + """Display text on screen, with name and icon. + + name -- string, buddy nick + text -- string, what the buddy said + """ + self._add_log('*', '%s %s' % (name, text)) + text = hippo.CanvasText( + text=text, + size_mode=hippo.CANVAS_SIZE_WRAP_WORD, + xalign=hippo.ALIGNMENT_START) + name = hippo.CanvasText(text=name) + + vbox = hippo.CanvasBox(padding=px(5)) + + if icon: + vbox.append(icon) + + vbox.append(name) + + rb = RoundBox(padding=px(3)) + rb.append(text) + + box = hippo.CanvasBox( + orientation=hippo.ORIENTATION_HORIZONTAL, + spacing=px(5)) + box.append(vbox) + box.append(rb) + + self.conversation.append(box) + + aw, ah = self.conversation.get_allocation() + rw, rh = self.conversation.get_height_request(aw) + + adj = self.scrolled_window.get_vadjustment() + adj.set_value(adj.upper - adj.page_size - 804) + def entry_activate_cb(self, entry): text = entry.props.text logger.debug('Entry: %s' % text) @@ -304,9 +351,6 @@ class TextChannelWrapper(object): self._logger.debug( 'Failed to connect callback - text channel not connected.') return - if type(callback) != FunctionType: - self._logger.debug('Invalid callback - failed to connect') - return self._activity_cb = callback self._text_chan[CHANNEL_TYPE_TEXT].connect_to_signal('Received', self._received_cb) @@ -335,7 +379,7 @@ class TextChannelWrapper(object): if my_csh == cs_handle: handle = conn.GetSelfHandle() elif group.GetGroupFlags() & \ - telepathy.CHANNEL_GROUP_FLAG_CHANNEL_SPECIFIC_HANDLES: + CHANNEL_GROUP_FLAG_CHANNEL_SPECIFIC_HANDLES: handle = group.GetHandleOwners([cs_handle])[0] else: handle = cs_handle -- cgit v0.9.1