home *** CD-ROM | disk | FTP | other *** search
/ tusportal.tus.k12.pa.us / tusportal.tus.k12.pa.us.tar / tusportal.tus.k12.pa.us / Wyse / latest-image.raw / 0.img / usr / lib / pygtk / 2.0 / pygtk-demo.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2010-05-11  |  10KB  |  300 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. '''
  5.   $Id$
  6.  
  7.   pygtk-demo.py
  8.   2004-07-18: Some enhancements for building the demolist like in gtk-demos of the
  9.     gtk+ distribution.
  10.   2004-07-22: Simple syntaxhighlighting implemented, based on the tokenizer-module.
  11. '''
  12. import string
  13. import re
  14.  
  15. try:
  16.     import pygtk
  17.     pygtk.require('2.0')
  18. except ImportError:
  19.     pass
  20.  
  21. import gobject
  22. import gtk
  23. import pango
  24. import tokenize
  25. import keyword
  26. import demos
  27. D_TEMPL = '%sDemo'
  28. child_demos = { }
  29. testgtk_demos = []
  30. for descr, mod in demos.demo_list:
  31.     
  32.     try:
  33.         (main, child) = descr.split('/')
  34.     except ValueError:
  35.         demo_class = D_TEMPL % re.sub('(\\S+) *', (lambda m: if not m.group(1)[0].isupper() or m.group(1):
  36. passm.group(1).capitalize()), descr)
  37.         testgtk_demos.append((descr, mod, demo_class))
  38.         continue
  39.  
  40.     demo_class = D_TEMPL % re.sub('(\\S+) *', (lambda m: if not m.group(1)[0].isupper() or m.group(1):
  41. passm.group(1).capitalize()), child)
  42.     
  43.     try:
  44.         child_demos[main.upper()].append((child, mod, demo_class))
  45.     continue
  46.     except KeyError:
  47.         child_demos.setdefault(main.upper(), []).append((child, mod, demo_class))
  48.         testgtk_demos.append((main, None, None, child_demos[main.upper()]))
  49.         continue
  50.     
  51.  
  52.  
  53. (TITLE_COLUMN, MODULE_COLUMN, FUNC_COLUMN, ITALIC_COLUMN) = range(4)
  54. CHILDREN_COLUMN = 3
  55.  
  56. class InputStream(object):
  57.     """ Simple Wrapper for File-like objects. [c]StringIO doesn't provide
  58.         a readline function for use with generate_tokens.
  59.         Using a iterator-like interface doesn't succeed, because the readline
  60.         function isn't used in such a context. (see <python-lib>/tokenize.py)
  61.     """
  62.     
  63.     def __init__(self, data):
  64.         self._InputStream__data = [ '%s\n' % x for x in data.splitlines() ]
  65.         self._InputStream__lcount = 0
  66.  
  67.     
  68.     def readline(self):
  69.         
  70.         try:
  71.             line = self._InputStream__data[self._InputStream__lcount]
  72.             self._InputStream__lcount += 1
  73.         except IndexError:
  74.             line = ''
  75.             self._InputStream__lcount = 0
  76.  
  77.         return line
  78.  
  79.  
  80.  
  81. class PyGtkDemo(gtk.Window):
  82.     info_buffer = None
  83.     source_buffer = None
  84.     module_cache = { }
  85.     
  86.     def __init__(self):
  87.         gtk.Window.__init__(self)
  88.         self.set_title('PyGTK+ Code Demos')
  89.         self.connect('destroy', (lambda w: gtk.main_quit()))
  90.         self.set_default_size(800, 400)
  91.         hbox = gtk.HBox(False, 3)
  92.         self.add(hbox)
  93.         treeview = self._PyGtkDemo__create_treeview()
  94.         hbox.pack_start(treeview, False, False)
  95.         self.notebook = gtk.Notebook()
  96.         hbox.pack_start(self.notebook, expand = True)
  97.         (scrolled_window, self.info_buffer) = self._PyGtkDemo__create_text(False)
  98.         self._new_notebook_page(scrolled_window, '_Info')
  99.         tag = self.info_buffer.create_tag('title')
  100.         tag.set_property('font', 'Sans 18')
  101.         (scrolled_window, self.source_buffer) = self._PyGtkDemo__create_text(True)
  102.         self._new_notebook_page(scrolled_window, '_Source')
  103.         tag = self.source_buffer.create_tag('source')
  104.         tag.set_property('font', 'monospace')
  105.         tag.set_property('pixels_above_lines', 0)
  106.         tag.set_property('pixels_below_lines', 0)
  107.         tag = self.source_buffer.create_tag('keyword', foreground = '#00007F', weight = pango.WEIGHT_BOLD)
  108.         tag = self.source_buffer.create_tag('string', foreground = '#7F007F')
  109.         tag = self.source_buffer.create_tag('comment', foreground = '#007F00', style = pango.STYLE_ITALIC)
  110.         self.show_all()
  111.  
  112.     
  113.     def run(self):
  114.         gtk.main()
  115.  
  116.     
  117.     def _new_notebook_page(self, widget, label):
  118.         l = gtk.Label('')
  119.         l.set_text_with_mnemonic(label)
  120.         self.notebook.append_page(widget, l)
  121.  
  122.     
  123.     def __create_treeview(self):
  124.         model = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_BOOLEAN)
  125.         treeview = gtk.TreeView(model)
  126.         selection = treeview.get_selection()
  127.         selection.set_mode(gtk.SELECTION_BROWSE)
  128.         treeview.set_size_request(200, -1)
  129.         for module in testgtk_demos:
  130.             iter = model.append(None)
  131.             model.set(iter, TITLE_COLUMN, module[TITLE_COLUMN], MODULE_COLUMN, module[MODULE_COLUMN], FUNC_COLUMN, module[FUNC_COLUMN], ITALIC_COLUMN, False)
  132.             
  133.             try:
  134.                 children = module[CHILDREN_COLUMN]
  135.                 for child_module in children:
  136.                     child_iter = model.append(iter)
  137.                     model.set(child_iter, TITLE_COLUMN, child_module[TITLE_COLUMN], MODULE_COLUMN, child_module[MODULE_COLUMN], FUNC_COLUMN, child_module[FUNC_COLUMN], ITALIC_COLUMN, False)
  138.             continue
  139.             except IndexError:
  140.                 continue
  141.             
  142.  
  143.         
  144.         cell = gtk.CellRendererText()
  145.         cell.set_property('style', pango.STYLE_ITALIC)
  146.         column = gtk.TreeViewColumn('Widget (double click for demo)', cell, text = TITLE_COLUMN, style_set = ITALIC_COLUMN)
  147.         treeview.append_column(column)
  148.         selection.connect('changed', self.selection_changed_cb)
  149.         treeview.connect('row-activated', self.row_activated_cb)
  150.         treeview.expand_all()
  151.         return treeview
  152.  
  153.     
  154.     def __create_text(self, is_source = False):
  155.         scrolled_window = gtk.ScrolledWindow()
  156.         scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
  157.         scrolled_window.set_shadow_type(gtk.SHADOW_IN)
  158.         text_view = gtk.TextView()
  159.         scrolled_window.add(text_view)
  160.         buffer = gtk.TextBuffer(None)
  161.         text_view.set_buffer(buffer)
  162.         text_view.set_editable(False)
  163.         text_view.set_cursor_visible(False)
  164.         text_view.set_wrap_mode(not is_source)
  165.         return (scrolled_window, buffer)
  166.  
  167.     
  168.     def row_activated_cb(self, treeview, path, column):
  169.         model = treeview.get_model()
  170.         iter = model.get_iter(path)
  171.         module_name = model.get_value(iter, MODULE_COLUMN)
  172.         func_name = model.get_value(iter, FUNC_COLUMN)
  173.         italic_value = model.get_value(iter, ITALIC_COLUMN)
  174.         if module_name is None:
  175.             return True
  176.         
  177.         try:
  178.             self.module_cache[module_name].present()
  179.         except KeyError:
  180.             module_name is None
  181.             module_name is None
  182.             module = getattr(demos, module_name)
  183.             model.set(iter, ITALIC_COLUMN, not italic_value)
  184.             cmd = 'demos.%s.%s' % (module_name, func_name)
  185.             window = eval(cmd)(self)
  186.             if window:
  187.                 window.connect('destroy', self.window_closed_cb, model, path)
  188.                 self.module_cache[module_name] = window
  189.             
  190.         except:
  191.             window
  192.  
  193.  
  194.     
  195.     def selection_changed_cb(self, selection):
  196.         (model, iter) = selection.get_selected()
  197.         if not iter:
  198.             return False
  199.         name = model.get_value(iter, MODULE_COLUMN)
  200.         if name is not None:
  201.             self.load_module(name)
  202.         
  203.  
  204.     
  205.     def window_closed_cb(self, window, model, path):
  206.         iter = model.get_iter(path)
  207.         module_name = model.get_value(iter, MODULE_COLUMN)
  208.         del self.module_cache[module_name]
  209.         italic_value = model.get_value(iter, ITALIC_COLUMN)
  210.         if italic_value:
  211.             model.set(iter, ITALIC_COLUMN, not italic_value)
  212.         
  213.  
  214.     
  215.     def read_module(self, module):
  216.         filename = module.__file__
  217.         if filename[-4:] == '.pyc':
  218.             filename = filename[:-1]
  219.         
  220.         fd = open(filename)
  221.         return fd.read()
  222.  
  223.     
  224.     def insert_documentation(self, module):
  225.         buffer = self.info_buffer
  226.         iter = buffer.get_iter_at_offset(0)
  227.         if not module.__doc__:
  228.             pass
  229.         lines = string.split('', '\n')
  230.         buffer.insert(iter, lines[0])
  231.         start = buffer.get_iter_at_offset(0)
  232.         buffer.apply_tag_by_name('title', start, iter)
  233.         buffer.insert(iter, '\n')
  234.         for line in lines[1:]:
  235.             buffer.insert(iter, line)
  236.             buffer.insert(iter, '\n')
  237.         
  238.  
  239.     
  240.     def clear_buffers(self):
  241.         (start, end) = self.info_buffer.get_bounds()
  242.         self.info_buffer.delete(start, end)
  243.         (start, end) = self.source_buffer.get_bounds()
  244.         self.source_buffer.delete(start, end)
  245.  
  246.     
  247.     def insert_source(self, data):
  248.         source_buffer = self.source_buffer
  249.         iter = source_buffer.get_iter_at_offset(0)
  250.         (last_erow, last_ecol) = (0, 0)
  251.         was_newline = False
  252.         for x in tokenize.generate_tokens(InputStream(data).readline):
  253.             tok_type = x[0]
  254.             tok_str = x[1]
  255.             (srow, scol) = x[2]
  256.             (erow, ecol) = x[3]
  257.             if srow == last_erow:
  258.                 if scol != last_ecol:
  259.                     source_buffer.insert_with_tags_by_name(iter, ' ' * (scol - last_ecol), 'source')
  260.                 
  261.             elif was_newline is False and last_erow != 0:
  262.                 source_buffer.insert_with_tags_by_name(iter, ' \\\n', 'source')
  263.             
  264.             if scol != 0:
  265.                 source_buffer.insert_with_tags_by_name(iter, ' ' * scol, 'source')
  266.             
  267.             last_erow = erow
  268.             last_ecol = ecol
  269.             if tok_type == tokenize.COMMENT:
  270.                 was_newline = True
  271.                 source_buffer.insert_with_tags_by_name(iter, tok_str, 'source', 'comment')
  272.                 continue
  273.             elif tok_type == tokenize.NAME:
  274.                 if tok_str in keyword.kwlist:
  275.                     source_buffer.insert_with_tags_by_name(iter, tok_str, 'source', 'keyword')
  276.                     continue
  277.                 
  278.             elif tok_type == tokenize.STRING:
  279.                 source_buffer.insert_with_tags_by_name(iter, tok_str, 'source', 'string')
  280.                 continue
  281.             
  282.             was_newline = tok_type in (tokenize.NEWLINE, tokenize.NL)
  283.             source_buffer.insert_with_tags_by_name(iter, tok_str, 'source')
  284.         
  285.  
  286.     
  287.     def load_module(self, name):
  288.         self.clear_buffers()
  289.         module = getattr(demos, name)
  290.         if module.__doc__:
  291.             self.insert_documentation(module)
  292.         
  293.         source = self.read_module(module)
  294.         self.insert_source(source)
  295.  
  296.  
  297. if __name__ == '__main__':
  298.     PyGtkDemo().run()
  299.  
  300.