]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtktextbuffer.h
Adapt to uscore-ification of gtktextiterprivate
[~andy/gtk] / gtk / gtktextbuffer.h
index ef50bb96c921d3f41a065fb6be3d101160ca3e8c..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);
-
-
-  void (* delete_text)     (GtkTextBuffer *buffer,
-                            GtkTextIter *start,
-                            GtkTextIter *end,
-                            gboolean interactive);
-
-  /* Only for text changed, marks/tags don't cause this
-     to be emitted */
+                            gint length);
+
+  void (* insert_pixbuf)   (GtkTextBuffer *buffer,
+                            GtkTextIter   *pos,
+                            GdkPixbuf     *pixbuf);
+
+#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;
 
 
 
@@ -166,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,
@@ -188,7 +243,6 @@ void gtk_text_buffer_delete_mark_by_name (GtkTextBuffer     *buffer,
 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);
@@ -217,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);
 
@@ -226,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);
@@ -241,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
@@ -260,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);
@@ -274,13 +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);                                                    
+
+/* 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);
 
 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 */