Problem
You want to set up a GtkEntry with auto-completion as shown below:
Solution
- First create a standard GtkEntry.
- Then set up a GtkListStore to store the items available for auto-completion.
- Now create a GtkEntryCompletion.
- And connect the GtkEntryCompletion to the the GtkEntry using GtkEntry::set_completion()
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
- Create the model for storing the items to be displayed for auto completion.
- Create a new GtkEntryCompletion.
- Sets the data model for the GtkEntryCompletion.
- Use column 0 (the first column) of the data model.
- Create a new GtkEntry.
- Connect the GtkEntryCompletion to the the GtkEntry.
- Populate the data into the model.
- Get the text entered or selected by the user.
Read more...