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
| <?php $window = new GtkWindow(); $window->set_size_request(400, 230); $window->connect_simple('destroy', array('Gtk','main_quit'));
$window->add($vbox = new GtkVBox());
// display title
$title = new GtkLabel(" Set up radio buttons in GtkTreeView\n". "Using GtkCellRendererToggle - Part 1 (1 button)"); $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);
$vbox->pack_start($hbox = new GtkHBox, 0, 0); $button = new GtkButton('Process Rows'); $hbox->pack_start(new GtkLabel( 'Press the button to process all rows '), 0, 0); $hbox->pack_start($button, 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));
$model = display_table($vbox, $data); $button->connect('clicked', 'on_clicked', $model);
$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, GObject::TYPE_BOOLEAN); // note 1
} else { $model = new GtkListStore(Gtk::TYPE_STRING, Gtk::TYPE_STRING, Gtk::TYPE_LONG, Gtk::TYPE_DOUBLE, Gtk::TYPE_BOOLEAN); // note 1
} $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 rest of the column
for ($col=0; $col<count($field_header); ++$col) { $cell_renderer = new GtkCellRendererText(); $column = new GtkTreeViewColumn($field_header[$col], $cell_renderer, 'text', $col); $column->set_cell_data_func($cell_renderer, "format_col", $col); if ($col==1) $column->set_expand(true); $view->append_column($column); }
// option 1
$column = new GtkTreeViewColumn(); $view->append_column($column); $cell_renderer = new GtkCellRendererText(); // note 2
$cell_renderer->set_property('text', 'Option A'); $column->pack_start($cell_renderer, true); $column->set_cell_data_func($cell_renderer, "format_col", 4);
$cell_renderer = new GtkCellRendererToggle(); // note 3
$cell_renderer->set_property('activatable', true); $cell_renderer->set_radio(true); // note 4
$cell_renderer->connect('toggled', 'on_toggle', $view); // note 5
$column->pack_start($cell_renderer, true); $column->set_attributes($cell_renderer, 'active', 4); // note 6
$column->set_cell_data_func($cell_renderer, "format_col", 4);
// pupulates the data
for ($row=0; $row<count($data); ++$row) {
|
October 15, 2007 8:14am
I believe there is a typo near the top, you say one should use the set_active() method when it should actually be set_radio(). The sample code is correct, though.
October 16, 2007 2:00am
Yes, it should be set_radio. Thanks for pointing this out. Have just fixed it.