PHP-GTK2 Newsletter

PHP-GTK2 Tips & Techniques
FREE Newsletter
by kksou



Sample Code 197: How to iterate through a GtkTreeStore?
Written by kksou   
Tuesday, 13 March 2007
Problem

In the article How to iterate through a GtkListStore - Part 1?, we iterate through a GtkListStore.

This article shows how to iterate through a GtkTreeStore as shown below:

How to iterate through a GtkTreeStore?


Solution
  • Just like a GtkListStore, we can iterate through each row of a GtkTreeStore with the method GtkTreemodel::foreach().

Sample Code
1   
2   
3   
4   
5   
6   
7   
8   
9   
10   
11   
12   
13   
14   
15   
16   
17   
18   
19   
20   
21   
22   
23   
24   
25   
26   
27   
28   
29   
30   
31   
32   
33   
34   
35   
36   
37   
38   
39   
40   
41   
42   
43   
44   
45   
46   
47   
48   
49   
50   
51   
52   
53   
54   
55   
56   
57   
58   
<?php
$window = new GtkWindow();
$window->set_size_request(400, 280);
$window->connect_simple('destroy', array('Gtk','main_quit'));

$window->add($vbox = new GtkVBox());

// display title
$title = new GtkLabel("Iterate Through a TreeStore");
$title->modify_font(new PangoFontDescription("Times New Roman Italic 10"));
$title->modify_fg(Gtk::STATE_NORMAL, GdkColor::parse("#0000ff"));
$title->set_size_request(-1, 40);
$title->set_justify(Gtk::JUSTIFY_CENTER);
$alignment = new GtkAlignment(0.5, 0, 0, 0);
$alignment->add($title);
$vbox->pack_start($alignment, 0, 0);
$vbox->pack_start(new GtkLabel(), 0, 0);

// setup button
$button = new GtkButton('Iterate Through TreeStore');
$button->connect('clicked', 'on_click');
$alignment = new GtkAlignment(0.5, 0, 0, 0);
$alignment->add($button);
$vbox->pack_start($alignment, 0);
$vbox->pack_start(new GtkLabel(), 0, 0);

$list = array(
    array ('id' => '101', 'parent' => '0', 'data' => 'data0'),
    array ('id' => '102', 'parent' => '101', 'data' => 'data1'),
    array ('id' => '103', 'parent' => '0', 'data' => 'data2'),
    array ('id' => '104', 'parent' => '0', 'data' => 'data3'),
    array ('id' => '105', 'parent' => '104', 'data' => 'data4'),
    array ('id' => '106', 'parent' => '105', 'data' => 'data5')
);

// setup store
if (defined("GObject::TYPE_STRING")) {
    $model = new GtkTreeStore(GObject::TYPE_LONG, GObject::TYPE_STRING,
        GObject::TYPE_STRING);
} else {
    $model = new GtkTreeStore(Gtk::TYPE_LONG, Gtk::TYPE_STRING,
        Gtk::TYPE_STRING);
}

$nodes = array();
$nodes[0] = null; // root
foreach($list as $item) {
    $id = $item['id'];
    $parent = $item['parent'];
    $data = $item['data'];
    $nodes[$id] = $model->append($nodes[$parent],
        array($id, "this is id $id", $data));
}

//create the view with the tree store set as model
$view = new GtkTreeView($model);

//set up the columns
  • Note that this is only 70% of the sample code. You have to be a registered member to see the entire sample code. Please login or register.
  • Registration is free and immediate.
  • Have some doubt about the registration? Please read this forum article.
Explanation

We make use of the code in How to display a tree structure from array? to display a tree structure from array.

What's new here:

  1. Setup foreach to call the function process() for each node in the treestore.
  2. With the $model and $iter passed to you by php-gtk2, you can perform any processing you like here. In this example, we only display the path and output the column values of each row.

Related Links
 

Add comment


Security code
Refresh

< Prev   Next >

Blog - Forum - Privacy Policy - Contact Us
Copyright © 2006-2012. kksou.com. All Rights Reserved