1/* gtkentrycompletion.h
2 * Copyright (C) 2003 Kristian Rietveld <[email protected]>
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __GTK_ENTRY_COMPLETION_H__
19#define __GTK_ENTRY_COMPLETION_H__
20
21#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
22#error "Only <gtk/gtk.h> can be included directly."
23#endif
24
25#include <gdk/gdk.h>
26#include <gtk/gtktreemodel.h>
27#include <gtk/gtkliststore.h>
28#include <gtk/gtkcellarea.h>
29#include <gtk/gtktreeviewcolumn.h>
30#include <gtk/gtktreemodelfilter.h>
31
32G_BEGIN_DECLS
33
34#define GTK_TYPE_ENTRY_COMPLETION (gtk_entry_completion_get_type ())
35#define GTK_ENTRY_COMPLETION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_ENTRY_COMPLETION, GtkEntryCompletion))
36#define GTK_ENTRY_COMPLETION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_ENTRY_COMPLETION, GtkEntryCompletionClass))
37#define GTK_IS_ENTRY_COMPLETION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_ENTRY_COMPLETION))
38#define GTK_IS_ENTRY_COMPLETION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_ENTRY_COMPLETION))
39#define GTK_ENTRY_COMPLETION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_ENTRY_COMPLETION, GtkEntryCompletionClass))
40
41typedef struct _GtkEntryCompletion GtkEntryCompletion;
42typedef struct _GtkEntryCompletionClass GtkEntryCompletionClass;
43typedef struct _GtkEntryCompletionPrivate GtkEntryCompletionPrivate;
44
45/**
46 * GtkEntryCompletionMatchFunc:
47 * @completion: the #GtkEntryCompletion
48 * @key: the string to match, normalized and case-folded
49 * @iter: a #GtkTreeIter indicating the row to match
50 * @user_data: user data given to gtk_entry_completion_set_match_func()
51 *
52 * A function which decides whether the row indicated by @iter matches
53 * a given @key, and should be displayed as a possible completion for @key.
54 * Note that @key is normalized and case-folded (see g_utf8_normalize()
55 * and g_utf8_casefold()). If this is not appropriate, match functions
56 * have access to the unmodified key via
57 * `gtk_entry_get_text (GTK_ENTRY (gtk_entry_completion_get_entry ()))`.
58 *
59 * Returns: %TRUE if @iter should be displayed as a possible completion
60 * for @key
61 */
62typedef gboolean (* GtkEntryCompletionMatchFunc) (GtkEntryCompletion *completion,
63 const gchar *key,
64 GtkTreeIter *iter,
65 gpointer user_data);
66
67
68struct _GtkEntryCompletion
69{
70 GObject parent_instance;
71
72 /*< private >*/
73 GtkEntryCompletionPrivate *priv;
74};
75
76struct _GtkEntryCompletionClass
77{
78 GObjectClass parent_class;
79
80 gboolean (* match_selected) (GtkEntryCompletion *completion,
81 GtkTreeModel *model,
82 GtkTreeIter *iter);
83 void (* action_activated) (GtkEntryCompletion *completion,
84 gint index_);
85 gboolean (* insert_prefix) (GtkEntryCompletion *completion,
86 const gchar *prefix);
87 gboolean (* cursor_on_match) (GtkEntryCompletion *completion,
88 GtkTreeModel *model,
89 GtkTreeIter *iter);
90 void (* no_matches) (GtkEntryCompletion *completion);
91
92 /* Padding for future expansion */
93 void (*_gtk_reserved0) (void);
94 void (*_gtk_reserved1) (void);
95 void (*_gtk_reserved2) (void);
96};
97
98/* core */
99GDK_AVAILABLE_IN_ALL
100GType gtk_entry_completion_get_type (void) G_GNUC_CONST;
101GDK_AVAILABLE_IN_ALL
102GtkEntryCompletion *gtk_entry_completion_new (void);
103GDK_AVAILABLE_IN_ALL
104GtkEntryCompletion *gtk_entry_completion_new_with_area (GtkCellArea *area);
105
106GDK_AVAILABLE_IN_ALL
107GtkWidget *gtk_entry_completion_get_entry (GtkEntryCompletion *completion);
108
109GDK_AVAILABLE_IN_ALL
110void gtk_entry_completion_set_model (GtkEntryCompletion *completion,
111 GtkTreeModel *model);
112GDK_AVAILABLE_IN_ALL
113GtkTreeModel *gtk_entry_completion_get_model (GtkEntryCompletion *completion);
114
115GDK_AVAILABLE_IN_ALL
116void gtk_entry_completion_set_match_func (GtkEntryCompletion *completion,
117 GtkEntryCompletionMatchFunc func,
118 gpointer func_data,
119 GDestroyNotify func_notify);
120GDK_AVAILABLE_IN_ALL
121void gtk_entry_completion_set_minimum_key_length (GtkEntryCompletion *completion,
122 gint length);
123GDK_AVAILABLE_IN_ALL
124gint gtk_entry_completion_get_minimum_key_length (GtkEntryCompletion *completion);
125GDK_AVAILABLE_IN_3_4
126gchar * gtk_entry_completion_compute_prefix (GtkEntryCompletion *completion,
127 const char *key);
128GDK_AVAILABLE_IN_ALL
129void gtk_entry_completion_complete (GtkEntryCompletion *completion);
130GDK_AVAILABLE_IN_ALL
131void gtk_entry_completion_insert_prefix (GtkEntryCompletion *completion);
132
133GDK_AVAILABLE_IN_ALL
134void gtk_entry_completion_insert_action_text (GtkEntryCompletion *completion,
135 gint index_,
136 const gchar *text);
137GDK_AVAILABLE_IN_ALL
138void gtk_entry_completion_insert_action_markup (GtkEntryCompletion *completion,
139 gint index_,
140 const gchar *markup);
141GDK_AVAILABLE_IN_ALL
142void gtk_entry_completion_delete_action (GtkEntryCompletion *completion,
143 gint index_);
144
145GDK_AVAILABLE_IN_ALL
146void gtk_entry_completion_set_inline_completion (GtkEntryCompletion *completion,
147 gboolean inline_completion);
148GDK_AVAILABLE_IN_ALL
149gboolean gtk_entry_completion_get_inline_completion (GtkEntryCompletion *completion);
150GDK_AVAILABLE_IN_ALL
151void gtk_entry_completion_set_inline_selection (GtkEntryCompletion *completion,
152 gboolean inline_selection);
153GDK_AVAILABLE_IN_ALL
154gboolean gtk_entry_completion_get_inline_selection (GtkEntryCompletion *completion);
155GDK_AVAILABLE_IN_ALL
156void gtk_entry_completion_set_popup_completion (GtkEntryCompletion *completion,
157 gboolean popup_completion);
158GDK_AVAILABLE_IN_ALL
159gboolean gtk_entry_completion_get_popup_completion (GtkEntryCompletion *completion);
160GDK_AVAILABLE_IN_ALL
161void gtk_entry_completion_set_popup_set_width (GtkEntryCompletion *completion,
162 gboolean popup_set_width);
163GDK_AVAILABLE_IN_ALL
164gboolean gtk_entry_completion_get_popup_set_width (GtkEntryCompletion *completion);
165GDK_AVAILABLE_IN_ALL
166void gtk_entry_completion_set_popup_single_match (GtkEntryCompletion *completion,
167 gboolean popup_single_match);
168GDK_AVAILABLE_IN_ALL
169gboolean gtk_entry_completion_get_popup_single_match (GtkEntryCompletion *completion);
170
171GDK_AVAILABLE_IN_ALL
172const gchar *gtk_entry_completion_get_completion_prefix (GtkEntryCompletion *completion);
173/* convenience */
174GDK_AVAILABLE_IN_ALL
175void gtk_entry_completion_set_text_column (GtkEntryCompletion *completion,
176 gint column);
177GDK_AVAILABLE_IN_ALL
178gint gtk_entry_completion_get_text_column (GtkEntryCompletion *completion);
179
180G_END_DECLS
181
182#endif /* __GTK_ENTRY_COMPLETION_H__ */
183