Bonjour,
J'ai ajouté des complétions sur des Entry et ComboBoxEntryText, tout marche pour le mieux. Ce que je souhaite est que lorsque je rentre une chaîne dans l'entry, les choix possibles correspondent à la sous chaîne saisie (et non le début comme par défaut).
Un exemple pour être plus clair. Les complétions possibles sont "maison", "arbre", "zebre".
Lorsque je tape "re", je voudrais que les choix proposés soient "arbre" et "zebre" ou si je met "son", j'ai comme choix "maison".
Pour le moment, j'arrive à récupérer les bons choix possibles (en affichant avec cout) mais la complétion de l'entry ne se met pas à jour et m'affiche toujours tous les choix possibles.
Voici mon code :
constructeur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Glib::RefPtr<Gtk::EntryCompletion> completion = Gtk::EntryCompletion::create(); m_Entry.set_completion(completion); Glib::RefPtr<Gtk::ListStore> refCompletionModel = Gtk::ListStore::create(m_Columns); completion->set_model(refCompletionModel); // Permet la completion affinée completion->set_match_func( sigc::mem_fun(*this, &ExampleWindow::on_completion_match) ); //Fill the TreeView's model Gtk::TreeModel::Row row = *(refCompletionModel->append()); row[m_Columns.m_col_id] = 1; row[m_Columns.m_col_name] = "maison"; row = *(refCompletionModel->append()); row[m_Columns.m_col_id] = 2; row[m_Columns.m_col_name] = "arbre"; row = *(refCompletionModel->append()); row[m_Columns.m_col_id] = 3; row[m_Columns.m_col_name] = "zebre"; completion->set_text_column(m_Columns.m_col_name); for(type_actions_map::iterator iter = m_CompletionActions.begin(); iter != m_CompletionActions.end(); ++iter) { int position = iter->first; Glib::ustring title = iter->second; completion->insert_action_text(title, position); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 bool ExampleWindow::on_completion_match(const Glib::ustring& key, const Gtk::TreeModel::const_iterator& iter) { if(iter) { Gtk::TreeModel::Row row = *iter; Glib::ustring filter_string = row[m_Columns.m_col_name]; // dans quelle colonne chercher // insensible a la casse filter_string = filter_string.lowercase(); if(filter_string.find(key)!=-1) std::cout << filter_string << std::endl; // m affiche les bonnes valeurs return true; } return false; }
Partager