GtkCellRendererToggle Constructor

Creates a new GtkCellRendererToggle. The toggle button rendering parameters are adjusted using the object properties. The object properties can be set globally (with set_property() ). Also, with GtkTreeViewColumn, you can bind a property to a value in a gtk.TreeModel. For example, you can bind the "active" property on the cell renderer to a boolean value in the model, thus causing the check button to reflect the state of the model.

Example 46. Creating an editable toggle renderer

<?php
//Create a check list with things to buy
// You can toggle the check item.

$store = new GtkListStore(
    Gtk::TYPE_STRING, //item
    Gtk::TYPE_BOOLEAN //bought?
);

//View is needed to display them
$view = new GtkTreeView($store);

//Item column
$rendererText = new GtkCellRendererText();
$columnItem   = new GtkTreeViewColumn(
    'Item', new GtkCellRendererText(), 'text', 0
);
$view->append_column($columnItem);


//GtkCellRendererToggle: bought? column
$rendererBought = new GtkCellRendererToggle();
$rendererBought->set_property('activatable', true);
$rendererBought->connect('toggled', 'bought_toggled', $store);

$columnBought = new GtkTreeViewColumn(
    'Bought?',        //title
    $rendererBought,  //the renderer
    'active',        //use that property
    1                //data is in that model column
);
$view->append_column($columnBought);

//When the user toggles the state, this
// method will be called.
function bought_toggled($renderer, $row, $store)
{
    $iter = $store->get_iter($row);
    //The value has been toggled -> we need
    // to invert the current value
    $store->set(
        $iter,
        1,
        !$store->get_value($iter, 1)
    );
}

//Add some data
$store->append(array('Milk'  , false));
$store->append(array('Butter', false));
$store->append(array('Juice' , true));
$store->append(array('Bread' , false));


$wnd = new GtkWindow();
$wnd->add($view);
$wnd->set_title('Check list');
$wnd->connect_simple('destroy', array('Gtk', 'main_quit'));
$wnd->show_all();
Gtk::main();
?>