00001
00024 #ifndef __GTK_IMHTML_H
00025 #define __GTK_IMHTML_H
00026
00027 #include <gdk/gdk.h>
00028 #include <gtk/gtktextview.h>
00029 #include <gtk/gtktooltips.h>
00030 #include <gtk/gtkimage.h>
00031
00032 #ifdef __cplusplus
00033 extern "C" {
00034 #endif
00035
00036 #define GTK_TYPE_IMHTML (gtk_imhtml_get_type ())
00037 #define GTK_IMHTML(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_IMHTML, GtkIMHtml))
00038 #define GTK_IMHTML_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_IMHTML, GtkIMHtmlClass))
00039 #define GTK_IS_IMHTML(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_IMHTML))
00040 #define GTK_IS_IMHTML_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_IMHTML))
00041 #define GTK_IMHTML_SCALABLE(obj) ((GtkIMHtmlScalable *)obj)
00042
00043 typedef struct _GtkIMHtml GtkIMHtml;
00044 typedef struct _GtkIMHtmlClass GtkIMHtmlClass;
00045 typedef struct _GtkIMHtmlFontDetail GtkIMHtmlFontDetail;
00046 typedef struct _GtkSmileyTree GtkSmileyTree;
00047 typedef struct _GtkIMHtmlSmiley GtkIMHtmlSmiley;
00048 typedef struct _GtkIMHtmlScalable GtkIMHtmlScalable;
00049 typedef struct _GtkIMHtmlImage GtkIMHtmlImage;
00050 typedef struct _GtkIMHtmlHr GtkIMHtmlHr;
00051
00052 typedef enum {
00053 GTK_IMHTML_BOLD = 1 << 0,
00054 GTK_IMHTML_ITALIC = 1 << 1,
00055 GTK_IMHTML_UNDERLINE = 1 << 2,
00056 GTK_IMHTML_GROW = 1 << 3,
00057 GTK_IMHTML_SHRINK = 1 << 4,
00058 GTK_IMHTML_FACE = 1 << 5,
00059 GTK_IMHTML_FORECOLOR = 1 << 6,
00060 GTK_IMHTML_BACKCOLOR = 1 << 7,
00061 GTK_IMHTML_LINK = 1 << 8,
00062 GTK_IMHTML_IMAGE = 1 << 9,
00063 GTK_IMHTML_SMILEY = 1 << 10,
00064 GTK_IMHTML_ALL = -1
00065 } GtkIMHtmlButtons;
00066
00067 struct _GtkIMHtml {
00068 GtkTextView text_view;
00069 GtkTextBuffer *text_buffer;
00070 GtkTextMark *scrollpoint;
00071 GdkCursor *hand_cursor;
00072 GdkCursor *arrow_cursor;
00073 GdkCursor *text_cursor;
00074 GHashTable *smiley_data;
00075 GtkSmileyTree *default_smilies;
00076 char *protocol_name;
00077
00078 gboolean show_smileys;
00079 gboolean show_comments;
00080
00081 gboolean html_shortcuts;
00082 gboolean smiley_shortcuts;
00083
00084 GtkWidget *tip_window;
00085 char *tip;
00086 guint tip_timer;
00087
00088 GList *scalables;
00089 GdkRectangle old_rect;
00090
00091 gchar *search_string;
00092
00093 gboolean editable;
00094 GtkIMHtmlButtons format_functions;
00095 gboolean wbfo;
00096
00097 gint insert_offset;
00098
00099 struct {
00100 gboolean bold:1;
00101 gboolean italic:1;
00102 gboolean underline:1;
00103 gchar *forecolor;
00104 gchar *backcolor;
00105 gchar *fontface;
00106 int fontsize;
00107 GtkTextTag *link;
00108 } edit;
00109
00110 double zoom;
00111 int original_fsize;
00112
00113 char *clipboard_text_string;
00114 char *clipboard_html_string;
00115 };
00116
00117 struct _GtkIMHtmlClass {
00118 GtkTextViewClass parent_class;
00119
00120 void (*url_clicked)(GtkIMHtml *, const gchar *);
00121 void (*buttons_update)(GtkIMHtml *, GtkIMHtmlButtons);
00122 void (*toggle_format)(GtkIMHtml *, GtkIMHtmlButtons);
00123 void (*clear_format)(GtkIMHtml *);
00124 void (*update_format)(GtkIMHtml *);
00125 };
00126
00127 struct _GtkIMHtmlFontDetail {
00128 gushort size;
00129 gchar *face;
00130 gchar *fore;
00131 gchar *back;
00132 gchar *sml;
00133 gboolean underline;
00134 };
00135
00136 struct _GtkSmileyTree {
00137 GString *values;
00138 GtkSmileyTree **children;
00139 GtkIMHtmlSmiley *image;
00140 };
00141
00142 struct _GtkIMHtmlSmiley {
00143 gchar *smile;
00144 gchar *file;
00145 GdkPixbufAnimation *icon;
00146 gboolean hidden;
00147 };
00148
00149 struct _GtkIMHtmlScalable {
00150 void (*scale)(struct _GtkIMHtmlScalable *, int, int);
00151 void (*add_to)(struct _GtkIMHtmlScalable *, GtkIMHtml *, GtkTextIter *);
00152 void (*free)(struct _GtkIMHtmlScalable *);
00153 };
00154
00155 struct _GtkIMHtmlImage {
00156 GtkIMHtmlScalable scalable;
00157 GtkImage *image;
00158 GdkPixbuf *pixbuf;
00159 GtkTextMark *mark;
00160 gchar *filename;
00161 int width;
00162 int height;
00163 };
00164
00165 struct _GtkIMHtmlHr {
00166 GtkIMHtmlScalable scalable;
00167 GtkWidget *sep;
00168 };
00169
00170 typedef enum {
00171 GTK_IMHTML_NO_COLOURS = 1 << 0,
00172 GTK_IMHTML_NO_FONTS = 1 << 1,
00173 GTK_IMHTML_NO_COMMENTS = 1 << 2,
00174 GTK_IMHTML_NO_TITLE = 1 << 3,
00175 GTK_IMHTML_NO_NEWLINE = 1 << 4,
00176 GTK_IMHTML_NO_SIZES = 1 << 5,
00177 GTK_IMHTML_NO_SCROLL = 1 << 6,
00178 GTK_IMHTML_RETURN_LOG = 1 << 7,
00179 GTK_IMHTML_USE_POINTSIZE = 1 << 8
00180 } GtkIMHtmlOptions;
00181
00182 GtkType gtk_imhtml_get_type (void);
00183 GtkWidget* gtk_imhtml_new (void *, void *);
00184
00185 void gtk_imhtml_set_adjustments (GtkIMHtml *imhtml,
00186 GtkAdjustment *hadj,
00187 GtkAdjustment *vadj);
00188
00189 void gtk_imhtml_associate_smiley (GtkIMHtml *imhtml,
00190 gchar *sml, GtkIMHtmlSmiley *smiley);
00191
00192 void gtk_imhtml_remove_smileys (GtkIMHtml *imhtml);
00193
00194 void gtk_imhtml_show_smileys (GtkIMHtml *imhtml, gboolean show);
00195
00196 void gtk_imhtml_show_comments (GtkIMHtml *imhtml, gboolean show);
00197
00198 void gtk_imhtml_html_shortcuts(GtkIMHtml *imhtml, gboolean allow);
00199
00200 void gtk_imhtml_smiley_shortcuts (GtkIMHtml *imhtml, gboolean allow);
00201
00202 void gtk_imhtml_set_protocol_name(GtkIMHtml *imhtml, gchar *protocol_name);
00203
00204 #define gtk_imhtml_append_text(x, y, z) \
00205 gtk_imhtml_append_text_with_images(x, y, z, NULL)
00206
00207 void gtk_imhtml_append_text_with_images (GtkIMHtml *imhtml,
00208 const gchar *text,
00209 GtkIMHtmlOptions options,
00210 GSList *images);
00211 void gtk_imhtml_insert_html_at_iter(GtkIMHtml *imhtml,
00212 const gchar *text,
00213 GtkIMHtmlOptions options,
00214 GtkTextIter *iter);
00215 void gtk_imhtml_scroll_to_end(GtkIMHtml *imhtml);
00216 void gtk_imhtml_clear (GtkIMHtml *imhtml);
00217 void gtk_imhtml_page_up (GtkIMHtml *imhtml);
00218 void gtk_imhtml_page_down (GtkIMHtml *imhtml);
00219
00220 void gtk_imhtml_font_zoom(GtkIMHtml *imhtml, double zoom);
00221
00222 GtkIMHtmlScalable *gtk_imhtml_scalable_new();
00223 GtkIMHtmlScalable *gtk_imhtml_image_new(GdkPixbuf *img, const gchar *filename);
00224 void gtk_imhtml_image_free(GtkIMHtmlScalable *);
00225 void gtk_imhtml_image_scale(GtkIMHtmlScalable *, int, int);
00226 void gtk_imhtml_image_add_to(GtkIMHtmlScalable *, GtkIMHtml *, GtkTextIter *);
00227
00228 GtkIMHtmlScalable *gtk_imhtml_hr_new();
00229 void gtk_imhtml_hr_free(GtkIMHtmlScalable *);
00230 void gtk_imhtml_hr_scale(GtkIMHtmlScalable *, int, int);
00231 void gtk_imhtml_hr_add_to(GtkIMHtmlScalable *, GtkIMHtml *, GtkTextIter *);
00232
00233
00234 gboolean gtk_imhtml_search_find(GtkIMHtml *imhtml, const gchar *text);
00235 void gtk_imhtml_search_clear(GtkIMHtml *imhtml);
00236
00237
00238 void gtk_imhtml_set_editable(GtkIMHtml *imhtml, gboolean editable);
00239 void gtk_imhtml_set_whole_buffer_formatting_only(GtkIMHtml *imhtml, gboolean wbfo);
00240 void gtk_imhtml_set_format_functions(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons);
00241 void gtk_imhtml_get_current_format(GtkIMHtml *imhtml, gboolean *bold, gboolean *italic, gboolean *underline);
00242 gboolean gtk_imhtml_get_editable(GtkIMHtml *imhtml);
00243 gboolean gtk_imhtml_toggle_bold(GtkIMHtml *imhtml);
00244 gboolean gtk_imhtml_toggle_italic(GtkIMHtml *imhtml);
00245 gboolean gtk_imhtml_toggle_underline(GtkIMHtml *imhtml);
00246 gboolean gtk_imhtml_toggle_forecolor(GtkIMHtml *imhtml, const char *color);
00247 gboolean gtk_imhtml_toggle_backcolor(GtkIMHtml *imhtml, const char *color);
00248 gboolean gtk_imhtml_toggle_fontface(GtkIMHtml *imhtml, const char *face);
00249 void gtk_imhtml_toggle_link(GtkIMHtml *imhtml, const char *url);
00250 void gtk_imhtml_insert_link(GtkIMHtml *imhtml, GtkTextMark *mark, const char *url, const char *text);
00251 void gtk_imhtml_insert_smiley(GtkIMHtml *imhtml, const char *sml, char *smiley);
00252 void gtk_imhtml_insert_smiley_at_iter(GtkIMHtml *imhtml, const char *sml, char *smiley, GtkTextIter *iter);
00253 void gtk_imhtml_font_set_size(GtkIMHtml *imhtml, gint size);
00254 void gtk_imhtml_font_shrink(GtkIMHtml *imhtml);
00255 void gtk_imhtml_font_grow(GtkIMHtml *imhtml);
00256 char *gtk_imhtml_get_markup_range(GtkIMHtml *imhtml, GtkTextIter *start, GtkTextIter *end);
00257 char *gtk_imhtml_get_markup(GtkIMHtml *imhtml);
00258
00259
00260 char **gtk_imhtml_get_markup_lines(GtkIMHtml *imhtml);
00261 char *gtk_imhtml_get_text(GtkIMHtml *imhtml, GtkTextIter *start, GtkTextIter *stop);
00262
00263 #ifdef __cplusplus
00264 }
00265 #endif
00266
00267 #endif