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, 280); $window->connect_simple('destroy', array('Gtk','main_quit')); $window->add($vbox = new GtkVBox());
// display title
$title = new GtkLabel("Add Total to GtkTreeView"); $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); // add a small gap between the title and scroll_win
// Set up a scroll window
$scrolled_win = new GtkScrolledWindow(); $scrolled_win->set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); $vbox->pack_start($scrolled_win);
// the 2D table
$data = array( array('row0', 'item 19', 2, 3.1), array('row1', 'item 4', 20, 6.21), array('row2', 'item 7', 8, 21.73), array('row3', 'item 10', 11, 18.6), array('row4', 'item 13', 5, 15.5), array('row5', 'item 16', 17, 12.4), array('row6', 'item 3', 20, 9.36));
display_table ($scrolled_win, $data);
$window->show_all(); Gtk::main();
function display_table($scrolled_win, $data) { // 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_DOUBLE); } else { $model = new GtkListStore(Gtk::TYPE_STRING, Gtk::TYPE_STRING, Gtk::TYPE_LONG, Gtk::TYPE_DOUBLE, Gtk::TYPE_DOUBLE); } $field_header = array('Row #', 'Description', 'Qty', 'Unit Price', 'Amt'); $field_justification = array(0.0, 0.0, 0.5, 1.0, 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
$eventbox = new GtkEventBox(); $label = new GtkLabel($field_header[$col]); $label->modify_font(new PangoFontDescription("Arial Bold")); $label->modify_fg(Gtk::STATE_NORMAL, GdkColor::parse("#0000FF")); $eventbox->add($label); $column->set_widget($eventbox); $label->show(); $eventbox->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
global $total_qty, $total_amt; $total_qty = 0; $total_amt = 0; for ($row=0; $row<count($data); ++$row) { $values = array(); for ($col=0; $col<count($data[$row]); ++$col) { $values[] = $data[$row][$col]; } $values[] = $data[$row][2]*$data[$row][3]; $model->append($values);
$total_qty += $data[$row][2]; // note 1
$total_amt += $values[4]; // note 1
}
|