home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / python2.6 / dist-packages / checkbox_gtk / hyper_text_view.pyc (.txt) < prev   
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  5.2 KB  |  127 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import gtk
  5. import gobject
  6. import pango
  7.  
  8. class HyperTextView(gtk.TextView):
  9.     __gtype_name__ = 'HyperTextView'
  10.     __gsignals__ = {
  11.         'anchor-clicked': (gobject.SIGNAL_RUN_LAST, None, (str, str, int)) }
  12.     __gproperties__ = {
  13.         'link': (gobject.TYPE_PYOBJECT, 'link color', 'link color of TextView', gobject.PARAM_READWRITE),
  14.         'active': (gobject.TYPE_PYOBJECT, 'active color', 'active color of TextView', gobject.PARAM_READWRITE),
  15.         'hover': (gobject.TYPE_PYOBJECT, 'link:hover color', 'link:hover color of TextView', gobject.PARAM_READWRITE) }
  16.     
  17.     def do_get_property(self, prop):
  18.         
  19.         try:
  20.             return getattr(self, prop.name)
  21.         except AttributeError:
  22.             raise AttributeError, 'unknown property %s' % prop.name
  23.  
  24.  
  25.     
  26.     def do_set_property(self, prop, val):
  27.         if prop.name in self.__gproperties__.keys():
  28.             setattr(self, prop.name, val)
  29.         else:
  30.             raise AttributeError, 'unknown property %s' % prop.name
  31.         return prop.name in self.__gproperties__.keys()
  32.  
  33.     
  34.     def __init__(self, buffer = None):
  35.         super(HyperTextView, self).__init__(buffer)
  36.         self.link = {
  37.             'foreground': 'blue',
  38.             'underline': pango.UNDERLINE_SINGLE }
  39.         self.active = {
  40.             'foreground': 'red',
  41.             'underline': pango.UNDERLINE_SINGLE }
  42.         self.hover = {
  43.             'foreground': 'dark blue',
  44.             'underline': pango.UNDERLINE_SINGLE }
  45.         self.set_editable(False)
  46.         self.set_cursor_visible(False)
  47.         self._HyperTextView__tags = []
  48.         self.connect('motion-notify-event', self._motion)
  49.         self.connect(('focus-out-event',), (lambda w, e: self.get_buffer().get_tag_table().foreach(self._HyperTextView__tag_reset, e.window)))
  50.  
  51.     
  52.     def insert(self, text, _iter = None):
  53.         b = self.get_buffer()
  54.         if _iter is None:
  55.             _iter = b.get_end_iter()
  56.         
  57.         b.insert(_iter, text)
  58.  
  59.     
  60.     def insert_with_anchor(self, text, anchor = None, _iter = None):
  61.         b = self.get_buffer()
  62.         if _iter is None:
  63.             _iter = b.get_end_iter()
  64.         
  65.         if anchor is None:
  66.             anchor = text
  67.         
  68.         tag = b.create_tag(None, **self.get_property('link'))
  69.         tag.set_data('is_anchor', True)
  70.         tag.connect('event', self._tag_event, text, anchor)
  71.         self._HyperTextView__tags.append(tag)
  72.         b.insert_with_tags(_iter, text, tag)
  73.  
  74.     
  75.     def _motion(self, view, ev):
  76.         window = ev.window
  77.         (x, y, _) = window.get_pointer()
  78.         (x, y) = view.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT, x, y)
  79.         tags = view.get_iter_at_location(x, y).get_tags()
  80.         for tag in tags:
  81.             if tag.get_data('is_anchor'):
  82.                 for t in set(self._HyperTextView__tags) - set([
  83.                     tag]):
  84.                     self._HyperTextView__tag_reset(t, window)
  85.                 
  86.                 self._HyperTextView__set_anchor(window, tag, gtk.gdk.Cursor(gtk.gdk.HAND2), self.get_property('hover'))
  87.                 break
  88.                 continue
  89.         else:
  90.             tag_table = self.get_buffer().get_tag_table()
  91.  
  92.     
  93.     def _tag_event(self, tag, view, ev, _iter, text, anchor):
  94.         _type = ev.type
  95.         if _type == gtk.gdk.MOTION_NOTIFY:
  96.             return None
  97.         if _type in [
  98.             gtk.gdk.BUTTON_PRESS,
  99.             gtk.gdk.BUTTON_RELEASE]:
  100.             button = ev.button
  101.             cursor = gtk.gdk.Cursor(gtk.gdk.HAND2)
  102.             if _type == gtk.gdk.BUTTON_RELEASE:
  103.                 self.emit('anchor-clicked', text, anchor, button)
  104.                 self._HyperTextView__set_anchor(ev.window, tag, cursor, self.get_property('hover'))
  105.             elif button in (1, 2):
  106.                 self._HyperTextView__set_anchor(ev.window, tag, cursor, self.get_property('active'))
  107.             
  108.         
  109.  
  110.     
  111.     def __tag_reset(self, tag, window):
  112.         if tag.get_data('is_anchor'):
  113.             self._HyperTextView__set_anchor(window, tag, None, self.get_property('link'))
  114.         
  115.  
  116.     
  117.     def __set_anchor(self, window, tag, cursor, prop):
  118.         window.set_cursor(cursor)
  119.         for key, val in prop.iteritems():
  120.             if val is not None:
  121.                 tag.set_property(key, val)
  122.                 continue
  123.         
  124.  
  125.  
  126. gobject.type_register(HyperTextView)
  127.