Sample Code 12: How to display a tree structure from array?
Written by kksou   
Thursday, 14 September 2006
Problem

You have an array:

$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')
);

You want to display this array as a tree structure as shown below:

How to display a tree structure from array?


Solution
  • Set up a GtkTreestore to store the tree structure.
  • Create a GtkTreeview and attach the treestore to the treeview.
  • The treeview will automatically display the tree structure from the treeview.

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   
<?php

$window = new GtkWindow();
$window->set_size_request(400, 200);
$window->connect_simple('destroy', array('Gtk','main_quit'));
$window->add($vbox = new GtkVBox());

// display title
$title = new GtkLabel("Display a tree structure from array");
$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);
$vbox->pack_start($title, 0, 0);
$vbox->pack_start(new GtkLabel(), 0, 0);

$data = 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')
);

display_table($vbox, $data);

$window->show_all();
Gtk::main();

function display_table($vbox, $data) {

    // Set up a scroll window
    $scrolled_win = new GtkScrolledWindow();
    $scrolled_win->set_policy( Gtk::POLICY_AUTOMATIC,
        Gtk::POLICY_AUTOMATIC);
    $vbox->pack_start($scrolled_win);

    // Creates the list store
    if (defined("GObject::TYPE_STRING")) {
        $model = new GtkTreeStore(GObject::TYPE_LONG, 
            GObject::TYPE_STRING, GObject::TYPE_STRING); // note 1
    } else {
        $model = new GtkTreeStore(Gtk::TYPE_LONG, 
            Gtk::TYPE_STRING, Gtk::TYPE_STRING); // note 1
    }
    $field_header = array('id', 'title', 'data');

    // Creates the view to display the list store
    $view = new GtkTreeView($model); // note 2
    $scrolled_win->add($view);

    // Creates the columns
    for ($col=0; $col<count($field_header); ++$col) { // note 3
  • 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
  1. Sets up the treestore to store the data. Here it sets three fields. The first one is integer that stores the id. The second and third are strings.
  2. Creates a GtkTreeview. It is here that you bind the model to the treeview.
  3. Sets up the treeview columns.
  4. Loops through the data list and appends the data one by by to the tree structure. Note that $nodes stores the GtkTreeiter of each node. You can view this as a pointer to the node.

Related Links

User reviews   Average user ratings:    4.0   (from 6 users)
  1. Sithu
    February 24, 2008 11:16am

  2. __fabrice
    February 27, 2008 1:36am

  3. David
    March 04, 2008 6:11pm

  4. apexsoad
    April 21, 2008 11:10pm
    Good Code

    Good Code

  5. Brice
    May 21, 2008 1:55pm

  6. Bari hossain
    July 14, 2008 3:39pm

Note: You have to be a registered member to leave a comment. Free registration here.

 
< Prev   Next >

Copyright © 2006-2008. kksou.com. All Rights Reserved