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 91 92
| <?php $window = new GtkWindow(); $window->set_title($argv[0]); $window->set_size_request(480, 250); $window->connect_simple('destroy', array('Gtk','main_quit')); $window->add($vbox = new GtkVBox());
// display title
$title = new GtkLabel("Using GtkSheet\n". "Part 11 - setup combobox in cell"); $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); $title->set_justify(Gtk::JUSTIFY_CENTER); $alignment = new GtkAlignment(0.5, 0, 0, 0); $alignment->add($title); $vbox->pack_start($alignment, 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, ''));
$max_col = count($data[0])-1; $max_row = count($data)-1;
$field_header = array('Row #', 'Description', 'Qty', 'Price', 'Category'); $justification = array('LEFT', 'LEFT', 'CENTER', 'RIGHT', 'LEFT'); $category_list = array('grp 1', 'grp 2', 'grp 3', 'grp 4'); // note 1
$vbox->pack_start($hbox = new GtkHBox(), 0); $hbox->pack_start($button = new GtkButton('Read Values'), 0); $sheet = display_table($vbox, $data, $field_header, $justification);
$button->connect('clicked', 'read_values', $sheet);
$window->show_all(); Gtk::main();
function display_table($vbox, $data, $field_header, $justification) {
$scrolled_win = new GtkScrolledWindow(); $scrolled_win->set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); $vbox->pack_start($scrolled_win);
$sheet = new GtkSheet(count($data), count($data[0]), 'Test 123'); $sheet->set_autoresize(1); $scrolled_win->add($sheet);
$sheet->connect('key-press-event', 'on_keypress');
// set column header
for ($col=0; $col<count($field_header); ++$col) { $sheet->column_button_add_label($col, $field_header[$col]); $justify = constant("Gtk::JUSTIFY_".$justification[$col]); $sheet->column_button_justify($col, $justify); }
// set up the liststore for combobox
global $category_list; if (defined("GObject::TYPE_STRING")) { $model = new GtkListStore(GObject::TYPE_STRING); // note 2
} else { $model = new GtkListStore(Gtk::TYPE_STRING); // note 2
} foreach($category_list as $choice) { $model->append(array($choice)); // note 3
}
global $combobox; $alignment_val = array('LEFT'=>0.0, 'CENTER'=>0.5, 'RIGHT'=>1.0); for ($row=0; $row<count($data); ++$row) { $sheet->row_button_add_label($row, $row+1); for ($col=0; $col<count($data[$row]); ++$col) {
if ($col==count($data[$row])-1) { $combobox[$row][$col] = setup_combobox($model); // note 4
$sheet->attach_default($combobox[$row][$col], $row, $col); // note 5
} else { $justify = constant("Gtk::JUSTIFY_".$justification[$col]); $sheet->set_cell($row, $col, $justify, $data[$row][$col]); // note 6
} } } return $sheet;
|