]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtktextbuffer.h
Adapt to uscore-ification of gtktextiterprivate
[~andy/gtk] / gtk / gtktextbuffer.h
index 836010eebc584caca96cddab37b128f6cefc499c..ae7f7570cee4d965192581330e580344d4676fd1 100644 (file)
@@ -1,3 +1,29 @@
+/* GTK - The GIMP Toolkit
+ * gtktextbuffer.h Copyright (C) 2000 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GTK+ Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
 #ifndef GTK_TEXT_BUFFER_H
 #define GTK_TEXT_BUFFER_H
 
@@ -5,6 +31,7 @@
 #include <gtk/gtktexttagtable.h>
 #include <gtk/gtktextiter.h>
 #include <gtk/gtktextmark.h>
+#include <gtk/gtktextchild.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -17,42 +44,63 @@ extern "C" {
 
 typedef struct _GtkTextBTree GtkTextBTree;
 
-#define GTK_TYPE_TEXT_BUFFER            (gtk_text_buffer_get_type())
-#define GTK_TEXT_BUFFER(obj)            (GTK_CHECK_CAST ((obj), GTK_TYPE_TEXT_BUFFER, GtkTextBuffer))
-#define GTK_TEXT_BUFFER_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_TEXT_BUFFER, GtkTextBufferClass))
-#define GTK_IS_TEXT_BUFFER(obj)         (GTK_CHECK_TYPE ((obj), GTK_TYPE_TEXT_BUFFER))
-#define GTK_IS_TEXT_BUFFER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TEXT_BUFFER))
-#define GTK_TEXT_BUFFER_GET_CLASS(obj)  (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_TEXT_BUFFER, GtkTextBufferClass))
+typedef struct _GtkTextLogAttrCache GtkTextLogAttrCache;
+
+#define GTK_TYPE_TEXT_BUFFER            (gtk_text_buffer_get_type ())
+#define GTK_TEXT_BUFFER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TEXT_BUFFER, GtkTextBuffer))
+#define GTK_TEXT_BUFFER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TEXT_BUFFER, GtkTextBufferClass))
+#define GTK_IS_TEXT_BUFFER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TEXT_BUFFER))
+#define GTK_IS_TEXT_BUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TEXT_BUFFER))
+#define GTK_TEXT_BUFFER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TEXT_BUFFER, GtkTextBufferClass))
 
 typedef struct _GtkTextBufferClass GtkTextBufferClass;
 
-struct _GtkTextBuffer {
-  GtkObject parent_instance;
+struct _GtkTextBuffer
+{
+  GObject parent_instance;
 
   GtkTextTagTable *tag_table;
   GtkTextBTree *btree;
 
+  GtkTextBuffer *clipboard_contents;
+
+  GtkTextLogAttrCache *log_attr_cache;
+
+  guint user_action_count;
+  
   /* Whether the buffer has been modified since last save */
-  gboolean modified;
+  guint modified : 1;
 };
 
-struct _GtkTextBufferClass {
-  GtkObjectClass parent_class;
+struct _GtkTextBufferClass
+{
+  GObjectClass parent_class;
 
   void (* insert_text)     (GtkTextBuffer *buffer,
                             GtkTextIter *pos,
                             const gchar *text,
-                            gint length,
-                            gboolean interactive);
-
+                            gint length);
 
-  void (* delete_text)     (GtkTextBuffer *buffer,
-                            GtkTextIter *start,
-                            GtkTextIter *end,
-                            gboolean interactive);
+  void (* insert_pixbuf)   (GtkTextBuffer *buffer,
+                            GtkTextIter   *pos,
+                            GdkPixbuf     *pixbuf);
 
-  /* Only for text changed, marks/tags don't cause this
-     to be emitted */
+#if 0
+  /* FIXME To do this, first have to implement the sequence
+   * gtk_text_child_anchor_new(); gtk_text_buffer_insert_child_anchor();
+   */
+  void (* insert_child_anchor)   (GtkTextBuffer *buffer,
+                                  GtkTextIter   *pos,
+                                  GtkTextChildAnchor *anchor);
+#endif
+  
+  void (* delete_range)     (GtkTextBuffer *buffer,
+                             GtkTextIter   *start,
+                             GtkTextIter   *end);
+
+  /* Only for text/widgets/pixbuf changed, marks/tags don't cause this
+   * to be emitted
+   */
   void (* changed)         (GtkTextBuffer *buffer);
 
 
@@ -77,9 +125,12 @@ struct _GtkTextBufferClass {
                                const GtkTextIter *start_char,
                                const GtkTextIter *end_char);
 
+  /* Called at the start and end of an atomic user action */
+  void (* begin_user_action)  (GtkTextBuffer *buffer);
+  void (* end_user_action)    (GtkTextBuffer *buffer);
 };
 
