The function of the GtkCTree, GtkCList and other associated components has been overhauled in GTK2, meaning PHP-GTK now has a very thoughtfully detailed mechanism for building trees and lists, more or less following an MVC model. The attached diagram shows the relations between the set of classes involved in laying out a tree or list using GtkTreeView
.
Model, View ... Controller ?
The two main classes involved are GtkTreeView
,
which represents the visual part of the code supplied by GTK,
and any class implementing the GtkTreeModel
interface, which typically means either
GtkTreeStore
or
GtkListStore
amongst the builtin classes.
The class implementing this interface supplies the data store, or in MVC terms the model, to the view widget.
Another relationship, although less obvious because it is
indirect is the one linking the columns of the view,
implemented by GtkTreeViewColumn
, with the
store classes for the purpose of sorting the view. For this,
the store classes need to implement the
GtkTreeSortable
, which both of the default
store classes supply.
Model, View... but where is the controller ? It is more or less the user-developed code. Why "less" ? Because model and view should not interact directly with each other, but always through the model, while in GTK the view and model classes are in direct relationship, to factor glue code that would otherwise typically be replicated in all controller implementations.
Where are my Rows and Colums ?
The GtkTreeView
does not process the model
all on its own, but delegates the columnar characteristics
of the view to the GtkTreeViewColumn
class,
which holds the column-specific information, and
most importantly the renderer, which is a class derived from
GtkCellRenderer
, through which the data linked
in from the view and column are displayed, possibly
edited, and returned to the model according to display and
editing rules specific to the column. Renderers typically
process a set of related formats, like the text renderer,
which processes both strings and numbers.
The row information, which is the one containing the
actual data as opposed to their format (metadata) held
in the columns, is kept in the data store classes.
GtkListStore
, for instance, holds them in the
very simple form of an array of rows, themselves each an
array of values, one value per table cell.
Selecting items
The user selection is delegated to an specific class too,
GtkTreeSelection
, which is available from the
view widget using get_selection()
on the
GtkTreeView
instance.
Sample code
Rather than add yet another example to those already available, I suggest you look at the excellent series available in the PHP-GTK2 cookbook about the GtkTreeView widgets.