296. How to setup and process GtkComboBoxEntry - Part 2 - using data view model?

Problem

For more advanced stuff using GtkCombobox and GtkComboBoxEntry, you will need access to its underlying data model.

This example produces the same result as How to setup and process GtkComboBoxEntry - Part 1?

The only difference is that it uses the data-view model as shown below:

How to setup and process GtkComboBoxEntry - Part 2 - using data view model?


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   
30   
36   
37   
38   
39   
40   
41   
42   
43   
44   
45   
46   
49   
50   
51   
52   
53   
54   
55   
57   
58   
59   
60   
61   
62   
63   
<?php
$window = new GtkWindow();
$window->connect_simple('destroy', array( 'Gtk', 'main_quit'));
$window->set_size_request(400,150);
$window->add($vbox = new GtkVBox());

// display title
$title = new GtkLabel("Setup and process ComboBoxEntry\n".
"    Part 2 - using data-view model");
$title->modify_font(new PangoFontDescription("Times New Roman Italic 10"));
$title->modify_fg(Gtk::STATE_NORMAL, GdkColor::parse("#0000ff"));
$title->set_size_request(-1, 60);
$vbox->pack_start($title, 0, 0);

// the selection
$list = array('item 1', 'item 2', 'item 3', 'item 4');

$vbox->pack_start($hbox=new GtkHBox(), 0, 0);
$hbox->pack_start(new GtkLabel('Select: '), 0, 0);

// Create the data model
if (defined("GObject::TYPE_STRING")) {
    $model = new GtkListStore(GObject::TYPE_STRING); // note 1
} else {
    $model = new GtkListStore(Gtk::TYPE_STRING); // note 1
}

// Create the comboboxentry
$combobox = &GtkComboBoxEntry::new_with_model($model, 0); // note 2

// Stuff the choices in the model
foreach($list as $choice) {
    $model->append(array($choice));
}

// Set up a hbox to contain the combobox as well as the Submit button
$hbox->pack_start($combobox, 0, 0);
$hbox->pack_start(new GtkLabel('  '), 0, 0);
$hbox->pack_start($button = new GtkButton('Submit'), 0, 0);
$button->set_size_request(60, 24);

// Set up the event handler to respond to button click
$button->connect('clicked', "on_button", $combobox);

// The callback function that is called when user clicks the submit button
function on_button($button, $combobox) {
    $model = $combobox->get_model();
    $selection = $combobox->get_child()->get_text(); // note 3
    echo "You have selected: $selection!\n";
}

$window->show_all();
Gtk::main();
?>

Output

As shown above.
 

Explanation

We make use of the code from How to setup and process GtkComboBox?

What's new here:

  1. Creates the data model.
  2. Creates the GtkComboBoxEntry, binds the data model to the GtkComboBoxEntry, and informs php-gtk2 to use the first column (col 0).
  3. Get the selection.

Notes

You may want to take a look at How to setup and process GtkComboBox? to compare the difference between GtkComboBox and GtkComboBoxEntry.

Related Links

Add comment


Security code
Refresh