Added SILC Thread Queue API
[crypto.git] / apps / silcer / src / xtext.h
1 #ifndef __XTEXT_H__
2 #define __XTEXT_H__
3
4 #include <gdk/gdk.h>
5 #include <gtk/gtkadjustment.h>
6 #include <gtk/gtkwidget.h>
7 #include <time.h>
8
9 /*#define GTK_XTEXT(obj)          GTK_CHECK_CAST (obj, gtk_xtext_get_type (), GtkXText)*/
10 #define GTK_XTEXT(obj) ((GtkXText*)obj)
11 #define GTK_XTEXT_CLASS(klass)  GTK_CHECK_CLASS_CAST (klass, gtk_xtext_get_type (), GtkXTextClass)
12 #define GTK_IS_XTEXT(obj)       GTK_CHECK_TYPE (obj, gtk_xtext_get_type ())
13
14 #define FONT_1BYTE 0
15 #define FONT_2BYTE 1
16 #define FONT_SET 2
17
18 #define ATTR_BOLD '\002'
19 #define ATTR_COLOR '\003'
20 #define ATTR_BEEP '\007'
21 #define ATTR_RESET '\017'
22 #define ATTR_REVERSE '\026'
23 #define ATTR_ESCAPE '\033'
24 #define ATTR_UNDERLINE '\037'
25
26 typedef struct _GtkXText GtkXText;
27 typedef struct _GtkXTextClass GtkXTextClass;
28
29 typedef struct textentry
30 {
31         struct textentry *next;
32         char *str;
33         int str_width;
34         time_t stamp;
35         short str_len;
36         short mark_start;
37         short mark_end;
38         short indent;
39         short lines_taken;
40         short left_len;
41 }
42 textentry;
43
44 struct _GtkXText
45 {
46         GtkWidget widget;
47
48         GtkAdjustment *adj;
49         gfloat old_value;                                       /* last known adj->value */
50         GdkPixmap *pixmap;                              /* 0 = use palette[19] */
51         GdkDrawable *draw_buf;                  /* points to ->window or ->tmp_pix */
52         GdkPixmap *tmp_pix;                             /* double buffer */
53         GdkCursor *hand_cursor;
54
55         int ts_orig_x;
56         int ts_orig_y;
57
58         int last_win_x;
59         int last_win_y;
60         int last_win_h;
61         int last_win_w;
62
63         int tint_red;
64         int tint_green;
65         int tint_blue;
66
67         GdkGC *bgc;                                               /* backing pixmap */
68         GdkGC *fgc;                                               /* text foreground color */
69         GdkGC *light_gc;                                  /* sep bar */
70         GdkGC *dark_gc;
71         gulong palette[20];
72
73         textentry *text_first;
74         textentry *text_last;
75
76         gint io_tag;                                      /* for delayed refresh events */
77         gint add_io_tag;                                  /* "" when adding new text */
78         gint scroll_tag;                                  /* marking-scroll timeout */
79
80         GdkFont *font;
81         int fontsize;
82         int fonttype;
83         guint16 fontwidth[256];           /* each char's width, only for FONT_1BYTE type */
84         int space_width;                                  /* width (pixels) of the space " " character */
85         int stamp_width;                                  /* width of "[88:88:88]" */
86
87         int indent;                                               /* position of separator (pixels) from left */
88         int max_auto_indent;
89
90         int select_start_adj;             /* the adj->value when the selection started */
91         int select_start_x;
92         int select_start_y;
93         int select_end_x;
94         int select_end_y;
95
96         textentry *last_ent_start;        /* this basically describes the last rendered */
97         textentry *last_ent_end;          /* selection. */
98         int last_offset_start;
99         int last_offset_end;
100
101         textentry *old_ent_start;
102         textentry *old_ent_end;
103
104         int num_lines;
105         int max_lines;
106
107         int pagetop_subline;
108         textentry *pagetop_ent;                 /* what's at xtext->adj->value */
109
110         int col_fore;
111         int col_back;
112
113         int depth;                                                /* gdk window depth */
114
115 /*   int frozen;*/
116
117         char num[8];                                      /* for parsing mirc color */
118         int nc;                                                   /* offset into xtext->num */
119
120         textentry *hilight_ent;
121         int hilight_start;
122         int hilight_end;
123
124         short grid_offset[256];
125
126         GtkWidget *(*error_function) (char *text);
127         int (*urlcheck_function) (GtkXText * xtext, char *word);
128
129         unsigned char scratch_buffer[4096];
130
131         unsigned int fixed_width_font:1;
132         unsigned int double_buffer:1;
133         unsigned int auto_indent:1;
134         unsigned int moving_separator:1;
135         unsigned int time_stamp:1;
136         unsigned int scrollbar_down:1;
137         unsigned int word_or_line_select:1;
138         unsigned int color_paste:1;
139         unsigned int thinline:1;
140         unsigned int parsing_backcolor:1;
141         unsigned int parsing_color:1;
142         unsigned int backcolor:1;
143         unsigned int button_down:1;
144         unsigned int bold:1;
145         unsigned int underline:1;
146         unsigned int reverse:1;
147         unsigned int transparent:1;
148         unsigned int separator:1;
149         unsigned int shaded:1;
150         unsigned int wordwrap:1;
151         unsigned int dont_render:1;
152         unsigned int cursor_hand:1;
153         unsigned int skip_fills:1;
154         unsigned int skip_border_fills:1;
155         unsigned int do_underline_fills_only:1;
156 };
157
158 struct _GtkXTextClass
159 {
160         GtkWidgetClass parent_class;
161         void (*word_click) (GtkXText * xtext, char *word, GdkEventButton * event);
162 };
163
164 GtkWidget *gtk_xtext_new (int indent, int separator);
165 guint gtk_xtext_get_type (void);
166 void gtk_xtext_append (GtkXText * xtext, char *text, int len);
167 void gtk_xtext_append_indent (GtkXText * xtext,
168                                                                                 char *left_text, int left_len,
169                                                                                 char *right_text, int right_len);
170 void gtk_xtext_set_font (GtkXText * xtext, GdkFont * font, char *name);
171 void gtk_xtext_set_background (GtkXText * xtext, GdkPixmap * pixmap,
172                                                                                  int trans, int shaded);
173 void gtk_xtext_set_palette (GtkXText * xtext, GdkColor palette[]);
174 void gtk_xtext_remove_lines (GtkXText * xtext, int lines, int refresh);
175 gchar *gtk_xtext_get_chars (GtkXText * xtext);
176 void gtk_xtext_refresh (GtkXText * xtext, int do_trans);
177 void gtk_xtext_thaw (GtkXText * xtext);
178 void gtk_xtext_freeze (GtkXText * xtext);
179 void *gtk_xtext_search (GtkXText * xtext, char *text, void *start);
180 char *gtk_xtext_strip_color (unsigned char *text, int len, char *outbuf, int *newlen);
181
182 #endif