def add_text(self, buddy, text, status_message=False): '''Display text on screen, with name and colors. buddy -- buddy object or dict {nick: string, color: string} (The dict is for loading the chat log from the journal, when we don't have the buddy object any more.) text -- string, what the buddy said status_message -- boolean False: show what buddy said True: show what buddy did .----- rb ------------. | +----align-------+ | | | +--message---+ | | | | | nick: | | | | | | text 1 | | | | | | text 2 | | | | | +------------+ | | | +----------------+ | `----------------- +--' \| The color scheme for owner messages is: nick in lighter of stroke and fill colors background in darker of stroke and fill colors text in white The color scheme for buddy messages is: nick in darker of stroke and fill colors background in light gray text in black rb has a tail on the right for owner messages and the left for buddy messages. ''' if not buddy: buddy = self._owner if type(buddy) is dict: # dict required for loading chat log from journal nick = buddy['nick'] color = buddy['color'] else: nick = buddy.props.nick color = buddy.props.color try: color_stroke_html, color_fill_html = color.split(',') except ValueError: color_stroke_html, color_fill_html = ('#000000', '#888888') lighter = lighter_color(color.split(',')) darker = 1 - lighter if len(text) > 3 and text[0:4] == '/me ': me_message = True else: me_message = False if status_message or me_message: text_color = style.COLOR_WHITE nick_color = style.COLOR_WHITE color_fill = style.Color('#808080') highlight_fill = style.COLOR_WHITE tail = None else: highlight_fill = style.COLOR_BUTTON_GREY if is_dark_too_light(color.split(',')[darker]): text_color = style.COLOR_BLACK darker = lighter # use black on lighter of the two colors else: text_color = style.COLOR_WHITE if darker == 0: color_fill = style.Color(color_stroke_html) if is_low_contrast(color.split(',')): nick_color = text_color else: nick_color = style.Color(color_fill_html) else: color_fill = style.Color(color_fill_html) if is_low_contrast(color.split(',')): nick_color = text_color else: nick_color = style.Color(color_stroke_html) if nick == profile.get_nick_name(): tail = 'right' else: tail = 'left' color_stroke = None self._add_log(nick, color, text, status_message) # Check for Right-To-Left languages: if Pango.find_base_dir(nick, -1) == Pango.Direction.RTL: lang_rtl = True else: lang_rtl = False # Check if new message box or add text to previous: new_msg = True if self._last_msg_sender and buddy == self._last_msg_sender: # Add text to previous message if not (me_message or status_message): new_msg = False if not new_msg: message = self._last_msg message.add_text(text) else: rb = RoundBox() rb.background_color = color_fill rb.border_color = color_stroke rb.tail = tail self._rb_list.append(rb) grid_internal = Gtk.Grid() grid_internal.set_row_spacing(0) grid_internal.set_border_width(style.DEFAULT_PADDING) grid_internal.set_size_request( Gdk.Screen.width() - style.GRID_CELL_SIZE, -1) self._grid_list.append(grid_internal) row = 0 if status_message: nick = None elif me_message: text = text[4:] message = TextBox(self, nick_color, text_color, color_fill, highlight_fill, lang_rtl, nick, text) self._message_list.append(message) message.connect('open-on-journal', self.__open_on_journal) self._last_msg_sender = buddy self._last_msg = message grid_internal.attach(message, 0, row, 1, 1) row += 1 align = Gtk.Alignment.new(xalign=0.0, yalign=0.0, xscale=1.0, yscale=1.0) if rb.tail is None: bottom_padding = style.zoom(7) else: bottom_padding = style.zoom(35) align.set_padding(style.zoom(7), bottom_padding, style.zoom(30), style.zoom(30)) align.add(grid_internal) grid_internal.show() rb.pack_start(align, True, True, 0) align.show() self._conversation.attach(rb, 0, self._row_counter, 1, 1) rb.show() self._row_counter += 1 message.show() if status_message: self._last_msg_sender = None
def add_text(self, buddy, text, status_message=False): """Display text on screen, with name and colors. buddy -- buddy object or dict {nick: string, color: string} (The dict is for loading the chat log from the journal, when we don't have the buddy object any more.) text -- string, what the buddy said status_message -- boolean False: show what buddy said True: show what buddy did .------------- rb ---------------. | +name_vbox+ +----align-----+ | | | | | | | | | nick: | | +--message---+ | | | | | | | text | | | | +---------+ | +------------+ | | | +----------------+ | `--------------------------------' """ if not buddy: buddy = self.owner if type(buddy) is dict: # dict required for loading chat log from journal nick = buddy['nick'] color = buddy['color'] else: nick = buddy.props.nick color = buddy.props.color try: color_stroke_html, color_fill_html = color.split(',') except ValueError: color_stroke_html, color_fill_html = ('#000000', '#888888') # Select text color based on fill color: color_fill_rgba = style.Color(color_fill_html).get_rgba() color_fill_gray = (color_fill_rgba[0] + color_fill_rgba[1] + color_fill_rgba[2]) / 3 color_stroke = style.Color(color_stroke_html) color_fill = style.Color(color_fill_html) if color_fill_gray < 0.5: text_color = style.COLOR_WHITE else: text_color = style.COLOR_BLACK self._add_log(nick, color, text, status_message) # Check for Right-To-Left languages: if pango.find_base_dir(nick, -1) == pango.DIRECTION_RTL: lang_rtl = True else: lang_rtl = False # Check if new message box or add text to previous: new_msg = True if self._last_msg_sender: if not status_message: if buddy == self._last_msg_sender: # Add text to previous message new_msg = False if not new_msg: message = self._last_msg else: rb = RoundBox() screen_width = gtk.gdk.screen_width() # keep space to the scrollbar rb.set_size_request(screen_width - 50, -1) rb.background_color = color_fill rb.border_color = color_stroke self._last_msg_sender = buddy if not status_message: name = ColorLabel(text=nick + ': ', color=text_color) name_vbox = gtk.VBox() name_vbox.pack_start(name, False, False) rb.pack_start(name_vbox, False, False, padding=5) message = TextBox(text_color, color_fill, lang_rtl) vbox = gtk.VBox() vbox.pack_start(message, True, True, padding=5) rb.pack_start(vbox, True, True, padding=5) self._last_msg = message self._conversation.pack_start(rb, False, False, padding=2) if status_message: self._last_msg_sender = None message.add_text(text) self._conversation.show_all()
def add_text(self, buddy, text, status_message=False): """Display text on screen, with name and colors. buddy -- buddy object or dict {nick: string, color: string} (The dict is for loading the chat log from the journal, when we don't have the buddy object any more.) text -- string, what the buddy said status_message -- boolean False: show what buddy said True: show what buddy did .------------- rb ---------------. | +name_vbox+ +----align-----+ | | | | | | | | | nick: | | +--message---+ | | | | | | | text | | | | +---------+ | +------------+ | | | +----------------+ | `--------------------------------' """ if not buddy: buddy = self.owner if type(buddy) is dict: # dict required for loading chat log from journal nick = buddy['nick'] color = buddy['color'] else: nick = buddy.props.nick color = buddy.props.color try: color_stroke_html, color_fill_html = color.split(',') except ValueError: color_stroke_html, color_fill_html = ('#000000', '#888888') # Select text color based on fill color: color_fill_rgba = style.Color(color_fill_html).get_rgba() color_fill_gray = (color_fill_rgba[0] + color_fill_rgba[1] + color_fill_rgba[2]) / 3 color_stroke = style.Color(color_stroke_html) color_fill = style.Color(color_fill_html) if color_fill_gray < 0.5: text_color = style.COLOR_WHITE else: text_color = style.COLOR_BLACK self._add_log(nick, color, text, status_message) # Check for Right-To-Left languages: if pango.find_base_dir(nick, -1) == pango.DIRECTION_RTL: lang_rtl = True else: lang_rtl = False # Check if new message box or add text to previous: new_msg = True if self._last_msg_sender: if not status_message: if buddy == self._last_msg_sender: # Add text to previous message new_msg = False if not new_msg: message = self._last_msg else: rb = RoundBox() screen_width = gtk.gdk.screen_width() # keep space to the scrollbar rb.set_size_request(screen_width - 50, -1) rb.props.border_width = style.DEFAULT_PADDING rb.props.spacing = style.DEFAULT_SPACING rb.background_color = color_fill rb.border_color = color_stroke self._last_msg_sender = buddy if not status_message: name = ColorLabel(text=nick + ':', color=text_color) name_vbox = gtk.VBox() name_vbox.pack_start(name, False, False) rb.pack_start(name_vbox, False, False) message = TextBox(text_color, color_fill, lang_rtl) vbox = gtk.VBox() vbox.pack_start(message, True, True) rb.pack_start(vbox, True, True) self._last_msg = message self._conversation.pack_start(rb, False, False) if status_message: self._last_msg_sender = None message.add_text(text) self._conversation.show_all() """Here message.add_text(text) adding text in entry box add it to chatbox
def add_text(self, buddy, text, status_message=False): if not buddy: buddy = self.owner if buddy == "Computer": nick = "Computer" color = '#000000,#FFF8DC' else: if type(buddy) is dict: # dict required for loading chat log from journal nick = buddy['nick'] color = buddy['color'] else: nick = buddy.props.nick color = buddy.props.color try: color_stroke_html, color_fill_html = color.split(',') except ValueError: color_stroke_html, color_fill_html = ('#000000', '#888888') # Select text color based on fill color: color_fill_rgba = style.Color(color_fill_html).get_rgba() color_fill_gray = (color_fill_rgba[0] + color_fill_rgba[1] + color_fill_rgba[2]) / 3 color_stroke = style.Color(color_stroke_html) color_fill = style.Color(color_fill_html) if color_fill_gray < 0.5: text_color = style.COLOR_WHITE else: text_color = style.COLOR_BLACK self._add_log(nick, text, status_message) # Check for Right-To-Left languages: if pango.find_base_dir(nick, -1) == pango.DIRECTION_RTL: lang_rtl = True else: lang_rtl = False # Check if new message box or add text to previous: new_msg = True if self._last_msg_sender: if not status_message: if buddy == self._last_msg_sender: # Add text to previous message new_msg = True if not new_msg: message = self._last_msg else: rb = RoundBox() screen_width = gtk.gdk.screen_width() # keep space to the scrollbar rb.set_size_request(screen_width - 50, -1) rb.props.border_width = style.DEFAULT_PADDING rb.props.spacing = style.DEFAULT_SPACING rb.background_color = color_fill rb.border_color = color_stroke self._last_msg_sender = buddy if not status_message: name = ColorLabel(text=nick + ':', color=text_color) name_vbox = gtk.VBox() name_vbox.pack_start(name, False, False) rb.pack_start(name_vbox, False, False) message = TextBox(text_color, color_fill, lang_rtl) vbox = gtk.VBox() vbox.pack_start(message, True, True) rb.pack_start(vbox, True, True) self._last_msg = message self._conversation.pack_start(rb, False, False) if status_message: self._last_msg_sender = None message.add_text(text) self._conversation.show_all()