From eac1b77c2ff04f5630409500f7582a010a1b3fd7 Mon Sep 17 00:00:00 2001 From: Iain Holmes Date: Thu, 5 Oct 2000 00:27:52 +0000 Subject: Add the executive summary stuff. Hopefully nothing is broken. svn path=/trunk/; revision=5731 --- executive-summary/component/e-summary-factory.c | 255 ++++++++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 executive-summary/component/e-summary-factory.c (limited to 'executive-summary/component/e-summary-factory.c') 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 + * Iain Holmes + * + * 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 +#endif + +#include +#include +#include +#include +#include + +#include + +#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 +#include + +#include +#include + +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; +} -- cgit v1.2.3