summaryrefslogtreecommitdiff
path: root/examples/pygtk-demo/demos/list_store.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/pygtk-demo/demos/list_store.py')
-rw-r--r--examples/pygtk-demo/demos/list_store.py242
1 files changed, 127 insertions, 115 deletions
diff --git a/examples/pygtk-demo/demos/list_store.py b/examples/pygtk-demo/demos/list_store.py
index 8162433f..1d920bb3 100644
--- a/examples/pygtk-demo/demos/list_store.py
+++ b/examples/pygtk-demo/demos/list_store.py
@@ -1,130 +1,142 @@
#!/usr/bin/env python
'''Tree View/List Store
-The GtkListStore is used to store data in list form, to be used
+The GtkListStore is used to store data in list form, to be used
later on by a GtkTreeView to display it. This demo builds a
simple GtkListStore and displays it. See the Stock Browser
-demo for a more advanced example.''' # "
-
-description = 'List Store'
+demo for a more advanced example.'''
import gobject
import gtk
-from gtk import TRUE, FALSE
-COLUMN_FIXED = 0
-COLUMN_NUMBER = 1
-COLUMN_SEVERITY = 2
-COLUMN_DESCRIPTION = 3
+(
+ COLUMN_FIXED,
+ COLUMN_NUMBER,
+ COLUMN_SEVERITY,
+ COLUMN_DESCRIPTION
+) = range(4)
data = \
-[[FALSE, 60482, 'Normal', 'scrollable notebooks and hidden tabs'],
- [FALSE, 60620, 'Critical',
- 'gdk_window_clear_area (gdkwindow-win32.c) is not thread-safe'],
- [FALSE, 50214, 'Major', 'Xft support does not clean up correctly'],
- [TRUE, 52877, 'Major', 'GtkFileSelection needs a refresh method. '],
- [FALSE, 56070, 'Normal', "Can't click button after setting in sensitive"],
- [TRUE, 56355, 'Normal', 'GtkLabel - Not all changes propagate correctly'],
- [FALSE, 50055, 'Normal', 'Rework width/height computations for TreeView'],
- [FALSE, 58278, 'Normal', "gtk_dialog_set_response_sensitive () doesn't work"],
- [FALSE, 55767, 'Normal', 'Getters for all setters'],
- [FALSE, 56925, 'Normal', 'Gtkcalender size'],
- [FALSE, 56221, 'Normal', 'Selectable label needs right-click copy menu'],
- [TRUE, 50939, 'Normal', 'Add shift clicking to GtkTextView'],
- [FALSE, 6112, 'Enhancement', 'netscape-like collapsable toolbars'],
- [FALSE, 1, 'Normal', 'First bug :=)']]
-
-def create_model():
- store = gtk.ListStore(gobject.TYPE_BOOLEAN,
- gobject.TYPE_UINT,
- gobject.TYPE_STRING,
- gobject.TYPE_STRING)
- for item in data:
- iter = store.append()
- store.set(iter, COLUMN_FIXED, item[0],
- COLUMN_NUMBER, item[1],
- COLUMN_SEVERITY, item[2],
- COLUMN_DESCRIPTION, item[3])
- return store
-
-def fixed_toggled(cell, path, model):
- # get toggled iter
- iter = model.get_iter((int(path),))
- fixed = model.get_value(iter, COLUMN_FIXED)
-
- # do something with the value
- fixed = not fixed
-
- # set new value
- model.set(iter, COLUMN_FIXED, fixed)
-
-def add_columns(treeview):
- model = treeview.get_model()
-
- # column for fixed toggles
- renderer = gtk.CellRendererToggle()
- renderer.connect('toggled', fixed_toggled, model)
-
- column = gtk.TreeViewColumn('Fixed?', renderer, active=COLUMN_FIXED)
- column.set_clickable(TRUE)
-
- # set this column to a fixed sizing(of 50 pixels)
- column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
- column.set_fixed_width(50)
- column.set_clickable(TRUE)
-
- treeview.append_column(column)
-
- # column for bug numbers
- column = gtk.TreeViewColumn('Bug Number', gtk.CellRendererText(),
- text=COLUMN_NUMBER)
- treeview.append_column(column)
-
- # columns for severities
- column = gtk.TreeViewColumn('Severity', gtk.CellRendererText(),
- text=COLUMN_SEVERITY)
- treeview.append_column(column)
-
- # column for description
- column = gtk.TreeViewColumn('Description', gtk.CellRendererText(),
- text=COLUMN_DESCRIPTION)
- treeview.append_column(column)
-
+((False, 60482, 'Normal', 'scrollable notebooks and hidden tabs'),
+ (False, 60620, 'Critical',
+ 'gdk_window_clear_area(gdkwindow-win32.c) is not thread-safe'),
+ (False, 50214, 'Major', 'Xft support does not clean up correctly'),
+ (True, 52877, 'Major', 'GtkFileSelection needs a refresh method. '),
+ (False, 56070, 'Normal', "Can't click button after setting in sensitive"),
+ (True, 56355, 'Normal', 'GtkLabel - Not all changes propagate correctly'),
+ (False, 50055, 'Normal', 'Rework width/height computations for TreeView'),
+ (False, 58278, 'Normal', "gtk_dialog_set_response_sensitive() doesn't work"),
+ (False, 55767, 'Normal', 'Getters for all setters'),
+ (False, 56925, 'Normal', 'Gtkcalender size'),
+ (False, 56221, 'Normal', 'Selectable label needs right-click copy menu'),
+ (True, 50939, 'Normal', 'Add shift clicking to GtkTextView'),
+ (False, 6112, 'Enhancement', 'netscape-like collapsable toolbars'),
+ (False, 1, 'Normal', 'First bug :=)'))
+
+class ListStoreDemo(gtk.Window):
+ def __init__(self, parent=None):
+ # create window, etc
+ gtk.Window.__init__(self)
+ try:
+ self.set_screen(parent.get_screen())
+ except AttributeError:
+ self.connect('destroy', lambda *w: gtk.main_quit())
+ self.set_title(self.__class__.__name__)
+
+ self.set_border_width(8)
+ self.set_default_size(300, 250)
+
+ vbox = gtk.VBox(False, 8)
+ self.add(vbox)
+
+ label = gtk.Label('This is the bug list (note: not based on real data, '
+ 'it would be nice to have a nice ODBC interface to bugzilla or so, though).')
+ vbox.pack_start(label, False, False)
+
+ sw = gtk.ScrolledWindow()
+ sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
+ sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
+ vbox.pack_start(sw)
+
+ # create tree model
+ model = self.__create_model()
+
+ # create tree view
+ treeview = gtk.TreeView(model)
+ treeview.set_rules_hint(True)
+ treeview.set_search_column(COLUMN_DESCRIPTION)
+
+ sw.add(treeview)
+
+ # add columns to the tree view
+ self.__add_columns(treeview)
+
+ self.show_all()
+
+ def __create_model(self):
+ lstore = gtk.ListStore(
+ gobject.TYPE_BOOLEAN,
+ gobject.TYPE_UINT,
+ gobject.TYPE_STRING,
+ gobject.TYPE_STRING)
+
+ for item in data:
+ iter = lstore.append()
+ lstore.set(iter,
+ COLUMN_FIXED, item[COLUMN_FIXED],
+ COLUMN_NUMBER, item[COLUMN_NUMBER],
+ COLUMN_SEVERITY, item[COLUMN_SEVERITY],
+ COLUMN_DESCRIPTION, item[COLUMN_DESCRIPTION])
+ return lstore
+
+ def fixed_toggled(self, cell, path, model):
+ # get toggled iter
+ iter = model.get_iter((int(path),))
+ fixed = model.get_value(iter, COLUMN_FIXED)
+
+ # do something with the value
+ fixed = not fixed
+
+ # set new value
+ model.set(iter, COLUMN_FIXED, fixed)
+
+ def __add_columns(self, treeview):
+ model = treeview.get_model()
+
+ # column for fixed toggles
+ renderer = gtk.CellRendererToggle()
+ renderer.connect('toggled', self.fixed_toggled, model)
+
+ column = gtk.TreeViewColumn('Fixed?', renderer, active=COLUMN_FIXED)
+
+ # set this column to a fixed sizing(of 50 pixels)
+ column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+ column.set_fixed_width(50)
+
+ treeview.append_column(column)
+
+ # column for bug numbers
+ column = gtk.TreeViewColumn('Bug Number', gtk.CellRendererText(),
+ text=COLUMN_NUMBER)
+ column.set_sort_column_id(COLUMN_NUMBER)
+ treeview.append_column(column)
+
+ # columns for severities
+ column = gtk.TreeViewColumn('Severity', gtk.CellRendererText(),
+ text=COLUMN_SEVERITY)
+ column.set_sort_column_id(COLUMN_SEVERITY)
+ treeview.append_column(column)
+
+ # column for description
+ column = gtk.TreeViewColumn('Description', gtk.CellRendererText(),
+ text=COLUMN_DESCRIPTION)
+ column.set_sort_column_id(COLUMN_DESCRIPTION)
+ treeview.append_column(column)
+
def main():
- win = gtk.Window()
- win.connect('destroy', lambda win: gtk.main_quit())
-
- win.set_title('GtkListStore demo')
- win.set_border_width(8)
-
- vbox = gtk.VBox(FALSE, 8)
- win.add(vbox)
-
- label = gtk.Label('This is the bug list (note: not based on real data, '+\
- 'it would be nice to have a nice ODBC interface to bugzilla or so, though).')
- vbox.pack_start(label, FALSE, FALSE)
-
- sw = gtk.ScrolledWindow()
- sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
- sw.set_policy(gtk.POLICY_NEVER,
- gtk.POLICY_AUTOMATIC)
- vbox.pack_start(sw)
-
- model = create_model()
-
- treeview = gtk.TreeView(model)
- treeview.set_rules_hint(TRUE)
- treeview.set_search_column(COLUMN_DESCRIPTION)
-
- sw.add(treeview)
-
- add_columns(treeview)
-
- win.set_default_size(280, 250)
-
- win.show_all()
+ ListStoreDemo()
gtk.main()
-
+
if __name__ == '__main__':
main()
-
+