diff options
Diffstat (limited to 'examples/pygtk-demo/demos/tree_store.py')
-rw-r--r-- | examples/pygtk-demo/demos/tree_store.py | 335 |
1 files changed, 335 insertions, 0 deletions
diff --git a/examples/pygtk-demo/demos/tree_store.py b/examples/pygtk-demo/demos/tree_store.py new file mode 100644 index 00000000..c7d0b709 --- /dev/null +++ b/examples/pygtk-demo/demos/tree_store.py @@ -0,0 +1,335 @@ +#!/usr/bin/env python +'''Tree View/Tree Store + +The GtkTreeStore is used to store data in tree form, to be used +later on by a GtkTreeView to display it. This demo builds a simple +GtkTreeStore and displays it. If you're new to the GtkTreeView widgets +and associates, look into the GtkListStore example first.''' +# pygtk version: Maik Hertha <maik.hertha@berlin.de> + +import gobject +import gtk + +# columns +( + HOLIDAY_NAME_COLUMN, + ALEX_COLUMN, + HAVOC_COLUMN, + TIM_COLUMN, + OWEN_COLUMN, + DAVE_COLUMN, + VISIBLE_COLUMN, + WORLD_COLUMN, + NUM_COLUMNS +) = range(9) + +# tree data +january = \ +[ + ["New Years Day", True, True, True, True, False, True ], + ["Presidential Inauguration", False, True, False, True, False, False ], + ["Martin Luther King Jr. day", False, True, False, True, False, False ] +] + +february = \ +[ + [ "Presidents' Day", False, True, False, True, False, False ], + [ "Groundhog Day", False, False, False, False, False, False ], + [ "Valentine's Day", False, False, False, False, True, True ] +] + +march = \ +[ + [ "National Tree Planting Day", False, False, False, False, False, False ], + [ "St Patrick's Day", False, False, False, False, False, True ] +] +april = \ +[ + [ "April Fools' Day", False, False, False, False, False, True ], + [ "Army Day", False, False, False, False, False, False ], + [ "Earth Day", False, False, False, False, False, True ], + [ "Administrative Professionals' Day", False, False, False, False, False, False ] +] + +may = \ +[ + [ "Nurses' Day", False, False, False, False, False, False ], + [ "National Day of Prayer", False, False, False, False, False, False ], + [ "Mothers' Day", False, False, False, False, False, True ], + [ "Armed Forces Day", False, False, False, False, False, False ], + [ "Memorial Day", True, True, True, True, False, True ] +] + +june = \ +[ + [ "June Fathers' Day", False, False, False, False, False, True ], + [ "Juneteenth(Liberation of Slaves)", False, False, False, False, False, False ], + [ "Flag Day", False, True, False, True, False, False ] +] + +july = \ +[ + [ "Parents' Day", False, False, False, False, False, True ], + [ "Independence Day", False, True, False, True, False, False ] +] + +august = \ +[ + [ "Air Force Day", False, False, False, False, False, False ], + [ "Coast Guard Day", False, False, False, False, False, False ], + [ "Friendship Day", False, False, False, False, False, False ] +] + +september = \ +[ + [ "Grandparents' Day", False, False, False, False, False, True ], + [ "Citizenship Day or Constitution Day", False, False, False, False, False, False ], + [ "Labor Day", True, True, True, True, False, True ] +] + +october = \ +[ + [ "National Children's Day", False, False, False, False, False, False ], + [ "Bosses' Day", False, False, False, False, False, False ], + [ "Sweetest Day", False, False, False, False, False, False ], + [ "Mother-in-Law's Day", False, False, False, False, False, False ], + [ "Navy Day", False, False, False, False, False, False ], + [ "Columbus Day", False, True, False, True, False, False ], + [ "Halloween", False, False, False, False, False, True ] +] + +november = \ +[ + [ "Marine Corps Day", False, False, False, False, False, False ], + [ "Veterans' Day", True, True, True, True, False, True ], + [ "Thanksgiving", False, True, False, True, False, False ] +] + +december = \ +[ + [ "Pearl Harbor Remembrance Day", False, False, False, False, False, False ], + [ "Christmas", True, True, True, True, False, True ], + [ "Kwanzaa", False, False, False, False, False, False ] +] + + +toplevel = \ +[ + ["January", False, False, False, False, False, False, january], + ["February", False, False, False, False, False, False, february], + ["March", False, False, False, False, False, False, march], + ["April", False, False, False, False, False, False, april], + ["May", False, False, False, False, False, False, may], + ["June", False, False, False, False, False, False, june], + ["July", False, False, False, False, False, False, july], + ["August", False, False, False, False, False, False, august], + ["September", False, False, False, False, False, False, september], + ["October", False, False, False, False, False, False, october], + ["November", False, False, False, False, False, False, november], + ["December", False, False, False, False, False, False, december] +] + +class TreeStoreDemo(gtk.Window): + def __init__(self, parent=None): + 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_default_size(650, 400) + self.set_border_width(8) + + vbox = gtk.VBox(False, 8) + self.add(vbox) + + label = gtk.Label("Jonathan's Holiday Card Planning Sheet") + vbox.pack_start(label, False, False) + + sw = gtk.ScrolledWindow() + sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) + sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + vbox.pack_start(sw) + + # create model + model = self.__create_model() + + # create treeview + treeview = gtk.TreeView(model) + treeview.set_rules_hint(True) + + self.__add_columns(treeview) + + sw.add(treeview) + + # expand all rows after the treeview widget has been realized + treeview.connect('realize', lambda tv: tv.expand_all()) + + self.show_all() + + def __create_model(self): + + # create tree store + model = gtk.TreeStore( + gobject.TYPE_STRING, + gobject.TYPE_BOOLEAN, + gobject.TYPE_BOOLEAN, + gobject.TYPE_BOOLEAN, + gobject.TYPE_BOOLEAN, + gobject.TYPE_BOOLEAN, + gobject.TYPE_BOOLEAN, + gobject.TYPE_BOOLEAN) + + # add data to the tree store + for month in toplevel: + iter = model.append(None) + model.set(iter, + HOLIDAY_NAME_COLUMN, month[HOLIDAY_NAME_COLUMN], + ALEX_COLUMN, False, + HAVOC_COLUMN, False, + TIM_COLUMN, False, + OWEN_COLUMN, False, + DAVE_COLUMN, False, + VISIBLE_COLUMN, False, + WORLD_COLUMN, False + ) + + # add children + for holiday in month[-1]: + child_iter = model.append(iter); + model.set(child_iter, + HOLIDAY_NAME_COLUMN, holiday[HOLIDAY_NAME_COLUMN], + ALEX_COLUMN, holiday[ALEX_COLUMN], + HAVOC_COLUMN, holiday[HAVOC_COLUMN], + TIM_COLUMN, holiday[TIM_COLUMN], + OWEN_COLUMN, holiday[OWEN_COLUMN], + DAVE_COLUMN, holiday[DAVE_COLUMN], + VISIBLE_COLUMN, True, + WORLD_COLUMN, holiday[WORLD_COLUMN-1] + ) + + return model + + def on_item_toggled(self, cell, path_str, model): + + # get selected column + column = cell.get_data('column') + + # get toggled iter + iter = model.get_iter_from_string(path_str) + toggle_item = model.get_value(iter, column) + + # do something with the value + toggle_item = not toggle_item + + # set new value + model.set(iter, column, toggle_item) + + + def __add_columns(self, treeview): + model = treeview.get_model() + + # column for holiday names + renderer = gtk.CellRendererText() + renderer.set_property("xalign", 0.0) + + #col_offset = gtk.TreeViewColumn("Holiday", renderer, text=HOLIDAY_NAME_COLUMN) + column = gtk.TreeViewColumn("Holiday", renderer, text=HOLIDAY_NAME_COLUMN) + #column = gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), col_offset - 1); + column.set_clickable(True) + + treeview.append_column(column) + + # alex column */ + renderer = gtk.CellRendererToggle() + renderer.set_property("xalign", 0.0) + renderer.set_data("column", ALEX_COLUMN) + + renderer.connect("toggled", self.on_item_toggled, model) + + column = gtk.TreeViewColumn("Alex", renderer, active=ALEX_COLUMN, + visible=VISIBLE_COLUMN, activatable=WORLD_COLUMN) + + # set this column to a fixed sizing(of 50 pixels) + #column = gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), col_offset - 1); + column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + column.set_fixed_width(50) + column.set_clickable(True) + + treeview.append_column(column) + + # havoc column + renderer = gtk.CellRendererToggle(); + renderer.set_property("xalign", 0.0) + renderer.set_data("column", HAVOC_COLUMN) + + renderer.connect("toggled", self.on_item_toggled, model) + + column = gtk.TreeViewColumn("Havoc", renderer, active=HAVOC_COLUMN, + visible=VISIBLE_COLUMN) + + #column = treeview.get_column(col_offset - 1) + column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + column.set_fixed_width(50) + column.set_clickable(True) + + treeview.append_column(column) + + # tim column + renderer = gtk.CellRendererToggle(); + renderer.set_property("xalign", 0.0) + renderer.set_data("column", TIM_COLUMN) + + renderer.connect("toggled", self.on_item_toggled, model) + + column = gtk.TreeViewColumn("Tim", renderer, active=TIM_COLUMN, + visible=VISIBLE_COLUMN, activatable=WORLD_COLUMN) + + #column = treeview.get_column(col_offset - 1) + column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + column.set_fixed_width(50) + column.set_clickable(True) + + treeview.append_column(column) + + # owen column + renderer = gtk.CellRendererToggle(); + renderer.set_property("xalign", 0.0) + renderer.set_data("column", OWEN_COLUMN) + + renderer.connect("toggled", self.on_item_toggled, model) + + column = gtk.TreeViewColumn("Owen", renderer, active=OWEN_COLUMN, + visible=VISIBLE_COLUMN) + + #column = treeview.get_column(col_offset - 1) + column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + column.set_fixed_width(50) + column.set_clickable(True) + + treeview.append_column(column) + + # dave column + renderer = gtk.CellRendererToggle(); + renderer.set_property("xalign", 0.0) + renderer.set_data("column", DAVE_COLUMN) + + renderer.connect("toggled", self.on_item_toggled, model) + + column = gtk.TreeViewColumn("Dave", renderer, active=DAVE_COLUMN, + visible=VISIBLE_COLUMN) + + #column = treeview.get_column(col_offset - 1) + column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + column.set_fixed_width(50) + column.set_clickable(True) + + treeview.append_column(column) + +def main(): + TreeStoreDemo() + gtk.main() + +if __name__ == '__main__': + main() + |