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 / list_store.py < prev    next >
Text File  |  2010-05-11  |  5KB  |  142 lines

  1. #!/usr/bin/env python
  2. '''Tree View/List Store
  3.  
  4. The GtkListStore is used to store data in list form, to be used
  5. later on by a GtkTreeView to display it. This demo builds a
  6. simple GtkListStore and displays it. See the Stock Browser
  7. demo for a more advanced example.'''
  8.  
  9. import gobject
  10. import gtk
  11.  
  12. (
  13.     COLUMN_FIXED,
  14.     COLUMN_NUMBER,
  15.     COLUMN_SEVERITY,
  16.     COLUMN_DESCRIPTION
  17. ) = range(4)
  18.  
  19. data = \
  20. ((False, 60482, 'Normal', 'scrollable notebooks and hidden tabs'),
  21.  (False, 60620, 'Critical',
  22.   'gdk_window_clear_area(gdkwindow-win32.c) is not thread-safe'),
  23.  (False, 50214, 'Major', 'Xft support does not clean up correctly'),
  24.  (True,  52877, 'Major', 'GtkFileSelection needs a refresh method. '),
  25.  (False, 56070, 'Normal', "Can't click button after setting in sensitive"),
  26.  (True,  56355, 'Normal', 'GtkLabel - Not all changes propagate correctly'),
  27.  (False, 50055, 'Normal', 'Rework width/height computations for TreeView'),
  28.  (False, 58278, 'Normal', "gtk_dialog_set_response_sensitive() doesn't work"),
  29.  (False, 55767, 'Normal', 'Getters for all setters'),
  30.  (False, 56925, 'Normal', 'Gtkcalender size'),
  31.  (False, 56221, 'Normal', 'Selectable label needs right-click copy menu'),
  32.  (True,  50939, 'Normal', 'Add shift clicking to GtkTextView'),
  33.  (False, 6112,  'Enhancement', 'netscape-like collapsable toolbars'),
  34.  (False, 1,     'Normal', 'First bug :=)'))
  35.  
  36. class ListStoreDemo(gtk.Window):
  37.     def __init__(self, parent=None):
  38.         # create window, etc
  39.         gtk.Window.__init__(self)
  40.         try:
  41.             self.set_screen(parent.get_screen())
  42.         except AttributeError:
  43.             self.connect('destroy', lambda *w: gtk.main_quit())
  44.         self.set_title(self.__class__.__name__)
  45.  
  46.         self.set_border_width(8)
  47.         self.set_default_size(300, 250)
  48.  
  49.         vbox = gtk.VBox(False, 8)
  50.         self.add(vbox)
  51.  
  52.         label = gtk.Label('This is the bug list (note: not based on real data, '
  53.             'it would be nice to have a nice ODBC interface to bugzilla or so, though).')
  54.         vbox.pack_start(label, False, False)
  55.  
  56.         sw = gtk.ScrolledWindow()
  57.         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
  58.         sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
  59.         vbox.pack_start(sw)
  60.  
  61.         # create tree model
  62.         model = self.__create_model()
  63.  
  64.         # create tree view
  65.         treeview = gtk.TreeView(model)
  66.         treeview.set_rules_hint(True)
  67.         treeview.set_search_column(COLUMN_DESCRIPTION)
  68.  
  69.         sw.add(treeview)
  70.  
  71.         # add columns to the tree view
  72.         self.__add_columns(treeview)
  73.  
  74.         self.show_all()
  75.  
  76.     def __create_model(self):
  77.         lstore = gtk.ListStore(
  78.             gobject.TYPE_BOOLEAN,
  79.             gobject.TYPE_UINT,
  80.             gobject.TYPE_STRING,
  81.             gobject.TYPE_STRING)
  82.  
  83.         for item in data:
  84.             iter = lstore.append()
  85.             lstore.set(iter,
  86.                 COLUMN_FIXED, item[COLUMN_FIXED],
  87.                 COLUMN_NUMBER, item[COLUMN_NUMBER],
  88.                 COLUMN_SEVERITY, item[COLUMN_SEVERITY],
  89.                 COLUMN_DESCRIPTION, item[COLUMN_DESCRIPTION])
  90.         return lstore
  91.  
  92.     def fixed_toggled(self, cell, path, model):
  93.         # get toggled iter
  94.         iter = model.get_iter((int(path),))
  95.         fixed = model.get_value(iter, COLUMN_FIXED)
  96.  
  97.         # do something with the value
  98.         fixed = not fixed
  99.  
  100.         # set new value
  101.         model.set(iter, COLUMN_FIXED, fixed)
  102.  
  103.     def __add_columns(self, treeview):
  104.         model = treeview.get_model()
  105.  
  106.         # column for fixed toggles
  107.         renderer = gtk.CellRendererToggle()
  108.         renderer.connect('toggled', self.fixed_toggled, model)
  109.  
  110.         column = gtk.TreeViewColumn('Fixed', renderer, active=COLUMN_FIXED)
  111.  
  112.         # set this column to a fixed sizing(of 50 pixels)
  113.         column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
  114.         column.set_fixed_width(50)
  115.  
  116.         treeview.append_column(column)
  117.  
  118.         # column for bug numbers
  119.         column = gtk.TreeViewColumn('Bug Number', gtk.CellRendererText(),
  120.                                     text=COLUMN_NUMBER)
  121.         column.set_sort_column_id(COLUMN_NUMBER)
  122.         treeview.append_column(column)
  123.  
  124.         # columns for severities
  125.         column = gtk.TreeViewColumn('Severity', gtk.CellRendererText(),
  126.                                     text=COLUMN_SEVERITY)
  127.         column.set_sort_column_id(COLUMN_SEVERITY)
  128.         treeview.append_column(column)
  129.  
  130.         # column for description
  131.         column = gtk.TreeViewColumn('Description', gtk.CellRendererText(),
  132.                                      text=COLUMN_DESCRIPTION)
  133.         column.set_sort_column_id(COLUMN_DESCRIPTION)
  134.         treeview.append_column(column)
  135.  
  136. def main():
  137.     ListStoreDemo()
  138.     gtk.main()
  139.  
  140. if __name__ == '__main__':
  141.     main()
  142.