From c3319565e84fd1e46aa6b04f2e544cb02c6e61e0 Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Wed, 17 May 2006 15:45:21 +0000 Subject: [PATCH] * add TnyStreamIface implementation using gtkhtml pmo-trunk-r80 --- src/modest-tny-stream-gtkhtml.c | 222 +++++++++++++++++++++++++++++++++++++++ src/modest-tny-stream-gtkhtml.h | 43 ++++++++ 2 files changed, 265 insertions(+) create mode 100644 src/modest-tny-stream-gtkhtml.c create mode 100644 src/modest-tny-stream-gtkhtml.h diff --git a/src/modest-tny-stream-gtkhtml.c b/src/modest-tny-stream-gtkhtml.c new file mode 100644 index 0000000..3f67145 --- /dev/null +++ b/src/modest-tny-stream-gtkhtml.c @@ -0,0 +1,222 @@ +/* modest-tny-stream-gtkhtml.c */ + +/* insert (c)/licensing information) */ + +#include "modest-tny-stream-gtkhtml.h" +#include +#include + +/* 'private'/'protected' functions */ +static void modest_tny_stream_gtkhtml_class_init (ModestTnyStreamGtkhtmlClass *klass); +static void modest_tny_stream_gtkhtml_init (ModestTnyStreamGtkhtml *obj); +static void modest_tny_stream_gtkhtml_finalize (GObject *obj); + +static void modest_tny_stream_gtkhml_iface_init (gpointer g_iface, gpointer iface_data); + +/* list my signals */ +enum { + /* MY_SIGNAL_1, */ + /* MY_SIGNAL_2, */ + LAST_SIGNAL +}; + +typedef struct _ModestTnyStreamGtkhtmlPrivate ModestTnyStreamGtkhtmlPrivate; +struct _ModestTnyStreamGtkhtmlPrivate { + GtkHTML *gtkhtml; + GtkHTMLStream *stream; +}; +#define MODEST_TNY_STREAM_GTKHTML_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ + MODEST_TYPE_TNY_STREAM_GTKHTML, \ + ModestTnyStreamGtkhtmlPrivate)) +/* globals */ +static GObjectClass *parent_class = NULL; + +/* uncomment the following if you have defined any signals */ +/* static guint signals[LAST_SIGNAL] = {0}; */ + +GType +modest_tny_stream_gtkhtml_get_type (void) +{ + static GType my_type = 0; + if (!my_type) { + static const GTypeInfo my_info = { + sizeof(ModestTnyStreamGtkhtmlClass), + NULL, /* base init */ + NULL, /* base finalize */ + (GClassInitFunc) modest_tny_stream_gtkhtml_class_init, + NULL, /* class finalize */ + NULL, /* class data */ + sizeof(ModestTnyStreamGtkhtml), + 1, /* n_preallocs */ + (GInstanceInitFunc) modest_tny_stream_gtkhtml_init, + }; + + static const GInterfaceInfo iface_info = { + (GInterfaceInitFunc) modest_tny_stream_gtkhml_iface_init, + NULL, /* interface_finalize */ + NULL /* interface_data */ + }; + + my_type = g_type_register_static (G_TYPE_OBJECT, + "ModestTnyStreamGtkhtml", + &my_info, 0); + + g_type_add_interface_static (my_type, TNY_TYPE_STREAM_IFACE, + &iface_info); + + } + return my_type; +} + +static void +modest_tny_stream_gtkhtml_class_init (ModestTnyStreamGtkhtmlClass *klass) +{ + GObjectClass *gobject_class; + gobject_class = (GObjectClass*) klass; + + parent_class = g_type_class_peek_parent (klass); + gobject_class->finalize = modest_tny_stream_gtkhtml_finalize; + + g_type_class_add_private (gobject_class, sizeof(ModestTnyStreamGtkhtmlPrivate)); +} + +static void +modest_tny_stream_gtkhtml_init (ModestTnyStreamGtkhtml *obj) +{ + ModestTnyStreamGtkhtmlPrivate *priv; + priv = MODEST_TNY_STREAM_GTKHTML_GET_PRIVATE(obj); + + priv->gtkhtml = NULL; + priv->stream = NULL; +} + +static void +modest_tny_stream_gtkhtml_finalize (GObject *obj) +{ + ModestTnyStreamGtkhtmlPrivate *priv; + + priv = MODEST_TNY_STREAM_GTKHTML_GET_PRIVATE(obj); + priv->gtkhtml = NULL; + priv->stream = NULL; +} + +GObject* +modest_tny_stream_gtkhtml_new (GtkHTML *gtkhtml) +{ + GObject *obj; + ModestTnyStreamGtkhtmlPrivate *priv; + + g_return_val_if_fail (gtkhtml, NULL); + + obj = G_OBJECT(g_object_new(MODEST_TYPE_TNY_STREAM_GTKHTML, NULL)); + priv = MODEST_TNY_STREAM_GTKHTML_GET_PRIVATE(obj); + + priv->gtkhtml = gtkhtml; + return obj; +} + + +/* the rest are interface functions */ + + +static ssize_t +gtkhtml_read (TnyStreamIface *self, char *buffer, size_t n) +{ + g_warning (__FUNCTION__); + return -1; /* we cannot read */ +} + + +static ssize_t +gtkhtml_write (TnyStreamIface *self, const char *buffer, size_t n) +{ + ModestTnyStreamGtkhtmlPrivate *priv; + + g_return_val_if_fail (self, 0); + + priv = MODEST_TNY_STREAM_GTKHTML_GET_PRIVATE(self); + if (!priv->stream) + priv->stream = gtk_html_begin (GTK_HTML(priv->gtkhtml)); + + gtk_html_stream_write (priv->stream, buffer, n); + + return n; /* hmmm */ +} + + +static gint +gtkhtml_flush (TnyStreamIface *self) +{ + ModestTnyStreamGtkhtmlPrivate *priv; + g_return_val_if_fail (self, 0); + priv = MODEST_TNY_STREAM_GTKHTML_GET_PRIVATE(self); + + gtk_html_flush (GTK_HTML(priv->gtkhtml)); + return 0; +} + + +static gint +gtkhtml_close (TnyStreamIface *self) +{ + ModestTnyStreamGtkhtmlPrivate *priv; + g_return_val_if_fail (self, 0); + priv = MODEST_TNY_STREAM_GTKHTML_GET_PRIVATE(self); + + gtk_html_stream_close (priv->stream, GTK_HTML_STREAM_OK); + priv->stream = NULL; + + return 0; +} + + +static gboolean +gtkhtml_eos (TnyStreamIface *self) +{ + g_warning (__FUNCTION__); + return TRUE; +} + + + +static gint +gtkhtml_reset (TnyStreamIface *self) +{ + ModestTnyStreamGtkhtmlPrivate *priv; + g_return_val_if_fail (self, 0); + priv = MODEST_TNY_STREAM_GTKHTML_GET_PRIVATE(self); + + if (priv->stream) { + gtk_html_end (priv->gtkhtml, priv->stream, GTK_HTML_STREAM_OK); + priv->stream = NULL; + } + + return 0; +} + + +static ssize_t +gtkhtml_write_to_stream (TnyStreamIface *self, TnyStreamIface *output) +{ + g_warning (__FUNCTION__); + return 0; +} + + +static void +modest_tny_stream_gtkhml_iface_init (gpointer g_iface, gpointer iface_data) +{ + TnyStreamIfaceClass *klass; + + g_return_if_fail (g_iface); + + klass = (TnyStreamIfaceClass *)g_iface; + + klass->read_func = gtkhtml_read; + klass->write_func = gtkhtml_write; + klass->flush_func = gtkhtml_flush; + klass->close_func = gtkhtml_close; + klass->eos_func = gtkhtml_eos; + klass->reset_func = gtkhtml_reset; + klass->write_to_stream_func = gtkhtml_write_to_stream; +} diff --git a/src/modest-tny-stream-gtkhtml.h b/src/modest-tny-stream-gtkhtml.h new file mode 100644 index 0000000..02241ff --- /dev/null +++ b/src/modest-tny-stream-gtkhtml.h @@ -0,0 +1,43 @@ +/* modest-tny-stream-gtkhtml.h */ +/* insert (c)/licensing information) */ + +#ifndef __MODEST_TNY_STREAM_GTKHTML_H__ +#define __MODEST_TNY_STREAM_GTKHTML_H__ + +#include +#include +#include + +G_BEGIN_DECLS + +/* convenience macros */ +#define MODEST_TYPE_TNY_STREAM_GTKHTML (modest_tny_stream_gtkhtml_get_type()) +#define MODEST_TNY_STREAM_GTKHTML(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_TNY_STREAM_GTKHTML,ModestTnyStreamGtkhtml)) +#define MODEST_TNY_STREAM_GTKHTML_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_TNY_STREAM_GTKHTML,GObject)) +#define MODEST_IS_TNY_STREAM_GTKHTML(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_TNY_STREAM_GTKHTML)) +#define MODEST_IS_TNY_STREAM_GTKHTML_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_TNY_STREAM_GTKHTML)) +#define MODEST_TNY_STREAM_GTKHTML_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_TNY_STREAM_GTKHTML,ModestTnyStreamGtkhtmlClass)) + +typedef struct _ModestTnyStreamGtkhtml ModestTnyStreamGtkhtml; +typedef struct _ModestTnyStreamGtkhtmlClass ModestTnyStreamGtkhtmlClass; + +struct _ModestTnyStreamGtkhtml { + GObject parent; +}; + +struct _ModestTnyStreamGtkhtmlClass { + GObjectClass parent_class; + /* insert signal callback declarations, eg. */ + /* void (* my_event) (ModestTnyStreamGtkhtml* obj); */ +}; + +/* member functions */ +GType modest_tny_stream_gtkhtml_get_type (void) G_GNUC_CONST; + +GObject* modest_tny_stream_gtkhtml_new (GtkHTML* gtkhtml); + + +G_END_DECLS + +#endif /* __MODEST_TNY_STREAM_GTKHTML_H__ */ + -- 1.7.9.5