X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtktextview.h;h=ad0edb40d07bc06a7bd6452af5d563d65671eeb9;hb=01fbc3b649d986fc7f2c1c7ea347ed0fe75119c0;hp=300e3716c5808b3221992a1909145e049d2943f5;hpb=244996ffec3b76c4cbef2e9684c0557ffed7e8fa;p=~andy%2Fgtk diff --git a/gtk/gtktextview.h b/gtk/gtktextview.h index 300e3716c..ad0edb40d 100644 --- a/gtk/gtktextview.h +++ b/gtk/gtktextview.h @@ -1,23 +1,51 @@ +/* GTK - The GIMP Toolkit + * gtktextview.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_VIEW_H #define GTK_TEXT_VIEW_H #include #include #include +#include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ -#define GTK_TYPE_TEXT_VIEW (gtk_text_view_get_type()) -#define GTK_TEXT_VIEW(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_TEXT_VIEW, GtkTextView)) -#define GTK_TEXT_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_TEXT_VIEW, GtkTextViewClass)) -#define GTK_IS_TEXT_VIEW(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_TEXT_VIEW)) -#define GTK_IS_TEXT_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TEXT_VIEW)) -#define GTK_TEXT_VIEW_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_TEXT_VIEW, GtkTextViewClass)) +#define GTK_TYPE_TEXT_VIEW (gtk_text_view_get_type ()) +#define GTK_TEXT_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TEXT_VIEW, GtkTextView)) +#define GTK_TEXT_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TEXT_VIEW, GtkTextViewClass)) +#define GTK_IS_TEXT_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TEXT_VIEW)) +#define GTK_IS_TEXT_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TEXT_VIEW)) +#define GTK_TEXT_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TEXT_VIEW, GtkTextViewClass)) typedef enum { + GTK_TEXT_WINDOW_PRIVATE, GTK_TEXT_WINDOW_WIDGET, GTK_TEXT_WINDOW_TEXT, GTK_TEXT_WINDOW_LEFT, @@ -26,44 +54,69 @@ typedef enum GTK_TEXT_WINDOW_BOTTOM } GtkTextWindowType; +#define GTK_TEXT_VIEW_PRIORITY_VALIDATE (GDK_PRIORITY_REDRAW + 5) + typedef struct _GtkTextView GtkTextView; typedef struct _GtkTextViewClass GtkTextViewClass; -/* Internal private type. */ +/* Internal private types. */ typedef struct _GtkTextWindow GtkTextWindow; +typedef struct _GtkTextPendingScroll GtkTextPendingScroll; -struct _GtkTextView { +struct _GtkTextView +{ GtkContainer parent_instance; struct _GtkTextLayout *layout; GtkTextBuffer *buffer; guint selection_drag_handler; - guint selection_drag_scan_timeout; - gint scrolling_accel_factor; - - gboolean overwrite_mode; - - GtkWrapMode wrap_mode; /* Default wrap mode */ + guint scroll_timeout; + + /* Default style settings */ + gint pixels_above_lines; + gint pixels_below_lines; + gint pixels_inside_wrap; + GtkWrapMode wrap_mode; + GtkJustification justify; + gint left_margin; + gint right_margin; + gint indent; + PangoTabArray *tabs; + guint editable : 1; - gboolean editable; /* default editability */ + + + guint overwrite_mode : 1; + guint cursor_visible : 1; + guint need_im_reset : 1; /* If we have reset the IM since the last character entered */ + /* just selected a word or line via double/triple click */ + guint just_selected_element : 1; + + /* disable scrolling to cursor on focus */ + guint disable_scroll_on_focus : 1; + + /* debug flag - means that we've validated onscreen since the + * last "invalidate" signal from the layout + */ + guint onscreen_validated : 1; - gboolean cursor_visible; + guint mouse_cursor_obscured : 1; GtkTextWindow *text_window; GtkTextWindow *left_window; GtkTextWindow *right_window; GtkTextWindow *top_window; GtkTextWindow *bottom_window; - + GtkAdjustment *hadjustment; GtkAdjustment *vadjustment; - gint xoffset; /* Offsets between widget coordinates and buffer coordinates */ + gint xoffset; /* Offsets between widget coordinates and buffer coordinates */ gint yoffset; - gint width; /* Width and height of the buffer */ + gint width; /* Width and height of the buffer */ gint height; - + /* The virtual cursor position is normally the same as the * actual (strong) cursor position, except in two circumstances: * @@ -73,70 +126,117 @@ struct _GtkTextView { * In case a), virtual_cursor_x is preserved, but not virtual_cursor_y * In case b), both virtual_cursor_x and virtual_cursor_y are preserved. */ - gint virtual_cursor_x; /* -1 means use actual cursor position */ - gint virtual_cursor_y; /* -1 means use actual cursor position */ - - GtkTextMark *first_para_mark; /* Mark at the beginning of the first onscreen paragraph */ - gint first_para_pixels; /* Offset of top of screen in the first onscreen paragraph */ + gint virtual_cursor_x; /* -1 means use actual cursor position */ + gint virtual_cursor_y; /* -1 means use actual cursor position */ + + GtkTextMark *first_para_mark; /* Mark at the beginning of the first onscreen paragraph */ + gint first_para_pixels; /* Offset of top of screen in the first onscreen paragraph */ GtkTextMark *dnd_mark; guint blink_timeout; - guint first_validate_idle; /* Idle to revalidate onscreen portion, runs before resize */ + guint first_validate_idle; /* Idle to revalidate onscreen portion, runs before resize */ guint incremental_validate_idle; /* Idle to revalidate offscreen portions, runs after redraw */ GtkIMContext *im_context; + GtkWidget *popup_menu; gint drag_start_x; gint drag_start_y; + + GSList *children; + + GtkTextPendingScroll *pending_scroll; + + gint pending_place_cursor_button; }; -struct _GtkTextViewClass { +struct _GtkTextViewClass +{ GtkContainerClass parent_class; + void (* set_scroll_adjustments) (GtkTextView *text_view, + GtkAdjustment *hadjustment, + GtkAdjustment *vadjustment); + + void (* populate_popup) (GtkTextView *text_view, + GtkMenu *menu); + /* These are all RUN_ACTION signals for keybindings */ /* move insertion point */ - void (* move) (GtkTextView *text_view, GtkMovementStep step, gint count, gboolean extend_selection); + void (* move_cursor) (GtkTextView *text_view, + GtkMovementStep step, + gint count, + gboolean extend_selection); + + /* FIXME should be deprecated in favor of adding GTK_MOVEMENT_HORIZONTAL_PAGES + * or something in GTK 2.2, was put in to avoid adding enum values during + * the freeze. + */ + void (* page_horizontally) (GtkTextView *text_view, + gint count, + gboolean extend_selection); + /* move the "anchor" (what Emacs calls the mark) to the cursor position */ - void (* set_anchor) (GtkTextView *text_view); - /* Deletions */ - void (* insert) (GtkTextView *text_view, const gchar *str); - void (* delete) (GtkTextView *text_view, GtkDeleteType type, gint count); + void (* set_anchor) (GtkTextView *text_view); + + /* Edits */ + void (* insert_at_cursor) (GtkTextView *text_view, + const gchar *str); + void (* delete_from_cursor) (GtkTextView *text_view, + GtkDeleteType type, + gint count); + /* cut copy paste */ void (* cut_clipboard) (GtkTextView *text_view); void (* copy_clipboard) (GtkTextView *text_view); void (* paste_clipboard) (GtkTextView *text_view); /* overwrite */ void (* toggle_overwrite) (GtkTextView *text_view); - void (* set_scroll_adjustments) (GtkTextView *text_view, - GtkAdjustment *hadjustment, - GtkAdjustment *vadjustment); + + /* propagates to GtkWindow move_focus */ + void (* move_focus) (GtkTextView *text_view, + GtkDirectionType direction); + + + /* Padding for future expansion */ + void (*_gtk_reserved1) (void); + void (*_gtk_reserved2) (void); + void (*_gtk_reserved3) (void); + void (*_gtk_reserved4) (void); + void (*_gtk_reserved5) (void); + void (*_gtk_reserved6) (void); + void (*_gtk_reserved7) (void); + void (*_gtk_reserved8) (void); }; -GtkType gtk_text_view_get_type (void) G_GNUC_CONST; +GType gtk_text_view_get_type (void) G_GNUC_CONST; GtkWidget * gtk_text_view_new (void); GtkWidget * gtk_text_view_new_with_buffer (GtkTextBuffer *buffer); void gtk_text_view_set_buffer (GtkTextView *text_view, - GtkTextBuffer *buffer); + GtkTextBuffer *buffer); GtkTextBuffer *gtk_text_view_get_buffer (GtkTextView *text_view); -gboolean gtk_text_view_scroll_to_mark (GtkTextView *text_view, +gboolean gtk_text_view_scroll_to_iter (GtkTextView *text_view, + GtkTextIter *iter, + gdouble within_margin, + gboolean use_align, + gdouble xalign, + gdouble yalign); +void gtk_text_view_scroll_to_mark (GtkTextView *text_view, GtkTextMark *mark, - gint mark_within_margin); + gdouble within_margin, + gboolean use_align, + gdouble xalign, + gdouble yalign); +void gtk_text_view_scroll_mark_onscreen (GtkTextView *text_view, + GtkTextMark *mark); gboolean gtk_text_view_move_mark_onscreen (GtkTextView *text_view, GtkTextMark *mark); gboolean gtk_text_view_place_cursor_onscreen (GtkTextView *text_view); void gtk_text_view_get_visible_rect (GtkTextView *text_view, - GdkRectangle *visible_rect); -void gtk_text_view_set_wrap_mode (GtkTextView *text_view, - GtkWrapMode wrap_mode); -GtkWrapMode gtk_text_view_get_wrap_mode (GtkTextView *text_view); - -void gtk_text_view_set_editable (GtkTextView *text_view, - gboolean setting); -gboolean gtk_text_view_get_editable (GtkTextView *text_view); - + GdkRectangle *visible_rect); void gtk_text_view_set_cursor_visible (GtkTextView *text_view, gboolean setting); gboolean gtk_text_view_get_cursor_visible (GtkTextView *text_view); @@ -145,9 +245,9 @@ void gtk_text_view_get_iter_location (GtkTextView *text_view, const GtkTextIter *iter, GdkRectangle *location); void gtk_text_view_get_iter_at_location (GtkTextView *text_view, - GtkTextIter *iter, - gint x, - gint y); + GtkTextIter *iter, + gint x, + gint y); void gtk_text_view_get_line_yrange (GtkTextView *text_view, const GtkTextIter *iter, gint *y, @@ -179,10 +279,76 @@ GtkTextWindowType gtk_text_view_get_window_type (GtkTextView *text_view, void gtk_text_view_set_border_window_size (GtkTextView *text_view, GtkTextWindowType type, gint size); -void gtk_text_view_set_text_window_size (GtkTextView *text_view, - gint width, - gint height); - +gint gtk_text_view_get_border_window_size (GtkTextView *text_view, + GtkTextWindowType type); + +gboolean gtk_text_view_forward_display_line (GtkTextView *text_view, + GtkTextIter *iter); +gboolean gtk_text_view_backward_display_line (GtkTextView *text_view, + GtkTextIter *iter); +gboolean gtk_text_view_forward_display_line_end (GtkTextView *text_view, + GtkTextIter *iter); +gboolean gtk_text_view_backward_display_line_start (GtkTextView *text_view, + GtkTextIter *iter); +gboolean gtk_text_view_starts_display_line (GtkTextView *text_view, + const GtkTextIter *iter); +gboolean gtk_text_view_move_visually (GtkTextView *text_view, + GtkTextIter *iter, + gint count); + +/* Adding child widgets */ +void gtk_text_view_add_child_at_anchor (GtkTextView *text_view, + GtkWidget *child, + GtkTextChildAnchor *anchor); + +void gtk_text_view_add_child_in_window (GtkTextView *text_view, + GtkWidget *child, + GtkTextWindowType which_window, + /* window coordinates */ + gint xpos, + gint ypos); + +void gtk_text_view_move_child (GtkTextView *text_view, + GtkWidget *child, + /* window coordinates */ + gint xpos, + gint ypos); + +/* Default style settings (fallbacks if no tag affects the property) */ + +void gtk_text_view_set_wrap_mode (GtkTextView *text_view, + GtkWrapMode wrap_mode); +GtkWrapMode gtk_text_view_get_wrap_mode (GtkTextView *text_view); +void gtk_text_view_set_editable (GtkTextView *text_view, + gboolean setting); +gboolean gtk_text_view_get_editable (GtkTextView *text_view); +void gtk_text_view_set_pixels_above_lines (GtkTextView *text_view, + gint pixels_above_lines); +gint gtk_text_view_get_pixels_above_lines (GtkTextView *text_view); +void gtk_text_view_set_pixels_below_lines (GtkTextView *text_view, + gint pixels_below_lines); +gint gtk_text_view_get_pixels_below_lines (GtkTextView *text_view); +void gtk_text_view_set_pixels_inside_wrap (GtkTextView *text_view, + gint pixels_inside_wrap); +gint gtk_text_view_get_pixels_inside_wrap (GtkTextView *text_view); +void gtk_text_view_set_justification (GtkTextView *text_view, + GtkJustification justification); +GtkJustification gtk_text_view_get_justification (GtkTextView *text_view); +void gtk_text_view_set_left_margin (GtkTextView *text_view, + gint left_margin); +gint gtk_text_view_get_left_margin (GtkTextView *text_view); +void gtk_text_view_set_right_margin (GtkTextView *text_view, + gint right_margin); +gint gtk_text_view_get_right_margin (GtkTextView *text_view); +void gtk_text_view_set_indent (GtkTextView *text_view, + gint indent); +gint gtk_text_view_get_indent (GtkTextView *text_view); +void gtk_text_view_set_tabs (GtkTextView *text_view, + PangoTabArray *tabs); +PangoTabArray* gtk_text_view_get_tabs (GtkTextView *text_view); + +/* note that the return value of this changes with the theme */ +GtkTextAttributes* gtk_text_view_get_default_attributes (GtkTextView *text_view); #ifdef __cplusplus }