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 / demos / stock_browser.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2010-05-11  |  9KB  |  231 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. '''Stock Item and Icon Browser
  5.  
  6. This source code for this demo doesn\'t demonstrate anything particularly
  7. useful in applications. The purpose of the "demo" is just to provide a
  8. handy place to browse the available stock icons and stock items.
  9. '''
  10. import gobject
  11. import gtk
  12. import re
  13.  
  14. def id_to_macro(stock_id):
  15.     if stock_id == '':
  16.         return ''
  17.     if stock_id.startswith('gtk'):
  18.         macro = 'gtk.STOCK' + re.sub('-([^-]+)', (lambda m: '_' + m.group(1).upper()), stock_id[3:])
  19.     else:
  20.         macro = re.sub('([^-]+)-?', (lambda m: '_' + m.group(1).upper()), stock_id)
  21.         macro = macro[1:]
  22.     return macro
  23.  
  24.  
  25. class StockItemInfo(object):
  26.     
  27.     def __init__(self, stock_id = ''):
  28.         self.stock_id = stock_id
  29.         self.stock_item = None
  30.         self.small_icon = None
  31.         self.macro = id_to_macro(stock_id)
  32.         self.accel_str = ''
  33.  
  34.  
  35.  
  36. class StockItemDisplay(object):
  37.     
  38.     def __init__(self):
  39.         self.type_label = None
  40.         self.macro_label = None
  41.         self.id_label = None
  42.         self.label_accel_label = None
  43.         self.icon_image = None
  44.  
  45.  
  46.  
  47. def get_largest_size(stockid):
  48.     ''' Finds the largest size at which the given image stock id is
  49.         available. This would not be useful for a normal application.
  50.     '''
  51.     set = gtk.icon_factory_lookup_default(stockid)
  52.     best_size = gtk.ICON_SIZE_INVALID
  53.     best_pixels = 0
  54.     sizes = set.get_sizes()
  55.     n_sizes = len(sizes)
  56.     i = 0
  57.     while i < n_sizes:
  58.         (width, height) = gtk.icon_size_lookup(sizes[i])
  59.         if width * height > best_pixels:
  60.             best_size = sizes[i]
  61.             best_pixels = width * height
  62.         
  63.         i += 1
  64.     return best_size
  65.  
  66.  
  67. def macro_set_func_text(tree_column, cell, model, iter):
  68.     info = model.get_value(iter, 0)
  69.     cell.set_property('text', info.macro)
  70.  
  71.  
  72. def id_set_func(tree_column, cell, model, iter):
  73.     info = model.get_value(iter, 0)
  74.     cell.set_property('text', info.stock_id)
  75.  
  76.  
  77. def accel_set_func(tree_column, cell, model, iter):
  78.     info = model.get_value(iter, 0)
  79.     cell.set_property('text', info.accel_str)
  80.  
  81.  
  82. def label_set_func(tree_column, cell, model, iter):
  83.     info = model.get_value(iter, 0)
  84.     cell.set_property('text', info.stock_item[1])
  85.  
  86.  
  87. class StockItemAndIconBrowserDemo(gtk.Window):
  88.     
  89.     def __init__(self, parent = None):
  90.         gtk.Window.__init__(self)
  91.         
  92.         try:
  93.             self.set_screen(parent.get_screen())
  94.         except AttributeError:
  95.             self.connect('destroy', (lambda : gtk.main_quit()))
  96.  
  97.         self.set_title(self.__class__.__name__)
  98.         self.set_default_size(-1, 500)
  99.         self.set_border_width(8)
  100.         hbox = gtk.HBox(False, 8)
  101.         self.add(hbox)
  102.         sw = gtk.ScrolledWindow()
  103.         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
  104.         sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
  105.         hbox.pack_start(sw, False, False, 0)
  106.         model = self._StockItemAndIconBrowserDemo__create_model()
  107.         treeview = gtk.TreeView(model)
  108.         sw.add(treeview)
  109.         column = gtk.TreeViewColumn()
  110.         column.set_title('Macro')
  111.         cell_renderer = gtk.CellRendererPixbuf()
  112.         column.pack_start(cell_renderer, False)
  113.         column.set_attributes(cell_renderer, stock_id = 1)
  114.         cell_renderer = gtk.CellRendererText()
  115.         column.pack_start(cell_renderer, True)
  116.         column.set_cell_data_func(cell_renderer, macro_set_func_text)
  117.         treeview.append_column(column)
  118.         cell_renderer = gtk.CellRendererText()
  119.         treeview.insert_column_with_data_func(-1, 'Label', cell_renderer, label_set_func)
  120.         cell_renderer = gtk.CellRendererText()
  121.         treeview.insert_column_with_data_func(-1, 'Accel', cell_renderer, accel_set_func)
  122.         cell_renderer = gtk.CellRendererText()
  123.         treeview.insert_column_with_data_func(-1, 'ID', cell_renderer, id_set_func)
  124.         align = gtk.Alignment(0.5, 0, 0, 0)
  125.         hbox.pack_end(align, False, False, 0)
  126.         frame = gtk.Frame('Selected Item')
  127.         align.add(frame)
  128.         vbox = gtk.VBox(False, 8)
  129.         vbox.set_border_width(4)
  130.         frame.add(vbox)
  131.         display = StockItemDisplay()
  132.         treeview.set_data('stock-display', display)
  133.         display.type_label = gtk.Label()
  134.         display.macro_label = gtk.Label()
  135.         display.id_label = gtk.Label()
  136.         display.label_accel_label = gtk.Label()
  137.         display.icon_image = gtk.Image()
  138.         vbox.pack_start(display.type_label, False, False, 0)
  139.         vbox.pack_start(display.icon_image, False, False, 0)
  140.         vbox.pack_start(display.label_accel_label, False, False, 0)
  141.         vbox.pack_start(display.macro_label, False, False, 0)
  142.         vbox.pack_start(display.id_label, False, False, 0)
  143.         selection = treeview.get_selection()
  144.         selection.set_mode(gtk.SELECTION_SINGLE)
  145.         selection.connect('changed', self.on_selection_changed)
  146.         self.show_all()
  147.  
  148.     
  149.     def __create_model(self):
  150.         store = gtk.ListStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING)
  151.         ids = gtk.stock_list_ids()
  152.         ids.sort()
  153.         for data in ids:
  154.             info = StockItemInfo(stock_id = data)
  155.             stock_item = gtk.stock_lookup(data)
  156.             if stock_item:
  157.                 info.stock_item = stock_item
  158.             else:
  159.                 info.stock_item = ('', '', 0, 0, '')
  160.             icon_set = gtk.icon_factory_lookup_default(info.stock_id)
  161.             if icon_set is None:
  162.                 info.small_icon = None
  163.             else:
  164.                 sizes = icon_set.get_sizes()
  165.                 n_sizes = len(sizes)
  166.                 size = sizes[0]
  167.                 i = 0
  168.                 while i < n_sizes:
  169.                     if sizes[i] == gtk.ICON_SIZE_MENU:
  170.                         size = gtk.ICON_SIZE_MENU
  171.                         break
  172.                     
  173.                     i += 1
  174.                 info.small_icon = self.render_icon(info.stock_id, size)
  175.                 if size != gtk.ICON_SIZE_MENU:
  176.                     (w, h) = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU)
  177.                     scaled = info.small_icon.scale_simple(w, h, 'bilinear')
  178.                     info.small_icon = scaled
  179.                 
  180.             if info.stock_item[3] == 0:
  181.                 info.accel_str = ''
  182.             else:
  183.                 info.accel_str = gtk.accelerator_name(info.stock_item[3], info.stock_item[2])
  184.             iter = store.append()
  185.             store.set(iter, 0, info, 1, info.stock_id)
  186.         
  187.         return store
  188.  
  189.     
  190.     def on_selection_changed(self, selection):
  191.         treeview = selection.get_tree_view()
  192.         display = treeview.get_data('stock-display')
  193.         (model, iter) = selection.get_selected()
  194.         if iter:
  195.             info = model.get_value(iter, 0)
  196.             if info.small_icon and info.stock_item[1]:
  197.                 display.type_label.set_text('Icon and Item')
  198.             elif info.small_icon:
  199.                 display.type_label.set_text('Icon Only')
  200.             elif info.stock_item[1]:
  201.                 display.type_label.set_text('Item Only')
  202.             else:
  203.                 display.type_label.set_text('???????')
  204.             display.macro_label.set_text(info.macro)
  205.             display.id_label.set_text(info.stock_id)
  206.             if info.stock_item[1]:
  207.                 s = '%s %s' % (info.stock_item[1], info.accel_str)
  208.                 display.label_accel_label.set_text_with_mnemonic(s)
  209.             else:
  210.                 display.label_accel_label.set_text('')
  211.             if info.small_icon:
  212.                 display.icon_image.set_from_stock(info.stock_id, get_largest_size(info.stock_id))
  213.             else:
  214.                 display.icon_image.set_from_pixbuf(None)
  215.         else:
  216.             display.type_label.set_text('No selected item')
  217.             display.macro_label.set_text('')
  218.             display.id_label.set_text('')
  219.             display.label_accel_label.set_text('')
  220.             display.icon_image.set_from_pixbuf(None)
  221.  
  222.  
  223.  
  224. def main():
  225.     StockItemAndIconBrowserDemo()
  226.     gtk.main()
  227.  
  228. if __name__ == '__main__':
  229.     main()
  230.  
  231.