]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtktextbuffer.h
Adapt to uscore-ification of gtktextiterprivate
[~andy/gtk] / gtk / gtktextbuffer.h
index c57354b17bf0404eba9998015c17e8263950955a..ae7f7570cee4d965192581330e580344d4676fd1 100644 (file)
@@ -1,6 +1,38 @@
+/* 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
 
+#include <gtk/gtkwidget.h>
+#include <gtk/gtktexttagtable.h>
+#include <gtk/gtktextiter.h>
+#include <gtk/gtktextmark.h>
+#include <gtk/gtktextchild.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
@@ -10,55 +42,65 @@ extern "C" {
  * GtkTextBTree is the PRIVATE internal representation of it.
  */
 
-#include <gtk/gtkwidget.h>
-#include <gtk/gtktexttagtable.h>
-#include <gtk/gtktextiter.h>
-#include <gtk/gtktextmark.h>
-
 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 *tree;
+  GtkTextBTree *btree;
 
-  /* Text currently pasted to the clipboard */
-  gchar *clipboard_text;
+  GtkTextBuffer *clipboard_contents;
 
-  /* Whether the buffer has been modified since last save */
-  gboolean modified;
+  GtkTextLogAttrCache *log_attr_cache;
 
-  /* We use this for selections */
-  GtkWidget *selection_widget;
-  gboolean have_selection;
-  gboolean selection_handlers_installed;
+  guint user_action_count;
+  
+  /* Whether the buffer has been modified since last save */
+  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);
 
+  void (* insert_pixbuf)   (GtkTextBuffer *buffer,
+                            GtkTextIter   *pos,
+                            GdkPixbuf     *pixbuf);
 
-  void (* delete_text)     (GtkTextBuffer *buffer,
-                            GtkTextIter *start,
-                            GtkTextIter *end);
-
-  /* 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);
 
 
@@ -83,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);
+GType        gtk_text_buffer_get_type       (void) G_GNUC_CONST;
 
 
 
@@ -95,6 +140,12 @@ gint           gtk_text_buffer_get_line_count (GtkTextBuffer   *buffer);
 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,
@@ -104,71 +155,71 @@ void gtk_text_buffer_insert            (GtkTextBuffer *buffer,
 void gtk_text_buffer_insert_at_cursor  (GtkTextBuffer *buffer,
                                         const gchar   *text,
                                         gint           len);
-void gtk_text_buffer_insert_at_char    (GtkTextBuffer *buffer,
-                                        gint           char_pos,
-                                        const gchar   *text,
-                                        gint           len);
-void gtk_text_buffer_insert_after_line (GtkTextBuffer *buffer,
-                                        gint           after_this_line,
-                                        const gchar   *text,
-                                        gint           len);
-
 
+gboolean gtk_text_buffer_insert_interactive           (GtkTextBuffer *buffer,
+                                                       GtkTextIter   *iter,
+                                                       const gchar   *text,
+                                                       gint           len,
+                                                       gboolean       default_editable);
+gboolean gtk_text_buffer_insert_interactive_at_cursor (GtkTextBuffer *buffer,
+                                                       const gchar   *text,
+                                                       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,
+                                             GtkTextIter   *start,
+                                             GtkTextIter   *end);
+gboolean gtk_text_buffer_delete_interactive (GtkTextBuffer *buffer,
+                                             GtkTextIter   *start_iter,
+                                             GtkTextIter   *end_iter,
+                                             gboolean       default_editable);
+
+
 
-void gtk_text_buffer_delete           (GtkTextBuffer *buffer,
-                                       GtkTextIter   *start_iter,
-                                       GtkTextIter   *end_iter);
-void gtk_text_buffer_delete_chars     (GtkTextBuffer *buffer,
-                                       gint           start_char,
-                                       gint           end_char);
-void gtk_text_buffer_delete_lines     (GtkTextBuffer *buffer,
-                                       gint           start_line,
-                                       gint           end_line);
-void gtk_text_buffer_delete_from_line (GtkTextBuffer *buffer,
-                                       gint           line,
-                                       gint           start_char,
-                                       gint           end_char);
 /* Obtain strings from the buffer */
 gchar          *gtk_text_buffer_get_text            (GtkTextBuffer     *buffer,
-                                                     const GtkTextIter *start_iter,
-                                                     const GtkTextIter *end_iter,
-                                                     gboolean           include_hidden_chars);
-gchar          *gtk_text_buffer_get_text_chars      (GtkTextBuffer     *buffer,
-                                                     gint               start_char,
-                                                     gint               end_char,
-                                                     gboolean           include_hidden_chars);
-gchar          *gtk_text_buffer_get_text_from_line  (GtkTextBuffer     *buffer,
-                                                     gint               line,
-                                                     gint               start_char,
-                                                     gint               end_char,
+                                                     const GtkTextIter *start,
+                                                     const GtkTextIter *end,
                                                      gboolean           include_hidden_chars);
