EntryCompletion
Object Hierarchy:
Description:
public class EntryCompletion : Object, Buildable, CellLayout
EntryCompletion is an auxiliary object to be used in conjunction with Entry to provide the completion functionality.
It implements the CellLayout interface, to allow the user to add extra cells to the TreeView with completion matches.
“Completion functionality” means that when the user modifies the text in the entry, EntryCompletion checks which rows in the model match the current content of the entry, and displays a list of matches. By default, the matching is done by comparing the entry text case-insensitively against the text column of the model (see set_text_column), but this can be overridden with a custom match function (see set_match_func).
When the user selects a completion, the content of the entry is updated. By default, the content of the entry is replaced by the text column of the model, but this can be overridden by connecting to the match_selected signal and updating the entry in the signal handler. Note that you should return true from the signal handler to suppress the default behaviour.
To add completion functionality to an entry, use set_completion.
In addition to regular completion matches, which will be inserted into the entry when they are selected, EntryCompletion also allows to display “actions” in the popup window. Their appearance is similar to menuitems, to differentiate them clearly from completion strings. When an action is selected, the action_activated signal is emitted.
GtkEntryCompletion uses a TreeModelFilter model to represent the subset of the entire model that is currently matching. While the GtkEntryCompletion signals match_selected and cursor_on_match take the original model and an iter pointing to that model as arguments, other callbacks and signals (such as CellLayoutDataFuncs or apply_attributes) will generally take the filter model as argument. As long as you are only calling @get, this will make no difference to you. If for some reason, you need the original model, use get_model. Don’t forget to use convert_iter_to_child_iter to obtain a matching iter.
Example: EntryCompletion:
public class Application : Gtk.Window {
public Application () {
// Prepare Gtk.Window:
this.title = "My Gtk.EntryCompletion";
this.window_position = Gtk.WindowPosition.CENTER;
this.destroy.connect (Gtk.main_quit);
this.set_default_size (350, 70);
// The Entry:
Gtk.Entry entry = new Gtk.Entry ();
this.add (entry);
// The EntryCompletion:
Gtk.EntryCompletion completion = new Gtk.EntryCompletion ();
entry.set_completion (completion);
// Create, fill & register a ListStore:
Gtk.ListStore list_store = new Gtk.ListStore (1, typeof (string));
completion.set_model (list_store);
completion.set_text_column (0);
Gtk.TreeIter iter;
list_store.append (out iter);
list_store.set (iter, 0, "Burgenland");
list_store.append (out iter);
list_store.set (iter, 0, "Carinthia");
list_store.append (out iter);
list_store.set (iter, 0, "Lower Austria");
list_store.append (out iter);
list_store.set (iter, 0, "Upper Austria");
list_store.append (out iter);
list_store.set (iter, 0, "Salzburg");
list_store.append (out iter);
list_store.set (iter, 0, "Styria");
list_store.append (out iter);
list_store.set (iter, 0, "Tyrol");
list_store.append (out iter);
list_store.set (iter, 0, "Vorarlberg");
list_store.append (out iter);
list_store.set (iter, 0, "Vienna");
}
public static int main (string[] args) {
Gtk.init (ref args);
Application app = new Application ();
app.show_all ();
Gtk.main ();
return 0;
}
}
valac --pkg gtk+-3.0 Gtk.EntryCompletion.vala