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;
45 gboolean paste_interactive;
46 gboolean paste_default_editable;
49 struct _GtkTextBufferClass {
50 GtkObjectClass parent_class;
52 void (* insert_text) (GtkTextBuffer *buffer,
56 gboolean interactive);
59 void (* delete_text) (GtkTextBuffer *buffer,
62 gboolean interactive);
64 /* Only for text changed, marks/tags don't cause this
66 void (* changed) (GtkTextBuffer *buffer);
69 /* New value for the modified flag */
70 void (* modified_changed) (GtkTextBuffer *buffer);
72 /* Mark moved or created */
73 void (* mark_set) (GtkTextBuffer *buffer,
74 const GtkTextIter *location,
77 void (* mark_deleted) (GtkTextBuffer *buffer,
80 void (* apply_tag) (GtkTextBuffer *buffer,
82 const GtkTextIter *start_char,
83 const GtkTextIter *end_char);
85 void (* remove_tag) (GtkTextBuffer *buffer,
87 const GtkTextIter *start_char,
88 const GtkTextIter *end_char);
92 GtkType gtk_text_buffer_get_type (void) G_GNUC_CONST;
96 /* table is NULL to create a new one */
97 GtkTextBuffer *gtk_text_buffer_new (GtkTextTagTable *table);
98 gint gtk_text_buffer_get_line_count (GtkTextBuffer *buffer);
99 gint gtk_text_buffer_get_char_count (GtkTextBuffer *buffer);
102 GtkTextTagTable* gtk_text_buffer_get_tag_table (GtkTextBuffer *buffer);
104 /* Insert into the buffer */
105 void gtk_text_buffer_insert (GtkTextBuffer *buffer,
109 void gtk_text_buffer_insert_at_cursor (GtkTextBuffer *buffer,
113 gboolean gtk_text_buffer_insert_interactive (GtkTextBuffer *buffer,
117 gboolean default_editable);
118 gboolean gtk_text_buffer_insert_interactive_at_cursor (GtkTextBuffer *buffer,
121 gboolean default_editable);
124 /* Delete from the buffer */
125 void gtk_text_buffer_delete (GtkTextBuffer *buffer,
128 gboolean gtk_text_buffer_delete_interactive (GtkTextBuffer *buffer,
129 GtkTextIter *start_iter,
130 GtkTextIter *end_iter,
131 gboolean default_editable);
135 /* Obtain strings from the buffer */
136 gchar *gtk_text_buffer_get_text (GtkTextBuffer *buffer,
137 const GtkTextIter *start,
138 const GtkTextIter *end,
139 gboolean include_hidden_chars);
141 gchar *gtk_text_buffer_get_slice (GtkTextBuffer *buffer,
142 const GtkTextIter *start,
143 const GtkTextIter *end,
144 gboolean include_hidden_chars);
146 /* Insert a pixmap */
147 void gtk_text_buffer_insert_pixmap (GtkTextBuffer *buffer,
152 /* Mark manipulation */
153 GtkTextMark *gtk_text_buffer_create_mark (GtkTextBuffer *buffer,
154 const gchar *mark_name,
155 const GtkTextIter *where,
156 gboolean left_gravity);
157 void gtk_text_buffer_move_mark (GtkTextBuffer *buffer,
159 const GtkTextIter *where);
160 void gtk_text_buffer_delete_mark (GtkTextBuffer *buffer,
162 GtkTextMark *gtk_text_buffer_get_mark (GtkTextBuffer *buffer,
166 /* efficiently move insert and selection_bound to same location */
167 void gtk_text_buffer_place_cursor (GtkTextBuffer *buffer,
168 const GtkTextIter *where);
172 /* Tag manipulation */
173 void gtk_text_buffer_apply_tag (GtkTextBuffer *buffer,
175 const GtkTextIter *start_index,
176 const GtkTextIter *end_index);
177 void gtk_text_buffer_remove_tag (GtkTextBuffer *buffer,
179 const GtkTextIter *start_index,
180 const GtkTextIter *end_index);
181 void gtk_text_buffer_apply_tag_by_name (GtkTextBuffer *buffer,
183 const GtkTextIter *start_index,
184 const GtkTextIter *end_index);
185 void gtk_text_buffer_remove_tag_by_name (GtkTextBuffer *buffer,
187 const GtkTextIter *start_index,
188 const GtkTextIter *end_index);
191 /* You can either ignore the return value, or use it to
192 * set the attributes of the tag. tag_name can be NULL
194 GtkTextTag *gtk_text_buffer_create_tag (GtkTextBuffer *buffer,
195 const gchar *tag_name);
197 /* Obtain iterators pointed at various places, then you can move the
198 iterator around using the GtkTextIter operators */
199 void gtk_text_buffer_get_iter_at_line_offset (GtkTextBuffer *buffer,
203 void gtk_text_buffer_get_iter_at_offset (GtkTextBuffer *buffer,
206 void gtk_text_buffer_get_iter_at_line (GtkTextBuffer *buffer,
209 void gtk_text_buffer_get_last_iter (GtkTextBuffer *buffer,
211 void gtk_text_buffer_get_bounds (GtkTextBuffer *buffer,
214 void gtk_text_buffer_get_iter_at_mark (GtkTextBuffer *buffer,
220 /* There's no get_first_iter because you just get the iter for
223 GSList *gtk_text_buffer_get_tags (GtkTextBuffer *buffer,
224 const GtkTextIter *iter);
227 /* Used to keep track of whether the buffer needs saving; anytime the
228 buffer contents change, the modified flag is turned on. Whenever
229 you save, turn it off. Tags and marks do not affect the modified
230 flag, but if you would like them to you can connect a handler to
231 the tag/mark signals and call set_modified in your handler */
233 gboolean gtk_text_buffer_modified (GtkTextBuffer *buffer);
234 void gtk_text_buffer_set_modified (GtkTextBuffer *buffer,
236 void gtk_text_buffer_set_clipboard_contents (GtkTextBuffer *buffer,
238 const gchar *gtk_text_buffer_get_clipboard_contents (GtkTextBuffer *buffer);
241 void gtk_text_buffer_paste_primary_selection (GtkTextBuffer *buffer,
242 GtkTextIter *override_location,
244 gboolean interactive,
245 gboolean default_editable);
246 gboolean gtk_text_buffer_delete_selection (GtkTextBuffer *buffer,
247 gboolean interactive,
248 gboolean default_editable);
249 void gtk_text_buffer_cut (GtkTextBuffer *buffer,
251 gboolean interactive,
252 gboolean default_editable);
253 void gtk_text_buffer_copy (GtkTextBuffer *buffer,
255 void gtk_text_buffer_paste_clipboard (GtkTextBuffer *buffer,
257 gboolean interactive,
258 gboolean default_editable);
259 gboolean gtk_text_buffer_get_selection_bounds (GtkTextBuffer *buffer,
264 /* This function is not implemented. */
265 gboolean gtk_text_buffer_find_string(GtkTextBuffer *buffer,
268 const GtkTextIter *start,
269 const GtkTextIter *end);
272 /* Waiting on glib 1.4 regexp facility */
273 gboolean gtk_text_buffer_find_regexp(GtkTextBuffer *buffer,
275 const GtkTextIter *start,
276 const GtkTextIter *end);
279 /* INTERNAL private stuff */
280 void gtk_text_buffer_spew (GtkTextBuffer *buffer);
282 GtkTextBTree* _gtk_text_buffer_get_btree (GtkTextBuffer *buffer);
286 #endif /* __cplusplus */