diff options
Diffstat (limited to 'addressbook')
-rw-r--r-- | addressbook/ChangeLog | 20 | ||||
-rw-r--r-- | addressbook/conduit/address-conduit.c | 177 | ||||
-rw-r--r-- | addressbook/gui/contact-editor/e-contact-editor.c | 2 |
3 files changed, 178 insertions, 21 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index 9978df9d77..5b797ab976 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,5 +1,25 @@ 2002-02-04 JP Rosevear <jpr@ximian.com> + * gui/contact-editor/e-contact-editor.c (find_address_mailing): tidy + + * conduit/address-conduit.c (addrconduit_load_configuration): load + default address setting + (addrconduit_save_configuration): save default address setting + (e_addr_gui_new): new gui routine for conduit settings + (e_addr_gui_fill_widgets): ditto + (e_addr_gui_fill_config): ditto + (e_addr_gui_destroy): ditto + (e_addr_context_destroy): destroy the gui and new_cfg + (local_record_from_ecard): reinstate commented out bits, determine + which address to sync to pilot + (ecard_from_remote_record): determine which address to sync from + pilot + (fill_widgets): put the gui widgets in + (create_settings_window): create gui + (save_settings): fill gui + +2002-02-04 JP Rosevear <jpr@ximian.com> + * gui/contact-editor/e-contact-editor.c (address_text_changed): if the shown address in the mailing address or there is no mailing address, set the default flag and make sure the button is checked diff --git a/addressbook/conduit/address-conduit.c b/addressbook/conduit/address-conduit.c index cd7cb9918b..48f3fa03d8 100644 --- a/addressbook/conduit/address-conduit.c +++ b/addressbook/conduit/address-conduit.c @@ -40,6 +40,7 @@ #include <gpilotd/gnome-pilot-conduit-sync-abs.h> #include <libgpilotdCM/gnome-pilot-conduit-management.h> #include <libgpilotdCM/gnome-pilot-conduit-config.h> +#include <e-dialog-widgets.h> #include <e-pilot-map.h> #include <e-pilot-settings.h> #include <e-pilot-util.h> @@ -131,6 +132,7 @@ static int priority_label [] = { typedef struct _EAddrLocalRecord EAddrLocalRecord; typedef struct _EAddrConduitCfg EAddrConduitCfg; +typedef struct _EAddrConduitGui EAddrConduitGui; typedef struct _EAddrConduitContext EAddrConduitContext; /* Local Record */ @@ -164,6 +166,8 @@ struct _EAddrConduitCfg { GnomePilotConduitSyncType sync_type; gboolean secret; + ECardSimpleAddressId default_address; + gchar *last_uri; }; @@ -173,7 +177,7 @@ addrconduit_load_configuration (guint32 pilot_id) EAddrConduitCfg *c; GnomePilotConduitManagement *management; GnomePilotConduitConfig *config; - gchar prefix[256]; + gchar *address, prefix[256]; g_snprintf (prefix, 255, "/gnome-pilot.d/e-address-conduit/Pilot_%u/", pilot_id); @@ -192,6 +196,14 @@ addrconduit_load_configuration (guint32 pilot_id) gnome_config_push_prefix (prefix); c->secret = gnome_config_get_bool ("secret=FALSE"); + address = gnome_config_get_string ("default_address=business"); + if (!strcmp (address, "business")) + c->default_address = E_CARD_SIMPLE_ADDRESS_ID_BUSINESS; + else if (!strcmp (address, "home")) + c->default_address = E_CARD_SIMPLE_ADDRESS_ID_HOME; + else if (!strcmp (address, "other")) + c->default_address = E_CARD_SIMPLE_ADDRESS_ID_OTHER; + g_free (address); c->last_uri = gnome_config_get_string ("last_uri"); gnome_config_pop_prefix (); @@ -209,6 +221,19 @@ addrconduit_save_configuration (EAddrConduitCfg *c) gnome_config_push_prefix (prefix); gnome_config_set_bool ("secret", c->secret); + switch (c->default_address) { + case E_CARD_SIMPLE_ADDRESS_ID_BUSINESS: + gnome_config_set_string ("default_address", "business"); + break; + case E_CARD_SIMPLE_ADDRESS_ID_HOME: + gnome_config_set_string ("default_address", "home"); + break; + case E_CARD_SIMPLE_ADDRESS_ID_OTHER: + gnome_config_set_string ("default_address", "other"); + break; + default: + g_warning ("Unknown default_address value"); + } gnome_config_set_string ("last_uri", c->last_uri); gnome_config_pop_prefix (); @@ -225,9 +250,10 @@ addrconduit_dupe_configuration (EAddrConduitCfg *c) retval = g_new0 (EAddrConduitCfg, 1); retval->sync_type = c->sync_type; - retval->secret = c->secret; - retval->pilot_id = c->pilot_id; + + retval->secret = c->secret; + retval->default_address = c->default_address; retval->last_uri = g_strdup (c->last_uri); return retval; @@ -242,12 +268,91 @@ addrconduit_destroy_configuration (EAddrConduitCfg *c) g_free (c); } +/* Gui */ +struct _EAddrConduitGui { + GtkWidget *default_address; +}; + +static EAddrConduitGui * +e_addr_gui_new (EPilotSettings *ps) +{ + EAddrConduitGui *gui; + GtkWidget *lbl, *menu; + gint rows, i; + static const char *items[] = {"Business", "Home", "Other", NULL}; + + g_return_val_if_fail (ps != NULL, NULL); + g_return_val_if_fail (E_IS_PILOT_SETTINGS (ps), NULL); + + gtk_table_resize (GTK_TABLE (ps), E_PILOT_SETTINGS_TABLE_ROWS + 1, + E_PILOT_SETTINGS_TABLE_COLS); + + gui = g_new0 (EAddrConduitGui, 1); + + rows = E_PILOT_SETTINGS_TABLE_ROWS; + lbl = gtk_label_new (_("Default Sync Address:")); + gtk_misc_set_alignment (GTK_MISC (lbl), 0.0, 0.5); + gui->default_address = gtk_option_menu_new (); + menu = gtk_menu_new (); + for (i = 0; items[i] != NULL; i++) { + GtkWidget *item; + + item = gtk_menu_item_new_with_label (items[i]); + gtk_widget_show (item); + + gtk_menu_append (GTK_MENU (menu), item); + } + gtk_widget_show (menu); + gtk_option_menu_set_menu (GTK_OPTION_MENU (gui->default_address), menu); + gtk_table_attach_defaults (GTK_TABLE (ps), lbl, 0, 1, rows, rows + 1); + gtk_table_attach_defaults (GTK_TABLE (ps), gui->default_address, 1, 2, rows, rows + 1); + gtk_widget_show (lbl); + gtk_widget_show (gui->default_address); + + return gui; +} + +static const int default_address_map[] = { + E_CARD_SIMPLE_ADDRESS_ID_BUSINESS, + E_CARD_SIMPLE_ADDRESS_ID_HOME, + E_CARD_SIMPLE_ADDRESS_ID_OTHER, + -1 +}; + +static void +e_addr_gui_fill_widgets (EAddrConduitGui *gui, EAddrConduitCfg *cfg) +{ + g_return_if_fail (gui != NULL); + g_return_if_fail (cfg != NULL); + + e_dialog_option_menu_set (gui->default_address, + cfg->default_address, + default_address_map); +} + +static void +e_addr_gui_fill_config (EAddrConduitGui *gui, EAddrConduitCfg *cfg) +{ + g_return_if_fail (gui != NULL); + g_return_if_fail (cfg != NULL); + + cfg->default_address = e_dialog_option_menu_get (gui->default_address, + default_address_map); +} + +static void +e_addr_gui_destroy (EAddrConduitGui *gui) +{ + g_free (gui); +} + /* Context */ struct _EAddrConduitContext { - EAddrConduitCfg *cfg; GnomePilotDBInfo *dbi; - + + EAddrConduitCfg *cfg; EAddrConduitCfg *new_cfg; + EAddrConduitGui *gui; GtkWidget *ps; struct AddressAppInfo ai; @@ -271,6 +376,7 @@ e_addr_context_new (guint32 pilot_id) ctxt->cfg = addrconduit_load_configuration (pilot_id); ctxt->new_cfg = addrconduit_dupe_configuration (ctxt->cfg); + ctxt->gui = NULL; ctxt->ps = NULL; ctxt->ebook = NULL; ctxt->cards = NULL; @@ -291,7 +397,11 @@ e_addr_context_destroy (EAddrConduitContext *ctxt) if (ctxt->cfg != NULL) addrconduit_destroy_configuration (ctxt->cfg); - + if (ctxt->new_cfg != NULL) + addrconduit_destroy_configuration (ctxt->new_cfg); + if (ctxt->gui != NULL) + e_addr_gui_destroy (ctxt->gui); + if (ctxt->ebook != NULL) gtk_object_unref (GTK_OBJECT (ctxt->ebook)); @@ -776,6 +886,7 @@ local_record_from_ecard (EAddrLocalRecord *local, ECard *ecard, EAddrConduitCont { ECardSimple *simple; const ECardDeliveryAddress *delivery; + ECardSimpleAddressId mailing_address; int phone = entryPhone1; gboolean syncable; @@ -810,16 +921,16 @@ local_record_from_ecard (EAddrLocalRecord *local, ECard *ecard, EAddrConduitCont memset (&addr, 0, sizeof (struct Address)); unpack_Address (&addr, record, 0xffff); for (i = 0; i < 5; i++) { -// if (addr.entry[entryPhone1 + i]) -// local->addr->entry[entryPhone1 + i] = -// strdup (addr.entry[entryPhone1 + i]); + if (addr.entry[entryPhone1 + i]) + local->addr->entry[entryPhone1 + i] = + strdup (addr.entry[entryPhone1 + i]); local->addr->phoneLabel[i] = addr.phoneLabel[i]; } local->addr->showPhone = addr.showPhone; for (i = 0; i < 4; i++) { -// if (addr.entry[entryCustom1 + i]) -// local->addr->entry[entryCustom1 + i] = -// strdup (addr.entry[entryCustom1 + i]); + if (addr.entry[entryCustom1 + i]) + local->addr->entry[entryCustom1 + i] = + strdup (addr.entry[entryCustom1 + i]); } free_Address (&addr); } @@ -833,7 +944,18 @@ local_record_from_ecard (EAddrLocalRecord *local, ECard *ecard, EAddrConduitCont local->addr->entry[entryCompany] = e_pilot_utf8_to_pchar (ecard->org); local->addr->entry[entryTitle] = e_pilot_utf8_to_pchar (ecard->title); - delivery = e_card_simple_get_delivery_address (simple, E_CARD_SIMPLE_ADDRESS_ID_BUSINESS); + mailing_address = -1; + for (i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i++) { + const ECardAddrLabel *address; + + address = e_card_simple_get_address(simple, i); + if (address && (address->flags & E_CARD_ADDR_DEFAULT)) + mailing_address = i; + } + if (mailing_address == -1) + mailing_address = ctxt->cfg->default_address; + + delivery = e_card_simple_get_delivery_address (simple, mailing_address); if (delivery) { local->addr->entry[entryAddress] = e_pilot_utf8_to_pchar (delivery->street); local->addr->entry[entryCity] = e_pilot_utf8_to_pchar (delivery->city); @@ -958,6 +1080,7 @@ ecard_from_remote_record(EAddrConduitContext *ctxt, ECardName *name; ECardDeliveryAddress *delivery; ECardAddrLabel *label; + ECardSimpleAddressId mailing_address; char *txt; ECardSimpleField next_mail, next_home, next_work, next_fax; ECardSimpleField next_other, next_main, next_pager, next_mobile; @@ -1000,8 +1123,19 @@ ecard_from_remote_record(EAddrConduitContext *ctxt, g_free (txt); /* Address */ + mailing_address = -1; + for (i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i++) { + const ECardAddrLabel *addr; + + addr = e_card_simple_get_address(simple, i); + if (addr && (addr->flags & E_CARD_ADDR_DEFAULT)) + mailing_address = i; + } + if (mailing_address == -1) + mailing_address = ctxt->cfg->default_address; + delivery = e_card_delivery_address_new (); - delivery->flags = E_CARD_ADDR_WORK; + delivery->flags |= E_CARD_ADDR_DEFAULT; delivery->street = get_entry_text (address, entryAddress); delivery->city = get_entry_text (address, entryCity); delivery->region = get_entry_text (address, entryState); @@ -1009,12 +1143,12 @@ ecard_from_remote_record(EAddrConduitContext *ctxt, delivery->code = get_entry_text (address, entryZip); label = e_card_address_label_new (); - label->flags = E_CARD_ADDR_WORK; + label->flags |= E_CARD_ADDR_DEFAULT; label->data = e_card_delivery_address_to_string (delivery); - e_card_simple_set_address (simple, E_CARD_SIMPLE_ADDRESS_ID_BUSINESS, label); - e_card_simple_set_delivery_address (simple, E_CARD_SIMPLE_ADDRESS_ID_BUSINESS, delivery); - + e_card_simple_set_address (simple, mailing_address, label); + e_card_simple_set_delivery_address (simple, mailing_address, delivery); + e_card_delivery_address_unref (delivery); e_card_address_label_unref (label); @@ -1644,6 +1778,8 @@ fill_widgets (EAddrConduitContext *ctxt) { e_pilot_settings_set_secret (E_PILOT_SETTINGS (ctxt->ps), ctxt->cfg->secret); + + e_addr_gui_fill_widgets (ctxt->gui, ctxt->cfg); } static gint @@ -1654,6 +1790,8 @@ create_settings_window (GnomePilotConduit *conduit, LOG ("create_settings_window"); ctxt->ps = e_pilot_settings_new (); + ctxt->gui = e_addr_gui_new (E_PILOT_SETTINGS (ctxt->ps)); + gtk_container_add (GTK_CONTAINER (parent), ctxt->ps); gtk_widget_show (ctxt->ps); @@ -1676,7 +1814,8 @@ save_settings (GnomePilotConduit *conduit, EAddrConduitContext *ctxt) ctxt->new_cfg->secret = e_pilot_settings_get_secret (E_PILOT_SETTINGS (ctxt->ps)); - + e_addr_gui_fill_config (ctxt->gui, ctxt->new_cfg); + addrconduit_save_configuration (ctxt->new_cfg); } diff --git a/addressbook/gui/contact-editor/e-contact-editor.c b/addressbook/gui/contact-editor/e-contact-editor.c index 016e515fd0..58d3a32be6 100644 --- a/addressbook/gui/contact-editor/e-contact-editor.c +++ b/addressbook/gui/contact-editor/e-contact-editor.c @@ -2014,8 +2014,6 @@ find_address_mailing (EContactEditor *editor) } } } - - } static void |