aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/dialogs/e-delegate-dialog.c
diff options
context:
space:
mode:
authorJP Rosevear <jpr@ximian.com>2001-07-25 06:35:57 +0800
committerJP Rosevear <jpr@src.gnome.org>2001-07-25 06:35:57 +0800
commit96a9eafc7290ef276d2f0559d20cc2f1057c4231 (patch)
tree2acf4cb14ab25f4cf9ec5e6fba1cdbb48642c3ca /calendar/gui/dialogs/e-delegate-dialog.c
parent5c9bf39bb2b7a071ee71438b3f0730c26312c0a1 (diff)
downloadgsoc2013-evolution-96a9eafc7290ef276d2f0559d20cc2f1057c4231.tar
gsoc2013-evolution-96a9eafc7290ef276d2f0559d20cc2f1057c4231.tar.gz
gsoc2013-evolution-96a9eafc7290ef276d2f0559d20cc2f1057c4231.tar.bz2
gsoc2013-evolution-96a9eafc7290ef276d2f0559d20cc2f1057c4231.tar.lz
gsoc2013-evolution-96a9eafc7290ef276d2f0559d20cc2f1057c4231.tar.xz
gsoc2013-evolution-96a9eafc7290ef276d2f0559d20cc2f1057c4231.tar.zst
gsoc2013-evolution-96a9eafc7290ef276d2f0559d20cc2f1057c4231.zip
stip the delto and delfrom (popup_delegate_cb): show a delegate dialog and
2001-07-24 JP Rosevear <jpr@ximian.com> * gui/dialogs/meeting-page.c (value_at): stip the delto and delfrom (popup_delegate_cb): show a delegate dialog and add the new delegatee and update the delegator (add_section): listen for changes in a more direct manner (get_select_name_dialog): add_section now takes a limit argument * gui/dialogs/e-delegate-dialog.[hc]: New dialog to query the user for a person to delegate to * gui/dialogs/Makefile.am: build/install new files * gui/Makefile.am: add ldadd line for ebook svn path=/trunk/; revision=11364
Diffstat (limited to 'calendar/gui/dialogs/e-delegate-dialog.c')
-rw-r--r--calendar/gui/dialogs/e-delegate-dialog.c351
1 files changed, 351 insertions, 0 deletions
diff --git a/calendar/gui/dialogs/e-delegate-dialog.c b/calendar/gui/dialogs/e-delegate-dialog.c
new file mode 100644
index 0000000000..beb93d5dc8
--- /dev/null
+++ b/calendar/gui/dialogs/e-delegate-dialog.c
@@ -0,0 +1,351 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* Evolution calendar - Delegate selector dialog
+ *
+ * Copyright (C) 2001 Ximian, Inc.
+ *
+ * Authors: Damon Chaplin <damon@ximian.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 Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+#include <liboaf/liboaf.h>
+#include <bonobo/bonobo-control.h>
+#include <bonobo/bonobo-exception.h>
+#include <bonobo/bonobo-widget.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtkcombo.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtklabel.h>
+#include <gnome.h>
+#include <ical.h>
+#include <glade/glade.h>
+#include <widgets/misc/e-map.h>
+#include <e-destination.h>
+#include "Evolution-Addressbook-SelectNames.h"
+#include "e-delegate-dialog.h"
+
+struct _EDelegateDialogPrivate {
+ char *name;
+ char *address;
+
+ /* Glade XML data */
+ GladeXML *xml;
+
+ /* Widgets from the Glade file */
+ GtkWidget *app;
+ GtkWidget *hbox;
+ GtkWidget *addressbook;
+
+ GNOME_Evolution_Addressbook_SelectNames corba_select_names;
+ GtkWidget *entry;
+};
+
+#define SELECT_NAMES_OAFID "OAFIID:GNOME_Evolution_Addressbook_SelectNames"
+static const char *section_name = "Delegate To";
+
+static void e_delegate_dialog_class_init (EDelegateDialogClass *class);
+static void e_delegate_dialog_init (EDelegateDialog *edd);
+static void e_delegate_dialog_destroy (GtkObject *object);
+
+static gboolean get_widgets (EDelegateDialog *edd);
+static void addressbook_clicked_cb (GtkWidget *widget, gpointer data);
+
+static GtkObjectClass *parent_class;
+
+
+GtkType
+e_delegate_dialog_get_type (void)
+{
+ static GtkType e_delegate_dialog_type = 0;
+
+ if (!e_delegate_dialog_type) {
+ static const GtkTypeInfo e_delegate_dialog_info = {
+ "EDelegateDialog",
+ sizeof (EDelegateDialog),
+ sizeof (EDelegateDialogClass),
+ (GtkClassInitFunc) e_delegate_dialog_class_init,
+ (GtkObjectInitFunc) e_delegate_dialog_init,
+ NULL, /* reserved_1 */
+ NULL, /* reserved_2 */
+ (GtkClassInitFunc) NULL
+ };
+
+ e_delegate_dialog_type = gtk_type_unique (GTK_TYPE_OBJECT,
+ &e_delegate_dialog_info);
+ }
+
+ return e_delegate_dialog_type;
+}
+
+/* Class initialization function for the event editor */
+static void
+e_delegate_dialog_class_init (EDelegateDialogClass *class)
+{
+ GtkObjectClass *object_class;
+
+ object_class = (GtkObjectClass *) class;
+
+ parent_class = gtk_type_class (GTK_TYPE_OBJECT);
+
+ object_class->destroy = e_delegate_dialog_destroy;
+}
+
+/* Object initialization function for the event editor */
+static void
+e_delegate_dialog_init (EDelegateDialog *edd)
+{
+ EDelegateDialogPrivate *priv;
+
+ priv = g_new0 (EDelegateDialogPrivate, 1);
+ edd->priv = priv;
+
+ priv->address = NULL;
+}
+
+/* Destroy handler for the event editor */
+static void
+e_delegate_dialog_destroy (GtkObject *object)
+{
+ EDelegateDialog *edd;
+ EDelegateDialogPrivate *priv;
+ GtkWidget *dialog;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (E_IS_DELEGATE_DIALOG (object));
+
+ edd = E_DELEGATE_DIALOG (object);
+ priv = edd->priv;
+
+ /* Destroy the actual dialog. */
+ dialog = e_delegate_dialog_get_toplevel (edd);
+ gtk_widget_destroy (dialog);
+
+ g_free (priv->address);
+ priv->address = NULL;
+
+ g_free (priv);
+ edd->priv = NULL;
+
+ if (GTK_OBJECT_CLASS (parent_class)->destroy)
+ (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
+}
+
+
+EDelegateDialog *
+e_delegate_dialog_construct (EDelegateDialog *edd)
+{
+ EDelegateDialogPrivate *priv;
+ Bonobo_Control corba_control;
+ CORBA_Environment ev;
+
+ g_return_val_if_fail (edd != NULL, NULL);
+ g_return_val_if_fail (E_IS_DELEGATE_DIALOG (edd), NULL);
+
+ priv = edd->priv;
+
+ /* Load the content widgets */
+
+ priv->xml = glade_xml_new (EVOLUTION_GLADEDIR "/e-delegate-dialog.glade",
+ NULL);
+ if (!priv->xml) {
+ g_message ("e_delegate_dialog_construct(): Could not load the Glade XML file!");
+ goto error;
+ }
+
+ if (!get_widgets (edd)) {
+ g_message ("e_delegate_dialog_construct(): Could not find all widgets in the XML file!");
+ goto error;
+ }
+
+ CORBA_exception_init (&ev);
+
+ priv->corba_select_names = oaf_activate_from_id (SELECT_NAMES_OAFID, 0, NULL, &ev);
+ GNOME_Evolution_Addressbook_SelectNames_addSectionWithLimit (priv->corba_select_names,
+ section_name,
+ section_name,
+ 1, &ev);
+
+ if (BONOBO_EX (&ev)) {
+ g_message ("e_delegate_dialog_construct(): Unable to add section!");
+ goto error;
+ }
+
+ corba_control = GNOME_Evolution_Addressbook_SelectNames_getEntryBySection (priv->corba_select_names,
+ section_name, &ev);
+
+ if (BONOBO_EX (&ev)) {
+ g_message ("e_delegate_dialog_construct(): Unable to get addressbook entry!");
+ goto error;
+ }
+
+ CORBA_exception_free (&ev);
+
+ priv->entry = bonobo_widget_new_control_from_objref (corba_control, CORBA_OBJECT_NIL);
+ gtk_widget_show (priv->entry);
+ gtk_box_pack_start (GTK_BOX (priv->hbox), priv->entry, TRUE, TRUE, 0);
+
+
+ gtk_signal_connect (GTK_OBJECT (priv->addressbook), "clicked",
+ GTK_SIGNAL_FUNC (addressbook_clicked_cb), edd);
+
+ return edd;
+
+ error:
+
+ gtk_object_unref (GTK_OBJECT (edd));
+ return NULL;
+}
+
+static gboolean
+get_widgets (EDelegateDialog *edd)
+{
+ EDelegateDialogPrivate *priv;
+
+ priv = edd->priv;
+
+#define GW(name) glade_xml_get_widget (priv->xml, name)
+
+ priv->app = GW ("delegate-dialog");
+ priv->hbox = GW ("delegate-hbox");
+ priv->addressbook = GW ("addressbook");
+
+ return (priv->app
+ && priv->hbox
+ && priv->addressbook);
+}
+
+static void
+addressbook_clicked_cb (GtkWidget *widget, gpointer data)
+{
+ EDelegateDialog *edd = data;
+ EDelegateDialogPrivate *priv;
+ CORBA_Environment ev;
+
+ priv = edd->priv;
+
+ CORBA_exception_init (&ev);
+
+ GNOME_Evolution_Addressbook_SelectNames_activateDialog (priv->corba_select_names, section_name, &ev);
+
+ CORBA_exception_free (&ev);
+}
+
+
+/**
+ * e_delegate_dialog_new:
+ *
+ * Creates a new event editor dialog.
+ *
+ * Return value: A newly-created event editor dialog, or NULL if the event
+ * editor could not be created.
+ **/
+EDelegateDialog *
+e_delegate_dialog_new (void)
+{
+ EDelegateDialog *edd;
+
+ edd = E_DELEGATE_DIALOG (gtk_type_new (E_TYPE_DELEGATE_DIALOG));
+ return e_delegate_dialog_construct (E_DELEGATE_DIALOG (edd));
+}
+
+char *
+e_delegate_dialog_get_delegate (EDelegateDialog *edd)
+{
+ EDelegateDialogPrivate *priv;
+ EDestination **destv;
+ char *string = NULL;
+
+ g_return_val_if_fail (edd != NULL, NULL);
+ g_return_val_if_fail (E_IS_DELEGATE_DIALOG (edd), NULL);
+
+ priv = edd->priv;
+
+ bonobo_widget_get_property (BONOBO_WIDGET (priv->entry), "text", &string, NULL);
+ destv = e_destination_importv (string);
+
+ g_message ("importv: [%s]", string);
+
+ if (destv && destv[0] != NULL) {
+ g_free (priv->address);
+ priv->address = g_strdup (e_destination_get_email (destv[0]));
+ g_free (destv);
+ }
+
+ g_free (string);
+
+ return g_strdup (priv->address);
+}
+
+
+char *
+e_delegate_dialog_get_delegate_name (EDelegateDialog *edd)
+{
+ EDelegateDialogPrivate *priv;
+ EDestination **destv;
+ char *string = NULL;
+
+ g_return_val_if_fail (edd != NULL, NULL);
+ g_return_val_if_fail (E_IS_DELEGATE_DIALOG (edd), NULL);
+
+ priv = edd->priv;
+
+ bonobo_widget_get_property (BONOBO_WIDGET (priv->entry), "text", &string, NULL);
+ destv = e_destination_importv (string);
+
+ g_message ("importv: [%s]", string);
+
+ if (destv && destv[0] != NULL) {
+ g_free (priv->name);
+ priv->name = g_strdup (e_destination_get_name (destv[0]));
+ g_free (destv);
+ }
+
+ g_free (string);
+
+ return g_strdup (priv->name);
+}
+
+void
+e_delegate_dialog_set_delegate (EDelegateDialog *edd,
+ const char *address)
+{
+ EDelegateDialogPrivate *priv;
+
+ g_return_if_fail (edd != NULL);
+ g_return_if_fail (E_IS_DELEGATE_DIALOG (edd));
+
+ priv = edd->priv;
+
+ if (priv->address)
+ g_free (priv->address);
+
+ priv->address = g_strdup (address);
+}
+
+
+GtkWidget*
+e_delegate_dialog_get_toplevel (EDelegateDialog *edd)
+{
+ EDelegateDialogPrivate *priv;
+
+ g_return_val_if_fail (edd != NULL, NULL);
+ g_return_val_if_fail (E_IS_DELEGATE_DIALOG (edd), NULL);
+
+ priv = edd->priv;
+
+ return priv->app;
+}
+