r20081 - gnucash/trunk/src/engine - Add function for creating a new copy of an existing GncInvoice.

Christian Stimming stimming at tuhh.de
Thu Jan 13 02:42:15 EST 2011


Zitat von Phil Longstaff <plongstaff at rogers.com>:

> On Wed, 2011-01-12 at 15:40 -0500, Christian Stimming wrote:
>> Author: cstim
>> Date: 2011-01-12 15:40:51 -0500 (Wed, 12 Jan 2011)
>> New Revision: 20081
>> Trac: http://svn.gnucash.org/trac/changeset/20081
>>
>> Modified:
>>    gnucash/trunk/src/engine/gncInvoice.c
>>    gnucash/trunk/src/engine/gncInvoice.h
>> Log:
>> Add function for creating a new copy of an existing GncInvoice.
>
> In some places we have gncXxxCopy() and in some, gncXxxClone().  I don't
> really care which, but we should standardize.

Even worse, the semantics of those functions are also vastly  
different: Some of the *Clone functions are intended to create a  
duplicate of the source object but in a different QofBook, including  
setting kvp values with the GUID of the old in the new object and vice  
versa, i.e. gncCloneInvoice(). Not quite what I would call a "clone".  
OTOH xaccTransClone() and xaccSplitClone() are "normal" deep copy  
constructors, but xaccCloneAccount() is not, and  
xaccCloneAccountSimple() also is not. Gee.

In my case, the use case for the function is a button "Duplicate this  
invoice", so the invoice and all its content should be duplicated  
inside the same QofBook and will subsequently be edited so that it can  
be distinguished from the original invoice. This requires a normal  
copy constructor (deep copy).

If the normal constructor function is called gncFooCreate, a standard  
copy constructor should be called gncFooCopy. All other non-standard  
functions should be named significantly different, like  
gncFooCopyIntoDifferentBook (maybe not) or gncFooOtherBookCopy (that's  
a serious proposal).

Christian




More information about the gnucash-devel mailing list