1 #ifndef GTK_TEXT_BUFFER_H
2 #define GTK_TEXT_BUFFER_H
4 #include <gtk/gtkwidget.h>
5 #include <gtk/gtktexttagtable.h>
6 #include <gtk/gtktextiter.h>
7 #include <gtk/gtktextmark.h>
11 #endif /* __cplusplus */
14 * This is the PUBLIC representation of a text buffer.
15 * GtkTextBTree is the PRIVATE internal representation of it.
18 typedef struct _GtkTextBTree GtkTextBTree;
20 #define GTK_TYPE_TEXT_BUFFER (gtk_text_buffer_get_type())
21 #define GTK_TEXT_BUFFER(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_TEXT_BUFFER, GtkTextBuffer))
22 #define GTK_TEXT_BUFFER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_TEXT_BUFFER, GtkTextBufferClass))
23 #define GTK_IS_TEXT_BUFFER(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_TEXT_BUFFER))
24 #define GTK_IS_TEXT_BUFFER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TEXT_BUFFER))
25 #define GTK_TEXT_BUFFER_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_TEXT_BUFFER, GtkTextBufferClass))
27 typedef struct _GtkTextBufferClass GtkTextBufferClass;
29 struct _GtkTextBuffer {
30 GtkObject parent_instance;
32 GtkTextTagTable *tag_table;
35 /* Whether the buffer has been modified since last save */
39 struct _GtkTextBufferClass {
40 GtkObjectClass parent_class;
42 void (* insert_text) (GtkTextBuffer *buffer,
46 gboolean interactive);
49 void (* delete_text) (GtkTextBuffer *buffer,
52 gboolean interactive);
54 /* Only for text changed, marks/tags don't cause this
56 void (* changed) (GtkTextBuffer *buffer);
59 /* New value for the modified flag */
60 void (* modified_changed) (GtkTextBuffer *buffer);
62 /* Mark moved or created */
63 void (* mark_set) (GtkTextBuffer *buffer,
64 const GtkTextIter *location,
67 void (* mark_deleted) (GtkTextBuffer *buffer,
70 void (* apply_tag) (GtkTextBuffer *buffer,
72 const GtkTextIter *start_char,
73 const GtkTextIter *end_char);
75 void (* remove_tag) (GtkTextBuffer *buffer,
77 const GtkTextIter *start_char,
78 const GtkTextIter *end_char);
82 GtkType gtk_text_buffer_get_type (void) G_GNUC_CONST;
86 /* table is NULL to create a new one */
87 GtkTextBuffer *gtk_text_buffer_new (GtkTextTagTable *table);
88 gint gtk_text_buffer_get_line_count (GtkTextBuffer *buffer);
89 gint gtk_text_buffer_get_char_count (GtkTextBuffer *buffer);
92 GtkTextTagTable* gtk_text_buffer_get_tag_table (GtkTextBuffer *buffer);
94 /* Delete whole buffer, then insert */
95 void gtk_text_buffer_set_text (GtkTextBuffer *buffer,
99 /* Insert into the buffer */
100 void gtk_text_buffer_insert (GtkTextBuffer *buffer,
104 void gtk_text_buffer_insert_at_cursor (GtkTextBuffer *buffer,
108 gboolean gtk_text_buffer_insert_interactive (GtkTextBuffer *buffer,
112 gboolean default_editable);
113 gboolean gtk_text_buffer_insert_interactive_at_cursor (GtkTextBuffer *buffer,
116 gboolean default_editable);
118 void gtk_text_buffer_insert_range (GtkTextBuffer *buffer,
120 const GtkTextIter *start,
121 const GtkTextIter *end);
122 gboolean gtk_text_buffer_insert_range_interactive (GtkTextBuffer *buffer,
124 const GtkTextIter *start,
125 const GtkTextIter *end,
126 gboolean default_editable);
128 void gtk_text_buffer_insert_with_tags (GtkTextBuffer *buffer,
132 GtkTextTag *first_tag,
135 void gtk_text_buffer_insert_with_tags_by_name (GtkTextBuffer *buffer,
139 const gchar *first_tag_name,
142 /* Delete from the buffer */
143 void gtk_text_buffer_delete (GtkTextBuffer *buffer,
146 gboolean gtk_text_buffer_delete_interactive (GtkTextBuffer *buffer,
147 GtkTextIter *start_iter,
148 GtkTextIter *end_iter,
149 gboolean default_editable);
153 /* Obtain strings from the buffer */
154 gchar *gtk_text_buffer_get_text (GtkTextBuffer *buffer,
155 const GtkTextIter *start,
156 const GtkTextIter *end,
157 gboolean include_hidden_chars);
159 gchar *gtk_text_buffer_get_slice (GtkTextBuffer *buffer,
160 const GtkTextIter *start,
161 const GtkTextIter *end,
162 gboolean include_hidden_chars);
164 /* Insert a pixbuf */
165 void gtk_text_buffer_insert_pixbuf (GtkTextBuffer *buffer,
169 /* Mark manipulation */
170 GtkTextMark *gtk_text_buffer_create_mark (GtkTextBuffer *buffer,
171 const gchar *mark_name,
172 const GtkTextIter *where,
173 gboolean left_gravity);
174 void gtk_text_buffer_move_mark (GtkTextBuffer *buffer,
176 const GtkTextIter *where);
177 void gtk_text_buffer_delete_mark (GtkTextBuffer *buffer,
179 GtkTextMark* gtk_text_buffer_get_mark (GtkTextBuffer *buffer,
182 void gtk_text_buffer_move_mark_by_name (GtkTextBuffer *buffer,
184 const GtkTextIter *where);
185 void gtk_text_buffer_delete_mark_by_name (GtkTextBuffer *buffer,
188 GtkTextMark* gtk_text_buffer_get_insert (GtkTextBuffer *buffer);
189 GtkTextMark* gtk_text_buffer_get_selection_bound (GtkTextBuffer *buffer);
192 /* efficiently move insert and selection_bound to same location */
193 void gtk_text_buffer_place_cursor (GtkTextBuffer *buffer,
194 const GtkTextIter *where);
198 /* Tag manipulation */
199 void gtk_text_buffer_apply_tag (GtkTextBuffer *buffer,
201 const GtkTextIter *start_index,
202 const GtkTextIter *end_index);
203 void gtk_text_buffer_remove_tag (GtkTextBuffer *buffer,
205 const GtkTextIter *start_index,
206 const GtkTextIter *end_index);
207 void gtk_text_buffer_apply_tag_by_name (GtkTextBuffer *buffer,
209 const GtkTextIter *start_index,
210 const GtkTextIter *end_index);
211 void gtk_text_buffer_remove_tag_by_name (GtkTextBuffer *buffer,
213 const GtkTextIter *start_index,
214 const GtkTextIter *end_index);
217 /* You can either ignore the return value, or use it to
218 * set the attributes of the tag. tag_name can be NULL
220 GtkTextTag *gtk_text_buffer_create_tag (GtkTextBuffer *buffer,
221 const gchar *tag_name);
223 /* Obtain iterators pointed at various places, then you can move the
224 iterator around using the GtkTextIter operators */
225 void gtk_text_buffer_get_iter_at_line_offset (GtkTextBuffer *buffer,
229 void gtk_text_buffer_get_iter_at_offset (GtkTextBuffer *buffer,
232 void gtk_text_buffer_get_iter_at_line (GtkTextBuffer *buffer,
235 void gtk_text_buffer_get_last_iter (GtkTextBuffer *buffer,
237 void gtk_text_buffer_get_bounds (GtkTextBuffer *buffer,
240 void gtk_text_buffer_get_iter_at_mark (GtkTextBuffer *buffer,
246 /* There's no get_first_iter because you just get the iter for
249 GSList *gtk_text_buffer_get_tags (GtkTextBuffer *buffer,
250 const GtkTextIter *iter);
253 /* Used to keep track of whether the buffer needs saving; anytime the
254 buffer contents change, the modified flag is turned on. Whenever
255 you save, turn it off. Tags and marks do not affect the modified
256 flag, but if you would like them to you can connect a handler to
257 the tag/mark signals and call set_modified in your handler */
259 gboolean gtk_text_buffer_modified (GtkTextBuffer *buffer);
260 void gtk_text_buffer_set_modified (GtkTextBuffer *buffer,
263 void gtk_text_buffer_paste_primary (GtkTextBuffer *buffer,
264 GtkTextIter *override_location,
265 gboolean default_editable);
266 void gtk_text_buffer_cut_clipboard (GtkTextBuffer *buffer,
267 gboolean default_editable);
268 void gtk_text_buffer_copy_clipboard (GtkTextBuffer *buffer);
269 void gtk_text_buffer_paste_clipboard (GtkTextBuffer *buffer,
270 gboolean default_editable);
272 gboolean gtk_text_buffer_get_selection_bounds (GtkTextBuffer *buffer,
275 gboolean gtk_text_buffer_delete_selection (GtkTextBuffer *buffer,
276 gboolean interactive,
277 gboolean default_editable);
279 /* INTERNAL private stuff */
280 void _gtk_text_buffer_spew (GtkTextBuffer *buffer);
282 GtkTextBTree* _gtk_text_buffer_get_btree (GtkTextBuffer *buffer);
286 #endif /* __cplusplus */