Make GncAddress more QOF compliant. (#343726)

Adds BeginEdit/CommitEdit calls.



git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@14515 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Derek Atkins 2006-07-16 05:16:52 +00:00
parent f64d70b454
commit 76202b1b33
3 changed files with 67 additions and 13 deletions

View File

@ -1,3 +1,9 @@
2006-07-15 Derek Atkins <derek@ihtfp.com>
* src/business/business-core/gncAddress.[ch]:
Make GncAddress more QOF compliant. (#343726)
Adds BeginEdit/CommitEdit calls.
2006-07-15 Andreas Köhler <andi5.py@gmx.net> 2006-07-15 Andreas Köhler <andi5.py@gmx.net>
* src/report/report-system/html-text.scm: Remove a duplicate of * src/report/report-system/html-text.scm: Remove a duplicate of

View File

@ -50,6 +50,8 @@ struct _gncAddress
char * email; char * email;
}; };
static QofLogModule log_module = GNC_MOD_BUSINESS;
#define _GNC_MOD_NAME GNC_ADDRESS_MODULE_NAME #define _GNC_MOD_NAME GNC_ADDRESS_MODULE_NAME
G_INLINE_FUNC void mark_address (GncAddress *address); G_INLINE_FUNC void mark_address (GncAddress *address);
@ -137,6 +139,16 @@ void
gncAddressDestroy (GncAddress *addr) gncAddressDestroy (GncAddress *addr)
{ {
if (!addr) return; if (!addr) return;
addr->inst.do_free = TRUE;
gncAddressCommitEdit (addr);
}
static void
gncAddressFree (GncAddress *addr)
{
if (!addr) return;
qof_event_gen (&addr->inst.entity, QOF_EVENT_DESTROY, NULL);
CACHE_REMOVE (addr->name); CACHE_REMOVE (addr->name);
CACHE_REMOVE (addr->addr1); CACHE_REMOVE (addr->addr1);
@ -147,16 +159,19 @@ gncAddressDestroy (GncAddress *addr)
CACHE_REMOVE (addr->fax); CACHE_REMOVE (addr->fax);
CACHE_REMOVE (addr->email); CACHE_REMOVE (addr->email);
qof_instance_release (&addr->inst);
g_free (addr); g_free (addr);
} }
/* Set functions */ /* Set functions */
#define SET_STR(member, str) { \ #define SET_STR(obj, member, str) { \
char * tmp; \ char * tmp; \
\ \
if (member == str) return; \ if (member == str) return; \
if (!safe_strcmp (member, str)) return; \ if (!safe_strcmp (member, str)) return; \
gncAddressBeginEdit (obj); \
tmp = CACHE_INSERT (str); \ tmp = CACHE_INSERT (str); \
CACHE_REMOVE (member); \ CACHE_REMOVE (member); \
member = tmp; \ member = tmp; \
@ -166,66 +181,100 @@ void gncAddressSetName (GncAddress *addr, const char *name)
{ {
if (!addr) return; if (!addr) return;
if (!name) return; if (!name) return;
SET_STR(addr->name, name); SET_STR(addr, addr->name, name);
mark_address (addr); mark_address (addr);
gncAddressCommitEdit (addr);
} }
void gncAddressSetAddr1 (GncAddress *addr, const char *addr1) void gncAddressSetAddr1 (GncAddress *addr, const char *addr1)
{ {
if (!addr) return; if (!addr) return;
if (!addr1) return; if (!addr1) return;
SET_STR(addr->addr1, addr1); SET_STR(addr, addr->addr1, addr1);
mark_address (addr); mark_address (addr);
gncAddressCommitEdit (addr);
} }
void gncAddressSetAddr2 (GncAddress *addr, const char *addr2) void gncAddressSetAddr2 (GncAddress *addr, const char *addr2)
{ {
if (!addr) return; if (!addr) return;
if (!addr2) return; if (!addr2) return;
SET_STR(addr->addr2, addr2); SET_STR(addr, addr->addr2, addr2);
mark_address (addr); mark_address (addr);
gncAddressCommitEdit (addr);
} }
void gncAddressSetAddr3 (GncAddress *addr, const char *addr3) void gncAddressSetAddr3 (GncAddress *addr, const char *addr3)
{ {
if (!addr) return; if (!addr) return;
if (!addr3) return; if (!addr3) return;
SET_STR(addr->addr3, addr3); SET_STR(addr, addr->addr3, addr3);
mark_address (addr); mark_address (addr);
gncAddressCommitEdit (addr);
} }
void gncAddressSetAddr4 (GncAddress *addr, const char *addr4) void gncAddressSetAddr4 (GncAddress *addr, const char *addr4)
{ {
if (!addr) return; if (!addr) return;
if (!addr4) return; if (!addr4) return;
SET_STR(addr->addr4, addr4); SET_STR(addr, addr->addr4, addr4);
mark_address (addr); mark_address (addr);
gncAddressCommitEdit (addr);
} }
void gncAddressSetPhone (GncAddress *addr, const char *phone) void gncAddressSetPhone (GncAddress *addr, const char *phone)
{ {
if (!addr) return; if (!addr) return;
if (!phone) return; if (!phone) return;
SET_STR(addr->phone, phone); SET_STR(addr, addr->phone, phone);
mark_address (addr); mark_address (addr);
gncAddressCommitEdit (addr);
} }
void gncAddressSetFax (GncAddress *addr, const char *fax) void gncAddressSetFax (GncAddress *addr, const char *fax)
{ {
if (!addr) return; if (!addr) return;
if (!fax) return; if (!fax) return;
SET_STR(addr->fax, fax); SET_STR(addr, addr->fax, fax);
mark_address (addr); mark_address (addr);
gncAddressCommitEdit (addr);
} }
void gncAddressSetEmail (GncAddress *addr, const char *email) void gncAddressSetEmail (GncAddress *addr, const char *email)
{ {
if (!addr) return; if (!addr) return;
if (!email) return; if (!email) return;
SET_STR(addr->email, email); SET_STR(addr, addr->email, email);
mark_address (addr); mark_address (addr);
gncAddressCommitEdit (addr);
} }
void gncAddressBeginEdit (GncAddress *addr)
{
qof_begin_edit (&addr->inst);
}
static inline void gncAddressOnError (QofInstance *inst, QofBackendError errcode)
{
PERR("Address QofBackend Failure: %d", errcode);
}
static inline void gncAddressOnDone (QofInstance *addr) { }
static inline void address_free (QofInstance *inst)
{
GncAddress *addr = (GncAddress *) inst;
gncAddressFree (addr);
}
void gncAddressCommitEdit (GncAddress *addr)
{
if (!qof_commit_edit (QOF_INSTANCE(addr))) return;
qof_commit_edit_part2 (&addr->inst, gncAddressOnError,
gncAddressOnDone, address_free);
}
/* Get Functions */ /* Get Functions */
const char * gncAddressGetName (const GncAddress *addr) const char * gncAddressGetName (const GncAddress *addr)

View File

@ -80,11 +80,10 @@ typedef struct _gncAddress GncAddress;
/** @name Create/Destroy functions /** @name Create/Destroy functions
@{ */ @{ */
/** create a new address */ GncAddress *gncAddressCreate (QofBook *book, QofEntity *parent);
GncAddress * gncAddressCreate (QofBook *book, QofEntity *parent);
/** destroy an address */
void gncAddressDestroy (GncAddress *addr); void gncAddressDestroy (GncAddress *addr);
void gncAddressBeginEdit (GncAddress *addr);
void gncAddressCommitEdit (GncAddress *addr);
/** @} */ /** @} */