diff options
author | Chris Lahey <clahey@src.gnome.org> | 2000-01-21 08:35:45 +0800 |
---|---|---|
committer | Chris Lahey <clahey@src.gnome.org> | 2000-01-21 08:35:45 +0800 |
commit | 07af9adcd6731f65e158d8807e85a19dab7bb736 (patch) | |
tree | d06237f56820a6c4bd8200be622559b101fa6a2f /addressbook/contact-editor/e-contact-editor.c | |
parent | 73107b49d42b02754e6facd890c3ed16eebe0a47 (diff) | |
download | gsoc2013-evolution-07af9adcd6731f65e158d8807e85a19dab7bb736.tar gsoc2013-evolution-07af9adcd6731f65e158d8807e85a19dab7bb736.tar.gz gsoc2013-evolution-07af9adcd6731f65e158d8807e85a19dab7bb736.tar.bz2 gsoc2013-evolution-07af9adcd6731f65e158d8807e85a19dab7bb736.tar.lz gsoc2013-evolution-07af9adcd6731f65e158d8807e85a19dab7bb736.tar.xz gsoc2013-evolution-07af9adcd6731f65e158d8807e85a19dab7bb736.tar.zst gsoc2013-evolution-07af9adcd6731f65e158d8807e85a19dab7bb736.zip |
Changed some line spacing.
* widgets/e-text-event-processor-types.h: Changed some line
spacing.
* widgets/test-reflow.c: Connected to the resize signal of the
reflow.
* widgets/e-minicard.c: Made width argument set function only
update if width is different.
* widgets/e-reflow.h, widgets/e-reflow.c: Added draggable column dividers.
* addressbook/contact-editor/test-editor.c: Open two dialogs for
more interesting testing.
* addressbook/contact-editor/e-contact-editor.h,
addressbook/contact-editor/e-contact-editor.c: Modified to use
glade. Added menus to change which phone/address/email entries to
view. Added images to the dialog.
* addressbook/contact-editor/e-contact-editor-strings.h,
addressbook/contact-editor/contact-editor.glade: Glade files for
the contact editor dialog.
* addressbook/contact-editor/Makefile.am: Added images and added
glade stuff.
* addressbook/contact-editor/arrow.png,
addressbook/contact-editor/briefcase.png,
addressbook/contact-editor/netfreebusy.png,
addressbook/contact-editor/netmeeting.png: Image files for the
contact editor dialog.
svn path=/trunk/; revision=1599
Diffstat (limited to 'addressbook/contact-editor/e-contact-editor.c')
-rw-r--r-- | addressbook/contact-editor/e-contact-editor.c | 676 |
1 files changed, 401 insertions, 275 deletions
diff --git a/addressbook/contact-editor/e-contact-editor.c b/addressbook/contact-editor/e-contact-editor.c index 73b48a7eb8..6a6c6d982e 100644 --- a/addressbook/contact-editor/e-contact-editor.c +++ b/addressbook/contact-editor/e-contact-editor.c @@ -26,8 +26,14 @@ static void e_contact_editor_init (EContactEditor *card); static void e_contact_editor_class_init (EContactEditorClass *klass); static void e_contact_editor_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); static void e_contact_editor_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); +static void e_contact_editor_destroy (GtkObject *object); -static GtkNotebookClass *parent_class = NULL; +static GtkWidget *e_contact_editor_build_dialog(EContactEditor *editor, gchar *entry_id, gchar *label_id, gchar *title, GList **list, GnomeUIInfo **info); +static void _email_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor); +static void _phone_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor); +static void _address_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor); + +static GtkVBoxClass *parent_class = NULL; #if 0 enum { @@ -44,6 +50,12 @@ enum { ARG_CARD }; +enum { + DYNAMIC_LIST_EMAIL, + DYNAMIC_LIST_PHONE, + DYNAMIC_LIST_ADDRESS +}; + GtkType e_contact_editor_get_type (void) { @@ -63,7 +75,7 @@ e_contact_editor_get_type (void) (GtkClassInitFunc) NULL, }; - contact_editor_type = gtk_type_unique (gtk_notebook_get_type (), &contact_editor_info); + contact_editor_type = gtk_type_unique (gtk_vbox_get_type (), &contact_editor_info); } return contact_editor_type; @@ -73,12 +85,12 @@ static void e_contact_editor_class_init (EContactEditorClass *klass) { GtkObjectClass *object_class; - GtkNotebookClass *notebook_class; + GtkVBoxClass *vbox_class; object_class = (GtkObjectClass*) klass; - notebook_class = (GtkNotebookClass *) klass; + vbox_class = (GtkVBoxClass *) klass; - parent_class = gtk_type_class (gtk_notebook_get_type ()); + parent_class = gtk_type_class (gtk_vbox_get_type ()); #if 0 e_contact_editor_signals[E_CONTACT_EDITOR_RESIZE] = @@ -98,300 +110,140 @@ e_contact_editor_class_init (EContactEditorClass *klass) object_class->set_arg = e_contact_editor_set_arg; object_class->get_arg = e_contact_editor_get_arg; + object_class->destroy = e_contact_editor_destroy; } -static GtkWidget * -_create_page_general_name(EContactEditor *e_contact_editor) -{ - GtkWidget *table; - GtkWidget *alignment; - table = gtk_table_new(3, 4, FALSE); - alignment = gtk_alignment_new(0, 0, 0, 0); - gtk_container_add(GTK_CONTAINER(alignment), - gnome_pixmap_new_from_file("head.png")); - gtk_table_attach(GTK_TABLE(table), - alignment, - 0, 1, 0, 4, - 0, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_label_new(_("Full Name:")), - 1, 2, 0, 1, - 0, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_label_new(_("Job Title:")), - 1, 2, 1, 2, - 0, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_label_new(_("Company:")), - 1, 2, 2, 3, - 0, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_label_new(_("File as:")), - 1, 2, 3, 4, - 0, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_entry_new(), - 2, 3, 0, 1, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_entry_new(), - 2, 3, 1, 2, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_entry_new(), - 2, 3, 2, 3, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_combo_new(), - 2, 3, 3, 4, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - return table; -} - -static GtkWidget * -_create_page_general_phone(EContactEditor *e_contact_editor) -{ - GtkWidget *table; - GtkWidget *alignment; - table = gtk_table_new(3, 4, FALSE); - alignment = gtk_alignment_new(0,0,0,0); - gtk_container_add(GTK_CONTAINER(alignment), - gnome_pixmap_new_from_file("phone.png")); - - gtk_table_attach(GTK_TABLE(table), - alignment, - 0, 1, 0, 4, - 0, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_label_new(_("Home:")), - 1, 2, 0, 1, - 0, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_label_new(_("Car:")), - 1, 2, 1, 2, - 0, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_label_new(_("Mobile:")), - 1, 2, 2, 3, - 0, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_label_new(_("Business Fax:")), - 1, 2, 3, 4, - 0, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_entry_new(), - 2, 3, 0, 1, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_entry_new(), - 2, 3, 1, 2, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_entry_new(), - 2, 3, 2, 3, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_entry_new(), - 2, 3, 3, 4, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - return table; -} - -static GtkWidget * -_create_page_general_email(EContactEditor *e_contact_editor) -{ - GtkWidget *table; - GtkWidget *alignment; - table = gtk_table_new(3, 1, FALSE); - alignment = gtk_alignment_new(0,0,0,0); - gtk_container_add(GTK_CONTAINER(alignment), - gnome_pixmap_new_from_file("email.png")); - - gtk_table_attach(GTK_TABLE(table), - alignment, - 0, 1, 0, 1, - 0, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_label_new(_("Email:")), - 1, 2, 0, 1, - 0, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_entry_new(), - 2, 3, 0, 1, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - return table; -} - -static GtkWidget * -_create_page_general_web(EContactEditor *e_contact_editor) +static void +_add_image(GtkTable *table, gchar *image, int left, int right, int top, int bottom) { - GtkWidget *table; - GtkWidget *alignment; - table = gtk_table_new(3, 1, FALSE); - alignment = gtk_alignment_new(0,0,0,0); - gtk_container_add(GTK_CONTAINER(alignment), - gnome_pixmap_new_from_file("web.png")); - - gtk_table_attach(GTK_TABLE(table), - alignment, - 0, 1, 0, 1, - 0, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_label_new(_("Web page address:")), - 1, 2, 0, 1, - 0, 0, + gtk_table_attach(table, + gtk_widget_new(gtk_alignment_get_type(), + "child", gnome_pixmap_new_from_file(image), + "xalign", (double) 0, + "yalign", (double) 0, + "xscale", (double) 0, + "yscale", (double) 0, + NULL), + left, right, top, bottom, + GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_entry_new(), - 2, 3, 0, 1, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - return table; } -static GtkWidget * -_create_page_general_snailmail(EContactEditor *e_contact_editor) +static void +_add_images(GtkTable *table) { - GtkWidget *table; - GtkWidget *alignment; - GtkWidget *text; - table = gtk_table_new(3, 3, FALSE); - alignment = gtk_alignment_new(0,0,0,0); - gtk_container_add(GTK_CONTAINER(alignment), - gnome_pixmap_new_from_file("snailmail.png")); - - gtk_table_attach(GTK_TABLE(table), - alignment, - 0, 1, 0, 1, - 0, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_label_new(_("Address:")), - 1, 2, 0, 1, - 0, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_label_new(_("Business:")), - 1, 2, 1, 2, - 0, 0, - 0, 0); - text = gtk_text_new(NULL, NULL); - gtk_object_set(GTK_OBJECT(text), - "editable", TRUE, - NULL); - gtk_table_attach(GTK_TABLE(table), - text, - 2, 3, 0, 2, - GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - gtk_check_button_new_with_label(_("This is the mailing address")), - 2, 3, 2, 3, - 0, 0, - 0, 0); - return table; + _add_image(table, DATADIR "/evolution/head.png", 0, 1, 0, 4); + _add_image(table, DATADIR "/evolution/phone.png", 4, 5, 0, 4); + _add_image(table, DATADIR "/evolution/email.png", 0, 1, 5, 7); + _add_image(table, DATADIR "/evolution/web.png", 0, 1, 8, 10); + _add_image(table, DATADIR "/evolution/snailmail.png", 4, 5, 5, 10); } -static GtkWidget * -_create_page_general_comments(EContactEditor *e_contact_editor) +static void +_add_details_images(GtkTable *table) { - GtkWidget *text; - text = gtk_text_new(NULL, NULL); - gtk_object_set (GTK_OBJECT(text), - "editable", TRUE, - NULL); - return text; + _add_image(table, DATADIR "/evolution/briefcase.png", 0, 1, 0, 2); + _add_image(table, DATADIR "/evolution/head.png", 0, 1, 4, 6); + _add_image(table, DATADIR "/evolution/netmeeting.png", 0, 1, 7, 9); + _add_image(table, DATADIR "/evolution/netfreebusy.png", 0, 1, 10, 12); } -static GtkWidget * -_create_page_general_extras(EContactEditor *e_contact_editor) +static void +_replace_button(EContactEditor *editor, gchar *button_xml, gchar *image, GtkSignalFunc func) { - return gtk_entry_new(); + GladeXML *gui = editor->gui; + GtkWidget *button = glade_xml_get_widget(gui, button_xml); + gchar *image_temp; + image_temp = g_strdup_printf("%s%s", DATADIR "/evolution/", image); + gtk_container_add(GTK_CONTAINER(button), + gnome_pixmap_new_from_file(image_temp)); + g_free(image_temp); + gtk_signal_connect(GTK_OBJECT(button), "button_press_event", func, editor); + } -static GtkWidget * -_create_page_general( EContactEditor *e_contact_editor ) +static void +_replace_buttons(EContactEditor *editor) { - GtkWidget *table; - table = gtk_table_new(2, 5, FALSE); - gtk_table_attach(GTK_TABLE(table), - _create_page_general_name(e_contact_editor), - 0, 1, - 0, 1, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - _create_page_general_phone(e_contact_editor), - 1, 2, - 0, 1, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - _create_page_general_email(e_contact_editor), - 0, 1, - 1, 2, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - _create_page_general_web(e_contact_editor), - 0, 1, - 2, 3, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - _create_page_general_snailmail(e_contact_editor), - 1, 2, - 1, 3, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - _create_page_general_comments(e_contact_editor), - 0, 2, - 3, 4, - GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, - 0, 0); - gtk_table_attach(GTK_TABLE(table), - _create_page_general_extras(e_contact_editor), - 0, 2, - 4, 5, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - return table; + _replace_button(editor, "button-phone1", "arrow.png", _phone_arrow_pressed); + _replace_button(editor, "button-phone2", "arrow.png", _phone_arrow_pressed); + _replace_button(editor, "button-phone3", "arrow.png", _phone_arrow_pressed); + _replace_button(editor, "button-phone4", "arrow.png", _phone_arrow_pressed); + _replace_button(editor, "button-address1", "arrow.png", _address_arrow_pressed); + _replace_button(editor, "button-email1", "arrow.png", _email_arrow_pressed); } static void e_contact_editor_init (EContactEditor *e_contact_editor) { - GtkNotebook *notebook = GTK_NOTEBOOK (e_contact_editor); + GladeXML *gui; + GtkAdjustment *adjustment; /* e_contact_editor->card = NULL;*/ - e_contact_editor->fields = NULL; + gui = glade_xml_new (EVOLUTION_GLADEDIR "/contact-editor.glade", NULL); + e_contact_editor->gui = gui; + gtk_widget_reparent(glade_xml_get_widget(gui, "notebook-contact-editor"), + GTK_WIDGET(e_contact_editor)); + + _add_images(GTK_TABLE(glade_xml_get_widget(gui, "table-contact-editor-general"))); + _add_details_images(GTK_TABLE(glade_xml_get_widget(gui, "table-contact-editor-details"))); + _replace_buttons(e_contact_editor); + + gtk_object_get(GTK_OBJECT(glade_xml_get_widget(gui, "text-comments")), + "vadjustment", &adjustment, + NULL); + gtk_range_set_adjustment(GTK_RANGE(glade_xml_get_widget(gui, "vscrollbar-comments")), + adjustment); + + e_contact_editor->email_info = NULL; + e_contact_editor->phone_info = NULL; + e_contact_editor->address_info = NULL; + e_contact_editor->email_popup = NULL; + e_contact_editor->phone_popup = NULL; + e_contact_editor->address_popup = NULL; + e_contact_editor->email_list = NULL; + e_contact_editor->phone_list = NULL; + e_contact_editor->address_list = NULL; +} + +void +e_contact_editor_destroy (GtkObject *object) { + EContactEditor *e_contact_editor = E_CONTACT_EDITOR(object); + + if (e_contact_editor->email_list) { + g_list_foreach(e_contact_editor->email_list, (GFunc) g_free, NULL); + g_list_free(e_contact_editor->email_list); + } + if (e_contact_editor->email_info) { + g_free(e_contact_editor->email_info); + } + if (e_contact_editor->email_popup) { + gtk_widget_unref(e_contact_editor->email_popup); + } + + if (e_contact_editor->phone_list) { + g_list_foreach(e_contact_editor->phone_list, (GFunc) g_free, NULL); + g_list_free(e_contact_editor->phone_list); + } + if (e_contact_editor->phone_info) { + g_free(e_contact_editor->phone_info); + } + if (e_contact_editor->phone_popup) { + gtk_widget_unref(e_contact_editor->phone_popup); + } + + if (e_contact_editor->address_list) { + g_list_foreach(e_contact_editor->address_list, (GFunc) g_free, NULL); + g_list_free(e_contact_editor->address_list); + } + if (e_contact_editor->address_info) { + g_free(e_contact_editor->address_info); + } + if (e_contact_editor->address_popup) { + gtk_widget_unref(e_contact_editor->address_popup); + } - gtk_notebook_append_page (notebook, - _create_page_general(e_contact_editor), - gtk_label_new(_("General"))); + gtk_object_unref(GTK_OBJECT(e_contact_editor->gui)); } GtkWidget* @@ -436,3 +288,277 @@ e_contact_editor_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) break; } } + +static void +_popup_position(GtkMenu *menu, + gint *x, + gint *y, + gpointer data) +{ + GtkWidget *button = GTK_WIDGET(data); + int mh, mw; + gdk_window_get_origin (button->window, x, y); + *x += button->allocation.width; + *y += button->allocation.height; + + mh = GTK_WIDGET(menu)->allocation.height; + mw = GTK_WIDGET(menu)->allocation.width; + + *x -= mw; + if (*x < 0) + *x = 0; + + if (*y < 0) + *y = 0; + + if ((*x + mw) > gdk_screen_width ()) + *x = gdk_screen_width () - mw; + + if ((*y + mh) > gdk_screen_height ()) + *y = gdk_screen_height () - mh; +} + +static void +_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor, GtkWidget *popup, GList **list, GnomeUIInfo **info, gchar *label, gchar *entry, gchar *dialog_title) +{ + gint menu_item; + gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "button_press_event"); + gtk_widget_realize(popup); + menu_item = gnome_popup_menu_do_popup_modal(popup, _popup_position, widget, button, editor); + if ( menu_item != -1 ) { + if (menu_item == g_list_length (*list)) { + e_contact_editor_build_dialog(editor, entry, label, dialog_title, list, info); + } else { + gtk_object_set(GTK_OBJECT(glade_xml_get_widget(editor->gui, label)), + "label", g_list_nth_data(*list, menu_item), + NULL); + } + } +} + +static void +e_contact_editor_build_ui_info(GList *list, GnomeUIInfo **infop) +{ + GnomeUIInfo *info; + GnomeUIInfo singleton = { GNOME_APP_UI_ITEM, NULL, NULL, NULL, NULL, NULL, GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }; + GnomeUIInfo end = GNOMEUIINFO_END; + int length; + int i; + + info = *infop; + + if ( info ) + g_free(info); + length = g_list_length( list ); + info = g_new(GnomeUIInfo, length + 2); + for (i = 0; i < length; i++) { + info[i] = singleton; + info[i].label = _(list->data); + list = list->next; + } + info[i] = singleton; + info[i].label = N_("Other..."); + i++; + info[i] = end; + + *infop = info; +} + +static void +_dialog_clicked(GtkWidget *dialog, gint button, EContactEditor *editor) +{ + GtkWidget *label = gtk_object_get_data(GTK_OBJECT(dialog), + "e_contact_editor_label"); + GtkWidget *entry = gtk_object_get_data(GTK_OBJECT(dialog), + "e_contact_editor_entry"); + GtkWidget *dialog_entry = gtk_object_get_data(GTK_OBJECT(dialog), + "e_contact_editor_dialog_entry"); + GList **list = gtk_object_get_data(GTK_OBJECT(dialog), + "e_contact_editor_list"); + GList **info = gtk_object_get_data(GTK_OBJECT(dialog), + "e_contact_editor_info"); + switch (button) { + case 0: + gtk_object_set(GTK_OBJECT(label), + "label", gtk_entry_get_text(GTK_ENTRY(dialog_entry)), + NULL); + *list = g_list_append(*list, g_strdup(gtk_entry_get_text(GTK_ENTRY(dialog_entry)))); + g_free(*info); + *info = NULL; + break; + } + gnome_dialog_close(GNOME_DIALOG(dialog)); +} + +static void +_dialog_destroy(EContactEditor *editor, GtkWidget *dialog) +{ + gnome_dialog_close(GNOME_DIALOG(dialog)); +} + +static GtkWidget * +e_contact_editor_build_dialog(EContactEditor *editor, gchar *entry_id, gchar *label_id, gchar *title, GList **list, GnomeUIInfo **info) +{ + GtkWidget *dialog_entry = gtk_entry_new(); + GtkWidget *entry = glade_xml_get_widget(editor->gui, entry_id); + GtkWidget *label = glade_xml_get_widget(editor->gui, label_id); + + GtkWidget *dialog = gnome_dialog_new(title, + NULL); + + gtk_container_add(GTK_CONTAINER(GNOME_DIALOG(dialog)->vbox), + gtk_widget_new (gtk_frame_get_type(), + "border_width", 4, + "label", title, + "child", gtk_widget_new(gtk_alignment_get_type(), + "child", dialog_entry, + "xalign", .5, + "yalign", .5, + "xscale", 1.0, + "yscale", 1.0, + "border_width", 9, + NULL), + NULL)); + + gnome_dialog_append_button_with_pixmap(GNOME_DIALOG(dialog), + "Add", + GNOME_STOCK_PIXMAP_ADD); + gnome_dialog_append_button(GNOME_DIALOG(dialog), GNOME_STOCK_BUTTON_CANCEL); + gnome_dialog_set_default(GNOME_DIALOG(dialog), 0); + + gtk_signal_connect(GTK_OBJECT(dialog), "clicked", + _dialog_clicked, editor); + gtk_signal_connect_while_alive(GTK_OBJECT(editor), "destroy", + _dialog_destroy, GTK_OBJECT(dialog), GTK_OBJECT(dialog)); + + gtk_object_set_data(GTK_OBJECT(dialog), + "e_contact_editor_entry", entry); + gtk_object_set_data(GTK_OBJECT(dialog), + "e_contact_editor_label", label); + gtk_object_set_data(GTK_OBJECT(dialog), + "e_contact_editor_dialog_entry", dialog_entry); + gtk_object_set_data(GTK_OBJECT(dialog), + "e_contact_editor_list", list); + gtk_object_set_data(GTK_OBJECT(dialog), + "e_contact_editor_info", info); + + gtk_widget_show_all(dialog); + return dialog; +} + +static void +_phone_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor) +{ + int which; + int i; + gchar *label; + gchar *entry; + if ( widget == glade_xml_get_widget(editor->gui, "button-phone1") ) { + which = 1; + } else if ( widget == glade_xml_get_widget(editor->gui, "button-phone2") ) { + which = 2; + } else if ( widget == glade_xml_get_widget(editor->gui, "button-phone3") ) { + which = 3; + } else if ( widget == glade_xml_get_widget(editor->gui, "button-phone4") ) { + which = 4; + } else + return; + + label = g_strdup_printf("label-phone%d", which); + entry = g_strdup_printf("entry-phone%d", which); + + if (editor->phone_list == NULL) { + static char *info[] = { + N_("Assistant"), + N_("Business"), + N_("Business 2"), + N_("Business Fax"), + N_("Callback"), + N_("Car"), + N_("Company"), + N_("Home"), + N_("Home 2"), + N_("Home Fax"), + N_("ISDN"), + N_("Mobile"), + N_("Other"), + N_("Other Fax"), + N_("Pager"), + N_("Primary"), + N_("Radio"), + N_("Telex"), + N_("TTY/TDD") + }; + + for (i = 0; i < sizeof(info) / sizeof(info[0]); i++) { + editor->phone_list = g_list_append(editor->phone_list, g_strdup(info[i])); + } + } + if (editor->phone_info == NULL) { + e_contact_editor_build_ui_info(editor->phone_list, &editor->phone_info); + + if ( editor->phone_popup ) + gtk_widget_unref(editor->phone_popup); + + editor->phone_popup = gnome_popup_menu_new(editor->phone_info); + } + + _arrow_pressed (widget, button, editor, editor->phone_popup, &editor->phone_list, &editor->phone_info, label, entry, "Add new phone number type"); + + g_free(label); + g_free(entry); +} + +static void +_email_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor) +{ + int i; + if (editor->email_list == NULL) { + static char *info[] = { + N_("Email"), + N_("Email 2"), + N_("Email 3") + }; + + for (i = 0; i < sizeof(info) / sizeof(info[0]); i++) { + editor->email_list = g_list_append(editor->email_list, g_strdup(info[i])); + } + } + if (editor->email_info == NULL) { + e_contact_editor_build_ui_info(editor->email_list, &editor->email_info); + + if ( editor->email_popup ) + gtk_widget_unref(editor->email_popup); + + editor->email_popup = gnome_popup_menu_new(editor->email_info); + } + + _arrow_pressed (widget, button, editor, editor->email_popup, &editor->email_list, &editor->email_info, "label-email1", "entry-email1", "Add new Email type"); +} + +static void +_address_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor) +{ + int i; + if (editor->address_list == NULL) { + static char *info[] = { + N_("Business"), + N_("Home"), + N_("Other") + }; + + for (i = 0; i < sizeof(info) / sizeof(info[0]); i++) { + editor->address_list = g_list_append(editor->address_list, g_strdup(info[i])); + } + } + if (editor->address_info == NULL) { + e_contact_editor_build_ui_info(editor->address_list, &editor->address_info); + + if ( editor->address_popup ) + gtk_widget_unref(editor->address_popup); + + editor->address_popup = gnome_popup_menu_new(editor->address_info); + } + + _arrow_pressed (widget, button, editor, editor->address_popup, &editor->address_list, &editor->address_info, "label-address1", "entry-address1", "Add new Address type"); +} |