|
Problem Suppose you have a treeview and you would like to add a checkbox in front of each row so that you can perform some actions based on user selections as shown below:

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
| <?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 GtkCellRendererToggle - Part 1 (Setup)"); $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 1', 2, 3.1), array('row1', 'item 4', 5, 6.21), array('row2', 'item 7', 8, 9.36), array('row3', 'item 10', 11, 12.4), array('row4', 'item 21', 14, 15.5), array('row5', 'item 36', 17, 18.6), array('row6', 'item 42', 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_BOOLEAN, GObject::TYPE_STRING, GObject::TYPE_STRING, GObject::TYPE_LONG, GObject::TYPE_DOUBLE); } else { $model = new GtkListStore(Gtk::TYPE_BOOLEAN, Gtk::TYPE_STRING, Gtk::TYPE_STRING, Gtk::TYPE_LONG, Gtk::TYPE_DOUBLE); } $field_header = array('Row #', 'Description', 'Qty', 'Price');
// Creates the view to display the list store
$view = new GtkTreeView($model); $scrolled_win->add($view);
// Creates the selection column
$cell_renderer = new GtkCellRendererToggle(); $cell_renderer->set_property('activatable', true); // note 1
$column = new GtkTreeViewColumn('Select', $cell_renderer, 'active', 0); // note 2
$cell_renderer->connect('toggled', 'on_toggle', $model); // note 3
$view->append_column($column);
|
- 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
- You need to set this to allow user to toggle.
- For text column we use "text" for the third argument. For toggles, we use "active".
- Set up the event handler to listen to toggle event.
- Note that the 4th argument is now
$col+1 because our data array doesn't have the toggle column. So there's a one column difference between the model and the data array.
- The first column of the treeview is the selection box. We put a value of
0 here. This will uncheck the initial selection checkboxes for all rows. If you wish to have all the rows checked initially, you can just put a value of 1 here.
- Get the iter.
- This simply toggles the selection box. If the original value is
0, we set it to 1. If it's 1, we set it to 0.
Note
Note that here we have only set up the selection checkbox. You can now check and uncheck the checkboxes for each row. In Part 2, we will perform some actions based on user selection.
Related Articles
User reviews Average user ratings: 4.5 (from 4 users) Note: You have to be a registered member to leave a comment. Free registration here. |
November 29, 2008 12:38am
February 09, 2009 11:36pm
March 07, 2009 3:38pm
June 29, 2009 9:35am