aboutsummaryrefslogtreecommitdiffstats
path: root/executive-summary/component/e-summary-factory.c
diff options
context:
space:
mode:
Diffstat (limited to 'executive-summary/component/e-summary-factory.c')
-rw-r--r--executive-summary/component/e-summary-factory.c255
1 files changed, 255 insertions, 0 deletions
diff --git a/executive-summary/component/e-summary-factory.c b/executive-summary/component/e-summary-factory.c
new file mode 100644
index 0000000000..c87985be34
--- /dev/null
+++ b/executive-summary/component/e-summary-factory.c
@@ -0,0 +1,255 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/* e-summary-factory.c
+ *
+ * Authors: Ettore Perazzoli <ettore@helixcode.com>
+ * Iain Holmes <iain@helixcode.com>
+ *
+ * Copyright (C) 2000 Helix Code, Inc.
+ *
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gnome.h>
+#include <bonobo/bonobo-main.h>
+#include <bonobo/bonobo-object.h>
+#include <bonobo/bonobo-generic-factory.h>
+#include <bonobo/bonobo-control.h>
+
+#include <liboaf/liboaf.h>
+
+#include "gal/util/e-util.h"
+#include "e-util/e-gui-utils.h"
+
+#include "e-summary-factory.h"
+
+#include "e-summary.h"
+#include "Evolution.h"
+
+#include <executive-summary-component-client.h>
+#include <Executive-Summary.h>
+
+#include <executive-summary.h>
+#include <executive-summary-component.h>
+
+static GList *control_list = NULL;
+
+GtkWidget* embed_service (GtkWidget *widget,
+ ESummary *esummary);
+static void update (ExecutiveSummary *summary,
+ const Evolution_SummaryComponent component,
+ const char *html,
+ ESummary *esummary);
+static void set_title (ExecutiveSummary *summary,
+ const Evolution_SummaryComponent component,
+ const char *title,
+ void *closure);
+static void flash (ExecutiveSummary *summary,
+ const Evolution_SummaryComponent component,
+ void *closure);
+
+BonoboUIVerb verbs[] = {
+ BONOBO_UI_VERB ("AddService", embed_service),
+ BONOBO_UI_VERB_END
+};
+
+static void
+set_pixmap (Bonobo_UIContainer container,
+ const char *xml_path,
+ const char *icon)
+{
+ char *path;
+ GdkPixbuf *pixbuf;
+
+ path = g_concat_dir_and_file (EVOLUTION_DATADIR "/images/evolution/buttons", icon);
+
+ pixbuf = gdk_pixbuf_new_from_file (path);
+ g_return_if_fail (pixbuf != NULL);
+
+ bonobo_ui_util_set_pixbuf (container, xml_path, pixbuf);
+ gdk_pixbuf_unref (pixbuf);
+ g_free (path);
+}
+
+static void
+update_pixmaps (Bonobo_UIContainer container)
+{
+ set_pixmap (container, "/Toolbar/AddService", "add-service.png");
+}
+
+static void
+control_activate (BonoboControl *control,
+ BonoboUIHandler *uih,
+ ESummary *esummary)
+{
+ BonoboUIComponent *component;
+ Bonobo_UIContainer container;
+
+ container = bonobo_control_get_remote_ui_handler (control);
+ bonobo_ui_handler_set_container (uih, container);
+ bonobo_object_release_unref (container, NULL);
+
+ g_assert (container == bonobo_ui_compat_get_container (uih));
+ g_return_if_fail (container != CORBA_OBJECT_NIL);
+
+ component = bonobo_ui_compat_get_component (uih);
+ bonobo_ui_component_add_verb_list_with_data (component, verbs, esummary);
+
+ bonobo_ui_container_freeze (container, NULL);
+
+ bonobo_ui_util_set_ui (component, container, EVOLUTION_DATADIR,
+ "evolution-executive-summary.xml",
+ "evolution-executive-summary");
+
+ update_pixmaps (container);
+ bonobo_ui_container_thaw (container, NULL);
+}
+
+static void
+control_deactivate (BonoboControl *control,
+ BonoboUIHandler *uih,
+ ESummary *esummary)
+{
+ bonobo_ui_component_rm (bonobo_ui_compat_get_component (uih),
+ bonobo_ui_compat_get_container (uih), "/", NULL);
+ bonobo_ui_handler_unset_container (uih);
+}
+
+static void
+control_activate_cb (BonoboControl *control,
+ gboolean activate,
+ gpointer user_data)
+{
+ BonoboUIHandler *uih;
+
+ uih = bonobo_control_get_ui_handler (control);
+ g_assert (uih);
+
+ if (activate)
+ control_activate (control, uih, user_data);
+ else
+ control_deactivate (control, uih, user_data);
+}
+
+static void
+control_destroy_cb (BonoboControl *control,
+ gpointer user_data)
+{
+ GtkWidget *esummary = user_data;
+
+ control_list = g_list_remove (control_list, control);
+
+ gtk_object_destroy (GTK_OBJECT (esummary));
+}
+
+static void
+update (ExecutiveSummary *summary,
+ const Evolution_SummaryComponent component,
+ const char *html,
+ ESummary *esummary)
+{
+ e_summary_update_window (esummary, summary, html);
+}
+
+static void
+set_title (ExecutiveSummary *summary,
+ const Evolution_SummaryComponent component,
+ const char *title,
+ void *closure)
+{
+ g_print ("Setting title to %s\n", title);
+}
+
+static void
+flash (ExecutiveSummary *summary,
+ const Evolution_SummaryComponent component,
+ void *closure)
+{
+ g_print ("FLASH!\n");
+}
+
+/* A ********very********
+ temporary function to embed something
+*/
+GtkWidget*
+embed_service (GtkWidget *widget,
+ ESummary *esummary)
+{
+ ExecutiveSummaryComponentClient *client;
+ ExecutiveSummary *summary;
+ char *required_interfaces[2] = {"IDL:Evolution:SummaryComponent:1.0",
+ NULL};
+ char *obj_id;
+ char *title;
+ char *html;
+
+ obj_id = bonobo_selector_select_id ("Select a service",
+ (const char **) required_interfaces);
+ if (obj_id == NULL)
+ return NULL;
+
+ client = executive_summary_component_client_new (obj_id);
+
+ if (client == NULL)
+ return NULL;
+
+ /* Set the owner */
+ summary = executive_summary_new (set_title, flash, update, esummary);
+ executive_summary_component_client_set_owner (client, summary);
+
+ /* Create view */
+ html = executive_summary_component_client_create_html_view (client, &title);
+ e_summary_add_html_service (esummary, summary, html, title);
+ g_free (html);
+
+ e_summary_rebuild_page (esummary);
+ return NULL;
+}
+
+BonoboControl *
+e_summary_factory_new_control (const char *uri,
+ const Evolution_Shell shell)
+{
+ BonoboControl *control;
+ GtkWidget *esummary;
+
+ esummary = e_summary_new (shell);
+ if (esummary == NULL)
+ return NULL;
+
+ gtk_widget_show (esummary);
+
+ control = bonobo_control_new (esummary);
+
+ if (control == NULL) {
+ gtk_object_destroy (GTK_OBJECT (esummary));
+ return NULL;
+ }
+
+ gtk_signal_connect (GTK_OBJECT (control), "activate",
+ control_activate_cb, esummary);
+
+ gtk_signal_connect (GTK_OBJECT (control), "destroy",
+ control_destroy_cb, esummary);
+
+ control_list = g_list_prepend (control_list, control);
+
+ e_summary_rebuild_page (E_SUMMARY (esummary));
+ return control;
+}