def fill_table_with_accounts(self, accounts): iconset = gajim.config.get('iconset') if not iconset: iconset = 'dcraven' file_path = os.path.join(helpers.get_iconset_path(iconset), '16x16') for acct in accounts: message = acct['message'] # before reducing the chars we should assure we send unicode, else # there are possible pango TBs on 'set_markup' if isinstance(message, str): message = unicode(message, encoding='utf-8') message = helpers.reduce_chars_newlines(message, 100, 1) message = gobject.markup_escape_text(message) if acct['name'] in gajim.con_types and \ gajim.con_types[acct['name']] in ('tls', 'ssl'): show_lock = True else: show_lock = False if message: self.add_status_row(file_path, acct['show'], gobject.markup_escape_text(acct['name']) + \ ' - ' + message, show_lock=show_lock, indent=False) else: self.add_status_row(file_path, acct['show'], gobject.markup_escape_text(acct['name']), show_lock=show_lock, indent=False) for line in acct['event_lines']: self.add_text_row(' ' + line, 1)
def __set_object(self, obj): self.__obj = obj self.__orepr.set_markup( _('<b>Object</b>: %s') % (gobject.markup_escape_text(repr(obj), ))) self.__oclass.set_markup( _('<b>Type</b>: %s') % (gobject.markup_escape_text(repr(type(obj))), )) try: if isinstance(obj, type): osrc_target = obj else: osrc_target = type(obj) srcpath = inspect.getsourcefile(osrc_target) except TypeError as e: _logger.debug("failed to get sourcefile", exc_info=True) srcpath = None if srcpath: self.__definedin.set_text(srcpath) doc = inspect.getdoc(obj) if doc: self.__doctext.get_buffer().set_text(doc) else: self.__doctext.get_buffer().insert_at_cursor(_('(Not documented)')) self.__set_members()
def displayNextEntry(self): ''' Get next entry from the queue and display it in the window. ''' assert len(self.__class__.entries)>0 newentry = self.__class__.entries.pop(0) # fill the fields if newentry.feed_link is not None: self.feed_title_label.set_markup( u'<span foreground="blue" underline="single">%s</span>' % \ gobject.markup_escape_text(newentry.feed_title)) else: self.feed_title_label.set_markup( gobject.markup_escape_text(newentry.feed_title)) self.feed_tagline_label.set_markup( u'<small>%s</small>' % \ gobject.markup_escape_text(newentry.feed_tagline)) if newentry.uri is not None: self.entry_title_label.set_markup( u'<span foreground="blue" underline="single">%s</span>' % \ gobject.markup_escape_text(newentry.title)) else: self.entry_title_label.set_markup( gobject.markup_escape_text(newentry.title)) self.last_modified_label.set_text(newentry.updated) # update the counters self.updateCounter() self.entry = newentry
def _markup_escape_contact(self, contact): """return contact with escaped markup""" return ( gobject.markup_escape_text(contact.display_name), gobject.markup_escape_text(contact.nick), gobject.markup_escape_text(contact.message), )
def format_nick(self, contact): """replace the appearance of the template vars using the values of the contact # valid values: # + NICK # + ACCOUNT # + DISPLAY_NAME (alias if available, or nick if available or mail) # + STATUS # + MESSAGE # + NL """ message = gobject.markup_escape_text(contact.message) nick = gobject.markup_escape_text(contact.nick) display_name = gobject.markup_escape_text(contact.display_name) template = self.nick_template template = template.replace("[$NL]", "\n") template = template.replace("[$NICK]", self.escape_tags(nick)) template = template.replace("[$ACCOUNT]", self.escape_tags(contact.account)) template = template.replace("[$MESSAGE]", self.escape_tags(message)) template = template.replace("[$STATUS]", self.escape_tags(e3.status.STATUS[contact.status])) template = template.replace("[$DISPLAY_NAME]", self.escape_tags(display_name)) blocked_text = "" if contact.blocked: blocked_text = "(blocked)" template = template.replace("[$BLOCKED]", blocked_text) return template
def __append_builtin_arghelp(self, builtin): if builtin.argspec is None: self._buf.insert_markup(' <i>%s</i>\n' % (_('(No arguments)'),)) elif builtin.argspec is not False: self._buf.insert_markup(' %s: ' % (_('Arguments'),)) if isinstance(builtin.argspec, tuple): for arg in builtin.argspec: argname = gobject.markup_escape_text(arg.name) if arg.opt: argname = '[%s]' % (argname,) self._buf.insert_markup('%s ' % (argname,)) elif isinstance(builtin.argspec, MultiArgSpec): argname = gobject.markup_escape_text(builtin.argspec.name) + '*' self._buf.insert_markup(argname) else: assert False self._buf.insert_markup('\n') else: assert builtin.argspec is False self._buf.insert_markup(' <i>%s</i>\n' % (_('(Unspecified arguments)'),)) if not builtin.options: self._buf.insert_markup(' <i>%s</i>\n' % (_('(No options)'),)) else: argstr = ' '.join(map(lambda x: ','.join(x), builtin.options)) self._buf.insert_markup(' %s: ' % (_('Options'),)) self._buf.insert_markup('<tt>' + gobject.markup_escape_text(argstr) + '</tt>') self._buf.insert_markup('\n')
def _run_dialog(short, long=None, parent=None, buttons=gtk.BUTTONS_NONE, dlg_type=gtk.STOCK_DIALOG_INFO, title=None): if dlg_type == gtk.STOCK_DIALOG_ERROR: dlg_type2 = gtk.MESSAGE_ERROR elif dlg_type == gtk.STOCK_DIALOG_WARNING: dlg_type2 = gtk.MESSAGE_WARNING elif dlg_type == gtk.STOCK_DIALOG_QUESTION: dlg_type2 = gtk.MESSAGE_QUESTION else: dlg_type2 = gtk.MESSAGE_INFO if title is None: title = DIALOG_TITLES.get(dlg_type, 'CrunchyFrog') dlg = gtk.MessageDialog(parent, gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT, dlg_type2, buttons) short = gobject.markup_escape_text(short) dlg.set_markup('<b>%s</b>' % short) if long is not None: dlg.format_secondary_markup(gobject.markup_escape_text(long)) img = gtk.image_new_from_stock(dlg_type, gtk.ICON_SIZE_DIALOG) dlg.set_image(img) dlg.set_title(title) dlg.set_icon_name('crunchyfrog') img.show() ret = dlg.run() dlg.destroy() return ret
def add_tweet(self, tweet): p = self.mainwin.parse_tweet(tweet) pix = self.mainwin.get_user_avatar(p['username'], p['avatar']) urls = [gobject.markup_escape_text(u) for u in util.detect_urls(p['text'])] pango_twt = gobject.markup_escape_text(p['text']) pango_twt = '<span size="9000"><b>@%s</b> %s</span>' % (p['username'], pango_twt) pango_twt = self.__highlight_hashtags(pango_twt) pango_twt = self.__highlight_mentions(pango_twt) pango_twt = self.__highlight_urls(urls, pango_twt) pango_twt += '<span size="2000">\n\n</span>' footer = '<span size="small" foreground="#999">%s' % p['datetime'] if p['client']: footer += ' desde %s' % p['client'] if p['in_reply_to_user']: footer += ' en respuesta a %s' % p['in_reply_to_user'] if p['retweet_by']: footer += '\nRetweeted by %s' % p['retweet_by'] footer += '</span>' pango_twt += footer #color = gtk.gdk.Color(255*257, 242*257, 212*257) if p['fav'] else None color = gtk.gdk.Color(250*257, 237*257, 187*257) if p['fav'] else None self.model.append([pix, p['username'], p['datetime'], p['client'], pango_twt, p['text'], p['id'], p['fav'], p['in_reply_to_id'], p['in_reply_to_user'], p['retweet_by'], color]) del pix
def __xmms_cb_id_info(self, result): if not result.value(): # Wtf? Why is xmms2 not giving us the information we requested? self.info_label.set_markup(_('<b>No info found</b>\nI blame xmms2')) return try: picture_front = result.value()['picture_front'] self.__at.xmms.bindata_retrieve(picture_front, cb=self.__xmms_cb_bindata_retrieve) except KeyError: ca = CoverArt(None, 64) self.cover_art.set_from_pixbuf(ca.pixbuf) try: artist = result.value()['artist'] except KeyError: artist = const.UNKNOWN try: title = result.value()['title'] except KeyError: title = '%s (%s)' % (const.UNKNOWN, result.value()['url']) try: album = result.value()['album'] except KeyError: album = const.UNKNOWN self.info_label.set_markup( '<b>%s</b>\n<small>by</small> %s <small>from</small> %s' % (markup_escape_text(title), markup_escape_text(artist), markup_escape_text(album)))
def update_information(self): '''update the information of the contact''' if self.contact: if self.contact.display_name == self.contact.nick: self.nick.set_markup( gobject.markup_escape_text(self.contact.display_name)) else: self.nick.set_markup( gobject.markup_escape_text(self.contact.nick + ' (' + self.contact.display_name + ')')) self.mail.set_markup(self.contact.account) self.message.set_markup( gobject.markup_escape_text(self.contact.message)) self.status.set_from_file( gui.theme.image_theme.status_icons[self.contact.status]) self.image.set_from_file(self.contact.picture, self.contact.blocked) if self.contact.blocked: self.blocked.set_markup(_('Yes')) else: self.blocked.set_markup(_('No'))
def _run_dialog(short, long=None, parent=None, buttons=gtk.BUTTONS_NONE, dlg_type=gtk.STOCK_DIALOG_INFO, title=None): if dlg_type == gtk.STOCK_DIALOG_ERROR: dlg_type2 = gtk.MESSAGE_ERROR elif dlg_type == gtk.STOCK_DIALOG_WARNING: dlg_type2 = gtk.MESSAGE_WARNING elif dlg_type == gtk.STOCK_DIALOG_QUESTION: dlg_type2 = gtk.MESSAGE_QUESTION else: dlg_type2 = gtk.MESSAGE_INFO if title is None: title = DIALOG_TITLES.get(dlg_type, 'CrunchyFrog') dlg = gtk.MessageDialog(parent, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, dlg_type2, buttons) short = gobject.markup_escape_text(short) dlg.set_markup('<b>%s</b>' % short) if long is not None: dlg.format_secondary_markup(gobject.markup_escape_text(long)) img = gtk.image_new_from_stock(dlg_type, gtk.ICON_SIZE_DIALOG) dlg.set_image(img) dlg.set_title(title) dlg.set_icon_name('crunchyfrog') img.show() ret = dlg.run() dlg.destroy() return ret
def on_get_value(self, rowref, column): name = rowref[0] child = -1 if len(rowref) > 1: child = rowref[1] if column == self.BUSNAME_OBJ_COL: return name elif column == self.UNIQUE_NAME_COL: return name.get_unique_name() elif column == self.COMMON_NAME_COL: return name.get_common_name() elif column == self.IS_PUBLIC_COL: return name.is_public() elif column == self.PROCESS_ID_COL: return name.get_process_id() elif column == self.PROCESS_PATH_COL: return name.get_process_path() elif column == self.PROCESS_NAME_COL: return name.get_process_name() elif column == self.ICON_COL: return name.get_icon() elif column == self.DISPLAY_COL: if child == -1: return '<b>' + gobject.markup_escape_text(name.get_display_name()) + '</b>' elif child == 1: return '<b>Command Line: </b>' + gobject.markup_escape_text(name.get_process_name()) + ' (' + gobject.markup_escape_text(str(name.get_process_id())) + ')' elif child == 0: return '<b>Unique Name: </b>'+ gobject.markup_escape_text(name.get_unique_name()) else: raise InvalidColumnError(column) return None
def fill_table_with_accounts(self, accounts): iconset = gajim.config.get('iconset') if not iconset: iconset = 'dcraven' file_path = os.path.join(helpers.get_iconset_path(iconset), '16x16') for acct in accounts: message = acct['message'] # before reducing the chars we should assure we send unicode, else # there are possible pango TBs on 'set_markup' if isinstance(message, str): message = unicode(message, encoding = 'utf-8') message = helpers.reduce_chars_newlines(message, 100, 1) message = gobject.markup_escape_text(message) if acct['name'] in gajim.con_types and \ gajim.con_types[acct['name']] in ('tls', 'ssl'): show_lock = True else: show_lock = False if message: self.add_status_row(file_path, acct['show'], gobject.markup_escape_text(acct['name']) + \ ' - ' + message, show_lock=show_lock, indent=False) else: self.add_status_row(file_path, acct['show'], gobject.markup_escape_text(acct['name']) , show_lock=show_lock, indent=False) for line in acct['event_lines']: self.add_text_row(' ' + line, 1)
def displayNextEntry(self): ''' Get next entry from the queue and display it in the window. ''' assert len(self.__class__.entries) > 0 newentry = self.__class__.entries.pop(0) # fill the fields if newentry.feed_link is not None: self.feed_title_label.set_markup( u'<span foreground="blue" underline="single">%s</span>' % \ gobject.markup_escape_text(newentry.feed_title)) else: self.feed_title_label.set_markup( gobject.markup_escape_text(newentry.feed_title)) self.feed_tagline_label.set_markup( u'<small>%s</small>' % \ gobject.markup_escape_text(newentry.feed_tagline)) if newentry.uri is not None: self.entry_title_label.set_markup( u'<span foreground="blue" underline="single">%s</span>' % \ gobject.markup_escape_text(newentry.title)) else: self.entry_title_label.set_markup( gobject.markup_escape_text(newentry.title)) self.last_modified_label.set_text(newentry.updated) # update the counters self.updateCounter() self.entry = newentry
def format_nick(self, contact): '''replace the appearance of the template vars using the values of the contact # valid values: # + NICK # + ACCOUNT # + DISPLAY_NAME (alias if available, or nick if available or mail) # + STATUS # + MESSAGE # + NL ''' message = gobject.markup_escape_text( contact.message).replace('%MESSAGE%', '% MESSAGE %') nick = gobject.markup_escape_text( contact.nick).replace('%NICK%', '% NICK %') display_name = gobject.markup_escape_text( contact.display_name).replace('%DISPLAY_NAME%', '% DISPLAY_NAME %') template = self.nick_template template = template.replace('%NL%', '\n') template = template.replace('%ACCOUNT%', gobject.markup_escape_text(contact.account)) template = template.replace('%STATUS%', gobject.markup_escape_text(e3.status.STATUS[contact.status])) template = template.replace('%DISPLAY_NAME%', display_name) template = template.replace('%MESSAGE%', message) template = template.replace('%NICK%', nick) blocked_text = '' if contact.blocked: blocked_text = '(blocked)' template = template.replace('%BLOCKED%', blocked_text) return template
def __group_cell_func(self, col, cell, model, iter): obj = model.get_value(iter, 0) color, markup = self.style.mid[gtk.STATE_NORMAL], None if isinstance(obj, TFlag): color = None markup = '<b>%s</b>' % gobject.markup_escape_text(obj.ref) elif isinstance(obj, TField): # This is a property name = gobject.markup_escape_text(backend.get_field_name(obj.ref)) proto = obj.proto if not backend.is_flags(obj.ref): color = None if backend.is_field_autofilled(obj.ref): markup = '<i>%s</i>' % name else: markup = '<b>%s</b>' % name else: # Ok. This is the protocol name = gobject.markup_escape_text(backend.get_proto_name(obj)) markup = '<b>%s</b>' % name # Setting the values cell.set_property('cell-background-gdk', color) cell.set_property('markup', markup)
def map_user_event(self, stamp, name, account, data): '''create a dict with the data from a user event that can be used to replace values on the template''' return {'mail' : account, 'data' : gobject.markup_escape_text(data), 'date' : gobject.markup_escape_text(time.ctime(stamp)), 'event' : gobject.markup_escape_text(name)}
def __property_cell_func(self, col, cell, model, iter): cell.editor, cell.field = None, None cell.set_property('editable', False) cell.set_property('text', '') obj = model.get_value(iter, 0) if isinstance(obj, TField) and backend.is_flags(obj.ref): # Flag container cell.set_property('cell-background-gdk', self.style.mid[gtk.STATE_NORMAL]) value = backend.get_field_value_repr(obj.proto, obj.ref) try: if value: cell.set_property('markup', '<tt>%s</tt>' % \ gobject.markup_escape_text(unicode(value))) except UnicodeDecodeError: cell.set_property('markup', _('<tt>N/A</tt>')) # If we are a field or a string (a sub field of flags) elif isinstance(obj, (TField, TFlag)): cell.field = None cell.set_property('editable', True) cell.set_property('cell-background-gdk', None) # We have a standard field if isinstance(obj, TField): value = backend.get_field_value(obj.proto, obj.ref) if value is not None: try: value = gobject.markup_escape_text(unicode(value)) except UnicodeDecodeError: value = None if not value: value = _("N/A") cell.set_property('markup', '<tt>%s</tt>' % value) cell.editor = get_editor(obj.ref) if cell.editor: cell.field = (obj.proto, obj.ref) elif isinstance(obj, TFlag): # We have a subkey of Flags cell.editor = BitEditor cell.field = (obj.proto, obj.field.ref, obj.ref) else: cell.set_property('cell-background-gdk', self.style.mid[gtk.STATE_NORMAL])
def format_nick(self, contact): '''replace the appearance of the template vars using the values of the contact # valid values: # + NICK # + ACCOUNT # + DISPLAY_NAME (alias if available, or nick if available or mail) # + STATUS # + MESSAGE # + NL ''' message = gobject.markup_escape_text(contact.message) nick = gobject.markup_escape_text(contact.nick) display_name = gobject.markup_escape_text(contact.display_name) #TODO: fix those "no-more-color" with msgplus codes, '­'? def fix_plus(text): escaped = self.escape_tags(text) pos = escaped.find("\xc2\xb7") tail = "" irc = "#&@'" flag = False while pos != -1: try: char = escaped[pos+2] if char in irc and escaped.count("\xc2\xb7"+char)%2 != 0: tail = "\xc2\xb7" + char + tail irc = irc.replace(char,"") flag = flag or char == "$" except: pos = pos+1 pos = escaped.find("\xc2\xb7",pos+2) if flag: tail += "no-more-color" return escaped + tail template = self.nick_template template = template.replace('[$NL]', '\n') template = template.replace('[$NICK]', fix_plus(nick)) template = template.replace('[$ACCOUNT]', self.escape_tags(contact.account)) template = template.replace('[$MESSAGE]', fix_plus(message)) template = template.replace('[$STATUS]', self.escape_tags(e3.status.STATUS[contact.status])) template = template.replace('[$DISPLAY_NAME]', fix_plus(display_name)) blocked_text = '' if contact.blocked: blocked_text = _('Blocked') template = template.replace('[$BLOCKED]', blocked_text) return template
def asMarkupText(self): assert not self._retracted untranslated_mood = self._pep_specific_data['mood'] mood = self._translate_mood(untranslated_mood) markuptext = '<b>%s</b>' % gobject.markup_escape_text(mood) if 'text' in self._pep_specific_data: text = self._pep_specific_data['text'] markuptext += ' (%s)' % gobject.markup_escape_text(text) return markuptext
def __init__(self, title=None, path_to_image=None, text=None, bg_color=BG_COLOR, timeout=8000): xml = gtk.Builder() xml.add_from_string(XML_WINDOW) self.window = xml.get_object('popup_notification_window') if gtk.gtk_version >= (2, 10, 0) and gtk.pygtk_version >= (2, 10, 0): self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_TOOLTIP) close_button = xml.get_object('close_button') event_type_label = xml.get_object('event_type_label') event_description_label = xml.get_object('event_description_label') eventbox = xml.get_object('eventbox') image = xml.get_object('notification_image') if not text: text = '' if not title: title = '' event_type_label.set_markup( '<span foreground="black" weight="bold">%s</span>' % gobject.markup_escape_text(title)) # set colors [ http://www.pitt.edu/~nisg/cis/web/cgi/rgb.html ] self.window.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('black')) popup_bg_color = gtk.gdk.color_parse(bg_color) close_button.modify_bg(gtk.STATE_NORMAL, popup_bg_color) eventbox.modify_bg(gtk.STATE_NORMAL, popup_bg_color) event_description_label.set_markup( '<span foreground="black">%s</span>' % gobject.markup_escape_text(text)) # set the image image.set_from_file(path_to_image) # position the window to bottom-right of screen window_width, self.window_height = self.window.get_size() popup_manager.popups_notification_height += self.window_height pos_x = gtk.gdk.screen_width() - window_width + 1 + POS_X pos_y = gtk.gdk.screen_height() - \ popup_manager.popups_notification_height + 1 + POS_Y self.window.move(pos_x, pos_y) xml.connect_signals(self) self.window.show_all() gobject.timeout_add(timeout, self.on_timeout) popup_manager.popup_notification_windows.append(self)
def format_nick(self, contact): """replace the appearance of the template vars using the values of the contact """ template = self.nick_template template = template.replace("%NICK%", gobject.markup_escape_text(contact.nick)) template = template.replace("%ACCOUNT%", gobject.markup_escape_text(contact.account)) template = template.replace("%MESSAGE%", gobject.markup_escape_text(contact.message)) template = template.replace("%STATUS%", gobject.markup_escape_text(status.STATUS[contact.status])) template = template.replace("%DISPLAY_NAME%", gobject.markup_escape_text(contact.display_name)) return template
def make_objects_frame(objs, title): frame_label = gtk.Label() frame_label.set_markup(u"<b>%s</b>" % gobject.markup_escape_text(title)) frame_label.set_alignment(0, 0) objvbox = gtk.VBox() objvbox.pack_start(frame_label, False) objvbox.set_property("spacing", 3) for item in objs: plugin_type = plugins.get_plugin_attribute(plugin_id, item) if not plugin_type: continue hbox = gtk.HBox() hbox.set_property("spacing", 3) obj = plugin_type() name = unicode(obj) desc = obj.get_description() or u"" gicon = obj.get_icon() im = gtk.Image() im.set_property("gicon", gicon) im.set_property("pixel-size", 32) hbox.pack_start(im, False) m_name = gobject.markup_escape_text(name) m_desc = gobject.markup_escape_text(desc) name_label = \ u"%s\n<small>%s</small>" % (m_name, m_desc) if m_desc else \ u"%s" % (m_name, ) label = wrapped_label() label.set_markup(name_label) hbox.pack_start(label, False) objvbox.pack_start(hbox) # Display information for application content-sources. if not kobject_should_show(obj): continue try: leaf_repr = obj.get_leaf_repr() except AttributeError: continue if leaf_repr is None: continue hbox = gtk.HBox() hbox.set_property("spacing", 3) gicon = leaf_repr.get_icon() im = gtk.Image() im.set_property("gicon", gicon) im.set_property("pixel-size", 16) hbox.pack_start(gtk.Label(_("Content of")), False) hbox.pack_start(im, False) hbox.pack_start(gtk.Label(unicode(leaf_repr)), False) objvbox.pack_start(hbox) return objvbox
def __init__(self, title=None, path_to_image=None, text=None, bg_color=BG_COLOR, timeout=8000): xml = gtk.Builder() xml.add_from_string(XML_WINDOW) self.window = xml.get_object('popup_notification_window') if gtk.gtk_version >= (2, 10, 0) and gtk.pygtk_version >= (2, 10, 0): self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_TOOLTIP) close_button = xml.get_object('close_button') event_type_label = xml.get_object('event_type_label') event_description_label = xml.get_object('event_description_label') eventbox = xml.get_object('eventbox') image = xml.get_object('notification_image') if not text: text = '' if not title: title = '' event_type_label.set_markup( '<span foreground="black" weight="bold">%s</span>' % gobject.markup_escape_text(title)) # set colors [ http://www.pitt.edu/~nisg/cis/web/cgi/rgb.html ] self.window.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('black')) popup_bg_color = gtk.gdk.color_parse(bg_color) close_button.modify_bg(gtk.STATE_NORMAL, popup_bg_color) eventbox.modify_bg(gtk.STATE_NORMAL, popup_bg_color) event_description_label.set_markup('<span foreground="black">%s</span>' % gobject.markup_escape_text(text)) # set the image image.set_from_file(path_to_image) # position the window to bottom-right of screen window_width, self.window_height = self.window.get_size() popup_manager.popups_notification_height += self.window_height pos_x = gtk.gdk.screen_width() - window_width + 1 + POS_X pos_y = gtk.gdk.screen_height() - \ popup_manager.popups_notification_height + 1 + POS_Y self.window.move(pos_x, pos_y) xml.connect_signals(self) self.window.show_all() gobject.timeout_add(timeout, self.on_timeout) popup_manager.popup_notification_windows.append(self)
def __add_name_to_stores(self, xml_file, name_node, context_node): """Add name_node to the various gtk.TreeStores. Arguments: - `xml_file`: XMLFile object containing name_node - `name_node`: `lxml.etree.Element` - `context_node`: `lxml.etree.Element` of context for name """ name_string = context_node.find('name').text normalised_name = self.__normalise_name(name_string) name = self.__names.setdefault(normalised_name, Name(name_string)) # Get/add a name item to the file item. file_name_iter = self.__get_child_iter(xml_file, name, self.file_markup_tree) # Get/add a top-level name item. self.__get_root_iter(name, self.name_markup_tree) # Get/add a file item to the name item. name_file_iter = self.__get_child_iter(name, xml_file, self.name_markup_tree) # Get the preceding and following context. preceding = gobject.markup_escape_text( context_node.find('preceding').text or '') following = gobject.markup_escape_text( context_node.find('following').text or '') name_instance = NameInstance(name, name_node, xml_file, preceding, following) xml_file.add_name_instance(name_instance) name_key = name_instance.key_value if name_key is None: # Add a name instance item to the file/name item. file_instance_iter = self.file_markup_tree.append( file_name_iter, [False, name_instance, False]) # Add a name instance item to the name/file item. name_instance_iter = self.name_markup_tree.append( name_file_iter, [False, name_instance, False]) key_instance_iter = None else: file_instance_iter, name_instance_iter, key_instance_iter = self.__add_keyed_name_instance( name_instance, name, name_key, xml_file, file_name_iter, name_file_iter) name_instance.row_refs = (self.__get_ref_from_iter( self.file_markup_tree, file_instance_iter), self.__get_ref_from_iter( self.name_markup_tree, name_instance_iter), self.__get_ref_from_iter( self.key_markup_tree, key_instance_iter), None) self.name_count += 1.0
def get_status_info(self, resource, priority, show, status): str_status = resource + ' (' + unicode(priority) + ')' if status: status = status.strip() if status != '': # make sure 'status' is unicode before we send to to reduce_chars if isinstance(status, str): status = unicode(status, encoding='utf-8') # reduce to 100 chars, 1 line status = helpers.reduce_chars_newlines(status, 100, 1) str_status = gobject.markup_escape_text(str_status) status = gobject.markup_escape_text(status) str_status += ' - <i>' + status + '</i>' return str_status
def __set_object(self, obj): self.__obj = obj self.__orepr.set_markup(_('<b>Object</b>: %s') % (gobject.markup_escape_text(repr(obj),))) self.__oclass.set_markup(_('<b>Type</b>: %s') % (gobject.markup_escape_text(repr(type(obj))),)) try: if isinstance(obj, type): osrc_target = obj else: osrc_target = type(obj) srcpath = inspect.getsourcefile(osrc_target) except TypeError, e: _logger.debug("failed to get sourcefile", exc_info=True) srcpath = None
def get_title_string(self): rowString = "" markup = "" if(self.event.is_past()): markup+= 'strikethrough="true"' if(not self.event.is_confirmed()): markup+= 'font-style="italic"' if(self.event.is_all_day()): rowString = self.row_string_template % (markup, gobject.markup_escape_text(self.event.title.strip()) ) else: if(self.event.is_now()): rowString = self.row_string_template_now % (markup, gobject.markup_escape_text(self.event.title.strip() )) else: rowString = self.row_string_template % (markup, gobject.markup_escape_text(self.event.title.strip() )) return rowString
def __del_bookmark_button_cb(self, widget, data): treeselection = self.bookmarks_treeview.get_selection() (model, list_iter) = treeselection.get_selected() bookmark = model.get_value(list_iter, 0) # Determine the current parent for this dialog parent = self.__get_current_window_parent() dlg = gtk.MessageDialog(parent = parent, \ type = gtk.MESSAGE_WARNING, buttons = gtk.BUTTONS_OK_CANCEL) dlg.set_icon_from_file(self.window_icon_path) dlg.set_markup(MSG_DELETE_BOOKMARK_TITLE) dlg.format_secondary_markup(MSG_DELETE_BOOKMARK % gobject.markup_escape_text (bookmark.name)) ret = dlg.run() dlg.destroy() if ret != gtk.RESPONSE_OK: return iter_tmp = model.get_iter(0) while iter_tmp != None: if model.get_value(iter_tmp, 0) == bookmark: model.remove(iter_tmp) break iter_tmp = model.iter_next(iter_tmp) bookmark.delete()
def __del_bookmark_button_cb(self, widget, data): treeselection = self.bookmarks_treeview.get_selection() (model, list_iter) = treeselection.get_selected() bookmark = model.get_value(list_iter, 0) # Determine the current parent for this dialog parent = self.__get_current_window_parent() dlg = gtk.MessageDialog(parent = parent, \ type = gtk.MESSAGE_WARNING, buttons = gtk.BUTTONS_OK_CANCEL) dlg.set_icon_from_file(self.window_icon_path) dlg.set_markup(MSG_DELETE_BOOKMARK_TITLE) dlg.format_secondary_markup(MSG_DELETE_BOOKMARK % gobject.markup_escape_text(bookmark.name)) ret = dlg.run() dlg.destroy() if ret != gtk.RESPONSE_OK: return iter_tmp = model.get_iter(0) while iter_tmp != None: if model.get_value(iter_tmp, 0) == bookmark: model.remove(iter_tmp) break iter_tmp = model.iter_next(iter_tmp) bookmark.delete()
def set_label(self, label): # escape special characters label = gobject.markup_escape_text(label.strip()) # some hackery to preserve italics markup label = label.replace('<i>', '<i>').replace('</i>', '</i>') self.label = label return
def on_music_view_right_press_items(self, widget, x, y, current_item, select_items): if current_item and select_items: selected_songs_id = [ item.get_song()['id'] for item in select_items ] # 子菜单 - 添加到创建的歌单 addto_submenu = [ (None, _(gobject.markup_escape_text(key)), self.add_to_list, selected_songs_id, self.CREATED_LISTS_DICT[key]) for key in self.CREATED_LISTS_DICT.keys() ] addto_submenu.insert( 0, (None, _('播放列表'), self.add_to_list, selected_songs_id, 0)) addto_submenu = Menu(addto_submenu) if len(select_items) > 1: items = [ (None, _("播放"), lambda: self.add_play_emit( [item.get_song()['id'] for item in select_items])), ] else: items = [ (None, _("播放"), lambda: self.add_play_emit( [current_item.get_song()['id']])), ] items.insert(0, (None, _("添加到"), addto_submenu)) Menu(items, True).show((int(x), int(y)))
def __initialize_font_list(self): """ Construct font list """ def compare_data(model, iter1, iter2): """ Sorting function for the fonts list store """ data1 = model.get_value(iter1,0) data2 = model.get_value(iter2,0) return cmp(data1, data2) self.__fontlist=TreeViewFactory('list', ['str','markup'], [],treeview=self.__tview) # Get all system fonts self.__font_families=pangocairo.cairo_font_map_get_default().list_families() for family in self.__font_families: escaped=gobject.markup_escape_text(family.get_name()) markedup='<span face="%s">%s</span>' % (escaped,escaped) self.__fontlist.append([family.get_name(),markedup]) self.__tview.set_headers_visible(False) self.__tview.get_column(0).set_property('visible',False) self.__scroller.set_policy(gtk.POLICY_NEVER,gtk.POLICY_AUTOMATIC) self.__fontlist.storagemodel.set_sort_func(0,compare_data) self.__fontlist.storagemodel.set_sort_column_id(0,gtk.SORT_ASCENDING)
def set_text(button, sensitive=True): if sensitive: colour = HobColors.PALE_BLUE else: colour = HobColors.LIGHT_GRAY button.set_label("<span size='large' color='%s'><b>%s</b></span>" % (colour, gobject.markup_escape_text(button.text))) button.child.set_use_markup(True)
def _set_text(self, value): '''set the value of text''' self._text = value self.label.set_markup( Renderers.msnplus_to_list( gobject.markup_escape_text(self._text or self.empty_text))) self.entry.set_text(self._text)
def __append_builtin_aliases(self, builtin): if not builtin.aliases: return self._buf.insert_markup(' Aliases: ') names = ['<b>%s</b>' % (gobject.markup_escape_text(x),) for x in builtin.aliases] self._buf.insert_markup(', '.join(names)) self._buf.insert_markup('\n')
def __del_connection_button_cb(self, widget, data): treeselection = self.connections_treeview.get_selection() (model, iter) = treeselection.get_selected() default_conn = model.get_value(iter, 2) conn_name = model.get_value(iter, 1) dlg = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK_CANCEL) dlg.set_icon_from_file(MSD.icons_files_dir + "connections_16x16.png") dlg.set_markup(MSD.MSG_DELETE_CONNECTION_TITLE) dlg.format_secondary_markup(MSD.MSG_DELETE_CONNECTION % gobject.markup_escape_text (conn_name)) ret = dlg.run() dlg.destroy() if ret != gtk.RESPONSE_OK: return if default_conn == True: iter_tmp = model.get_iter(0) default_icon = gtk.gdk.pixbuf_new_from_file (os.path.join(MSD.icons_files_dir, "default_16x16.png")) while iter_tmp != None: if model.get_value(iter_tmp, 1) == "movistar Internet": model.set_value(iter_tmp, 0, default_icon) model.set_value(iter_tmp, 2, True) break iter_tmp = model.iter_next(iter_tmp) print "Del connection %s " % model.get_value(iter, 1) self.conf.del_connection(model.get_value(iter, 1)) self.conf.save_conf() model.remove(iter) self.act_manager.show_actions_conf()
def on_update_hash_pause(self, widget): self.paused = not self.paused if self.paused: self.progresslabel.set_markup( _("<i>%s (Paused)</i>") % gobject.markup_escape_text(self.current_file)) self.progressbar.set_text(_("Paused"))
def add_transfer(self, account, contact, file_props): ''' add new transfer to FT window and show the FT window ''' self.on_transfers_list_leave_notify_event(None) if file_props is None: return file_props['elapsed-time'] = 0 self.files_props[file_props['type']][file_props['sid']] = file_props iter = self.model.append() text_labels = '<b>' + _('Name: ') + '</b>\n' if file_props['type'] == 'r': text_labels += '<b>' + _('Sender: ') + '</b>' else: text_labels += '<b>' + _('Recipient: ') + '</b>' if file_props['type'] == 'r': (file_path, file_name) = os.path.split(file_props['file-name']) else: file_name = file_props['name'] text_props = gobject.markup_escape_text(file_name) + '\n' text_props += contact.get_shown_name() self.model.set(iter, 1, text_labels, 2, text_props, C_SID, file_props['type'] + file_props['sid']) self.set_progress(file_props['type'], file_props['sid'], 0, iter) if 'started' in file_props and file_props['started'] is False: status = 'waiting' elif file_props['type'] == 'r': status = 'download' else: status = 'upload' file_props['tt_account'] = account self.set_status(file_props['type'], file_props['sid'], status) self.set_cleanup_sensitivity() self.window.show_all()
def test_markup_escape_text(): ''' Ensure that ``gobject.markup_escape_text`` works as expected. :bug: #540696 ''' assert gobject.markup_escape_text('Hi') == 'Hi'
def display_reset_prompt(parent=None, more_settings_shown=False): dialog = gtk.MessageDialog(parent=parent, type=gtk.MESSAGE_WARNING, flags=gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, buttons=gtk.BUTTONS_YES_NO) dialog.set_transient_for(parent) dialog.set_title(pg.config.PLUGIN_TITLE) dialog.set_markup( gobject.markup_escape_text( _("Are you sure you want to reset settings?"))) if more_settings_shown: checkbutton_reset_operations = gtk.CheckButton( label=_("Remove procedures and constraints"), use_underline=False) dialog.vbox.pack_start(checkbutton_reset_operations, expand=False, fill=False) dialog.set_focus(dialog.get_widget_for_response(gtk.RESPONSE_NO)) dialog.show_all() response_id = dialog.run() dialog.destroy() clear_operations = (checkbutton_reset_operations.get_active() if more_settings_shown else False) return response_id, clear_operations
def __init__(self, sMessage, sDetails): super(DetailDialog, self).__init__('Sutekh has encounterd an error', oButtons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)) oHBox = gtk.HBox(False, 2) oMessageBox = gtk.VBox(False, 2) oImage = gtk.Image() oImage.set_from_stock(gtk.STOCK_DIALOG_ERROR, gtk.ICON_SIZE_DIALOG) oImage.set_alignment(0, 0) oHBox.pack_start(oImage, expand=False) oInfo = gtk.Label() oInfo.set_markup('<b>%s</b>' % markup_escape_text(sMessage)) oInfo.set_alignment(0, 0) oInfo.set_selectable(True) oMessageBox.pack_start(oInfo, expand=False) oExpander = gtk.Expander('Details') oFrame = gtk.Frame() oDetails = gtk.Label(sDetails) oDetails.set_selectable(True) oFrame.add(oDetails) oExpander.add(oFrame) oMessageBox.pack_start(oExpander) oHBox.pack_start(oMessageBox) # pylint: disable-msg=E1101 # vbox confuses pylint self.vbox.pack_start(oHBox) oExpander.set_expanded(False) self.show_all() self.set_name("Sutekh.dialog")
def _choose(self, filename): if filename is not None: filename_root, basename = os.path.split(filename) if filename_root: parent_directory = os.path.split(filename_root)[1] text_choose = ( _("A file named \"{0}\" already exists in \"{1}\".").format(basename, parent_directory) + " ") else: text_choose = _("A file named \"{0}\" already exists.").format(basename) + "\n" else: text_choose = _("A file with the same name already exists.") + "\n" text_choose += _("What would you like to do?") self._dialog_text.set_markup( "<span font_size=\"large\"><b>" + gobject.markup_escape_text(text_choose) + "</b></span>") self._dialog.show_all() self._overwrite_mode = self._dialog.run() if self._overwrite_mode not in self._values: self._overwrite_mode = self.default_response self._dialog.hide() return self._overwrite_mode
def __del_bookmark_button_cb(self, widget, data): treeselection = self.bookmarks_treeview.get_selection() (model, iter) = treeselection.get_selected() bookmark_name = model.get_value(iter, 1) dlg = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK_CANCEL) dlg.set_icon_from_file(MSD.icons_files_dir + "bookmarks_16x16.png") dlg.set_markup(MSD.MSG_DELETE_BOOKMARK_TITLE) dlg.format_secondary_markup(MSD.MSG_DELETE_BOOKMARK % gobject.markup_escape_text (bookmark_name)) ret = dlg.run() dlg.destroy() if ret != gtk.RESPONSE_OK: return iter_tmp = model.get_iter(0) while iter_tmp != None: if model.get_value(iter_tmp, 1) == bookmark_name: model.remove(iter_tmp) break iter_tmp = model.iter_next(iter_tmp) self.conf.del_bookmark(bookmark_name) self.conf.save_conf()
def run_dialog(text, parent=None, messagetype=gtk.MESSAGE_WARNING, buttonstype=gtk.BUTTONS_OK, extrabuttons=()): """Run a dialog with text 'text'. Extra buttons are passed as tuples of (button label, response id). """ escaped = gobject.markup_escape_text(text) d = gtk.MessageDialog( None, gtk.DIALOG_DESTROY_WITH_PARENT, messagetype, buttonstype, '<span weight="bold" size="larger">%s</span>' % escaped) if parent and isinstance(parent, gtk.Window): d.set_transient_for(parent.widget.get_toplevel()) for b, rid in extrabuttons: d.add_button(b, rid) d.vbox.set_spacing(12) hbox = d.vbox.get_children()[0] hbox.set_spacing(12) d.image.set_alignment(0.5, 0) d.image.set_padding(12, 12) d.label.set_use_markup(1) d.label.set_padding(12, 12) ret = d.run() d.destroy() return ret
def _choose(self, filepath): if filepath is not None: dirpath, filename = os.path.split(filepath) if dirpath: text_choose = ( _('A file named "{}" already exists in "{}". ').format( filename, os.path.basename(dirpath))) else: text_choose = _('A file named "{}" already exists.\n').format( filename) else: text_choose = _("A file with the same name already exists.\n") text_choose += _("What would you like to do?") self._dialog_text.set_markup( '<span font_size="large"><b>{}</b></span>'.format( gobject.markup_escape_text(text_choose))) self._dialog.show_all() self._overwrite_mode = self._dialog.run() if self._overwrite_mode not in self._values: self._overwrite_mode = self.default_response self._dialog.hide() return self._overwrite_mode
def _choose(self, filepath): if filepath is not None: dirpath, filename = os.path.split(filepath) if dirpath: text_choose = ( _('A file named "{}" already exists in "{}". ').format( filename, os.path.basename(dirpath))) else: text_choose = _('A file named "{}" already exists.\n').format(filename) else: text_choose = _("A file with the same name already exists.\n") text_choose += _("What would you like to do?") self._dialog_text.set_markup( '<span font_size="large"><b>{}</b></span>'.format( gobject.markup_escape_text(text_choose))) self._dialog.show_all() self._overwrite_mode = self._dialog.run() if self._overwrite_mode not in self._values: self._overwrite_mode = self.default_response self._dialog.hide() return self._overwrite_mode
def password(title, msg=None, parent=None): dlg = gtk.MessageDialog(parent, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION, gtk.BUTTONS_OK_CANCEL) title = gobject.markup_escape_text(title) dlg.set_markup('<b>%s</b>' % title) dlg.set_title(_(u'Password required')) dlg.set_icon_name('crunchyfrog') if msg is not None: dlg.format_secondary_markup(msg) hbox = gtk.HBox() hbox.set_border_width(6) hbox.set_spacing(7) hbox.show() dlg.vbox.pack_start(hbox) label = gtk.Label(_('Password:'******'\u2022') entry.set_visibility(False) entry.show() hbox.pack_start(entry) if dlg.run() == gtk.RESPONSE_OK: ret = entry.get_text() else: ret = None dlg.destroy() return ret
def do_set_property(self, pspec, value): if pspec.name == 'title': self.__title.set_markup('<span weight="bold">%s</span>' % gobject.markup_escape_text(value)) self.__title_text = value else: raise AttributeError, 'unknown property %s' % pspec.name
def to_string(self, parent): """Return a string form of the name for display. Arguments: - `parent`: `RowItem` object that is the parent of the name in the display context """ text = gobject.markup_escape_text(self.name) unkeyed_children = False count = 0 count_string = '' if parent is None and len(self.__unkeyed_instances.keys()): unkeyed_children = True count = sum([ len(instances) for instances in self.__unkeyed_instances.values() ]) elif isinstance(parent, XMLFile) and parent in self.__unkeyed_instances: unkeyed_children = True count = len(self.__unkeyed_instances[parent]) if unkeyed_children: if count > 0: count_string = ' [%d]' % count text = '<b>%s%s</b>' % (text, count_string) return text
def _escape_ml(msg): """ escape every invalid character via gobject.markup_escape_text from the given string but leave the irc color/bold characters: - chr(2) - chr(3) - chr(31) """ msg = msg.replace("%", "%%") # escape % msg = msg.replace(chr(2), "%2") msg = msg.replace(chr(31), "%31") msg = msg.replace(chr(3), "%3") msg = gobject.markup_escape_text(msg) l = escape_helper.unescape_split("%2", msg, escape_char="%") msg = chr(2).join(l) l = escape_helper.unescape_split("%3", msg, escape_char="%") msg = chr(3).join(l) l = escape_helper.unescape_split("%31", msg, escape_char="%") msg = chr(31).join(l) return msg.replace("%%", "%")