PHP-GTK2 Newsletter

PHP-GTK2 Tips & Techniques
FREE Newsletter
by kksou



Sample Code 212: How to use GtkCellRendererCombo - Part 5 - using class?
Written by kksou   
Sunday, 08 April 2007
Problem

This example produces the sample result as How to use GtkCellRendererCombo - Part 3 - process user selection?. The only difference is that we encapsulate the methods and properties used to set up the combobox in a class as shown below:

How to use GtkCellRendererCombo - Part 3 - process user selection?

How to use GtkCellRendererCombo - Part 5 - using class?


Solution

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   
59   
60   
61   
62   
63   
64   
65   
66   
67   
68   
69   
70   
71   
72   
73   
74   
75   
76   
77   
78   
79   
80   
81   
82   
83   
84   
85   
86   
87   
88   
89   
90   
91   
92   
<?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("Using GtkCellRendererCombo - Part 5\nusing class");
$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);

// the 2D table
$data = array(
array('row0', 'item 42', 2, 3.1),
array('row1', 'item 36', 20, 6.21),
array('row2', 'item 21', 8, 9.36),
array('row3', 'item 12', 11, 12.4),
array('row4', 'item 7', 5, 15.5),
array('row5', 'item 4', 17, 18.6),
array('row6', 'item 3', 20, 21.73));

$treeview = new Treeview_Combo($vbox, $data);

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

class Treeview_Combo extends GtkTreeView {

    public function __construct($container, $data) {
        parent::__construct();

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

        // Creates the list store
        if (defined("GObject::TYPE_STRING")) {
            $model = new GtkListStore(GObject::TYPE_STRING, GObject::TYPE_STRING,
                GObject::TYPE_LONG, GObject::TYPE_DOUBLE, GObject::TYPE_STRING);
        } else {
            $model = new GtkListStore(Gtk::TYPE_STRING, Gtk::TYPE_STRING,
                Gtk::TYPE_LONG, Gtk::TYPE_DOUBLE, Gtk::TYPE_STRING);
        }
        $field_header = array('id', 'Description', 'Qty', 'Price');
        $field_justification = array(0.0, 0.0, 0.5, 1.0);

        // Creates the view to display the list store
        $this->set_model($model);

        // Creates the columns
        for ($col=0; $col<count($field_header); ++$col) {
            $cell_renderer = new GtkCellRendererText();
            $cell_renderer->set_property("xalign", $field_justification[$col]);
            $column = new GtkTreeViewColumn($field_header[$col],
            $cell_renderer, 'text', $col);
            $column->set_alignment($field_justification[$col]);
            $column->set_sort_column_id($col);

            // setup self-defined function to display alternate row color
            $column->set_cell_data_func($cell_renderer,
                array(&$this, "format_col"), $col);
            $this->append_column($column);
        }

        // setup combo box
        $cell_renderer = new GtkCellRendererCombo();
        if (defined("GObject::TYPE_STRING")) {
            $category = new GtkListStore(GObject::TYPE_STRING);
        } else {
            $category = new GtkListStore(Gtk::TYPE_STRING);
        }
        $list = array('grp 1', 'grp 2', 'grp 3', 'grp 4');
        foreach($list as $choice) {
            $category->append(array($choice));
        }
        $cell_renderer->set_property('model', $category);
        $cell_renderer->set_property('text-column', 0);
        $cell_renderer->set_property('editable', true);
        $cell_renderer->connect('edited', array(&$this, 'on_combo'), $model);

        $column = new GtkTreeViewColumn('Category', $cell_renderer, 'text', 4);
        $column->set_cell_data_func($cell_renderer,
            array(&$this, "format_col"), 4);
  • 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

Please refer to How to use GtkCellRendererCombo - Part 3 - process user selection? for detailed explanations.


Related Links

User reviews

There are no user reviews yet.

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

 
< Prev   Next >

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