Skip to content

Commit

Permalink
Add a few gobject properties to some engine object types. This adds m…
Browse files Browse the repository at this point in the history
…ore of the gobject infrastructure to Transaction, Split, SchedXaction and GNCPrice. Gobject properties provides a standardized interface to the engine objects which should allow standard and simplified read/write mechanisms. For the sql backend, for example, db columns can be mapped to properties. In a generalized csv importer, csv columns can be mapped to properties.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@18762 57a11ea4-9604-0410-9ed3-97b8803252fd
  • Loading branch information
Phil Longstaff committed Feb 28, 2010
1 parent ce7f288 commit 181286c
Show file tree
Hide file tree
Showing 4 changed files with 402 additions and 67 deletions.
107 changes: 89 additions & 18 deletions src/engine/SchedXaction.c
Expand Up @@ -44,22 +44,108 @@

void sxprivtransactionListMapDelete( gpointer data, gpointer user_data );

enum {
PROP_0,
PROP_NAME
};

/* GObject initialization */
QOF_GOBJECT_IMPL(gnc_schedxaction, SchedXaction, QOF_TYPE_INSTANCE);
G_DEFINE_TYPE(SchedXaction, gnc_schedxaction, QOF_TYPE_INSTANCE);

static void
gnc_schedxaction_init(SchedXaction* sx)
{
sx->schedule = NULL;

g_date_clear( &sx->last_date, 1 );
g_date_clear( &sx->start_date, 1 );
g_date_clear( &sx->end_date, 1 );

sx->enabled = 1;
sx->num_occurances_total = 0;
sx->autoCreateOption = FALSE;
sx->autoCreateNotify = FALSE;
sx->advanceCreateDays = 0;
sx->advanceRemindDays = 0;
sx->instance_num = 0;
sx->deferredList = NULL;
}

static void
gnc_schedxaction_dispose_real (GObject *sxp)
gnc_schedxaction_dispose(GObject *sxp)
{
G_OBJECT_CLASS(gnc_schedxaction_parent_class)->dispose(sxp);
}

static void
gnc_schedxaction_finalize_real(GObject* sxp)
gnc_schedxaction_finalize(GObject* sxp)
{
G_OBJECT_CLASS(gnc_schedxaction_parent_class)->finalize(sxp);
}

static void
gnc_schedxaction_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
SchedXaction *sx;

g_return_if_fail(GNC_IS_SCHEDXACTION(object));

sx = GNC_SCHEDXACTION(object);
switch(prop_id) {
case PROP_NAME:
g_value_set_string(value, sx->name);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
}
}

static void
gnc_schedxaction_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
SchedXaction *sx;

g_return_if_fail(GNC_IS_SCHEDXACTION(object));

sx = GNC_SCHEDXACTION(object);
switch(prop_id) {
case PROP_NAME:
xaccSchedXactionSetName(sx, g_value_get_string(value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
}
}

static void
gnc_schedxaction_class_init (SchedXactionClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);

gobject_class->dispose = gnc_schedxaction_dispose;
gobject_class->finalize = gnc_schedxaction_finalize;
gobject_class->set_property = gnc_schedxaction_set_property;
gobject_class->get_property = gnc_schedxaction_get_property;

g_object_class_install_property
(gobject_class,
PROP_NAME,
g_param_spec_string ("name",
"Scheduled Transaction Name",
"The name is an arbitrary string "
"assigned by the user. It is intended to "
"a short, 5 to 30 character long string "
"that is displayed by the GUI.",
NULL,
G_PARAM_READWRITE));
}

static void
Expand All @@ -70,21 +156,6 @@ xaccSchedXactionInit(SchedXaction *sx, QofBook *book)

qof_instance_init_data (&sx->inst, GNC_ID_SCHEDXACTION, book);

sx->schedule = NULL;

g_date_clear( &sx->last_date, 1 );
g_date_clear( &sx->start_date, 1 );
g_date_clear( &sx->end_date, 1 );