-GtkType        gtk_text_buffer_get_type       (void) G_GNUC_CONST;
+GType        gtk_text_buffer_get_type       (void) G_GNUC_CONST;
 
 
 
@@ -91,6 +142,11 @@ gint           gtk_text_buffer_get_char_count (GtkTextBuffer   *buffer);
 
 GtkTextTagTable* gtk_text_buffer_get_tag_table (GtkTextBuffer  *buffer);
 
+/* Delete whole buffer, then insert */
+void gtk_text_buffer_set_text          (GtkTextBuffer *buffer,
+                                        const gchar   *text,
+                                        gint           len);
+
 /* Insert into the buffer */
 void gtk_text_buffer_insert            (GtkTextBuffer *buffer,
                                         GtkTextIter   *iter,
@@ -110,6 +166,29 @@ gboolean gtk_text_buffer_insert_interactive_at_cursor (GtkTextBuffer *buffer,
                                                        gint           len,
                                                        gboolean       default_editable);
 
+void     gtk_text_buffer_insert_range             (GtkTextBuffer     *buffer,
+                                                   GtkTextIter       *iter,
+                                                   const GtkTextIter *start,
+                                                   const GtkTextIter *end);
+gboolean gtk_text_buffer_insert_range_interactive (GtkTextBuffer     *buffer,
+                                                   GtkTextIter       *iter,
+                                                   const GtkTextIter *start,
+                                                   const GtkTextIter *end,
+                                                   gboolean           default_editable);
+
+void    gtk_text_buffer_insert_with_tags          (GtkTextBuffer     *buffer,
+                                                   GtkTextIter       *iter,
+                                                   const gchar       *text,
+                                                   gint               len,
+                                                   GtkTextTag        *first_tag,
+                                                   ...);
+
+void    gtk_text_buffer_insert_with_tags_by_name  (GtkTextBuffer     *buffer,
+                                                   GtkTextIter       *iter,
+                                                   const gchar       *text,
+                                                   gint               len,
+                                                   const gchar       *first_tag_name,
+                                                   ...);
 
 /* Delete from the buffer */
 void     gtk_text_buffer_delete             (GtkTextBuffer *buffer,
@@ -138,6 +217,10 @@ void gtk_text_buffer_insert_pixbuf         (GtkTextBuffer *buffer,
                                             GtkTextIter   *iter,
                                             GdkPixbuf     *pixbuf);
 
+/* Create a child anchor */
+GtkTextChildAnchor *gtk_text_buffer_create_child_anchor (GtkTextBuffer *buffer,
+                                                         GtkTextIter   *iter);
+
 /* Mark manipulation */
 GtkTextMark   *gtk_text_buffer_create_mark (GtkTextBuffer     *buffer,
                                             const gchar       *mark_name,
@@ -151,10 +234,15 @@ void           gtk_text_buffer_delete_mark (GtkTextBuffer     *buffer,
 GtkTextMark*   gtk_text_buffer_get_mark    (GtkTextBuffer     *buffer,
                                             const gchar       *name);
 
+void gtk_text_buffer_move_mark_by_name   (GtkTextBuffer     *buffer,
+                                          const gchar       *name,
+                                          const GtkTextIter *where);
+void gtk_text_buffer_delete_mark_by_name (GtkTextBuffer     *buffer,
+                                          const gchar       *name);
+
 GtkTextMark* gtk_text_buffer_get_insert          (GtkTextBuffer *buffer);
 GtkTextMark* gtk_text_buffer_get_selection_bound (GtkTextBuffer *buffer);
 
-
 /* efficiently move insert and selection_bound to same location */
 void gtk_text_buffer_place_cursor (GtkTextBuffer     *buffer,
                                    const GtkTextIter *where);
@@ -183,6 +271,7 @@ void gtk_text_buffer_remove_tag_by_name    (GtkTextBuffer     *buffer,
 /* You can either ignore the return value, or use it to
  * set the attributes of the tag. tag_name can be NULL
  */
+/* FIXME this should take a varargs list of tag attributes I think */
 GtkTextTag    *gtk_text_buffer_create_tag (GtkTextBuffer *buffer,
                                            const gchar   *tag_name);
 
@@ -192,6 +281,10 @@ void gtk_text_buffer_get_iter_at_line_offset (GtkTextBuffer *buffer,
                                               GtkTextIter   *iter,
                                               gint           line_number,
                                               gint           char_offset);
+void gtk_text_buffer_get_iter_at_line_index  (GtkTextBuffer *buffer,
+                                              GtkTextIter   *iter,
+                                              gint           line_number,
+                                              gint           byte_index);
 void gtk_text_buffer_get_iter_at_offset      (GtkTextBuffer *buffer,
                                               GtkTextIter   *iter,
                                               gint           char_offset);
@@ -207,15 +300,13 @@ void gtk_text_buffer_get_iter_at_mark        (GtkTextBuffer *buffer,
                                               GtkTextIter   *iter,
                                               GtkTextMark   *mark);
 
-
+void gtk_text_buffer_get_iter_at_child_anchor (GtkTextBuffer      *buffer,
+                                               GtkTextIter        *iter,
+                                               GtkTextChildAnchor *anchor);
 
 /* There's no get_first_iter because you just get the iter for
    line or char 0 */
 
-GSList         *gtk_text_buffer_get_tags (GtkTextBuffer     *buffer,
-                                          const GtkTextIter *iter);
-
-
 /* Used to keep track of whether the buffer needs saving; anytime the
    buffer contents change, the modified flag is turned on. Whenever
    you save, turn it off. Tags and marks do not affect the modified
@@ -226,9 +317,9 @@ gboolean        gtk_text_buffer_modified                (GtkTextBuffer *buffer);
 void            gtk_text_buffer_set_modified            (GtkTextBuffer *buffer,
                                                          gboolean       setting);
 
-void            gtk_text_buffer_paste_primary           (GtkTextBuffer *buffer,
-                                                         GtkTextIter   *override_location,
-                                                         gboolean       default_editable);
+void            gtk_text_buffer_paste_primary           (GtkTextBuffer       *buffer,
+                                                         const GtkTextIter   *override_location,
+                                                         gboolean             default_editable);
 void            gtk_text_buffer_cut_clipboard           (GtkTextBuffer *buffer,
                                                          gboolean       default_editable);
 void            gtk_text_buffer_copy_clipboard          (GtkTextBuffer *buffer);
@@ -240,28 +331,21 @@ gboolean        gtk_text_buffer_get_selection_bounds    (GtkTextBuffer *buffer,
                                                          GtkTextIter   *end);
 gboolean        gtk_text_buffer_delete_selection        (GtkTextBuffer *buffer,
                                                          gboolean       interactive,
-                                                         gboolean       default_editable);
+                                                         gboolean       default_editable);                                                    
 
-/* This function is not implemented. */
-gboolean gtk_text_buffer_find_string(GtkTextBuffer *buffer,
-                                     GtkTextIter *iter,
-                                     const gchar *str,
-                                     const GtkTextIter *start,
-                                     const GtkTextIter *end);
-
-#if 0
-/* Waiting on glib 1.4 regexp facility */
-gboolean gtk_text_buffer_find_regexp(GtkTextBuffer *buffer,
-                                     GRegexp *regexp,
-                                     const GtkTextIter *start,
-                                     const GtkTextIter *end);
-#endif
+/* Called to specify atomic user actions, used to implement undo */
+void            gtk_text_buffer_begin_user_action       (GtkTextBuffer *buffer);
+void            gtk_text_buffer_end_user_action         (GtkTextBuffer *buffer);
 
 /* INTERNAL private stuff */
-void            gtk_text_buffer_spew                   (GtkTextBuffer      *buffer);
+void            _gtk_text_buffer_spew                  (GtkTextBuffer      *buffer);
 
 GtkTextBTree*   _gtk_text_buffer_get_btree             (GtkTextBuffer      *buffer);
 
+const PangoLogAttr* _gtk_text_buffer_get_line_log_attrs (GtkTextBuffer     *buffer,
+                                                         const GtkTextIter *anywhere_in_line,
+                                                         gint              *char_len);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */