Sample Code 513: How to change the foreground color of some rows or columns in treeview?
Written by kksou   
Thursday, 17 July 2008
Problem

In the article How to change the font of some rows or columns in treeview? I shared with you how specify "default font" in a treeview.

However, that method only works when you change the font to a different font, and want to change it back to the default font.

Suppose you only want to change the foreground color of some of the rows. You want the rest of the rows to use the default foreground color. You will find that the method described in How to change the font of some rows or columns in treeview? will not work in this case.

In this example, I'll show you how to specify the "default foreground color" in a treeview.

How to change the foreground color of some rows or columns in treeview?


Solution
  • To appreciate this 'trick', I would encourage you to try this example as an exercise. All rows will use the default foreground color (which is black), except row 1, which uses blue (#0000ff).
  • For row 1, use $cell->set_property('foreground', '#0000ff') to set the foreground color (i.e. the text color) to blue.
  • Use $cell->set_property( 'foreground-set', 1) to enable foreground color. Note: this property is not described in the PHP-GTK2 official documentation yet.
  • Use $cell->set_property( 'foreground-set', 0) to use the default foreground color.

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   
<?php
$window = new GtkWindow();
$window->set_size_request(400, 220);
$window->connect_simple('destroy', array('Gtk','main_quit'));
$window->add($vbox = new GtkVBox());

// display title
$title = new GtkLabel("        Change the foreground color\n".
"of some rows or columns in treeview");
$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);

// 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 10', 11, 12.4),
array('row4', 'item 7', 5, 15.5),
array('row5', 'item 4', 17, 18.6),
array('row6', 'item 3', 20, 21.73));

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 GtkListStore(GObject::TYPE_STRING, GObject::TYPE_STRING,
            GObject::TYPE_LONG, GObject::TYPE_DOUBLE);
    } else {
        $model = new GtkListStore(Gtk::TYPE_STRING, Gtk::TYPE_STRING,
            Gtk::TYPE_LONG, Gtk::TYPE_DOUBLE);
    }
    $field_header = array('Row #', 'Description', 'Qty', 'Price');
    $field_justification = array(0.0, 0.0, 0.5, 1.0);

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

    // 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);

        // set the header font and color
        $label = new GtkLabel($field_header[$col]);
        $label->modify_font(new PangoFontDescription("Arial Bold"));
        $label->modify_fg(Gtk::STATE_NORMAL, GdkColor::parse("#0000FF"));
        $column->set_widget($label);
        $label->show();

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

    // pupulates the data
    for ($row=0; $row<count($data); ++$row) {
        $values = array();
        for ($col=0; $col<count($data[$row]); ++$col) {
            $values[] = $data[$row][$col];
        }
        $model->append($values);
  • 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. Set row 1 to blue.
  2. Enable the foreground color.
  3. Set all other rows to default foreground color.

Related Links
 

Add comment


Security code
Refresh

< Prev   Next >

Latest Blog Articles

googleMaps plugin for Joomla 1.6

Wednesday, 23 February 2011

For the googleMaps plugin users, the native version for Joomla 1.6 is now available!

Download: googleMaps v1.6

 
DirectPHP for Joomla 1.6

Monday, 21 February 2011

For the DirectPHP users, the native version for Joomla 1.6 is now available!

Download : DirectPHP v1.6

 
Joomla Extensions for Joomla 1.6

Monday, 14 February 2011

I've published more than 40 Joomla Extensions in joomla.org.

Recently I've received a couple of requests to upgrade these plugins/modules to Joomla 1.6.

Some of these are written 3 years ago. I'm not sure if any of you are still using them at all.

So send me a tweet @kksou if you want any of them to be converted to Joomla 1.6. Drop me a note to let me know that they are useful. I don't have the time to convert all the extensions. There has to be some priorities somewhere. So I will start with the plugin/module with more than a hundred requests for conversion.

 

Blog - Forum - Privacy Policy - Contact Us
Links - Classes - Social Business - BPM - Web - General
Copyright © 2006-2013. kksou.com. All Rights Reserved