From b6ddd5c5496acef7666b45c60e527b7a7cc86db0 Mon Sep 17 00:00:00 2001 From: Christopher James Lahey Date: Wed, 26 Apr 2000 13:17:01 +0000 Subject: Added proper handling of the email field. 2000-04-26 Christopher James Lahey * contact-editor/e-contact-editor.c: Added proper handling of the email field. svn path=/trunk/; revision=2626 --- addressbook/ChangeLog | 5 ++ addressbook/contact-editor/e-contact-editor.c | 94 +++++++++++++++++------ addressbook/gui/contact-editor/e-contact-editor.c | 94 +++++++++++++++++------ 3 files changed, 145 insertions(+), 48 deletions(-) (limited to 'addressbook') diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index b96c2abc23..d8a7152bb9 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,3 +1,8 @@ +2000-04-26 Christopher James Lahey + + * contact-editor/e-contact-editor.c: Added proper handling of the + email field. + 2000-04-26 Christopher James Lahey * backend/ebook/e-card-types.h, backend/ebook/e-card.c, diff --git a/addressbook/contact-editor/e-contact-editor.c b/addressbook/contact-editor/e-contact-editor.c index df1f43ba65..f12660be18 100644 --- a/addressbook/contact-editor/e-contact-editor.c +++ b/addressbook/contact-editor/e-contact-editor.c @@ -77,15 +77,6 @@ ECardPhoneFlags phone_correspondences[] = { }; #if 0 -/* We need HOME and WORK email addresses here. */ -enum _EContactEditorEmailId { - E_CONTACT_EDITOR_EMAIL_ID_EMAIL, - E_CONTACT_EDITOR_EMAIL_ID_EMAIL_2, - E_CONTACT_EDITOR_EMAIL_ID_EMAIL_3, - E_CONTACT_EDITOR_EMAIL_ID_LAST -}; - -/* Should this include (BILLING/SHIPPING)? */ enum _EContactEditorAddressId { E_CONTACT_EDITOR_ADDRESS_ID_BUSINESS, E_CONTACT_EDITOR_ADDRESS_ID_HOME, @@ -239,6 +230,24 @@ phone_label_changed (GtkWidget *widget, EContactEditor *editor) set_fields(editor); } +static void +email_label_changed (GtkWidget *widget, EContactEditor *editor) +{ + gchar *string; + GtkEntry *entry = GTK_ENTRY(widget); + + if (editor->email[editor->email_choice]) { + g_free(editor->email[editor->email_choice]); + editor->email[editor->email_choice] = NULL; + } + + string = gtk_entry_get_text(entry); + + editor->email[editor->email_choice] = g_strdup(string); + + set_fields(editor); +} + static void set_entry_changed_signal_phone(EContactEditor *editor, char *id) { @@ -250,10 +259,14 @@ set_entry_changed_signal_phone(EContactEditor *editor, char *id) static void set_entry_changed_signals(EContactEditor *editor) { + GtkWidget *widget; set_entry_changed_signal_phone(editor, "entry-phone1"); set_entry_changed_signal_phone(editor, "entry-phone2"); set_entry_changed_signal_phone(editor, "entry-phone3"); set_entry_changed_signal_phone(editor, "entry-phone4"); + widget = glade_xml_get_widget(editor->gui, "entry-email1"); + gtk_signal_connect(GTK_OBJECT(widget), "changed", + email_label_changed, editor); } static void @@ -654,7 +667,11 @@ _email_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor } result = _arrow_pressed (widget, button, editor, editor->email_popup, &editor->email_list, &editor->email_info, "label-email1", "entry-email1", "Add new Email type"); - result ++; + + if (result != -1) { + editor->email_choice = result; + set_fields(editor); + } } static void @@ -719,6 +736,11 @@ set_fields(EContactEditor *editor) set_field(entry, editor->phone[editor->phone_choice[3]]->number); else set_field(entry, ""); + entry = GTK_ENTRY(glade_xml_get_widget(editor->gui, "entry-email1")); + if (editor->email[editor->email_choice]) + set_field(entry, editor->email[editor->email_choice]); + else + set_field(entry, ""); } static void @@ -739,6 +761,7 @@ fill_in_info(EContactEditor *editor) char *fburl; char *note; const ECardPhone *phone; + const char *email; const ECardDate *bday; GtkEditable *editable; int position = 0; @@ -799,7 +822,6 @@ fill_in_info(EContactEditor *editor) gtk_editable_insert_text(editable, address->city, strlen(address->city), &position); gtk_object_unref(GTK_OBJECT(iterator)); #endif - position = 0; for (iterator = e_card_list_get_iterator(phone_list); e_card_iterator_is_valid(iterator); e_card_iterator_next(iterator)) { int i; phone = e_card_iterator_get(iterator); @@ -811,23 +833,19 @@ fill_in_info(EContactEditor *editor) } } gtk_object_unref(GTK_OBJECT(iterator)); -#if 0 - editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-phone1")); - gtk_editable_delete_text(editable, 0, -1); - if (phone) - gtk_editable_insert_text(editable, phone->number, strlen(phone->number), &position); -#endif -#if 0 - position = 0; + for (iterator = e_card_list_get_iterator(email_list); e_card_iterator_is_valid(iterator); e_card_iterator_next(iterator)) { + int i; email = e_card_iterator_get(iterator); + for (i = 0; i < E_CONTACT_EDITOR_EMAIL_ID_LAST; i ++) { + if ((editor->email[i] == NULL)) { + editor->email[i] = g_strdup(email); + break; + } + } } - editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-email1")); - gtk_editable_delete_text(editable, 0, -1); - if (email) - gtk_editable_insert_text(editable, email, strlen(email), &position); gtk_object_unref(GTK_OBJECT(iterator)); -#endif + position = 0; editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-web")); gtk_editable_delete_text(editable, 0, -1); @@ -909,6 +927,7 @@ extract_info(EContactEditor *editor) char *fburl; char *note; const ECardPhone *phone; + const char *email; ECardDate *bday; GtkEditable *editable; GnomeDateEdit *dateedit; @@ -987,6 +1006,33 @@ extract_info(EContactEditor *editor) editor->phone[i] = NULL; } } + + for (iterator = e_card_list_get_iterator(email_list); e_card_iterator_is_valid(iterator); iterator_next ? e_card_iterator_next(iterator) : FALSE ) { + int i; + email = e_card_iterator_get(iterator); + iterator_next = 1; + for (i = 0; i < E_CONTACT_EDITOR_EMAIL_ID_LAST; i ++) { + if (editor->email[i]) { + if (*editor->email[i]) { + e_card_iterator_set(iterator, editor->email[i]); + } else { + e_card_iterator_delete(iterator); + iterator_next = 0; + } + g_free(editor->email[i]); + editor->email[i] = NULL; + break; + } + } + } + gtk_object_unref(GTK_OBJECT(iterator)); + for (i = 0; i < E_CONTACT_EDITOR_EMAIL_ID_LAST; i ++) { + if (editor->email[i]) { + e_card_list_append(email_list, editor->email[i]); + g_free(editor->email[i]); + editor->email[i] = NULL; + } + } #if 0 position = 0; iterator = e_card_list_get_iterator(email_list); diff --git a/addressbook/gui/contact-editor/e-contact-editor.c b/addressbook/gui/contact-editor/e-contact-editor.c index df1f43ba65..f12660be18 100644 --- a/addressbook/gui/contact-editor/e-contact-editor.c +++ b/addressbook/gui/contact-editor/e-contact-editor.c @@ -77,15 +77,6 @@ ECardPhoneFlags phone_correspondences[] = { }; #if 0 -/* We need HOME and WORK email addresses here. */ -enum _EContactEditorEmailId { - E_CONTACT_EDITOR_EMAIL_ID_EMAIL, - E_CONTACT_EDITOR_EMAIL_ID_EMAIL_2, - E_CONTACT_EDITOR_EMAIL_ID_EMAIL_3, - E_CONTACT_EDITOR_EMAIL_ID_LAST -}; - -/* Should this include (BILLING/SHIPPING)? */ enum _EContactEditorAddressId { E_CONTACT_EDITOR_ADDRESS_ID_BUSINESS, E_CONTACT_EDITOR_ADDRESS_ID_HOME, @@ -239,6 +230,24 @@ phone_label_changed (GtkWidget *widget, EContactEditor *editor) set_fields(editor); } +static void +email_label_changed (GtkWidget *widget, EContactEditor *editor) +{ + gchar *string; + GtkEntry *entry = GTK_ENTRY(widget); + + if (editor->email[editor->email_choice]) { + g_free(editor->email[editor->email_choice]); + editor->email[editor->email_choice] = NULL; + } + + string = gtk_entry_get_text(entry); + + editor->email[editor->email_choice] = g_strdup(string); + + set_fields(editor); +} + static void set_entry_changed_signal_phone(EContactEditor *editor, char *id) { @@ -250,10 +259,14 @@ set_entry_changed_signal_phone(EContactEditor *editor, char *id) static void set_entry_changed_signals(EContactEditor *editor) { + GtkWidget *widget; set_entry_changed_signal_phone(editor, "entry-phone1"); set_entry_changed_signal_phone(editor, "entry-phone2"); set_entry_changed_signal_phone(editor, "entry-phone3"); set_entry_changed_signal_phone(editor, "entry-phone4"); + widget = glade_xml_get_widget(editor->gui, "entry-email1"); + gtk_signal_connect(GTK_OBJECT(widget), "changed", + email_label_changed, editor); } static void @@ -654,7 +667,11 @@ _email_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor } result = _arrow_pressed (widget, button, editor, editor->email_popup, &editor->email_list, &editor->email_info, "label-email1", "entry-email1", "Add new Email type"); - result ++; + + if (result != -1) { + editor->email_choice = result; + set_fields(editor); + } } static void @@ -719,6 +736,11 @@ set_fields(EContactEditor *editor) set_field(entry, editor->phone[editor->phone_choice[3]]->number); else set_field(entry, ""); + entry = GTK_ENTRY(glade_xml_get_widget(editor->gui, "entry-email1")); + if (editor->email[editor->email_choice]) + set_field(entry, editor->email[editor->email_choice]); + else + set_field(entry, ""); } static void @@ -739,6 +761,7 @@ fill_in_info(EContactEditor *editor) char *fburl; char *note; const ECardPhone *phone; + const char *email; const ECardDate *bday; GtkEditable *editable; int position = 0; @@ -799,7 +822,6 @@ fill_in_info(EContactEditor *editor) gtk_editable_insert_text(editable, address->city, strlen(address->city), &position); gtk_object_unref(GTK_OBJECT(iterator)); #endif - position = 0; for (iterator = e_card_list_get_iterator(phone_list); e_card_iterator_is_valid(iterator); e_card_iterator_next(iterator)) { int i; phone = e_card_iterator_get(iterator); @@ -811,23 +833,19 @@ fill_in_info(EContactEditor *editor) } } gtk_object_unref(GTK_OBJECT(iterator)); -#if 0 - editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-phone1")); - gtk_editable_delete_text(editable, 0, -1); - if (phone) - gtk_editable_insert_text(editable, phone->number, strlen(phone->number), &position); -#endif -#if 0 - position = 0; + for (iterator = e_card_list_get_iterator(email_list); e_card_iterator_is_valid(iterator); e_card_iterator_next(iterator)) { + int i; email = e_card_iterator_get(iterator); + for (i = 0; i < E_CONTACT_EDITOR_EMAIL_ID_LAST; i ++) { + if ((editor->email[i] == NULL)) { + editor->email[i] = g_strdup(email); + break; + } + } } - editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-email1")); - gtk_editable_delete_text(editable, 0, -1); - if (email) - gtk_editable_insert_text(editable, email, strlen(email), &position); gtk_object_unref(GTK_OBJECT(iterator)); -#endif + position = 0; editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-web")); gtk_editable_delete_text(editable, 0, -1); @@ -909,6 +927,7 @@ extract_info(EContactEditor *editor) char *fburl; char *note; const ECardPhone *phone; + const char *email; ECardDate *bday; GtkEditable *editable; GnomeDateEdit *dateedit; @@ -987,6 +1006,33 @@ extract_info(EContactEditor *editor) editor->phone[i] = NULL; } } + + for (iterator = e_card_list_get_iterator(email_list); e_card_iterator_is_valid(iterator); iterator_next ? e_card_iterator_next(iterator) : FALSE ) { + int i; + email = e_card_iterator_get(iterator); + iterator_next = 1; + for (i = 0; i < E_CONTACT_EDITOR_EMAIL_ID_LAST; i ++) { + if (editor->email[i]) { + if (*editor->email[i]) { + e_card_iterator_set(iterator, editor->email[i]); + } else { + e_card_iterator_delete(iterator); + iterator_next = 0; + } + g_free(editor->email[i]); + editor->email[i] = NULL; + break; + } + } + } + gtk_object_unref(GTK_OBJECT(iterator)); + for (i = 0; i < E_CONTACT_EDITOR_EMAIL_ID_LAST; i ++) { + if (editor->email[i]) { + e_card_list_append(email_list, editor->email[i]); + g_free(editor->email[i]); + editor->email[i] = NULL; + } + } #if 0 position = 0; iterator = e_card_list_get_iterator(email_list); -- cgit v1.2.3