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