diff options
Diffstat (limited to 'mail/html-stream.c')
-rw-r--r-- | mail/html-stream.c | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/mail/html-stream.c b/mail/html-stream.c new file mode 100644 index 0000000000..250e98500a --- /dev/null +++ b/mail/html-stream.c @@ -0,0 +1,107 @@ +/* + * html-stream.c: A CamelStream class that feeds data into a GtkHTML widget + * + * Author: + * Miguel de Icaza (miguel@helixcode.com) + * + * (C) 2000 Helix Code, Inc. + */ +#include <config.h> +#include "html-stream.h" +#include "e-util/e-util.h" + +#define PARENT_TYPE camel_stream_get_type () + +/* + * CamelStream::read method + * + * Return 0 bytes read, as this is a write-only stream + */ +static gint +html_stream_read (CamelStream *stream, gchar *buffer, gint n) +{ + return 0; +} + +/* + * CamelStream::write method + * + * Writes @buffer into the HTML widget + */ +static gint +html_stream_write (CamelStream *stream, const gchar *buffer, gint n) +{ + HTMLStream *html_stream = HTML_STREAM (stream); + + gtk_html_write (html_stream->gtk_html, html_stream->gtk_html_stream, buffer, n); +} + +/* + * CamelStream::available method + * + * Return 0, as this is only a write-stream + */ +static gint +html_stream_available (CamelStream *stream) +{ + return 0; +} + +/* + * CamelStream::eos method. + * + * We just return TRUE, as this is not a read-stream + */ +static +html_stream_eos (CamelStream *stream) +{ + return TRUE; +} + +static void +html_stream_close (CamelStream *stream) +{ + HTMLStream *html_stream = HTML_STREAM (stream); + + gtk_html_end (html_stream->gtk_html); +} + +static void +html_stream_class_init (GtkObjectClass *object_class) +{ + HTMLStreamClass *stream_class = (HTMLStreamClass *) object_class; + + html_stream_parent_class = gtk_type_class (PARENT_TYPE); + + object_class->destory = html_stream_destroy; + + stream_class->read = html_stream_read; + stream_class->write = html_stream_write; + stream_class->available = html_stream_available; + stream_class->eos = html_stream_eos; + stream_class->close = html_stream_close; +} + +CamelStream * +html_stream_new (GtkHTML *html) +{ + HTMLStream *html_stream; + + g_return_val_if_fail (html != NULL, NULL); + g_return_val_if_fail (GTK_IS_HTML (html), NULL); + + html_stream = gtk_type_new (html_stream_get_type ()); + + gtk_object_ref (GTK_OBJECT (html)); + + html_stream->gtk_html_stream = gtk_html_begin (html, NULL); + gtk_html_parse (html); + + html_stream->gtk_html = html; + + return CAMEL_STREAM (html_stream); +} + +E_MAKE_TYPE (html_stream, "HTMLStream", HTMLStream, html_stream_class_init, NULL, PARENT_TYPE); + + |