179. How to setup GtkEntry with auto completion?

Problem

You want to set up a GtkEntry with auto-completion as shown below:

How to setup GtkEntry with auto completion?


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   
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   
95   
96   
97   
98   
99   
100   
103   
104   
105   
106   
107   
108   
109   
<?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 GtkEntryCompletion");
$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('AL'=>"Alabama",
        'AK'=>"Alaska",
        'AZ'=>"Arizona",
        'AR'=>"Arkansas",
        'CA'=>"California",
        'CO'=>"Colorado",
        'CT'=>"Connecticut",
        'DE'=>"Delaware",
        'DC'=>"District Of Columbia",
        'FL'=>"Florida",
        'GA'=>"Georgia",
        'HI'=>"Hawaii",
        'ID'=>"Idaho",
        'IL'=>"Illinois",
        'IN'=>"Indiana",
        'IA'=>"Iowa",
        'KS'=>"Kansas",
        'KY'=>"Kentucky",
        'LA'=>"Louisiana",
        'ME'=>"Maine",
        'MD'=>"Maryland",
        'MA'=>"Massachusetts",
        'MI'=>"Michigan",
        'MN'=>"Minnesota",
        'MS'=>"Mississippi",
        'MO'=>"Missouri",
        'MT'=>"Montana",
        'NE'=>"Nebraska",
        'NV'=>"Nevada",
        'NH'=>"New Hampshire",
        'NJ'=>"New Jersey",
        'NM'=>"New Mexico",
        'NY'=>"New York",
        'NC'=>"North Carolina",
        'ND'=>"North Dakota",
        'OH'=>"Ohio",
        'OK'=>"Oklahoma",
        'OR'=>"Oregon",
        'PA'=>"Pennsylvania",
        'RI'=>"Rhode Island",
        'SC'=>"South Carolina",
        'SD'=>"South Dakota",
        'TN'=>"Tennessee",
        'TX'=>"Texas",
        'UT'=>"Utah",
        'VT'=>"Vermont",
        'VA'=>"Virginia",
        'WA'=>"Washington",
        'WV'=>"West Virginia",
        'WI'=>"Wisconsin",
        'WY'=>"Wyoming");

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

// setup GtkEntryCompletion
if (defined("GObject::TYPE_STRING")) {
    $model = new GtkListStore(GObject::TYPE_STRING); // note 1
} else {
    $model = new GtkListStore(Gtk::TYPE_STRING); // note 1
}
$completion = new GtkEntryCompletion; // note 2
$completion->set_model($model);  // note 3
$completion->set_text_column(0); // note 4
$entry = new GtkEntry(); // note 5
$entry->set_completion($completion); // note 6

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

// Set up an hbox to contain the combobox as well as the Submit button
$hbox->pack_start($entry, 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", $entry);

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

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

Output

As shown above.
 

Explanation

  1. Create the model for storing the items to be displayed for auto completion.
  2. Create a new GtkEntryCompletion.
  3. Sets the data model for the GtkEntryCompletion.
  4. Use column 0 (the first column) of the data model.
  5. Create a new GtkEntry.
  6. Connect the GtkEntryCompletion to the the GtkEntry.
  7. Populate the data into the model.
  8. Get the text entered or selected by the user.

Notes

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

Related Links

Add comment


Security code
Refresh