2005-11-07 09:45:58 -06:00
|
|
|
/********************************************************************\
|
|
|
|
* qofinstance.h -- fields common to all object instances *
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or *
|
|
|
|
* modify it under the terms of the GNU General Public License as *
|
|
|
|
* published by the Free Software Foundation; either version 2 of *
|
|
|
|
* the License, or (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
* This program is distributed in the hope that it will be useful, *
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
|
|
* GNU General Public License for more details. *
|
|
|
|
* *
|
|
|
|
* You should have received a copy of the GNU General Public License*
|
|
|
|
* along with this program; if not, contact: *
|
|
|
|
* *
|
|
|
|
* Free Software Foundation Voice: +1-617-542-5942 *
|
2005-11-16 23:35:02 -06:00
|
|
|
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
|
|
|
|
* Boston, MA 02110-1301, USA gnu@gnu.org *
|
2005-11-07 09:45:58 -06:00
|
|
|
* *
|
|
|
|
\********************************************************************/
|
|
|
|
/** @addtogroup Entity
|
|
|
|
@{ */
|
|
|
|
/** @addtogroup Instance
|
2007-04-01 17:18:50 -05:00
|
|
|
Qof Instances are a derived type of QofInstance. The Instance
|
2005-11-07 09:45:58 -06:00
|
|
|
adds some common features and functions that most objects
|
|
|
|
will want to use.
|
|
|
|
|
|
|
|
@{ */
|
|
|
|
/** @file qofinstance.h
|
|
|
|
* @brief Object instance holds common fields that most gnucash objects use.
|
|
|
|
*
|
|
|
|
* @author Copyright (C) 2003,2004 Linas Vepstas <linas@linas.org>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef QOF_INSTANCE_H
|
|
|
|
#define QOF_INSTANCE_H
|
|
|
|
|
2007-04-03 08:51:35 -05:00
|
|
|
typedef struct _QofInstanceClass QofInstanceClass;
|
2007-04-03 17:30:58 -05:00
|
|
|
typedef struct QofInstance_s QofInstance;
|
|
|
|
|
|
|
|
/** \brief QofBook reference */
|
|
|
|
typedef struct _QofBook QofBook;
|
2007-04-03 08:51:35 -05:00
|
|
|
|
|
|
|
#include "qofid.h"
|
2005-11-07 09:45:58 -06:00
|
|
|
#include "guid.h"
|
|
|
|
#include "gnc-date.h"
|
|
|
|
#include "kvp_frame.h"
|
2007-04-02 21:14:13 -05:00
|
|
|
#include "qof-gobject.h"
|
2005-11-07 09:45:58 -06:00
|
|
|
|
|
|
|
/* --- type macros --- */
|
2007-04-03 08:51:35 -05:00
|
|
|
#define QOF_TYPE_INSTANCE (qof_instance_get_type ())
|
|
|
|
#define QOF_INSTANCE(o) \
|
|
|
|
(G_TYPE_CHECK_INSTANCE_CAST ((o), QOF_TYPE_INSTANCE, QofInstance))
|
|
|
|
#define QOF_INSTANCE_CLASS(k) \
|
|
|
|
(G_TYPE_CHECK_CLASS_CAST((k), QOF_TYPE_INSTANCE, QofInstanceClass))
|
|
|
|
#define QOF_IS_INSTANCE(o) \
|
|
|
|
(G_TYPE_CHECK_INSTANCE_TYPE ((o), QOF_TYPE_INSTANCE))
|
|
|
|
#define QOF_IS_INSTANCE_CLASS(k) \
|
|
|
|
(G_TYPE_CHECK_CLASS_TYPE ((k), QOF_TYPE_INSTANCE))
|
|
|
|
#define QOF_INSTANCE_GET_CLASS(o) \
|
|
|
|
(G_TYPE_INSTANCE_GET_CLASS ((o), QOF_TYPE_INSTANCE, QofInstanceClass))
|
2005-11-07 09:45:58 -06:00
|
|
|
|
2007-04-02 21:14:13 -05:00
|
|
|
struct QofInstance_s
|
|
|
|
{
|
|
|
|
GObject object;
|
|
|
|
|
|
|
|
/* Globally unique id identifying this instance */
|
|
|
|
QofIdType e_type; /**< Entity type */
|
|
|
|
GUID guid; /**< GUID for the entity */
|
|
|
|
QofCollection * collection; /**< Entity collection */
|
|
|
|
|
|
|
|
/* The entity_table in which this instance is stored */
|
|
|
|
QofBook * book;
|
|
|
|
|
|
|
|
/* kvp_data is a key-value pair database for storing arbirtary
|
|
|
|
* information associated with this instance.
|
|
|
|
* See src/engine/kvp_doc.txt for a list and description of the
|
|
|
|
* important keys. */
|
|
|
|
KvpFrame *kvp_data;
|
|
|
|
|
|
|
|
/* Timestamp used to track the last modification to this
|
|
|
|
* instance. Typically used to compare two versions of the
|
|
|
|
* same object, to see which is newer. When used with the
|
|
|
|
* SQL backend, this field is reserved for SQL use, to compare
|
|
|
|
* the version in local memory to the remote, server version.
|
|
|
|
*/
|
|
|
|
Timespec last_update;
|
|
|
|
|
|
|
|
/* Keep track of nesting level of begin/end edit calls */
|
|
|
|
int editlevel;
|
|
|
|
|
|
|
|
/* In process of being destroyed */
|
|
|
|
gboolean do_free;
|
|
|
|
|
|
|
|
/* dirty/clean flag. If dirty, then this instance has been modified,
|
|
|
|
* but has not yet been written out to storage (file/database)
|
|
|
|
*/
|
|
|
|
gboolean dirty;
|
|
|
|
|
|
|
|
/* True iff this instance has never been committed. */
|
|
|
|
gboolean infant;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct _QofInstanceClass
|
|
|
|
{
|
|
|
|
GObjectClass parent_class;
|
|
|
|
};
|
|
|
|
|
|
|
|
/** Return the GType of a QofInstance */
|
2007-04-03 08:51:35 -05:00
|
|
|
GType qof_instance_get_type(void);
|
2005-11-07 09:45:58 -06:00
|
|
|
|
2007-04-03 08:51:35 -05:00
|
|
|
/** Initialise the settings associated with an instance */
|
2007-04-02 21:14:13 -05:00
|
|
|
void qof_instance_init_data (QofInstance *, QofIdType, QofBook *);
|
2005-11-07 09:45:58 -06:00
|
|
|
|
|
|
|
/** Return the book pointer */
|
2006-08-17 23:48:18 -05:00
|
|
|
QofBook * qof_instance_get_book (const QofInstance *);
|
2005-11-07 09:45:58 -06:00
|
|
|
|
|
|
|
/** Return the GUID of this instance */
|
2006-08-17 23:48:18 -05:00
|
|
|
const GUID * qof_instance_get_guid (const QofInstance *);
|
2005-11-07 09:45:58 -06:00
|
|
|
|
|
|
|
/** Return the pointer to the kvp_data */
|
2006-08-17 23:48:18 -05:00
|
|
|
KvpFrame* qof_instance_get_slots (const QofInstance *);
|
2005-11-07 09:45:58 -06:00
|
|
|
|
|
|
|
/** Return the last time this instance was modified. If QofInstances
|
|
|
|
* are used with the QofObject storage backends, then the instance
|
|
|
|
* update times are reserved for use by the backend, for managing
|
|
|
|
* multi-user updates. Non-backend code should not set the update
|
|
|
|
* times.
|
|
|
|
*/
|
2006-08-17 23:48:18 -05:00
|
|
|
Timespec qof_instance_get_last_update (const QofInstance *inst);
|
2005-11-07 09:45:58 -06:00
|
|
|
|
|
|
|
/** Compare two instances, based on thier last update times.
|
|
|
|
* Returns a negative, zero or positive value, respectively,
|
|
|
|
* if 'left' is earlier, same as or later than 'right'.
|
|
|
|
* Accepts NULL pointers, NULL's are by definition earlier
|
|
|
|
* than any value.
|
|
|
|
*/
|
2006-08-17 23:48:18 -05:00
|
|
|
int qof_instance_version_cmp (const QofInstance *left, const QofInstance *right);
|
2005-11-07 09:45:58 -06:00
|
|
|
|
2007-04-01 17:18:50 -05:00
|
|
|
void qof_instance_print_dirty (const QofInstance *entity, gpointer dummy);
|
2006-05-06 01:01:14 -05:00
|
|
|
|
2005-11-07 09:45:58 -06:00
|
|
|
/** Return value of is_dirty flag */
|
|
|
|
gboolean qof_instance_is_dirty (QofInstance *);
|
|
|
|
|
|
|
|
/** \brief Set the dirty flag
|
|
|
|
|
|
|
|
Sets this instance AND the collection as dirty.
|
|
|
|
*/
|
|
|
|
void qof_instance_set_dirty(QofInstance* inst);
|
|
|
|
|
2007-02-22 19:23:31 -06:00
|
|
|
/* reset the dirty flag */
|
|
|
|
void qof_instance_mark_clean (QofInstance *);
|
|
|
|
|
2006-08-17 23:48:18 -05:00
|
|
|
gboolean qof_instance_check_edit(const QofInstance *inst);
|
2005-11-07 09:45:58 -06:00
|
|
|
|
2006-08-17 23:48:18 -05:00
|
|
|
gboolean qof_instance_do_free(const QofInstance *inst);
|
2005-11-07 09:45:58 -06:00
|
|
|
|
|
|
|
void qof_instance_mark_free(QofInstance *inst);
|
|
|
|
|
|
|
|
/** Pair things up. This routine inserts a kvp value into each instance
|
|
|
|
* containing the guid of the other. In this way, if one has one of the
|
|
|
|
* pair, one can always find the other by looking up it's guid. Typically,
|
|
|
|
* you will want to use qof_instance_lookup_twin() to find the twin.
|
|
|
|
* (The current implementation assumes the two instances belong to different
|
|
|
|
* books, and will not add gemini kvp's unless the books differ. Note that
|
|
|
|
* the gemini kvp includes the book guid as well, so that the right book can
|
|
|
|
* be found.
|
|
|
|
*/
|
2006-08-17 23:48:18 -05:00
|
|
|
void qof_instance_gemini (QofInstance *to, const QofInstance *from);
|
2005-11-07 09:45:58 -06:00
|
|
|
|
|
|
|
/** The qof_instance_lookup_twin() routine will find the "twin" of this
|
|
|
|
* instance 'src' in the given other 'book' (if the twin exists).
|
|
|
|
*
|
|
|
|
* When instances are gemini'ed or cloned, both of the pair are marked
|
|
|
|
* with the guid of thier copy, thus allowing the sibling-copy of
|
|
|
|
* an instance to be found. Since the sibling may end up in a
|
|
|
|
* different book, we need a way of finding it, given only that we
|
|
|
|
* know the book, and that we know its twin.
|
|
|
|
*
|
|
|
|
* That's what this routine does. Given some book 'book', and an
|
|
|
|
* instance 'src', it will find the sibling instance of 'src' that is
|
|
|
|
* in 'book', and return it. If not found, it returns NULL. This
|
|
|
|
* routine uses the 'gemini' kvp values to do its work.
|
|
|
|
*/
|
2006-08-17 23:48:18 -05:00
|
|
|
QofInstance * qof_instance_lookup_twin (const QofInstance *src, QofBook *book);
|
2005-11-07 09:45:58 -06:00
|
|
|
|
|
|
|
/* @} */
|
|
|
|
/* @} */
|
|
|
|
#endif /* QOF_INSTANCE_H */
|