home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / pycentral / deskbar-applet / site-packages / deskbar / Utils.py < prev    next >
Encoding:
Python Source  |  2006-08-29  |  3.1 KB  |  94 lines

  1. import os, cgi, re
  2. from os.path import *
  3. import deskbar, deskbar.gnomedesktop
  4. import gtk, gtk.gdk, gnome.ui
  5. from htmlentitydefs import name2codepoint
  6.  
  7. ICON_THEME = gtk.icon_theme_get_default()
  8. factory = gnome.ui.ThumbnailFactory(deskbar.ICON_HEIGHT)
  9.  
  10. # This pattern matches a character entity reference (a decimal numeric
  11. # references, a hexadecimal numeric reference, or a named reference).
  12. charrefpat = re.compile(r'&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?')
  13.  
  14. def htmldecode(text):
  15.     """Decode HTML entities in the given text."""
  16.     if type(text) is unicode:
  17.         uchr = unichr
  18.     else:
  19.         uchr = lambda value: value > 255 and unichr(value) or chr(value)
  20.     
  21.     def entitydecode(match, uchr=uchr):
  22.         entity = match.group(1)
  23.         if entity.startswith('#x'):
  24.             return uchr(int(entity[2:], 16))
  25.         elif entity.startswith('#'):
  26.             return uchr(int(entity[1:]))
  27.         elif entity in name2codepoint:
  28.             return uchr(name2codepoint[entity])
  29.         else:
  30.             return match.group(0)
  31.     
  32.     return charrefpat.sub(entitydecode, text)
  33.  
  34. def strip_html(string):
  35.     return re.sub(r"<.*?>|</.*?>","",string)
  36.     
  37. def more_information_dialog(parent, title, content):
  38.     message_dialog = gtk.MessageDialog(parent=parent, buttons=gtk.BUTTONS_CLOSE)
  39.     message_dialog.set_markup("<span size='larger' weight='bold'>%s</span>\n\n%s" % (cgi.escape(title), cgi.escape(content)))
  40.     resp = message_dialog.run()
  41.     if resp == gtk.RESPONSE_CLOSE:
  42.         message_dialog.destroy()
  43.         
  44. def get_xdg_data_dirs():
  45.     dirs = os.getenv("XDG_DATA_HOME")
  46.     if dirs == None:
  47.         dirs = expanduser("~/.local/share")
  48.     
  49.     sysdirs = os.getenv("XDG_DATA_DIRS")
  50.     if sysdirs == None:
  51.         sysdirs = "/usr/local/share:/usr/share"
  52.     
  53.     dirs = "%s:%s" % (dirs, sysdirs)
  54.     return [dir for dir in dirs.split(":") if dir.strip() != "" and exists(dir)]
  55.  
  56. def load_icon_for_file(f):
  57.     icon_name, flags = gnome.ui.icon_lookup(ICON_THEME, factory,
  58.                 f, "",
  59.                 gnome.ui.ICON_LOOKUP_FLAGS_SHOW_SMALL_IMAGES_AS_THEMSELVES)
  60.         
  61.     return load_icon(icon_name)
  62.  
  63. def load_icon_for_desktop_icon(icon):
  64.     if icon != None:
  65.         icon = deskbar.gnomedesktop.find_icon(ICON_THEME, icon, deskbar.ICON_HEIGHT, 0)
  66.         if icon != None:
  67.             return load_icon(icon)
  68.         
  69. # We load the icon file, and if it fails load an empty one
  70. # If the iconfile is a path starting with /, load the file
  71. # else try to load a stock or named icon name
  72. def load_icon(icon, width=deskbar.ICON_HEIGHT, height=deskbar.ICON_HEIGHT):
  73.     pixbuf = None
  74.     if icon != None and icon != "":
  75.         try:
  76.             our_icon = join(deskbar.ART_DATA_DIR, icon)
  77.             if exists(our_icon):
  78.                 pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(our_icon, width, height)
  79.             elif icon.startswith("/"):
  80.                 pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(icon, width, height)
  81.             else:
  82.                 pixbuf = ICON_THEME.load_icon(splitext(icon)[0], width, gtk.ICON_LOOKUP_USE_BUILTIN)
  83.         except Exception, msg1:
  84.             try:
  85.                 pixbuf = ICON_THEME.load_icon(icon, width, gtk.ICON_LOOKUP_USE_BUILTIN)
  86.             except Exception, msg2:
  87.                 print 'Error:load_icon:Icon Load Error:%s (or %s)' % (msg1, msg2)
  88.                 
  89.     # an icon that is too tall will make the EntryCompletion look funny
  90.     if pixbuf != None and pixbuf.get_height() > height:
  91.         pixbuf = pixbuf.scale_simple(width, height, gtk.gdk.INTERP_BILINEAR)
  92.     return pixbuf
  93.     
  94.