0.8.11claws13
[claws.git] / src / plugins / mathml_viewer / mathml_viewer.c
diff --git a/src/plugins/mathml_viewer/mathml_viewer.c b/src/plugins/mathml_viewer/mathml_viewer.c
new file mode 100644 (file)
index 0000000..acd2226
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto and the Sylpheed-Claws Team
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <unistd.h>
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gtkmathview/gtkmathview.h>
+
+#include "common/plugin.h"
+#include "common/utils.h"
+#include "mimeview.h"
+
+typedef struct _MathMLViewer MathMLViewer;
+
+struct _MathMLViewer
+{
+       MimeViewer mimeviewer;
+       
+       GtkScrolledWindow       *scrollwin;;
+       GtkMathView             *mathview;
+       gchar                   *filename;
+};
+
+static MimeViewerFactory mathml_viewer_factory;
+
+static GtkWidget *mathml_get_widget(MimeViewer *_viewer)
+{
+       MathMLViewer *viewer = (MathMLViewer *) _viewer;
+
+       debug_print("mathml_get_widget\n");
+
+       return GTK_WIDGET(viewer->scrollwin);
+}
+
+static void mathml_show_mimepart(MimeViewer *_viewer, const gchar *infile, MimeInfo *partinfo)
+{
+       MathMLViewer *viewer = (MathMLViewer *) _viewer;
+
+       debug_print("mathml_show_mimepart\n");
+
+       if (viewer->filename != NULL) {
+               unlink(viewer->filename);
+               g_free(viewer->filename);
+       }
+
+       viewer->filename = procmime_get_tmp_file_name(partinfo);
+       
+       if (!(procmime_get_part(viewer->filename, infile, partinfo) < 0)) {
+               gchar *uri;
+               
+               uri = g_strconcat("file://", viewer->filename, NULL);
+               gtk_math_view_load_uri(GTK_MATH_VIEW(viewer->mathview), uri);
+               g_free(uri);
+       }
+}
+
+static void mathml_clear_viewer(MimeViewer *_viewer)
+{
+       MathMLViewer *viewer = (MathMLViewer *) _viewer;
+
+       debug_print("mathml_clear_viewer\n");
+
+       gtk_math_view_unload(viewer->mathview);
+}
+
+static void mathml_destroy_viewer(MimeViewer *_viewer)
+{
+       MathMLViewer *viewer = (MathMLViewer *) _viewer;
+
+       debug_print("mathml_destroy_viewer\n");
+
+       gtk_widget_unref(GTK_WIDGET(viewer->scrollwin));
+       unlink(viewer->filename);
+       g_free(viewer->filename);
+       g_free(viewer);
+}
+
+static MimeViewer *mathml_viewer_create()
+{
+       MathMLViewer *viewer;
+
+       debug_print("mathml_viewer_create\n");
+       
+       viewer = g_new0(MathMLViewer, 1);
+       viewer->mimeviewer.factory = &mathml_viewer_factory;
+
+       viewer->mimeviewer.get_widget = mathml_get_widget;
+       viewer->mimeviewer.show_mimepart = mathml_show_mimepart;
+       viewer->mimeviewer.clear_viewer = mathml_clear_viewer;
+       viewer->mimeviewer.destroy_viewer = mathml_destroy_viewer;      
+
+       viewer->scrollwin = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL));
+       gtk_widget_show(GTK_WIDGET(viewer->scrollwin));
+       gtk_widget_ref(GTK_WIDGET(viewer->scrollwin));
+       gtk_scrolled_window_set_policy(viewer->scrollwin, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+       viewer->mathview = GTK_MATH_VIEW(gtk_math_view_new(NULL, NULL));
+       gtk_widget_show(GTK_WIDGET(viewer->mathview));
+       viewer->filename = NULL;
+       gtk_container_add(GTK_CONTAINER(viewer->scrollwin), GTK_WIDGET(viewer->mathview));
+
+       return (MimeViewer *) viewer;
+}
+
+static MimeViewerFactory mathml_viewer_factory =
+{
+       "text/mathml",
+       0,
+       
+       mathml_viewer_create,
+};
+
+gint plugin_init(gchar **error)
+{
+       mimeview_register_viewer_factory(&mathml_viewer_factory);
+       return 0;       
+}
+
+void plugin_done()
+{
+}
+
+const gchar *plugin_name()
+{
+       return "MathML Viewer";
+}
+
+const gchar *plugin_desc()
+{
+       return "";
+}