diff options
Diffstat (limited to 'addressbook/gui')
-rw-r--r-- | addressbook/gui/merging/Makefile.am | 3 | ||||
-rw-r--r-- | addressbook/gui/merging/e-card-merging-book-commit-duplicate-detected.glade | 255 | ||||
-rw-r--r-- | addressbook/gui/merging/e-card-merging.c | 78 | ||||
-rw-r--r-- | addressbook/gui/merging/e-card-merging.h | 12 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-table-adapter.c | 4 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-util.c | 2 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-minicard.c | 9 |
7 files changed, 344 insertions, 19 deletions
diff --git a/addressbook/gui/merging/Makefile.am b/addressbook/gui/merging/Makefile.am index 493edc0002..5a00726f26 100644 --- a/addressbook/gui/merging/Makefile.am +++ b/addressbook/gui/merging/Makefile.am @@ -16,7 +16,8 @@ libecardmerging_a_SOURCES = \ gladedir = $(datadir)/evolution/glade -glade_DATA = e-card-duplicate-detected.glade +glade_DATA = e-card-duplicate-detected.glade \ + e-card-merging-book-commit-duplicate-detected.glade EXTRA_DIST = \ $(glade_DATA) diff --git a/addressbook/gui/merging/e-card-merging-book-commit-duplicate-detected.glade b/addressbook/gui/merging/e-card-merging-book-commit-duplicate-detected.glade new file mode 100644 index 0000000000..0bc60ba13a --- /dev/null +++ b/addressbook/gui/merging/e-card-merging-book-commit-duplicate-detected.glade @@ -0,0 +1,255 @@ +<?xml version="1.0"?> +<GTK-Interface> + +<project> + <name>e-card-merging-book-commit-duplicate-detected</name> + <program_name>e-card-merging-book-commit-duplicate-detected</program_name> + <directory></directory> + <source_directory>src</source_directory> + <pixmaps_directory>pixmaps</pixmaps_directory> + <language>C</language> + <gnome_support>True</gnome_support> + <gettext_support>True</gettext_support> + <use_widget_names>True</use_widget_names> + <output_main_file>False</output_main_file> + <output_support_files>False</output_support_files> + <output_build_files>False</output_build_files> + <gnome_help_support>True</gnome_help_support> +</project> + +<widget> + <class>GnomeDialog</class> + <name>dialog-duplicate-contact</name> + <title>Duplicate Contact Detected</title> + <type>GTK_WINDOW_POPUP</type> + <position>GTK_WIN_POS_NONE</position> + <modal>False</modal> + <allow_shrink>False</allow_shrink> + <allow_grow>True</allow_grow> + <auto_shrink>False</auto_shrink> + <auto_close>False</auto_close> + <hide_on_close>False</hide_on_close> + + <widget> + <class>GtkVBox</class> + <child_name>GnomeDialog:vbox</child_name> + <name>dialog-vbox1</name> + <homogeneous>False</homogeneous> + <spacing>8</spacing> + <child> + <padding>4</padding> + <expand>True</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkHButtonBox</class> + <child_name>GnomeDialog:action_area</child_name> + <name>dialog-action_area1</name> + <layout_style>GTK_BUTTONBOX_END</layout_style> + <spacing>8</spacing> + <child_min_width>85</child_min_width> + <child_min_height>27</child_min_height> + <child_ipad_x>7</child_ipad_x> + <child_ipad_y>0</child_ipad_y> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + <pack>GTK_PACK_END</pack> + </child> + + <widget> + <class>GtkButton</class> + <name>button3</name> + <can_default>True</can_default> + <can_focus>True</can_focus> + <label>Change Anyway</label> + <stock_pixmap>GNOME_STOCK_PIXMAP_ADD</stock_pixmap> + </widget> + + <widget> + <class>GtkButton</class> + <name>button4</name> + <can_default>True</can_default> + <can_focus>True</can_focus> + <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button> + </widget> + </widget> + + <widget> + <class>GtkTable</class> + <name>table1</name> + <rows>5</rows> + <columns>2</columns> + <homogeneous>False</homogeneous> + <row_spacing>6</row_spacing> + <column_spacing>6</column_spacing> + <child> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> + </child> + + <widget> + <class>Custom</class> + <name>custom-old-card</name> + <creation_function>e_card_merging_create_old_card</creation_function> + <int1>0</int1> + <int2>0</int2> + <last_modification_time>Fri, 08 Jun 2001 01:33:22 GMT</last_modification_time> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>4</top_attach> + <bottom_attach>5</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>True</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>True</yfill> + </child> + </widget> + + <widget> + <class>GtkLabel</class> + <name>label1</name> + <label>The changed email or name of this contact already +exists in this folder. Would you like to add it anyway?</label> + <justify>GTK_JUSTIFY_LEFT</justify> + <wrap>False</wrap> + <xalign>0</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>True</yfill> + </child> + </widget> + + <widget> + <class>GtkLabel</class> + <name>label3</name> + <label>Conflicting Contact:</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>3</top_attach> + <bottom_attach>4</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>True</yfill> + </child> + </widget> + + <widget> + <class>GtkLabel</class> + <name>label4</name> + <label>Changed Contact:</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>Custom</class> + <name>custom-new-card</name> + <creation_function>e_card_merging_create_old_card</creation_function> + <int1>0</int1> + <int2>0</int2> + <last_modification_time>Fri, 08 Jun 2001 01:33:22 GMT</last_modification_time> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>2</top_attach> + <bottom_attach>3</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>True</xexpand> + <yexpand>True</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>True</yfill> + </child> + </widget> + + <widget> + <class>GtkAlignment</class> + <name>alignment1</name> + <xalign>0.5</xalign> + <yalign>0</yalign> + <xscale>1</xscale> + <yscale>0</yscale> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>0</top_attach> + <bottom_attach>5</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>True</yfill> + </child> + + <widget> + <class>Custom</class> + <name>custom2</name> + <creation_function>e_create_image_widget</creation_function> + <string1>malehead.png</string1> + <int1>0</int1> + <int2>0</int2> + <last_modification_time>Fri, 08 Jun 2001 00:18:39 GMT</last_modification_time> + </widget> + </widget> + </widget> + </widget> +</widget> + +</GTK-Interface> diff --git a/addressbook/gui/merging/e-card-merging.c b/addressbook/gui/merging/e-card-merging.c index c367a60271..dd8c317990 100644 --- a/addressbook/gui/merging/e-card-merging.c +++ b/addressbook/gui/merging/e-card-merging.c @@ -17,23 +17,50 @@ #include <gtk/gtksignal.h> #include "addressbook/gui/widgets/e-minicard-widget.h" +typedef enum { + E_CARD_MERGING_ADD, + E_CARD_MERGING_COMMIT +} ECardMergingOpType; + typedef struct { + ECardMergingOpType op; EBook *book; ECard *card; - EBookIdCallback cb; + EBookIdCallback id_cb; + EBookCallback cb; gpointer closure; } ECardMergingLookup; static void +doit (ECardMergingLookup *lookup) +{ + if (lookup->op == E_CARD_MERGING_ADD) + e_book_add_card (lookup->book, lookup->card, lookup->id_cb, lookup->closure); + else if (lookup->op == E_CARD_MERGING_COMMIT) + e_book_commit_card (lookup->book, lookup->card, lookup->cb, lookup->closure); +} + +static void +cancelit (ECardMergingLookup *lookup) +{ + if (lookup->op == E_CARD_MERGING_ADD) { + if (lookup->id_cb) + lookup->id_cb (lookup->book, E_BOOK_STATUS_CANCELLED, NULL, lookup->closure); + } else if (lookup->op == E_CARD_MERGING_COMMIT) { + if (lookup->cb) + lookup->cb (lookup->book, E_BOOK_STATUS_CANCELLED, lookup->closure); + } +} + +static void clicked (GnomeDialog *dialog, int button, ECardMergingLookup *lookup) { switch (button) { case 0: - e_book_add_card (lookup->book, lookup->card, lookup->cb, lookup->closure); + doit (lookup); break; case 1: - if (lookup->cb) - lookup->cb (lookup->book, E_BOOK_STATUS_CANCELLED, NULL, lookup->closure); + cancelit (lookup); break; } g_free (lookup); @@ -45,12 +72,23 @@ match_query_callback (ECard *card, ECard *match, ECardMatchType type, gpointer c { ECardMergingLookup *lookup = closure; if (type == E_CARD_MATCH_NONE) { - e_book_add_card (lookup->book, card, lookup->cb, lookup->closure); + doit (lookup); g_free (lookup); } else { - GladeXML *ui = glade_xml_new (EVOLUTION_GLADEDIR "/e-card-duplicate-detected.glade", NULL); + GladeXML *ui; + GtkWidget *widget; + if (lookup->op == E_CARD_MERGING_ADD) + ui = glade_xml_new (EVOLUTION_GLADEDIR "/e-card-duplicate-detected.glade", NULL); + else if (lookup->op == E_CARD_MERGING_COMMIT) + ui = glade_xml_new (EVOLUTION_GLADEDIR "/e-card-merging-book-commit-duplicate-detected.glade", NULL); + else { + doit (lookup); + g_free (lookup); + return; + } + widget = glade_xml_get_widget (ui, "custom-old-card"); gtk_object_set (GTK_OBJECT (widget), "card", match, @@ -77,15 +115,41 @@ e_card_merging_book_add_card (EBook *book, ECardMergingLookup *lookup; lookup = g_new (ECardMergingLookup, 1); + lookup->op = E_CARD_MERGING_ADD; lookup->book = book; lookup->card = card; - lookup->cb = cb; + lookup->id_cb = cb; lookup->closure = closure; e_card_locate_match_full (book, card, NULL, match_query_callback, lookup); return TRUE; } +gboolean +e_card_merging_book_commit_card (EBook *book, + ECard *card, + EBookCallback cb, + gpointer closure) +{ + ECardMergingLookup *lookup; + GList *avoid; + lookup = g_new (ECardMergingLookup, 1); + + lookup->op = E_CARD_MERGING_COMMIT; + lookup->book = book; + lookup->card = card; + lookup->cb = cb; + lookup->closure = closure; + + avoid = g_list_append (NULL, card); + + e_card_locate_match_full (book, card, avoid, match_query_callback, lookup); + + g_list_free (avoid); + + return TRUE; +} + GtkWidget * e_card_merging_create_old_card(gchar *name, gchar *string1, gchar *string2, diff --git a/addressbook/gui/merging/e-card-merging.h b/addressbook/gui/merging/e-card-merging.h index 022cad0099..c4d9483beb 100644 --- a/addressbook/gui/merging/e-card-merging.h +++ b/addressbook/gui/merging/e-card-merging.h @@ -17,10 +17,14 @@ BEGIN_GNOME_DECLS -gboolean e_card_merging_book_add_card (EBook *book, - ECard *card, - EBookIdCallback cb, - gpointer closure); +gboolean e_card_merging_book_add_card (EBook *book, + ECard *card, + EBookIdCallback cb, + gpointer closure); +gboolean e_card_merging_book_commit_card (EBook *book, + ECard *card, + EBookCallback cb, + gpointer closure); END_GNOME_DECLS diff --git a/addressbook/gui/widgets/e-addressbook-table-adapter.c b/addressbook/gui/widgets/e-addressbook-table-adapter.c index 9557046afe..38596fd0f0 100644 --- a/addressbook/gui/widgets/e-addressbook-table-adapter.c +++ b/addressbook/gui/widgets/e-addressbook-table-adapter.c @@ -136,8 +136,8 @@ addressbook_set_value_at (ETableModel *etc, int col, int row, const void *val) "card", &card, NULL); - e_book_commit_card(e_addressbook_model_get_ebook(priv->model), - card, card_modified_cb, NULL); + e_card_merging_book_commit_card(e_addressbook_model_get_ebook(priv->model), + card, card_modified_cb, NULL); /* XXX do we need this? shouldn't the commit_card generate a changed signal? */ e_table_model_cell_changed(etc, col, row); diff --git a/addressbook/gui/widgets/e-addressbook-util.c b/addressbook/gui/widgets/e-addressbook-util.c index 6db628c412..c8ef417116 100644 --- a/addressbook/gui/widgets/e-addressbook-util.c +++ b/addressbook/gui/widgets/e-addressbook-util.c @@ -95,7 +95,7 @@ commit_card_cb (EContactEditor *ce, ECard *card, gpointer data) EBook *book; book = E_BOOK (data); - e_book_commit_card (book, card, card_modified_cb, NULL); + e_card_merging_book_commit_card (book, card, card_modified_cb, NULL); } /* Callback for the delete_card signal from the contact editor */ diff --git a/addressbook/gui/widgets/e-minicard.c b/addressbook/gui/widgets/e-minicard.c index 1627dd722a..d6cb8f0e1a 100644 --- a/addressbook/gui/widgets/e-minicard.c +++ b/addressbook/gui/widgets/e-minicard.c @@ -37,6 +37,7 @@ #include "e-minicard-label.h" #include "e-minicard-view.h" #include "e-contact-editor.h" +#include "e-card-merging.h" static void e_minicard_init (EMinicard *card); static void e_minicard_class_init (EMinicardClass *klass); @@ -479,10 +480,10 @@ e_minicard_event (GnomeCanvasItem *item, GdkEvent *event) if (book) { /* Add the card in the contact editor to our ebook */ - e_book_commit_card (book, - e_minicard->card, - card_modified_cb, - NULL); + e_card_merging_book_commit_card (book, + e_minicard->card, + card_modified_cb, + NULL); } else { remodel(e_minicard); e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(e_minicard)); |