diff options
Diffstat (limited to 'addressbook/gui/component/select-names/e-simple-card-bonobo.c')
-rw-r--r-- | addressbook/gui/component/select-names/e-simple-card-bonobo.c | 269 |
1 files changed, 269 insertions, 0 deletions
diff --git a/addressbook/gui/component/select-names/e-simple-card-bonobo.c b/addressbook/gui/component/select-names/e-simple-card-bonobo.c new file mode 100644 index 0000000000..9834eddd83 --- /dev/null +++ b/addressbook/gui/component/select-names/e-simple-card-bonobo.c @@ -0,0 +1,269 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ +/* e-simple-card-bonobo.c + * + * Copyright (C) 2000 Ximian, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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. + * + * Authors: + * Ettore Perazzoli <ettore@ximian.com> + * Chris Lahey <clahey@ximian.com> + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "e-simple-card-bonobo.h" + +#include <gal/util/e-util.h> + +#include "Evolution-Addressbook-SelectNames.h" + + +#define PARENT_TYPE bonobo_object_get_type () +static BonoboObjectClass *parent_class = NULL; + +struct _ESimpleCardBonoboPrivate { + ECardSimple *card_simple; +}; + + +/* CORBA interface implementation. */ + +static POA_GNOME_Evolution_Addressbook_SimpleCard__vepv SimpleCard_vepv; + +static POA_GNOME_Evolution_Addressbook_SimpleCard * +create_servant (void) +{ + POA_GNOME_Evolution_Addressbook_SimpleCard *servant; + CORBA_Environment ev; + + servant = (POA_GNOME_Evolution_Addressbook_SimpleCard *) g_new0 (BonoboObjectServant, 1); + servant->vepv = &SimpleCard_vepv; + + CORBA_exception_init (&ev); + + POA_GNOME_Evolution_Addressbook_SimpleCard__init ((PortableServer_Servant) servant, &ev); + if (ev._major != CORBA_NO_EXCEPTION) { + g_free (servant); + CORBA_exception_free (&ev); + return NULL; + } + + CORBA_exception_free (&ev); + + return servant; +} + +static GNOME_Evolution_Addressbook_SimpleCard_Arbitrary * +impl_SimpleCard_get_arbitrary (PortableServer_Servant servant, + const CORBA_char *key, + CORBA_Environment *ev) +{ + BonoboObject *bonobo_object; + ESimpleCardBonobo *simple_card; + ESimpleCardBonoboPrivate *priv; + GNOME_Evolution_Addressbook_SimpleCard_Arbitrary *ret_val = GNOME_Evolution_Addressbook_SimpleCard_Arbitrary__alloc (); + + bonobo_object = bonobo_object_from_servant (servant); + simple_card = E_SIMPLE_CARD_BONOBO (bonobo_object); + priv = simple_card->priv; + + if (priv->card_simple) { + const ECardArbitrary *arbitrary = e_card_simple_get_arbitrary (priv->card_simple, key); + ret_val->key = CORBA_string_dup (arbitrary->key); + ret_val->value = CORBA_string_dup (arbitrary->value); + ret_val->type = CORBA_string_dup (arbitrary->type); + } else { + ret_val->key = CORBA_string_dup (""); + ret_val->value = CORBA_string_dup (""); + ret_val->type = CORBA_string_dup (""); + } + + return ret_val; +} + +static void +impl_SimpleCard_set_arbitrary (PortableServer_Servant servant, + const CORBA_char *key, + const CORBA_char *type, + const CORBA_char *value, + CORBA_Environment *ev) +{ + BonoboObject *bonobo_object; + ESimpleCardBonobo *simple_card; + ESimpleCardBonoboPrivate *priv; + + bonobo_object = bonobo_object_from_servant (servant); + simple_card = E_SIMPLE_CARD_BONOBO (bonobo_object); + priv = simple_card->priv; + + if (priv->card_simple) { + e_card_simple_set_arbitrary (priv->card_simple, key, type, value); + } +} + +static CORBA_char * +impl_SimpleCard_get (PortableServer_Servant servant, + GNOME_Evolution_Addressbook_SimpleCard_Field field, + CORBA_Environment *ev) +{ + BonoboObject *bonobo_object; + ESimpleCardBonobo *simple_card; + ESimpleCardBonoboPrivate *priv; + + bonobo_object = bonobo_object_from_servant (servant); + simple_card = E_SIMPLE_CARD_BONOBO (bonobo_object); + priv = simple_card->priv; + + if (priv->card_simple) { + char *value = e_card_simple_get (priv->card_simple, + field); + char *ret_val = CORBA_string_dup (value); + g_free (value); + return ret_val; + } else { + return CORBA_string_dup (""); + } +} + +static void +impl_SimpleCard_set (PortableServer_Servant servant, + GNOME_Evolution_Addressbook_SimpleCard_Field field, + const CORBA_char *value, + CORBA_Environment *ev) +{ + BonoboObject *bonobo_object; + ESimpleCardBonobo *simple_card; + ESimpleCardBonoboPrivate *priv; + + bonobo_object = bonobo_object_from_servant (servant); + simple_card = E_SIMPLE_CARD_BONOBO (bonobo_object); + priv = simple_card->priv; + + if (priv->card_simple) { + e_card_simple_set (priv->card_simple, + field, + value); + } +} + + +/* GtkObject methods. */ + +static void +impl_destroy (GtkObject *object) +{ + ESimpleCardBonobo *simple_card; + ESimpleCardBonoboPrivate *priv; + + simple_card = E_SIMPLE_CARD_BONOBO (object); + priv = simple_card->priv; + + if (priv->card_simple) { + gtk_object_unref (GTK_OBJECT (priv->card_simple)); + } + + g_free (priv); + + simple_card->priv = NULL; +} + + +static void +corba_class_init () +{ + POA_GNOME_Evolution_Addressbook_SimpleCard__vepv *vepv; + POA_GNOME_Evolution_Addressbook_SimpleCard__epv *epv; + PortableServer_ServantBase__epv *base_epv; + + base_epv = g_new0 (PortableServer_ServantBase__epv, 1); + base_epv->_private = NULL; + base_epv->finalize = NULL; + base_epv->default_POA = NULL; + + epv = g_new0 (POA_GNOME_Evolution_Addressbook_SimpleCard__epv, 1); + epv->getArbitrary = impl_SimpleCard_get_arbitrary; + epv->setArbitrary = impl_SimpleCard_set_arbitrary; + epv->get = impl_SimpleCard_get; + epv->set = impl_SimpleCard_set; + + vepv = &SimpleCard_vepv; + vepv->Bonobo_Unknown_epv = bonobo_object_get_epv (); + vepv->GNOME_Evolution_Addressbook_SimpleCard_epv = epv; +} + +static void +class_init (ESimpleCardBonoboClass *klass) +{ + GtkObjectClass *object_class; + + object_class = GTK_OBJECT_CLASS (klass); + parent_class = gtk_type_class (bonobo_object_get_type ()); + + object_class->destroy = impl_destroy; + + corba_class_init (); +} + +static void +init (ESimpleCardBonobo *simple_card) +{ + ESimpleCardBonoboPrivate *priv; + + priv = g_new (ESimpleCardBonoboPrivate, 1); + + priv->card_simple = NULL; + + simple_card->priv = priv; +} + + +void +e_simple_card_bonobo_construct (ESimpleCardBonobo *simple_card, + GNOME_Evolution_Addressbook_SimpleCard corba_object, + ECardSimple *card_simple) +{ + g_return_if_fail (simple_card != NULL); + g_return_if_fail (E_IS_SIMPLE_CARD_BONOBO (simple_card)); + + bonobo_object_construct (BONOBO_OBJECT (simple_card), corba_object); + + simple_card->priv->card_simple = card_simple; + gtk_object_ref (GTK_OBJECT (card_simple)); +} + +ESimpleCardBonobo * +e_simple_card_bonobo_new (ECardSimple *card_simple) +{ + POA_GNOME_Evolution_Addressbook_SimpleCard *servant; + GNOME_Evolution_Addressbook_SimpleCard corba_object; + ESimpleCardBonobo *simple_card; + + servant = create_servant (); + if (servant == NULL) + return NULL; + + simple_card = gtk_type_new (e_simple_card_bonobo_get_type ()); + + corba_object = bonobo_object_activate_servant (BONOBO_OBJECT (simple_card), servant); + e_simple_card_bonobo_construct (simple_card, corba_object, card_simple); + + return simple_card; +} + + +E_MAKE_TYPE (e_simple_card_bonobo, "ESimpleCardBonobo", ESimpleCardBonobo, class_init, init, PARENT_TYPE) |