]> Pileus Git - ~andy/gtk/blob - gtk/gtktextbtree.h
Include files outside of the extern "C" block. Makes some C++ compiler
[~andy/gtk] / gtk / gtktextbtree.h
1 #ifndef GTK_TEXT_BTREE_H
2 #define GTK_TEXT_BTREE_H
3
4 #include <gtk/gtktextbuffer.h>
5 #include <gtk/gtktexttag.h>
6 #include <gtk/gtktextmark.h>
7 #include <gtk/gtktextchild.h>
8 #include <gtk/gtktextsegment.h>
9 #include <gtk/gtktextiter.h>
10
11 #ifdef __cplusplus
12 extern "C" {
13 #endif /* __cplusplus */
14
15 GtkTextBTree  *gtk_text_btree_new        (GtkTextTagTable *table,
16                                           GtkTextBuffer   *buffer);
17 void           gtk_text_btree_ref        (GtkTextBTree    *tree);
18 void           gtk_text_btree_unref      (GtkTextBTree    *tree);
19 GtkTextBuffer *gtk_text_btree_get_buffer (GtkTextBTree    *tree);
20
21
22 guint gtk_text_btree_get_chars_changed_stamp    (GtkTextBTree *tree);
23 guint gtk_text_btree_get_segments_changed_stamp (GtkTextBTree *tree);
24 void  gtk_text_btree_segments_changed           (GtkTextBTree *tree);
25
26
27 /* Indexable segment mutation */
28
29 void gtk_text_btree_delete        (GtkTextIter *start,
30                                    GtkTextIter *end);
31 void gtk_text_btree_insert        (GtkTextIter *iter,
32                                    const gchar *text,
33                                    gint         len);
34 void gtk_text_btree_insert_pixmap (GtkTextIter *iter,
35                                    GdkPixmap   *pixmap,
36                                    GdkBitmap   *mask);
37
38
39
40 /* View stuff */
41 GtkTextLine *gtk_text_btree_find_line_by_y    (GtkTextBTree      *tree,
42                                                gpointer           view_id,
43                                                gint               ypixel,
44                                                gint              *line_top_y);
45 gint         gtk_text_btree_find_line_top     (GtkTextBTree      *tree,
46                                                GtkTextLine       *line,
47                                                gpointer           view_id);
48 void         gtk_text_btree_add_view          (GtkTextBTree      *tree,
49                                                GtkTextLayout     *layout);
50 void         gtk_text_btree_remove_view       (GtkTextBTree      *tree,
51                                                gpointer           view_id);
52 void         gtk_text_btree_invalidate_region (GtkTextBTree      *tree,
53                                                const GtkTextIter *start,
54                                                const GtkTextIter *end);
55 void         gtk_text_btree_get_view_size     (GtkTextBTree      *tree,
56                                                gpointer           view_id,
57                                                gint              *width,
58                                                gint              *height);
59 gboolean     gtk_text_btree_is_valid          (GtkTextBTree      *tree,
60                                                gpointer           view_id);
61 gboolean     gtk_text_btree_validate          (GtkTextBTree      *tree,
62                                                gpointer           view_id,
63                                                gint               max_pixels,
64                                                gint              *y,
65                                                gint              *old_height,
66                                                gint              *new_height);
67 void         gtk_text_btree_validate_line     (GtkTextBTree      *tree,
68                                                GtkTextLine       *line,
69                                                gpointer           view_id);
70
71 /* Tag */
72
73 void gtk_text_btree_tag (const GtkTextIter *start,
74                          const GtkTextIter *end,
75                          GtkTextTag        *tag,
76                          gboolean           apply);
77
78 /* "Getters" */
79
80 GtkTextLine * gtk_text_btree_get_line          (GtkTextBTree      *tree,
81                                                 gint               line_number,
82                                                 gint              *real_line_number);
83 GtkTextLine * gtk_text_btree_get_line_at_char  (GtkTextBTree      *tree,
84                                                 gint               char_index,
85                                                 gint              *line_start_index,
86                                                 gint              *real_char_index);
87 GtkTextTag**  gtk_text_btree_get_tags          (const GtkTextIter *iter,
88                                                 gint              *num_tags);
89 gchar        *gtk_text_btree_get_text          (const GtkTextIter *start,
90                                                 const GtkTextIter *end,
91                                                 gboolean           include_hidden,
92                                                 gboolean           include_nonchars);
93 gint          gtk_text_btree_line_count        (GtkTextBTree      *tree);
94 gint          gtk_text_btree_char_count        (GtkTextBTree      *tree);
95 gboolean      gtk_text_btree_char_is_invisible (const GtkTextIter *iter);
96
97
98
99 /* Get iterators (these are implemented in gtktextiter.c) */
100 void     gtk_text_btree_get_iter_at_char         (GtkTextBTree       *tree,
101                                                   GtkTextIter        *iter,
102                                                   gint                char_index);
103 void     gtk_text_btree_get_iter_at_line_char    (GtkTextBTree       *tree,
104                                                   GtkTextIter        *iter,
105                                                   gint                line_number,
106                                                   gint                char_index);
107 void     gtk_text_btree_get_iter_at_line_byte    (GtkTextBTree       *tree,
108                                                   GtkTextIter        *iter,
109                                                   gint                line_number,
110                                                   gint                byte_index);
111 gboolean gtk_text_btree_get_iter_from_string     (GtkTextBTree       *tree,
112                                                   GtkTextIter        *iter,
113                                                   const gchar        *string);
114 gboolean gtk_text_btree_get_iter_at_mark_name    (GtkTextBTree       *tree,
115                                                   GtkTextIter        *iter,
116                                                   const gchar        *mark_name);
117 void     gtk_text_btree_get_iter_at_mark         (GtkTextBTree       *tree,
118                                                   GtkTextIter        *iter,
119                                                   GtkTextMark        *mark);
120 void     gtk_text_btree_get_last_iter            (GtkTextBTree       *tree,
121                                                   GtkTextIter        *iter);
122 void     gtk_text_btree_get_iter_at_line         (GtkTextBTree       *tree,
123                                                   GtkTextIter        *iter,
124                                                   GtkTextLine        *line,
125                                                   gint                byte_offset);
126 gboolean gtk_text_btree_get_iter_at_first_toggle (GtkTextBTree       *tree,
127                                                   GtkTextIter        *iter,
128                                                   GtkTextTag         *tag);
129 gboolean gtk_text_btree_get_iter_at_last_toggle  (GtkTextBTree       *tree,
130                                                   GtkTextIter        *iter,
131                                                   GtkTextTag         *tag);
132
133
134 /* Manipulate marks */
135 GtkTextMark        *gtk_text_btree_set_mark                (GtkTextBTree       *tree,
136                                                             GtkTextMark         *existing_mark,
137                                                             const gchar        *name,
138                                                             gboolean            left_gravity,
139                                                             const GtkTextIter  *index,
140                                                             gboolean           should_exist);
141 void                gtk_text_btree_remove_mark_by_name     (GtkTextBTree       *tree,
142                                                             const gchar        *name);
143 void                gtk_text_btree_remove_mark             (GtkTextBTree       *tree,
144                                                             GtkTextMark        *segment);
145 gboolean            gtk_text_btree_get_selection_bounds    (GtkTextBTree       *tree,
146                                                             GtkTextIter        *start,
147                                                             GtkTextIter        *end);
148 void                gtk_text_btree_place_cursor            (GtkTextBTree       *tree,
149                                                             const GtkTextIter  *where);
150 gboolean            gtk_text_btree_mark_is_insert          (GtkTextBTree       *tree,
151                                                             GtkTextMark        *segment);
152 gboolean            gtk_text_btree_mark_is_selection_bound (GtkTextBTree       *tree,
153                                                             GtkTextMark        *segment);
154 GtkTextMark        *gtk_text_btree_get_mark_by_name        (GtkTextBTree       *tree,
155                                                             const gchar        *name);
156 GtkTextLine *       gtk_text_btree_first_could_contain_tag (GtkTextBTree       *tree,
157                                                             GtkTextTag         *tag);
158 GtkTextLine *       gtk_text_btree_last_could_contain_tag  (GtkTextBTree       *tree,
159                                                             GtkTextTag         *tag);
160
161 /* Lines */
162
163 /* Chunk of data associated with a line; views can use this to store
164    info at the line. They should "subclass" the header struct here. */
165 typedef struct _GtkTextLineData GtkTextLineData;
166
167 struct _GtkTextLineData {
168   gpointer view_id;
169   GtkTextLineData *next;
170   gint height;
171   gint width : 24;
172   gint valid : 8;
173 };
174
175 /*
176  * The data structure below defines a single line of text (from newline
177  * to newline, not necessarily what appears on one line of the screen).
178  *
179  * You can consider this line a "paragraph" also
180  */
181
182 struct _GtkTextLine {
183   GtkTextBTreeNode *parent;             /* Pointer to parent node containing
184                                  * line. */
185   GtkTextLine *next;            /* Next in linked list of lines with
186                                  * same parent node in B-tree.  NULL
187                                  * means end of list. */
188   GtkTextLineSegment *segments; /* First in ordered list of segments
189                                  * that make up the line. */
190   GtkTextLineData *views;      /* data stored here by views */
191 };
192
193
194 gint                gtk_text_line_get_number                 (GtkTextLine         *line);
195 gboolean            gtk_text_line_char_has_tag               (GtkTextLine         *line,
196                                                               GtkTextBTree        *tree,
197                                                               gint                 char_in_line,
198                                                               GtkTextTag          *tag);
199 gboolean            gtk_text_line_byte_has_tag               (GtkTextLine         *line,
200                                                               GtkTextBTree        *tree,
201                                                               gint                 byte_in_line,
202                                                               GtkTextTag          *tag);
203 GtkTextLine *       gtk_text_line_next                       (GtkTextLine         *line);
204 GtkTextLine *       gtk_text_line_previous                   (GtkTextLine         *line);
205 void                gtk_text_line_add_data                   (GtkTextLine         *line,
206                                                               GtkTextLineData     *data);
207 gpointer            gtk_text_line_remove_data                (GtkTextLine         *line,
208                                                               gpointer             view_id);
209 gpointer            gtk_text_line_get_data                   (GtkTextLine         *line,
210                                                               gpointer             view_id);
211 void                gtk_text_line_invalidate_wrap            (GtkTextLine         *line,
212                                                               GtkTextLineData     *ld);
213 gint                gtk_text_line_char_count                 (GtkTextLine         *line);
214 gint                gtk_text_line_byte_count                 (GtkTextLine         *line);
215 gint                gtk_text_line_char_index                 (GtkTextLine         *line);
216 GtkTextLineSegment *gtk_text_line_byte_to_segment            (GtkTextLine         *line,
217                                                               gint                 byte_offset,
218                                                               gint                *seg_offset);
219 GtkTextLineSegment *gtk_text_line_char_to_segment            (GtkTextLine         *line,
220                                                               gint                 char_offset,
221                                                               gint                *seg_offset);
222 void                gtk_text_line_byte_locate                (GtkTextLine         *line,
223                                                               gint                 byte_offset,
224                                                               GtkTextLineSegment **segment,
225                                                               GtkTextLineSegment **any_segment,
226                                                               gint                *seg_byte_offset,
227                                                               gint                *line_byte_offset);
228 void                gtk_text_line_char_locate                (GtkTextLine         *line,
229                                                               gint                 char_offset,
230                                                               GtkTextLineSegment **segment,
231                                                               GtkTextLineSegment **any_segment,
232                                                               gint                *seg_char_offset,
233                                                               gint                *line_char_offset);
234 void                gtk_text_line_byte_to_char_offsets       (GtkTextLine         *line,
235                                                               gint                 byte_offset,
236                                                               gint                *line_char_offset,
237                                                               gint                *seg_char_offset);
238 void                gtk_text_line_char_to_byte_offsets       (GtkTextLine         *line,
239                                                               gint                 char_offset,
240                                                               gint                *line_byte_offset,
241                                                               gint                *seg_byte_offset);
242 GtkTextLineSegment *gtk_text_line_byte_to_any_segment        (GtkTextLine         *line,
243                                                               gint                 byte_offset,
244                                                               gint                *seg_offset);
245 GtkTextLineSegment *gtk_text_line_char_to_any_segment        (GtkTextLine         *line,
246                                                               gint                 char_offset,
247                                                               gint                *seg_offset);
248 gint                gtk_text_line_byte_to_char               (GtkTextLine         *line,
249                                                               gint                 byte_offset);
250 gint                gtk_text_line_char_to_byte               (GtkTextLine         *line,
251                                                               gint                 char_offset);
252 GtkTextLine    *    gtk_text_line_next_could_contain_tag     (GtkTextLine         *line,
253                                                               GtkTextBTree        *tree,
254                                                               GtkTextTag          *tag);
255 GtkTextLine    *    gtk_text_line_previous_could_contain_tag (GtkTextLine         *line,
256                                                               GtkTextBTree        *tree,
257                                                               GtkTextTag          *tag);
258
259
260 /* Debug */
261 void gtk_text_btree_check (GtkTextBTree *tree);
262 void gtk_text_btree_spew (GtkTextBTree *tree);
263 extern gboolean gtk_text_view_debug_btree;
264
265 /* ignore, exported only for gtktextsegment.c */
266 void toggle_segment_check_func (GtkTextLineSegment *segPtr,
267                                 GtkTextLine        *line);
268 void change_node_toggle_count  (GtkTextBTreeNode   *node,
269                                 GtkTextTagInfo     *info,
270                                 gint                delta);
271
272
273 #ifdef __cplusplus
274 }
275 #endif /* __cplusplus */
276
277 #endif
278
279