+
 gchar          *gtk_text_buffer_get_slice           (GtkTextBuffer     *buffer,
-                                                     const GtkTextIter *start_iter,
-                                                     const GtkTextIter *end_iter,
-                                                     gboolean           include_hidden_chars);
-gchar          *gtk_text_buffer_get_slice_chars     (GtkTextBuffer     *buffer,
-                                                     gint               start_char,
-                                                     gint               end_char,
-                                                     gboolean           include_hidden_chars);
-gchar          *gtk_text_buffer_get_slice_from_line (GtkTextBuffer     *buffer,
-                                                     gint               line,
-                                                     gint               start_char,
-                                                     gint               end_char,
+                                                     const GtkTextIter *start,
+                                                     const GtkTextIter *end,
                                                      gboolean           include_hidden_chars);
 
-/* Insert a pixmap */
-void gtk_text_buffer_insert_pixmap         (GtkTextBuffer *buffer,
+/* Insert a pixbuf */
+void gtk_text_buffer_insert_pixbuf         (GtkTextBuffer *buffer,
                                             GtkTextIter   *iter,
-                                            GdkPixmap     *pixmap,
-                                            GdkBitmap     *mask);
-void gtk_text_buffer_insert_pixmap_at_char (GtkTextBuffer *buffer,
-                                            gint           char_index,
-                                            GdkPixmap     *pixmap,
-                                            GdkBitmap     *mask);
-
+                                            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,
@@ -180,9 +231,17 @@ void           gtk_text_buffer_move_mark   (GtkTextBuffer     *buffer,
                                             const GtkTextIter *where);
 void           gtk_text_buffer_delete_mark (GtkTextBuffer     *buffer,
                                             GtkTextMark       *mark);
-GtkTextMark   *gtk_text_buffer_get_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,
@@ -191,72 +250,63 @@ void gtk_text_buffer_place_cursor (GtkTextBuffer     *buffer,
 
 
 /* Tag manipulation */
-void gtk_text_buffer_apply_tag_to_chars    (GtkTextBuffer     *buffer,
-                                            const gchar       *name,
-                                            gint               start_char,
-                                            gint               end_char);
-void gtk_text_buffer_remove_tag_from_chars (GtkTextBuffer     *buffer,
-                                            const gchar       *name,
-                                            gint               start_char,
-                                            gint               end_char);
 void gtk_text_buffer_apply_tag             (GtkTextBuffer     *buffer,
-                                            const gchar       *name,
+                                            GtkTextTag        *tag,
                                             const GtkTextIter *start_index,
                                             const GtkTextIter *end_index);
 void gtk_text_buffer_remove_tag            (GtkTextBuffer     *buffer,
+                                            GtkTextTag        *tag,
+                                            const GtkTextIter *start_index,
+                                            const GtkTextIter *end_index);
+void gtk_text_buffer_apply_tag_by_name     (GtkTextBuffer     *buffer,
+                                            const gchar       *name,
+                                            const GtkTextIter *start_index,
+                                            const GtkTextIter *end_index);
+void gtk_text_buffer_remove_tag_by_name    (GtkTextBuffer     *buffer,
                                             const gchar       *name,
                                             const GtkTextIter *start_index,
                                             const GtkTextIter *end_index);
-
 
 
 /* You can either ignore the return value, or use it to
-   set the attributes of the tag */
+ * 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);
 
 /* Obtain iterators pointed at various places, then you can move the
    iterator around using the GtkTextIter operators */
-
-void     gtk_text_buffer_get_iter_at_line_char (GtkTextBuffer *buffer,
-                                                GtkTextIter   *iter,
-                                                gint           line_number,
-                                                gint           char_number);
-void     gtk_text_buffer_get_iter_at_char      (GtkTextBuffer *buffer,
-                                                GtkTextIter   *iter,
-                                                gint           char_index);
-void     gtk_text_buffer_get_iter_at_line      (GtkTextBuffer *buffer,
-                                                GtkTextIter   *iter,
-                                                gint           line_number);
-void     gtk_text_buffer_get_last_iter         (GtkTextBuffer *buffer,
-                                                GtkTextIter   *iter);
-void     gtk_text_buffer_get_bounds            (GtkTextBuffer *buffer,
-                                                GtkTextIter   *start,
-                                                GtkTextIter   *end);
-void     gtk_text_buffer_get_iter_at_mark      (GtkTextBuffer *buffer,
-                                                GtkTextIter   *iter,
-                                                GtkTextMark   *mark);
-
+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);
+void gtk_text_buffer_get_iter_at_line        (GtkTextBuffer *buffer,
+                                              GtkTextIter   *iter,
+                                              gint           line_number);
+void gtk_text_buffer_get_last_iter           (GtkTextBuffer *buffer,
+                                              GtkTextIter   *iter);
+void gtk_text_buffer_get_bounds              (GtkTextBuffer *buffer,
+                                              GtkTextIter   *start,
+                                              GtkTextIter   *end);
+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 */
 