sx->enabled = 1;
sx->num_occurances_total = 0;
sx->autoCreateOption = FALSE;
sx->autoCreateNotify = FALSE;
sx->advanceCreateDays = 0;
sx->advanceRemindDays = 0;
sx->instance_num = 0;
sx->deferredList = NULL;

/* create a new template account for our splits */
sx->template_acct = xaccMallocAccount(book);
guid = qof_instance_get_guid( sx );
Expand Down
132 changes: 111 additions & 21 deletions src/engine/Split.c
Expand Up @@ -59,31 +59,17 @@ const char *void_former_val_str = "void-former-value";
/* This static indicates the debugging module that this .o belongs to. */
static QofLogModule log_module = GNC_MOD_ENGINE;

enum {
PROP_0,
PROP_ACTION,
PROP_MEMO
};

/* GObject Initialization */
QOF_GOBJECT_IMPL(gnc_split, Split, QOF_TYPE_INSTANCE);
G_DEFINE_TYPE(Split, gnc_split, QOF_TYPE_INSTANCE)

static void
gnc_split_init(Split* split)
{
}

static void
gnc_split_dispose_real (GObject *splitp)
{
}

static void
gnc_split_finalize_real(GObject* splitp)
{
}

/********************************************************************\
* xaccInitSplit
* Initialize a Split structure
\********************************************************************/

static void
xaccInitSplit(Split * split, QofBook *book)
{
/* fill in some sane defaults */
split->acc = NULL;
Expand All @@ -106,7 +92,111 @@ xaccInitSplit(Split * split, QofBook *book)

split->gains = GAINS_STATUS_UNKNOWN;
split->gains_split = NULL;
}

static void
gnc_split_dispose(GObject *splitp)
{
G_OBJECT_CLASS(gnc_split_parent_class)->dispose(splitp);
}

static void
gnc_split_finalize(GObject* splitp)
{
G_OBJECT_CLASS(gnc_split_parent_class)->finalize(splitp);
}

static void
gnc_split_get_property(GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
Split *split;

g_return_if_fail(GNC_IS_SPLIT(object));

split = GNC_SPLIT(object);
switch (prop_id) {
case PROP_ACTION:
g_value_set_string(value, split->action);
break;
case PROP_MEMO:
g_value_set_string(value, split->memo);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
}
}

static void
gnc_split_set_property(GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
Split *split;

g_return_if_fail(GNC_IS_SPLIT(object));

split = GNC_SPLIT(object);
switch (prop_id) {
case PROP_ACTION:
xaccSplitSetAction(split, g_value_get_string(value));
break;
case PROP_MEMO:
xaccSplitSetMemo(split, g_value_get_string(value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
}
}

static void
gnc_split_class_init(SplitClass* klass)
{
GObjectClass* gobject_class = G_OBJECT_CLASS(klass);

gobject_class->dispose = gnc_split_dispose;
gobject_class->finalize = gnc_split_finalize;
gobject_class->set_property = gnc_split_set_property;
gobject_class->get_property = gnc_split_get_property;

g_object_class_install_property
(gobject_class,
PROP_ACTION,
g_param_spec_string("action",
"Action",
"The action is an arbitrary string assigned "
"by the user. It is intended to be a short "
"string that contains extra information about "
"this split.",
NULL,
G_PARAM_READWRITE));

g_object_class_install_property
(gobject_class,
PROP_MEMO,
g_param_spec_string("memo",
"Memo",
"The action is an arbitrary string assigned "
"by the user. It is intended to be a short "
"string that describes the purpose of "
"this split.",
NULL,
G_PARAM_READWRITE));
}

/********************************************************************\
* xaccInitSplit
* Initialize a Split structure
\********************************************************************/

static void
xaccInitSplit(Split * split, QofBook *book)
{
qof_instance_init_data(&split->inst, GNC_ID_SPLIT, book);
}

Expand Down

0 comments on commit 181286c

Please sign in to comment.