]> Pileus Git - ~andy/gtk/blob - gtk/gtkentry.h
0c4c2aaa4ee2bd33b64a19f74b5b65cf926d6a79
[~andy/gtk] / gtk / gtkentry.h
1 /* GTK - The GIMP Toolkit
2  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser 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  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 /*
21  * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
22  * file for a list of people on the GTK+ Team.  See the ChangeLog
23  * files for a list of changes.  These files are distributed with
24  * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
25  */
26
27 #ifndef __GTK_ENTRY_H__
28 #define __GTK_ENTRY_H__
29
30
31 #include <gdk/gdk.h>
32 #include <gtk/gtkeditable.h>
33 #include <gtk/gtkimcontext.h>
34 #include <gtk/gtkmenu.h>
35 #include <gtk/gtkentrycompletion.h>
36 #include <pango/pango.h>
37
38 #ifdef __cplusplus
39 extern "C" {
40 #endif /* __cplusplus */
41
42
43 #define GTK_TYPE_ENTRY                  (gtk_entry_get_type ())
44 #define GTK_ENTRY(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_ENTRY, GtkEntry))
45 #define GTK_ENTRY_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_ENTRY, GtkEntryClass))
46 #define GTK_IS_ENTRY(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_ENTRY))
47 #define GTK_IS_ENTRY_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_ENTRY))
48 #define GTK_ENTRY_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_ENTRY, GtkEntryClass))
49
50
51 typedef struct _GtkEntry       GtkEntry;
52 typedef struct _GtkEntryClass  GtkEntryClass;
53
54 struct _GtkEntry
55 {
56   GtkWidget  widget;
57
58   gchar     *text;
59
60   guint      editable : 1;
61   guint      visible  : 1;
62   guint      overwrite_mode : 1;
63   guint      in_drag : 1;       /* Dragging within the selection */
64
65   guint16 text_length;  /* length in use, in chars */
66   guint16 text_max_length;
67
68   /*< private >*/
69   GdkWindow *text_area;
70   GtkIMContext *im_context;
71   GtkWidget   *popup_menu;
72   
73   gint         current_pos;
74   gint         selection_bound;
75   
76   PangoLayout *cached_layout;
77   guint        cache_includes_preedit : 1;
78
79   guint        need_im_reset : 1;
80
81   guint        has_frame : 1;
82
83   guint        activates_default : 1;
84
85   guint        cursor_visible : 1;
86
87   guint        in_click : 1;    /* Flag so we don't select all when clicking in entry to focus in */
88
89   guint        is_cell_renderer : 1;
90   guint        editing_canceled : 1; /* Only used by GtkCellRendererText */
91
92   guint        mouse_cursor_obscured : 1;
93   
94   guint        select_words : 1;
95   guint        select_lines : 1;
96   guint        resolved_dir : 4; /* PangoDirection */
97   guint   button;
98   guint   blink_timeout;
99   guint   recompute_idle;
100   gint    scroll_offset;
101   gint    ascent;       /* font ascent, in pango units  */
102   gint    descent;      /* font descent, in pango units  */
103   
104   guint16 text_size;    /* allocated size, in bytes */
105   guint16 n_bytes;      /* length in use, in bytes */
106
107   guint16 preedit_length;       /* length of preedit string, in bytes */
108   guint16 preedit_cursor;       /* offset of cursor within preedit string, in chars */
109
110   gint dnd_position;            /* In chars, -1 == no DND cursor */
111
112   gint drag_start_x;
113   gint drag_start_y;
114   
115   gunichar invisible_char;
116
117   gint width_chars;
118 };
119
120 struct _GtkEntryClass
121 {
122   GtkWidgetClass parent_class;
123
124   /* Hook to customize right-click popup */
125   void (* populate_popup)   (GtkEntry       *entry,
126                              GtkMenu        *menu);
127   
128   /* Action signals
129    */
130   void (* activate)           (GtkEntry       *entry);
131   void (* move_cursor)        (GtkEntry       *entry,
132                                GtkMovementStep step,
133                                gint            count,
134                                gboolean        extend_selection);
135   void (* insert_at_cursor)   (GtkEntry       *entry,
136                                const gchar    *str);
137   void (* delete_from_cursor) (GtkEntry       *entry,
138                                GtkDeleteType   type,
139                                gint            count);
140   void (* backspace)          (GtkEntry       *entry);
141   void (* cut_clipboard)      (GtkEntry       *entry);
142   void (* copy_clipboard)     (GtkEntry       *entry);
143   void (* paste_clipboard)    (GtkEntry       *entry);
144   void (* toggle_overwrite)   (GtkEntry       *entry);
145
146   /* Padding for future expansion */
147   void (*_gtk_reserved1) (void);
148   void (*_gtk_reserved2) (void);
149   void (*_gtk_reserved3) (void);
150 };
151
152 GType      gtk_entry_get_type                   (void) G_GNUC_CONST;
153 GtkWidget* gtk_entry_new                        (void);
154 void       gtk_entry_set_visibility             (GtkEntry      *entry,
155                                                  gboolean       visible);
156 gboolean   gtk_entry_get_visibility             (GtkEntry      *entry);
157 void       gtk_entry_set_invisible_char         (GtkEntry      *entry,
158                                                  gunichar       ch);
159 gunichar   gtk_entry_get_invisible_char         (GtkEntry      *entry);
160 void       gtk_entry_set_has_frame              (GtkEntry      *entry,
161                                                  gboolean       setting);
162 gboolean   gtk_entry_get_has_frame              (GtkEntry      *entry);
163 /* text is truncated if needed */
164 void       gtk_entry_set_max_length             (GtkEntry      *entry,
165                                                  gint           max);
166 gint       gtk_entry_get_max_length             (GtkEntry      *entry);
167 void       gtk_entry_set_activates_default      (GtkEntry      *entry,
168                                                  gboolean       setting);
169 gboolean   gtk_entry_get_activates_default      (GtkEntry      *entry);
170
171 void       gtk_entry_set_width_chars            (GtkEntry      *entry,
172                                                  gint           n_chars);
173 gint       gtk_entry_get_width_chars            (GtkEntry      *entry);
174
175 /* Somewhat more convenient than the GtkEditable generic functions
176  */
177 void       gtk_entry_set_text                   (GtkEntry      *entry,
178                                                  const gchar   *text);
179 /* returns a reference to the text */
180 G_CONST_RETURN gchar* gtk_entry_get_text        (GtkEntry      *entry);
181
182 PangoLayout* gtk_entry_get_layout               (GtkEntry      *entry);
183 void         gtk_entry_get_layout_offsets       (GtkEntry      *entry,
184                                                  gint          *x,
185                                                  gint          *y);
186 void       gtk_entry_set_alignment              (GtkEntry      *entry,
187                                                  gfloat         xalign);
188 gfloat     gtk_entry_get_alignment              (GtkEntry      *entry);
189
190 void                gtk_entry_set_completion (GtkEntry           *entry,
191                                               GtkEntryCompletion *completion);
192 GtkEntryCompletion *gtk_entry_get_completion (GtkEntry           *entry);
193
194 gint       gtk_entry_layout_index_to_text_index (GtkEntry      *entry,
195                                                  gint           layout_index);
196 gint       gtk_entry_text_index_to_layout_index (GtkEntry      *entry,
197                                                  gint           text_index);
198
199
200 /* Deprecated compatibility functions
201  */
202
203 #ifndef GTK_DISABLE_DEPRECATED
204 GtkWidget* gtk_entry_new_with_max_length        (gint           max);
205 void       gtk_entry_append_text                (GtkEntry      *entry,
206                                                  const gchar   *text);
207 void       gtk_entry_prepend_text               (GtkEntry      *entry,
208                                                  const gchar   *text);
209 void       gtk_entry_set_position               (GtkEntry      *entry,
210                                                  gint           position);
211 void       gtk_entry_select_region              (GtkEntry      *entry,
212                                                  gint           start,
213                                                  gint           end);
214 void       gtk_entry_set_editable               (GtkEntry      *entry,
215                                                  gboolean       editable);
216 #endif /* GTK_DISABLE_DEPRECATED */
217
218 /* private */
219 void      _gtk_entry_get_borders                (GtkEntry *entry,
220                                                  gint     *xborder,
221                                                  gint     *yborder);
222
223
224 #ifdef __cplusplus
225 }
226 #endif /* __cplusplus */
227
228
229 #endif /* __GTK_ENTRY_H__ */