aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/contact-editor/e-contact-editor-address.c
diff options
context:
space:
mode:
authorChristopher James Lahey <clahey@helixcode.com>2000-09-11 17:59:30 +0800
committerChris Lahey <clahey@src.gnome.org>2000-09-11 17:59:30 +0800
commitd65fb37051402d1df0d125540546f63cc6b46ea6 (patch)
tree287b9cc05ed644eab851b234dc837c16d457d611 /addressbook/contact-editor/e-contact-editor-address.c
parente30911d7d0806677fbd6ee239d0c47284c05a228 (diff)
downloadgsoc2013-evolution-d65fb37051402d1df0d125540546f63cc6b46ea6.tar
gsoc2013-evolution-d65fb37051402d1df0d125540546f63cc6b46ea6.tar.gz
gsoc2013-evolution-d65fb37051402d1df0d125540546f63cc6b46ea6.tar.bz2
gsoc2013-evolution-d65fb37051402d1df0d125540546f63cc6b46ea6.tar.lz
gsoc2013-evolution-d65fb37051402d1df0d125540546f63cc6b46ea6.tar.xz
gsoc2013-evolution-d65fb37051402d1df0d125540546f63cc6b46ea6.tar.zst
gsoc2013-evolution-d65fb37051402d1df0d125540546f63cc6b46ea6.zip
Removed a bunch of redundant code. Made it so that when you set an address
2000-09-11 Christopher James Lahey <clahey@helixcode.com> * backend/ebook/e-card-simple.c, backend/ebook/e-card-simple.h: Removed a bunch of redundant code. Made it so that when you set an address label, it sets the delivery address as well. Added functions to set and get the delivery address. * backend/ebook/e-card.c, backend/ebook/e-card.h: Added code to convert and address label to a delivery address. * contact-editor/Makefile.am: Added e-contact-editor-address.[ch], fulladdr.glade, fulladdr.glade.h. * contact-editor/contact-editor.glade, contact-editor/e-contact-editor-strings.h: Switched from a label to a button to show the parsed address. * contact-editor/e-contact-editor-address.c, contact-editor/e-contact-editor-address.h: New class to implement the parsed address dialog. * contact-editor/e-contact-editor-fullname.c, contact-editor/e-contact-editor-fullname.h: Added const to the _new function. * contact-editor/e-contact-editor.c: Implemented clicking on the address button. * contact-editor/fulladdr.glade, contact-editor/fulladdr.glade.h: New glade files for the parsed address dialog. * contact-editor/fullname-strings.h, fullname.glade: Changed these accellabels to labels. * ename/Makefile.am: Added e-address-western.c. * ename/e-address-western.c: Fixed some warnings. svn path=/trunk/; revision=5317
Diffstat (limited to 'addressbook/contact-editor/e-contact-editor-address.c')
-rw-r--r--addressbook/contact-editor/e-contact-editor-address.c217
1 files changed, 217 insertions, 0 deletions
diff --git a/addressbook/contact-editor/e-contact-editor-address.c b/addressbook/contact-editor/e-contact-editor-address.c
new file mode 100644
index 0000000000..cf6cc382cd
--- /dev/null
+++ b/addressbook/contact-editor/e-contact-editor-address.c
@@ -0,0 +1,217 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * e-contact-editor-address.c
+ * Copyright (C) 2000 Helix Code, Inc.
+ * Author: Chris Lahey <clahey@helixcode.com>
+ *
+ * This library 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 library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+#include <gnome.h>
+#include <e-util/e-unicode.h>
+#include <e-contact-editor-address.h>
+
+static void e_contact_editor_address_init (EContactEditorAddress *card);
+static void e_contact_editor_address_class_init (EContactEditorAddressClass *klass);
+static void e_contact_editor_address_set_arg (GtkObject *o, GtkArg *arg, guint arg_id);
+static void e_contact_editor_address_get_arg (GtkObject *object, GtkArg *arg, guint arg_id);
+static void e_contact_editor_address_destroy (GtkObject *object);
+
+static void fill_in_info(EContactEditorAddress *editor);
+static void extract_info(EContactEditorAddress *editor);
+
+static GnomeDialogClass *parent_class = NULL;
+
+/* The arguments we take */
+enum {
+ ARG_0,
+ ARG_ADDRESS
+};
+
+GtkType
+e_contact_editor_address_get_type (void)
+{
+ static GtkType contact_editor_address_type = 0;
+
+ if (!contact_editor_address_type)
+ {
+ static const GtkTypeInfo contact_editor_address_info =
+ {
+ "EContactEditorAddress",
+ sizeof (EContactEditorAddress),
+ sizeof (EContactEditorAddressClass),
+ (GtkClassInitFunc) e_contact_editor_address_class_init,
+ (GtkObjectInitFunc) e_contact_editor_address_init,
+ /* reserved_1 */ NULL,
+ /* reserved_2 */ NULL,
+ (GtkClassInitFunc) NULL,
+ };
+
+ contact_editor_address_type = gtk_type_unique (gnome_dialog_get_type (), &contact_editor_address_info);
+ }
+
+ return contact_editor_address_type;
+}
+
+static void
+e_contact_editor_address_class_init (EContactEditorAddressClass *klass)
+{
+ GtkObjectClass *object_class;
+ GnomeDialogClass *dialog_class;
+
+ object_class = (GtkObjectClass*) klass;
+ dialog_class = (GnomeDialogClass *) klass;
+
+ parent_class = gtk_type_class (gnome_dialog_get_type ());
+
+ gtk_object_add_arg_type ("EContactEditorAddress::address", GTK_TYPE_POINTER,
+ GTK_ARG_READWRITE, ARG_ADDRESS);
+
+ object_class->set_arg = e_contact_editor_address_set_arg;
+ object_class->get_arg = e_contact_editor_address_get_arg;
+ object_class->destroy = e_contact_editor_address_destroy;
+}
+
+static void
+e_contact_editor_address_init (EContactEditorAddress *e_contact_editor_address)
+{
+ GladeXML *gui;
+ GtkWidget *widget;
+
+ gnome_dialog_append_button ( GNOME_DIALOG(e_contact_editor_address),
+ GNOME_STOCK_BUTTON_OK);
+
+ gnome_dialog_append_button ( GNOME_DIALOG(e_contact_editor_address),
+ GNOME_STOCK_BUTTON_CANCEL);
+
+ gtk_window_set_policy(GTK_WINDOW(e_contact_editor_address), FALSE, TRUE, FALSE);
+
+ e_contact_editor_address->address = NULL;
+
+ gui = glade_xml_new (EVOLUTION_GLADEDIR "/fulladdr.glade", NULL);
+ e_contact_editor_address->gui = gui;
+
+ widget = glade_xml_get_widget(gui, "table-checkaddress");
+ gtk_widget_ref(widget);
+ gtk_container_remove(GTK_CONTAINER(widget->parent), widget);
+ gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (e_contact_editor_address)->vbox), widget, TRUE, TRUE, 0);
+ gtk_widget_unref(widget);
+}
+
+void
+e_contact_editor_address_destroy (GtkObject *object)
+{
+ EContactEditorAddress *e_contact_editor_address = E_CONTACT_EDITOR_ADDRESS(object);
+
+ if (e_contact_editor_address->gui)
+ gtk_object_unref(GTK_OBJECT(e_contact_editor_address->gui));
+ e_card_delivery_address_free(e_contact_editor_address->address);
+}
+
+GtkWidget*
+e_contact_editor_address_new (const ECardDeliveryAddress *address)
+{
+ GtkWidget *widget = GTK_WIDGET (gtk_type_new (e_contact_editor_address_get_type ()));
+ gtk_object_set (GTK_OBJECT(widget),
+ "address", address,
+ NULL);
+ return widget;
+}
+
+static void
+e_contact_editor_address_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
+{
+ EContactEditorAddress *e_contact_editor_address;
+
+ e_contact_editor_address = E_CONTACT_EDITOR_ADDRESS (o);
+
+ switch (arg_id){
+ case ARG_ADDRESS:
+ if (e_contact_editor_address->address)
+ e_card_delivery_address_free(e_contact_editor_address->address);
+ e_contact_editor_address->address = e_card_delivery_address_copy(GTK_VALUE_POINTER (*arg));
+ fill_in_info(e_contact_editor_address);
+ break;
+ }
+}
+
+static void
+e_contact_editor_address_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
+{
+ EContactEditorAddress *e_contact_editor_address;
+
+ e_contact_editor_address = E_CONTACT_EDITOR_ADDRESS (object);
+
+ switch (arg_id) {
+ case ARG_ADDRESS:
+ extract_info(e_contact_editor_address);
+ GTK_VALUE_POINTER (*arg) = e_card_delivery_address_copy(e_contact_editor_address->address);
+ break;
+ default:
+ arg->type = GTK_TYPE_INVALID;
+ break;
+ }
+}
+
+static void
+fill_in_field(EContactEditorAddress *editor, char *field, char *string)
+{
+ GtkEditable *editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, field));
+ if (editable) {
+ e_utf8_gtk_editable_set_text(editable, string);
+ }
+}
+
+static void
+fill_in_info(EContactEditorAddress *editor)
+{
+ ECardDeliveryAddress *address = editor->address;
+ if (address) {
+ fill_in_field(editor, "text-street" , address->street );
+ fill_in_field(editor, "entry-po" , address->po );
+ fill_in_field(editor, "entry-ext" , address->ext );
+ fill_in_field(editor, "entry-city" , address->city );
+ fill_in_field(editor, "entry-region" , address->region );
+ fill_in_field(editor, "entry-code" , address->code );
+ fill_in_field(editor, "entry-country", address->country);
+ }
+}
+
+static char *
+extract_field(EContactEditorAddress *editor, char *field)
+{
+ GtkEditable *editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, field));
+ if (editable)
+ return e_utf8_gtk_editable_get_text(editable);
+ else
+ return NULL;
+}
+
+static void
+extract_info(EContactEditorAddress *editor)
+{
+ ECardDeliveryAddress *address = editor->address;
+ if (!address)
+ address = e_card_delivery_address_new();
+ address->street = extract_field(editor, "text-street" );
+ address->po = extract_field(editor, "entry-po" );
+ address->ext = extract_field(editor, "entry-ext" );
+ address->city = extract_field(editor, "entry-city" );
+ address->region = extract_field(editor, "entry-region" );
+ address->code = extract_field(editor, "entry-code" );
+ address->country = extract_field(editor, "entry-country");
+}