aboutsummaryrefslogtreecommitdiffstats
path: root/tests/ui-tests/message-browser.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui-tests/message-browser.c')
-rw-r--r--tests/ui-tests/message-browser.c155
1 files changed, 155 insertions, 0 deletions
diff --git a/tests/ui-tests/message-browser.c b/tests/ui-tests/message-browser.c
new file mode 100644
index 0000000000..b0e20288df
--- /dev/null
+++ b/tests/ui-tests/message-browser.c
@@ -0,0 +1,155 @@
+/*--------------------------------*-C-*---------------------------------*
+ *
+ * Copyright 2000, Matt Loper <matt@helixcode.com>.
+ *
+ * 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 Street #330, Boston, MA 02111-1307, USA.
+ *
+ *----------------------------------------------------------------------*/
+
+#include <gnome.h>
+#include <camel/camel.h>
+#include <camel/camel-mime-message.h>
+#include <camel/camel-stream.h>
+#include <camel/camel-stream-fs.h>
+#include <camel/gmime-utils.h>
+
+static void
+handle_tree_item (CamelDataWrapper* object, GtkWidget* tree_ctrl)
+{
+ GtkWidget* tree_item;
+ gchar* label = gmime_content_field_get_mime_type (object->mime_type);
+
+ tree_item = gtk_tree_item_new_with_label (label);
+ gtk_tree_append (GTK_TREE (tree_ctrl), tree_item);
+
+ if (CAMEL_IS_MULTIPART (object))
+ {
+ CamelMultipart* multipart = CAMEL_MULTIPART (object);
+ GtkWidget* subtree;
+ int max_multiparts = camel_multipart_get_number (multipart);
+ int i;
+
+ g_print ("found a multipart w/ %d parts\n", max_multiparts);
+
+ if (max_multiparts > 0) {
+ subtree = gtk_tree_new();
+ gtk_tree_item_set_subtree (GTK_TREE_ITEM(tree_item),
+ GTK_WIDGET (subtree));
+ }
+
+ for (i = 0; i < max_multiparts; i++) {
+ CamelMimeBodyPart* body_part =
+ camel_multipart_get_part (multipart, i);
+
+ g_print ("handling part %d\n", i);
+ handle_tree_item (CAMEL_DATA_WRAPPER (body_part),
+ tree_item);
+ }
+ }
+}
+
+
+GtkWidget*
+get_message_tree_ctrl (CamelMimeMessage* message)
+{
+ GtkWidget* tree_ctrl = gtk_tree_new ();
+ CamelDataWrapper* message_contents =
+ camel_medium_get_content_object (CAMEL_MEDIUM (message));
+ int i;
+/*
+ * Set up the scroll window
+ */
+ GtkWidget* scroll_wnd = gtk_scrolled_window_new (NULL,NULL);
+ gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scroll_wnd),
+ tree_ctrl);
+ gtk_widget_set_usize (scroll_wnd, 150, 200);
+
+ handle_tree_item (message_contents, tree_ctrl);
+
+#if 0
+ for (i = 0; i < 10; i++)
+ {
+ GtkWidget* tree_item =
+ gtk_tree_item_new_with_label ("hello");
+ GtkWidget* subtree = gtk_tree_new();
+ gtk_tree_append (GTK_TREE (tree_ctrl), tree_item);
+ gtk_tree_item_set_subtree (tree_item, subtree);
+ }
+#endif
+
+ return scroll_wnd;
+}
+
+static CamelMimeMessage*
+filename_to_camel_msg (gchar* filename)
+{
+ CamelMimeMessage* message;
+ CamelStream* input_stream;
+
+ camel_init();
+
+ message = camel_mime_message_new_with_session (
+ (CamelSession *)NULL);
+ input_stream = camel_stream_fs_new_with_name (
+ filename, CAMEL_STREAM_FS_READ);
+ camel_data_wrapper_construct_from_stream (
+ CAMEL_DATA_WRAPPER (message), input_stream);
+
+ camel_stream_close (input_stream);
+
+ return message;
+}
+
+
+static void
+print_usage_and_quit()
+{
+ g_print ("Usage: message-browser [FILENAME]\n\n");
+ g_print ("\tWhere FILENAME is the name of a message\n");
+ exit (0);
+}
+
+
+int
+main (int argc, char *argv[])
+{
+ GtkWidget* app;
+ CamelMimeMessage* message;
+
+ if (argc != 2)
+ print_usage_and_quit();
+
+ gnome_init ("MessageBrowser", "1.0", argc, argv);
+
+ app = gnome_app_new ("Message Browser Test", NULL);
+
+ message = filename_to_camel_msg (argv[1]);
+
+#if 0
+ if (!message) {
+ g_print ("Couldn't open message \"%s\", bailing...\n",
+ argv[1]);
+ exit (0);
+ }
+#endif
+ gnome_app_set_contents (GNOME_APP (app),
+ get_message_tree_ctrl (message));
+
+ gtk_widget_show_all (app);
+ gtk_signal_connect (GTK_OBJECT (app), "destroy",
+ GTK_SIGNAL_FUNC(gtk_main_quit),
+ &app);
+ gtk_main();
+}