-/*
-  Parses a string, read the man page for the Tk text widget; the only
-  variation from that is we don't support getting the index at a
-  certain pixel since the buffer has no pixel knowledge.  This
-  function is mostly useful for language bindings I think.
-*/
-gboolean gtk_text_buffer_get_iter_from_string (GtkTextBuffer *buffer,
-                                               GtkTextIter   *iter,
-                                               const gchar   *iter_string);
-
-
-
-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
@@ -266,41 +316,35 @@ GSList         *gtk_text_buffer_get_tags (GtkTextBuffer     *buffer,
 gboolean        gtk_text_buffer_modified                (GtkTextBuffer *buffer);
 void            gtk_text_buffer_set_modified            (GtkTextBuffer *buffer,
                                                          gboolean       setting);
-void            gtk_text_buffer_set_clipboard_contents  (GtkTextBuffer *buffer,
-                                                         const gchar   *text);
-const gchar    *gtk_text_buffer_get_clipboard_contents  (GtkTextBuffer *buffer);
-void            gtk_text_buffer_paste_primary_selection (GtkTextBuffer *buffer,
-                                                         GtkTextIter   *override_location,
-                                                         guint32        time);
-gboolean        gtk_text_buffer_delete_selection        (GtkTextBuffer *buffer);
-void            gtk_text_buffer_cut                     (GtkTextBuffer *buffer,
-                                                         guint32        time);
-void            gtk_text_buffer_copy                    (GtkTextBuffer *buffer,
-                                                         guint32        time);
+
+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);
 void            gtk_text_buffer_paste_clipboard         (GtkTextBuffer *buffer,
-                                                         guint32        time);
+                                                         gboolean       default_editable);
+
 gboolean        gtk_text_buffer_get_selection_bounds    (GtkTextBuffer *buffer,
                                                          GtkTextIter   *start,
                                                          GtkTextIter   *end);
+gboolean        gtk_text_buffer_delete_selection        (GtkTextBuffer *buffer,
+                                                         gboolean       interactive,
+                                                         gboolean       default_editable);                                                    
 
+/* 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);
 
-/* This function is not implemented. */
-gboolean gtk_text_buffer_find_string(GtkTextBuffer *buffer,
-                                     GtkTextIter *iter,
-                                     const gchar *str,
-                                     const GtkTextIter *start,
-                                     const GtkTextIter *end);
+/* INTERNAL private stuff */
+void            _gtk_text_buffer_spew                  (GtkTextBuffer      *buffer);
 
-#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
+GtkTextBTree*   _gtk_text_buffer_get_btree             (GtkTextBuffer      *buffer);
 
-/* INTERNAL private stuff */
-void            gtk_text_buffer_spew                   (GtkTextBuffer      *buffer);
+const PangoLogAttr* _gtk_text_buffer_get_line_log_attrs (GtkTextBuffer     *buffer,
+                                                         const GtkTextIter *anywhere_in_line,
+                                                         gint              *char_len);
 
 #ifdef __cplusplus
 }