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 /* Text currently pasted to the clipboard */
36 gchar *clipboard_text;
38 /* Whether the buffer has been modified since last save */
41 /* We use this for selections */
42 GtkWidget *selection_widget;
43 gboolean have_selection;
44 gboolean selection_handlers_installed;
47 struct _GtkTextBufferClass {
48 GtkObjectClass parent_class;
50 void (* insert_text) (GtkTextBuffer *buffer,
56 void (* delete_text) (GtkTextBuffer *buffer,
60 /* Only for text changed, marks/tags don't cause this
62 void (* changed) (GtkTextBuffer *buffer);
65 /* New value for the modified flag */
66 void (* modified_changed) (GtkTextBuffer *buffer);
68 /* Mark moved or created */
69 void (* mark_set) (GtkTextBuffer *buffer,
70 const GtkTextIter *location,
73 void (* mark_deleted) (GtkTextBuffer *buffer,
76 void (* apply_tag) (GtkTextBuffer *buffer,
78 const GtkTextIter *start_char,
79 const GtkTextIter *end_char);
81 void (* remove_tag) (GtkTextBuffer *buffer,
83 const GtkTextIter *start_char,
84 const GtkTextIter *end_char);
88 GtkType gtk_text_buffer_get_type (void);
92 /* table is NULL to create a new one */
93 GtkTextBuffer *gtk_text_buffer_new (GtkTextTagTable *table);
94 gint gtk_text_buffer_get_line_count (GtkTextBuffer *buffer);
95 gint gtk_text_buffer_get_char_count (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,
107 void gtk_text_buffer_insert_at_char (GtkTextBuffer *buffer,
111 void gtk_text_buffer_insert_after_line (GtkTextBuffer *buffer,
112 gint after_this_line,
118 /* Delete from the buffer */
120 void gtk_text_buffer_delete (GtkTextBuffer *buffer,
121 GtkTextIter *start_iter,
122 GtkTextIter *end_iter);
123 void gtk_text_buffer_delete_chars (GtkTextBuffer *buffer,
126 void gtk_text_buffer_delete_lines (GtkTextBuffer *buffer,
129 void gtk_text_buffer_delete_from_line (GtkTextBuffer *buffer,
133 /* Obtain strings from the buffer */
134 gchar *gtk_text_buffer_get_text (GtkTextBuffer *buffer,
135 const GtkTextIter *start_iter,
136 const GtkTextIter *end_iter,
137 gboolean include_hidden_chars);
138 gchar *gtk_text_buffer_get_text_chars (GtkTextBuffer *buffer,
141 gboolean include_hidden_chars);
142 gchar *gtk_text_buffer_get_text_from_line (GtkTextBuffer *buffer,
146 gboolean include_hidden_chars);
147 gchar *gtk_text_buffer_get_slice (GtkTextBuffer *buffer,
148 const GtkTextIter *start_iter,
149 const GtkTextIter *end_iter,
150 gboolean include_hidden_chars);
151 gchar *gtk_text_buffer_get_slice_chars (GtkTextBuffer *buffer,
154 gboolean include_hidden_chars);
155 gchar *gtk_text_buffer_get_slice_from_line (GtkTextBuffer *buffer,
159 gboolean include_hidden_chars);
161 /* Insert a pixmap */
162 void gtk_text_buffer_insert_pixmap (GtkTextBuffer *buffer,
166 void gtk_text_buffer_insert_pixmap_at_char (GtkTextBuffer *buffer,
173 /* Mark manipulation */
174 GtkTextMark *gtk_text_buffer_create_mark (GtkTextBuffer *buffer,
175 const gchar *mark_name,
176 const GtkTextIter *where,
177 gboolean left_gravity);
178 void gtk_text_buffer_move_mark (GtkTextBuffer *buffer,
180 const GtkTextIter *where);
181 void gtk_text_buffer_delete_mark (GtkTextBuffer *buffer,
183 GtkTextMark *gtk_text_buffer_get_mark (GtkTextBuffer *buffer,
187 /* efficiently move insert and selection_bound to same location */
188 void gtk_text_buffer_place_cursor (GtkTextBuffer *buffer,
189 const GtkTextIter *where);
193 /* Tag manipulation */
194 void gtk_text_buffer_apply_tag_to_chars (GtkTextBuffer *buffer,
198 void gtk_text_buffer_remove_tag_from_chars (GtkTextBuffer *buffer,
202 void gtk_text_buffer_apply_tag (GtkTextBuffer *buffer,
204 const GtkTextIter *start_index,
205 const GtkTextIter *end_index);
206 void gtk_text_buffer_remove_tag (GtkTextBuffer *buffer,
208 const GtkTextIter *start_index,
209 const GtkTextIter *end_index);
213 /* You can either ignore the return value, or use it to
214 set the attributes of the tag */
215 GtkTextTag *gtk_text_buffer_create_tag (GtkTextBuffer *buffer,
216 const gchar *tag_name);
218 /* Obtain iterators pointed at various places, then you can move the
219 iterator around using the GtkTextIter operators */
221 void gtk_text_buffer_get_iter_at_line_char (GtkTextBuffer *buffer,
225 void gtk_text_buffer_get_iter_at_char (GtkTextBuffer *buffer,
228 void gtk_text_buffer_get_iter_at_line (GtkTextBuffer *buffer,
231 void gtk_text_buffer_get_last_iter (GtkTextBuffer *buffer,
233 void gtk_text_buffer_get_bounds (GtkTextBuffer *buffer,
236 void gtk_text_buffer_get_iter_at_mark (GtkTextBuffer *buffer,
241 /* There's no get_first_iter because you just get the iter for
245 Parses a string, read the man page for the Tk text widget; the only
246 variation from that is we don't support getting the index at a
247 certain pixel since the buffer has no pixel knowledge. This
248 function is mostly useful for language bindings I think.
250 gboolean gtk_text_buffer_get_iter_from_string (GtkTextBuffer *buffer,
252 const gchar *iter_string);
256 GSList *gtk_text_buffer_get_tags (GtkTextBuffer *buffer,
257 const GtkTextIter *iter);
260 /* Used to keep track of whether the buffer needs saving; anytime the
261 buffer contents change, the modified flag is turned on. Whenever
262 you save, turn it off. Tags and marks do not affect the modified
263 flag, but if you would like them to you can connect a handler to
264 the tag/mark signals and call set_modified in your handler */
266 gboolean gtk_text_buffer_modified (GtkTextBuffer *buffer);
267 void gtk_text_buffer_set_modified (GtkTextBuffer *buffer,
269 void gtk_text_buffer_set_clipboard_contents (GtkTextBuffer *buffer,
271 const gchar *gtk_text_buffer_get_clipboard_contents (GtkTextBuffer *buffer);
272 void gtk_text_buffer_paste_primary_selection (GtkTextBuffer *buffer,
273 GtkTextIter *override_location,
275 gboolean gtk_text_buffer_delete_selection (GtkTextBuffer *buffer);
276 void gtk_text_buffer_cut (GtkTextBuffer *buffer,
278 void gtk_text_buffer_copy (GtkTextBuffer *buffer,
280 void gtk_text_buffer_paste_clipboard (GtkTextBuffer *buffer,
282 gboolean gtk_text_buffer_get_selection_bounds (GtkTextBuffer *buffer,
287 /* This function is not implemented. */
288 gboolean gtk_text_buffer_find_string(GtkTextBuffer *buffer,
291 const GtkTextIter *start,
292 const GtkTextIter *end);
295 /* Waiting on glib 1.4 regexp facility */
296 gboolean gtk_text_buffer_find_regexp(GtkTextBuffer *buffer,
298 const GtkTextIter *start,
299 const GtkTextIter *end);
302 /* INTERNAL private stuff */
303 void gtk_text_buffer_spew (GtkTextBuffer *buffer);
307 #endif /* __cplusplus */