LCOV - code coverage report
Current view: top level - libgnucash/engine - gncAddress.c (source / functions) Coverage Total Hit
Test: gnucash.info Lines: 83.6 % 275 230
Test Date: 2026-11-02 18:19:43 Functions: 86.0 % 43 37
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /********************************************************************\
       2              :  * gncAddress.c -- an Address object                                *
       3              :  *                                                                  *
       4              :  * This program is free software; you can redistribute it and/or    *
       5              :  * modify it under the terms of the GNU General Public License as   *
       6              :  * published by the Free Software Foundation; either version 2 of   *
       7              :  * the License, or (at your option) any later version.              *
       8              :  *                                                                  *
       9              :  * This program is distributed in the hope that it will be useful,  *
      10              :  * but WITHOUT ANY WARRANTY; without even the implied warranty of   *
      11              :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    *
      12              :  * GNU General Public License for more details.                     *
      13              :  *                                                                  *
      14              :  * You should have received a copy of the GNU General Public License*
      15              :  * along with this program; if not, contact:                        *
      16              :  *                                                                  *
      17              :  * Free Software Foundation           Voice:  +1-617-542-5942       *
      18              :  * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
      19              :  * Boston, MA  02110-1301,  USA       gnu@gnu.org                   *
      20              :  *                                                                  *
      21              : \********************************************************************/
      22              : 
      23              : /*
      24              :  * Copyright (C) 2001 Derek Atkins
      25              :  * Author: Derek Atkins <warlord@MIT.EDU>
      26              :  */
      27              : 
      28              : #include <config.h>
      29              : 
      30              : #include <glib.h>
      31              : #include <qofinstance-p.h>
      32              : 
      33              : #include "gncAddress.h"
      34              : #include "gncAddressP.h"
      35              : #include "gncCustomerP.h"
      36              : #include "gnc-features.h"
      37              : 
      38              : struct _gncAddress
      39              : {
      40              :     QofInstance inst;
      41              : 
      42              :     QofBook *     book;
      43              :     QofInstance * parent;
      44              :     gboolean      dirty;
      45              :     const char *  name;
      46              :     const char *  addr1;
      47              :     const char *  addr2;
      48              :     const char *  addr3;
      49              :     const char *  addr4;
      50              :     const char *  phone;
      51              :     const char *  fax;
      52              :     const char *  email;
      53              : };
      54              : 
      55              : struct _gncAddressClass
      56              : {
      57              :     QofInstanceClass parent_class;
      58              : };
      59              : 
      60              : static QofLogModule log_module = GNC_MOD_BUSINESS;
      61              : 
      62              : #define _GNC_MOD_NAME   GNC_ADDRESS_MODULE_NAME
      63              : 
      64              : static inline void mark_address (GncAddress *address);
      65           48 : void mark_address (GncAddress *address)
      66              : {
      67           48 :     address->dirty = TRUE;
      68              : 
      69           48 :     if (address->parent)
      70           48 :         qof_instance_set_dirty(address->parent);
      71           48 :     qof_event_gen (QOF_INSTANCE(address), QOF_EVENT_MODIFY, address->parent);
      72           48 :     qof_event_gen (address->parent, QOF_EVENT_MODIFY, NULL);
      73           48 : }
      74              : 
      75              : enum
      76              : {
      77              :     PROP_0,
      78              :     PROP_NAME,
      79              :     PROP_ADDR1,
      80              :     PROP_ADDR2,
      81              :     PROP_ADDR3,
      82              :     PROP_ADDR4,
      83              :     PROP_PHONE,
      84              :     PROP_FAX,
      85              :     PROP_EMAIL
      86              : };
      87              : 
      88              : /* GObject Initialization */
      89       480892 : G_DEFINE_TYPE(GncAddress, gnc_address, QOF_TYPE_INSTANCE)
      90              : 
      91              : static void
      92          131 : gnc_address_init(GncAddress* addr)
      93              : {
      94          131 : }
      95              : 
      96              : static void
      97           71 : gnc_address_dispose(GObject *addrp)
      98              : {
      99           71 :     G_OBJECT_CLASS(gnc_address_parent_class)->dispose(addrp);
     100           71 : }
     101              : 
     102              : static void
     103           71 : gnc_address_finalize(GObject* addrp)
     104              : {
     105           71 :     G_OBJECT_CLASS(gnc_address_parent_class)->finalize(addrp);
     106           71 : }
     107              : 
     108              : static void
     109           32 : gnc_address_get_property (GObject         *object,
     110              :                           guint            prop_id,
     111              :                           GValue          *value,
     112              :                           GParamSpec      *pspec)
     113              : {
     114              :     GncAddress *address;
     115              : 
     116           32 :     g_return_if_fail(GNC_IS_ADDRESS(object));
     117              : 
     118           32 :     address = GNC_ADDRESS(object);
     119           32 :     switch (prop_id)
     120              :     {
     121            4 :     case PROP_NAME:
     122            4 :         g_value_set_string(value, address->name);
     123            4 :         break;
     124            4 :     case PROP_ADDR1:
     125            4 :         g_value_set_string(value, address->addr1);
     126            4 :         break;
     127            4 :     case PROP_ADDR2:
     128            4 :         g_value_set_string(value, address->addr2);
     129            4 :         break;
     130            4 :     case PROP_ADDR3:
     131            4 :         g_value_set_string(value, address->addr3);
     132            4 :         break;
     133            4 :     case PROP_ADDR4:
     134            4 :         g_value_set_string(value, address->addr4);
     135            4 :         break;
     136            4 :     case PROP_PHONE:
     137            4 :         g_value_set_string(value, address->phone);
     138            4 :         break;
     139            4 :     case PROP_FAX:
     140            4 :         g_value_set_string(value, address->fax);
     141            4 :         break;
     142            4 :     case PROP_EMAIL:
     143            4 :         g_value_set_string(value, address->email);
     144            4 :         break;
     145            0 :     default:
     146            0 :         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
     147            0 :         break;
     148              :     }
     149              : }
     150              : 
     151              : static void
     152           32 : gnc_address_set_property (GObject         *object,
     153              :                           guint            prop_id,
     154              :                           const GValue          *value,
     155              :                           GParamSpec      *pspec)
     156              : {
     157              :     GncAddress *address;
     158              : 
     159           32 :     g_return_if_fail(GNC_IS_ADDRESS(object));
     160              : 
     161           32 :     address = GNC_ADDRESS(object);
     162           32 :     switch (prop_id)
     163              :     {
     164            4 :     case PROP_NAME:
     165            4 :         gncAddressSetName(address, g_value_get_string(value));
     166            4 :         break;
     167            4 :     case PROP_ADDR1:
     168            4 :         gncAddressSetAddr1(address, g_value_get_string(value));
     169            4 :         break;
     170            4 :     case PROP_ADDR2:
     171            4 :         gncAddressSetAddr2(address, g_value_get_string(value));
     172            4 :         break;
     173            4 :     case PROP_ADDR3:
     174            4 :         gncAddressSetAddr3(address, g_value_get_string(value));
     175            4 :         break;
     176            4 :     case PROP_ADDR4:
     177            4 :         gncAddressSetAddr4(address, g_value_get_string(value));
     178            4 :         break;
     179            4 :     case PROP_PHONE:
     180            4 :         gncAddressSetPhone(address, g_value_get_string(value));
     181            4 :         break;
     182            4 :     case PROP_FAX:
     183            4 :         gncAddressSetFax(address, g_value_get_string(value));
     184            4 :         break;
     185            4 :     case PROP_EMAIL:
     186            4 :         gncAddressSetEmail(address, g_value_get_string(value));
     187            4 :         break;
     188            0 :     default:
     189            0 :         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
     190            0 :         break;
     191              :     }
     192              : }
     193              : 
     194              : /** Returns a list of my type of object which refers to an object.  For example, when called as
     195              :         qof_instance_get_typed_referring_object_list(taxtable, account);
     196              :     it will return the list of taxtables which refer to a specific account.  The result should be the
     197              :     same regardless of which taxtable object is used.  The list must be freed by the caller but the
     198              :     objects on the list must not.
     199              :  */
     200              : static GList*
     201            0 : impl_get_typed_referring_object_list(const QofInstance* inst, const QofInstance* ref)
     202              : {
     203              :     /* Refers to nothing.  The parent field doesn't really count since the parent knows which address
     204              :        belongs to it. */
     205            0 :     return NULL;
     206              : }
     207              : 
     208              : static void
     209           17 : gnc_address_class_init (GncAddressClass *klass)
     210              : {
     211           17 :     GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
     212           17 :     QofInstanceClass* qof_class = QOF_INSTANCE_CLASS(klass);
     213              : 
     214           17 :     gobject_class->dispose = gnc_address_dispose;
     215           17 :     gobject_class->finalize = gnc_address_finalize;
     216           17 :     gobject_class->set_property = gnc_address_set_property;
     217           17 :     gobject_class->get_property = gnc_address_get_property;
     218              : 
     219           17 :     qof_class->get_display_name = NULL;
     220           17 :     qof_class->refers_to_object = NULL;
     221           17 :     qof_class->get_typed_referring_object_list = impl_get_typed_referring_object_list;
     222              : 
     223           17 :     g_object_class_install_property
     224              :     (gobject_class,
     225              :      PROP_NAME,
     226              :      g_param_spec_string ("name",
     227              :                           "Address Name",
     228              :                           "The address name is an arbitrary string "
     229              :                           "assigned by the user.  It is intended to "
     230              :                           "a short string to identify the address.",
     231              :                           NULL,
     232              :                           G_PARAM_READWRITE));
     233              : 
     234           17 :     g_object_class_install_property
     235              :     (gobject_class,
     236              :      PROP_ADDR1,
     237              :      g_param_spec_string ("addr1",
     238              :                           "Address Line 1",
     239              :                           "The address line 1 is an arbitrary string "
     240              :                           "assigned by the user.  It is the first "
     241              :                           "line of the address.",
     242              :                           NULL,
     243              :                           G_PARAM_READWRITE));
     244              : 
     245           17 :     g_object_class_install_property
     246              :     (gobject_class,
     247              :      PROP_ADDR2,
     248              :      g_param_spec_string ("addr2",
     249              :                           "Address Line 2",
     250              :                           "The address line 2 is an arbitrary string "
     251              :                           "assigned by the user.  It is the second "
     252              :                           "line of the address.",
     253              :                           NULL,
     254              :                           G_PARAM_READWRITE));
     255              : 
     256           17 :     g_object_class_install_property
     257              :     (gobject_class,
     258              :      PROP_ADDR3,
     259              :      g_param_spec_string ("addr3",
     260              :                           "Address Line 3",
     261              :                           "The address line 3 is an arbitrary string "
     262              :                           "assigned by the user.  It is the third "
     263              :                           "line of the address.",
     264              :                           NULL,
     265              :                           G_PARAM_READWRITE));
     266              : 
     267           17 :     g_object_class_install_property
     268              :     (gobject_class,
     269              :      PROP_ADDR4,
     270              :      g_param_spec_string ("addr4",
     271              :                           "Address Line 4",
     272              :                           "The address line 4 is an arbitrary string "
     273              :                           "assigned by the user.  It is the fourth "
     274              :                           "line of the address.",
     275              :                           NULL,
     276              :                           G_PARAM_READWRITE));
     277              : 
     278           17 :     g_object_class_install_property
     279              :     (gobject_class,
     280              :      PROP_PHONE,
     281              :      g_param_spec_string ("phone",
     282              :                           "Phone",
     283              :                           "The phone number is the number at this address.",
     284              :                           NULL,
     285              :                           G_PARAM_READWRITE));
     286              : 
     287           17 :     g_object_class_install_property
     288              :     (gobject_class,
     289              :      PROP_FAX,
     290              :      g_param_spec_string ("fax",
     291              :                           "Fax",
     292              :                           "The fax number at this address.",
     293              :                           NULL,
     294              :                           G_PARAM_READWRITE));
     295              : 
     296           17 :     g_object_class_install_property
     297              :     (gobject_class,
     298              :      PROP_EMAIL,
     299              :      g_param_spec_string ("email",
     300              :                           "E-mail address",
     301              :                           "The e-mail address at this address.",
     302              :                           NULL,
     303              :                           G_PARAM_READWRITE));
     304           17 : }
     305              : 
     306              : /* Create/Destroy functions */
     307              : 
     308              : GncAddress *
     309          132 : gncAddressCreate (QofBook *book, QofInstance *prnt)
     310              : {
     311              :     GncAddress *addr;
     312              : 
     313          132 :     if (!book) return NULL;
     314              : 
     315          131 :     addr = g_object_new (GNC_TYPE_ADDRESS, NULL);
     316          131 :     qof_instance_init_data(&addr->inst, GNC_ID_ADDRESS, book);
     317          131 :     addr->book = book;
     318          131 :     addr->dirty = FALSE;
     319          131 :     addr->parent = prnt;
     320              : 
     321          131 :     addr->name = CACHE_INSERT ("");
     322          131 :     addr->addr1 = CACHE_INSERT ("");
     323          131 :     addr->addr2 = CACHE_INSERT ("");
     324          131 :     addr->addr3 = CACHE_INSERT ("");
     325          131 :     addr->addr4 = CACHE_INSERT ("");
     326          131 :     addr->phone = CACHE_INSERT ("");
     327          131 :     addr->fax = CACHE_INSERT ("");
     328          131 :     addr->email = CACHE_INSERT ("");
     329              : 
     330          131 :     return addr;
     331              : }
     332              : 
     333              : static GncAddress *
     334            0 : qofAddressCreate (QofBook *book)
     335              : {
     336              :     /* The address will get set later by another function */
     337            0 :     return gncAddressCreate(book, NULL);
     338              : }
     339              : 
     340              : static void
     341            0 : qofAddressSetOwner(GncAddress *addr, QofInstance *ent)
     342              : {
     343            0 :     if (!addr || !ent)
     344              :     {
     345            0 :         return;
     346              :     }
     347            0 :     if (addr->parent == NULL)
     348              :     {
     349            0 :         addr->parent = ent;
     350              :     }
     351              : }
     352              : 
     353              : static QofInstance*
     354            0 : qofAddressGetOwner(const GncAddress *addr)
     355              : {
     356              : 
     357            0 :     if (!addr)
     358              :     {
     359            0 :         return NULL;
     360              :     }
     361            0 :     return addr->parent;
     362              : }
     363              : 
     364              : void
     365           71 : gncAddressDestroy (GncAddress *addr)
     366              : {
     367           71 :     if (!addr) return;
     368           71 :     qof_instance_set_destroying(addr, TRUE);
     369           71 :     gncAddressCommitEdit (addr);
     370              : }
     371              : 
     372              : static void
     373           71 : gncAddressFree (GncAddress *addr)
     374              : {
     375           71 :     if (!addr) return;
     376              : 
     377           71 :     qof_event_gen (&addr->inst, QOF_EVENT_DESTROY, NULL);
     378              : 
     379           71 :     CACHE_REMOVE (addr->name);
     380           71 :     CACHE_REMOVE (addr->addr1);
     381           71 :     CACHE_REMOVE (addr->addr2);
     382           71 :     CACHE_REMOVE (addr->addr3);
     383           71 :     CACHE_REMOVE (addr->addr4);
     384           71 :     CACHE_REMOVE (addr->phone);
     385           71 :     CACHE_REMOVE (addr->fax);
     386           71 :     CACHE_REMOVE (addr->email);
     387              : 
     388              :     /* qof_instance_release (&addr->inst); */
     389           71 :     g_object_unref (addr);
     390              : }
     391              : 
     392              : 
     393              : /* Set functions */
     394              : 
     395              : #define SET_STR(obj, member, str) { \
     396              :         if (member == str) return; \
     397              :         if (!g_strcmp0 (member, str)) return; \
     398              :         gncAddressBeginEdit (obj); \
     399              :         CACHE_REPLACE(member, str); \
     400              :         }
     401              : 
     402           16 : void gncAddressSetName (GncAddress *addr, const char *name)
     403              : {
     404           16 :     if (!addr) return;
     405           16 :     if (!name) return;
     406           16 :     SET_STR(addr, addr->name, name);
     407           13 :     mark_address (addr);
     408           13 :     gncAddressCommitEdit (addr);
     409              : }
     410              : 
     411           10 : void gncAddressSetAddr1 (GncAddress *addr, const char *addr1)
     412              : {
     413           10 :     if (!addr) return;
     414           10 :     if (!addr1) return;
     415           10 :     SET_STR(addr, addr->addr1, addr1);
     416            7 :     mark_address (addr);
     417            7 :     gncAddressCommitEdit (addr);
     418              : }
     419              : 
     420           10 : void gncAddressSetAddr2 (GncAddress *addr, const char *addr2)
     421              : {
     422           10 :     if (!addr) return;
     423           10 :     if (!addr2) return;
     424           10 :     SET_STR(addr, addr->addr2, addr2);
     425            7 :     mark_address (addr);
     426            7 :     gncAddressCommitEdit (addr);
     427              : }
     428              : 
     429            7 : void gncAddressSetAddr3 (GncAddress *addr, const char *addr3)
     430              : {
     431            7 :     if (!addr) return;
     432            7 :     if (!addr3) return;
     433            7 :     SET_STR(addr, addr->addr3, addr3);
     434            3 :     mark_address (addr);
     435            3 :     gncAddressCommitEdit (addr);
     436              : }
     437              : 
     438            7 : void gncAddressSetAddr4 (GncAddress *addr, const char *addr4)
     439              : {
     440            7 :     if (!addr) return;
     441            7 :     if (!addr4) return;
     442            7 :     SET_STR(addr, addr->addr4, addr4);
     443            3 :     mark_address (addr);
     444            3 :     gncAddressCommitEdit (addr);
     445              : }
     446              : 
     447           11 : void gncAddressSetPhone (GncAddress *addr, const char *phone)
     448              : {
     449           11 :     if (!addr) return;
     450           11 :     if (!phone) return;
     451           11 :     SET_STR(addr, addr->phone, phone);
     452            8 :     mark_address (addr);
     453            8 :     gncAddressCommitEdit (addr);
     454              : }
     455              : 
     456            6 : void gncAddressSetFax (GncAddress *addr, const char *fax)
     457              : {
     458            6 :     if (!addr) return;
     459            6 :     if (!fax) return;
     460            6 :     SET_STR(addr, addr->fax, fax);
     461            2 :     mark_address (addr);
     462            2 :     gncAddressCommitEdit (addr);
     463              : }
     464              : 
     465            9 : void gncAddressSetEmail (GncAddress *addr, const char *email)
     466              : {
     467            9 :     if (!addr) return;
     468            9 :     if (!email) return;
     469            9 :     SET_STR(addr, addr->email, email);
     470            5 :     mark_address (addr);
     471            5 :     gncAddressCommitEdit (addr);
     472              : }
     473              : 
     474          119 : void gncAddressBeginEdit (GncAddress *addr)
     475              : {
     476          119 :     qof_begin_edit (&addr->inst);
     477          119 : }
     478              : 
     479            0 : static void gncAddressOnError (QofInstance *inst, QofBackendError errcode)
     480              : {
     481            0 :     PERR("Address QofBackend Failure: %d", errcode);
     482            0 :     gnc_engine_signal_commit_error( errcode );
     483            0 : }
     484              : 
     485           44 : static void gncAddressOnDone (QofInstance *addr) { }
     486              : 
     487           71 : static void address_free (QofInstance *inst)
     488              : {
     489           71 :     GncAddress *addr = (GncAddress *) inst;
     490           71 :     gncAddressFree (addr);
     491           71 : }
     492              : 
     493          119 : void gncAddressCommitEdit (GncAddress *addr)
     494              : {
     495              :     /* GnuCash 2.6.3 and earlier didn't handle address kvp's... */
     496          119 :      if (qof_instance_has_kvp(QOF_INSTANCE(addr)))
     497            0 :         gnc_features_set_used (qof_instance_get_book (QOF_INSTANCE (addr)), GNC_FEATURE_KVP_EXTRA_DATA);
     498              : 
     499          119 :     if (!qof_commit_edit (QOF_INSTANCE(addr))) return;
     500          115 :     qof_commit_edit_part2 (&addr->inst, gncAddressOnError,
     501              :                            gncAddressOnDone, address_free);
     502              : }
     503              : 
     504              : 
     505              : /* Get Functions */
     506              : 
     507           73 : const char * gncAddressGetName (const GncAddress *addr)
     508              : {
     509           73 :     if (!addr) return NULL;
     510           73 :     return addr->name;
     511              : }
     512              : 
     513           42 : const char * gncAddressGetAddr1 (const GncAddress *addr)
     514              : {
     515           42 :     if (!addr) return NULL;
     516           42 :     return addr->addr1;
     517              : }
     518              : 
     519           42 : const char * gncAddressGetAddr2 (const GncAddress *addr)
     520              : {
     521           42 :     if (!addr) return NULL;
     522           42 :     return addr->addr2;
     523              : }
     524              : 
     525           42 : const char * gncAddressGetAddr3 (const GncAddress *addr)
     526              : {
     527           42 :     if (!addr) return NULL;
     528           42 :     return addr->addr3;
     529              : }
     530              : 
     531           42 : const char * gncAddressGetAddr4 (const GncAddress *addr)
     532              : {
     533           42 :     if (!addr) return NULL;
     534           42 :     return addr->addr4;
     535              : }
     536              : 
     537           11 : const char * gncAddressGetPhone (const GncAddress *addr)
     538              : {
     539           11 :     if (!addr) return NULL;
     540           11 :     return addr->phone;
     541              : }
     542              : 
     543           11 : const char * gncAddressGetFax (const GncAddress *addr)
     544              : {
     545           11 :     if (!addr) return NULL;
     546           11 :     return addr->fax;
     547              : }
     548              : 
     549           11 : const char * gncAddressGetEmail (const GncAddress *addr)
     550              : {
     551           11 :     if (!addr) return NULL;
     552           11 :     return addr->email;
     553              : }
     554              : 
     555           39 : gboolean gncAddressIsDirty (const GncAddress *addr)
     556              : {
     557           39 :     if (!addr) return FALSE;
     558           39 :     return addr->dirty;
     559              : }
     560              : 
     561          253 : void gncAddressClearDirty (GncAddress *addr)
     562              : {
     563          253 :     if (!addr) return;
     564          253 :     addr->dirty = FALSE;
     565              : }
     566              : 
     567            0 : int gncAddressCompare (const GncAddress *a, const GncAddress *b)
     568              : {
     569            0 :     if (!a && !b) return 0;
     570            0 :     if (!a && b) return 1;
     571            0 :     if (a && !b) return -1;
     572              : 
     573            0 :     return g_strcmp0 (a->name, b->name);
     574              : }
     575              : 
     576              : gboolean
     577           10 : gncAddressEqual(const GncAddress* a, const GncAddress* b)
     578              : {
     579           10 :     if (a == NULL && b == NULL) return TRUE;
     580           10 :     if (a == NULL || b == NULL) return FALSE;
     581              : 
     582           10 :     g_return_val_if_fail(GNC_IS_ADDRESS(a), FALSE);
     583           10 :     g_return_val_if_fail(GNC_IS_ADDRESS(b), FALSE);
     584              : 
     585           10 :     if (g_strcmp0(a->name, b->name) != 0)
     586              :     {
     587            0 :         PWARN("names differ: %s vs %s", a->name, b->name);
     588            0 :         return FALSE;
     589              :     }
     590           10 :     if (g_strcmp0(a->addr1, b->addr1) != 0)
     591              :     {
     592            0 :         PWARN("address lines 1 differ: %s vs %s", a->addr1, b->addr1);
     593            0 :         return FALSE;
     594              :     }
     595           10 :     if (g_strcmp0(a->addr2, b->addr2) != 0)
     596              :     {
     597            0 :         PWARN("address lines 2 differ: %s vs %s", a->addr2, b->addr1);
     598            0 :         return FALSE;
     599              :     }
     600           10 :     if (g_strcmp0(a->addr3, b->addr3) != 0)
     601              :     {
     602            0 :         PWARN("address lines 3 differ: %s vs %s", a->addr3, b->addr3);
     603            0 :         return FALSE;
     604              :     }
     605           10 :     if (g_strcmp0(a->addr4, b->addr4) != 0)
     606              :     {
     607            0 :         PWARN("address lines 4 differ: %s vs %s", a->addr4, b->addr4);
     608            0 :         return FALSE;
     609              :     }
     610           10 :     if (g_strcmp0(a->phone, b->phone) != 0)
     611              :     {
     612            0 :         PWARN("phone numbers differ: %s vs %s", a->phone, b->phone);
     613            0 :         return FALSE;
     614              :     }
     615           10 :     if (g_strcmp0(a->fax, b->fax) != 0)
     616              :     {
     617            0 :         PWARN("fax numbers differ: %s vs %s", a->fax, b->fax);
     618            0 :         return FALSE;
     619              :     }
     620           10 :     if (g_strcmp0(a->email, b->email) != 0)
     621              :     {
     622            0 :         PWARN("email addresses differ: %s vs %s", a->email, b->email);
     623            0 :         return FALSE;
     624              :     }
     625              : 
     626           10 :     return TRUE;
     627              : }
     628              : 
     629              : static QofObject GncAddressDesc =
     630              : {
     631              :     DI(.interface_version = ) QOF_OBJECT_VERSION,
     632              :     DI(.e_type            = ) GNC_ID_ADDRESS,
     633              :     DI(.type_label        = ) "Address",
     634              :     DI(.create            = ) (gpointer)qofAddressCreate,
     635              :     DI(.book_begin        = ) NULL,
     636              :     DI(.book_end          = ) NULL,
     637              :     DI(.is_dirty          = ) qof_collection_is_dirty,
     638              :     DI(.mark_clean        = ) qof_collection_mark_clean,
     639              :     DI(.foreach           = ) qof_collection_foreach,
     640              :     DI(.printable         = ) NULL,
     641              :     DI(.version_cmp       = ) (int (*)(gpointer, gpointer)) qof_instance_version_cmp,
     642              : };
     643              : 
     644           83 : gboolean gncAddressRegister (void)
     645              : {
     646              :     static QofParam params[] =
     647              :     {
     648              : 
     649              :         { ADDRESS_NAME,  QOF_TYPE_STRING, (QofAccessFunc)gncAddressGetName,  (QofSetterFunc)gncAddressSetName },
     650              :         { ADDRESS_ONE,   QOF_TYPE_STRING, (QofAccessFunc)gncAddressGetAddr1, (QofSetterFunc)gncAddressSetAddr1 },
     651              :         { ADDRESS_TWO,   QOF_TYPE_STRING, (QofAccessFunc)gncAddressGetAddr2, (QofSetterFunc)gncAddressSetAddr2 },
     652              :         { ADDRESS_THREE, QOF_TYPE_STRING, (QofAccessFunc)gncAddressGetAddr3, (QofSetterFunc)gncAddressSetAddr3 },
     653              :         { ADDRESS_FOUR,  QOF_TYPE_STRING, (QofAccessFunc)gncAddressGetAddr4, (QofSetterFunc)gncAddressSetAddr4 },
     654              :         { ADDRESS_PHONE, QOF_TYPE_STRING, (QofAccessFunc)gncAddressGetPhone, (QofSetterFunc)gncAddressSetPhone },
     655              :         { ADDRESS_FAX,   QOF_TYPE_STRING, (QofAccessFunc)gncAddressGetFax,   (QofSetterFunc)gncAddressSetFax },
     656              :         { ADDRESS_EMAIL, QOF_TYPE_STRING, (QofAccessFunc)gncAddressGetEmail, (QofSetterFunc)gncAddressSetEmail },
     657              :         { ADDRESS_OWNER, QOF_TYPE_CHOICE, (QofAccessFunc)qofAddressGetOwner, (QofSetterFunc)qofAddressSetOwner },
     658              :         { QOF_PARAM_BOOK, QOF_ID_BOOK,   (QofAccessFunc)qof_instance_get_book, NULL },
     659              :         { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL },
     660              :         { NULL },
     661              :     };
     662              : 
     663           83 :     qof_class_register (GNC_ID_ADDRESS, (QofSortFunc)gncAddressCompare, params);
     664              : 
     665           83 :     return qof_object_register(&GncAddressDesc);
     666              : }
        

Generated by: LCOV version 2.0-1