GTK+ By Example/Tree View

This chapter has been based on this work

Chapter Sections

 * 1) Lists and Trees: the GtkTreeView Widget
 * 2) Components: Model, Renderer, Column, View
 * 3) GtkTreeModels for Data Storage: GtkListStore and GtkTreeStore
 * 4) Creating a Tree View
 * 5) Mapping Data to the Screen: GtkTreeViewColumn and GtkCellRenderer
 * 6) Selections, Double-Clicks and Context Menus
 * 7) Sorting
 * 8) Editable Cells
 * 9) Miscellaneous
 * 10) Drag'n'Drop (DnD) **** needs revision ***
 * 11) Writing Custom Models
 * 12) Writing Custom Cell Renderers
 * 13) Other Resources

Original License (Tree View)
Copyright (c) 2003-2004 Tim-Philipp Müller 

This tutorial may be redistributed and modified freely in any form, as long as all authors are given due credit for their work and all non-trivial changes by third parties are clearly marked as such either within the document (e.g. in a revision history), or at an external and publicly accessible place that is referred to in the document (such as a CVS/SVN/git repository).

Original Version Credits
Thanks to Axel C. for proof-reading the first drafts, for many suggestions, and for introducing me to the tree view widget in the first place (back then when I was still convinced that porting to Gtk+-2.x was unnecessary, Gtk+-1.2 applications looked nice, and Aristotle had already said everything about politics that needs to be said).


 * 1) Harring Figueiredo shed some light on how GtkListStore and GtkTreeStore deal with pixbufs.
 * 2) Ken Rastatter suggested some additional topics (with complete references even).
 * 3) Both Andrej Prsa and Alan B. Canon sent me a couple of suggestions, and 'taf2', Massimo Mangoni and others spotted some typos.
 * 4) Many thanks to all of them, and of course also to kris and everyone else in #gtk+.

Original Revision History
14.3. Revision History

5th January 2008
 * Update some broken links; remove references to external cell renderers that have been obsoleted by Gtk adding such renderers.

5th June 2005
 * Remove unnecessary col = gtk_tree_view_column_new im hello world code (leftover from migration to convenience functions).

3rd February 2005
 * Point out that GObjects such as GdkPixbufs retrieved with gtk_tree_model_get need to be g_object_unref'ed after use, as gtk_tree_model_get adds a reference.
 * Added explicit (gint) event->x double to int conversion to code snippet using gtk_tree_view_get_path_at_pos to avoid compiler warnings.

9th September 2004
 * Fixed another mistake in tree path explanation: text did not correspond picture (s/movie clips/movie trailers/); (thanks to Benjamin Brandt for spotting it).

6th August 2004
 * Fixed mistake in tree path explanation (s/4th/5th/) (thanks to both Andrew Kirillov and Benjamin Brandt for spotting it).

30th April 2004
 * Added Hello World

31st March 2004
 * Fixed fatal typo in custom list code: g_assert in custom_list_init should be ==, not != (spotted by mmc).
 * Added link to Owen Taylor's mail on the GtkTreeView Drag'n'Drop API.

24th January 2004
 * Fixed typo in code example (remove n-th row example) (Thanks to roel for spotting it).
 * Changed 'Context menus' section title

19th January 2004
 * Expanded section on GtkTreeRowReferences, and on removing multiple rows.

8th January 2004
 * Added tiny section on Glade and treeviews
 * Added more detail to the section describing GtkTreePath, GtkTreeIter et al.
 * Reformatted document structure: instead of one single chapter with lots of sections, have multiple chapters (this tutorial is way to big to become part of the Gtk+ tutorial anyway); enumerate chapters and sections.
 * Expanded the section on tree view columns and cell renderers, with help of two diagrams by Owen Taylor (from the GUADEC 2003 Gtk+ tutorial slides).

10th December 2003
 * Added more information about how to remove a single row, or more specifically, the n-th row of a list store
 * Added a short example about how to pack icons into the tree view.

28th October 2003
 * Editable cells will work fine even if selection is set to GTK_SELECTION_NONE. Removed sentences that say otherwise.

23rd October 2003
 * fix 'jumpy' selections in custom model GtkTreeSortable interface implementation. gtk_tree_model_rows_reordered does not seem to work like the API reference implies (see bug #124790)
 * added section about how to get the cell renderer a button click happened on
 * added section about editable cells with spin buttons (and a CellRendererSpin implementation to the examples)

10th October 2003
 * make custom model GtkTreeSortable implementation emit "sort-column-changed" signal when sortid is changed
 * fixed code typo in selection function section; added a paragraph about rule hint to 'make whole row coloured or bold' section

7th October 2003
 * Reformatted source code to make it fit on pages when generating ps/pdf output
 * Added link to PDF and docbook XML versions.