mirror of
https://github.com/Gnucash/gnucash.git
synced 2024-11-29 12:14:31 -06:00
More conversion to read/write objects from sql backend using gobject parameters
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@18766 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
1d6e7701ac
commit
45203aec4b
@ -66,7 +66,7 @@ static const GncSqlColumnTableEntry col_table[] =
|
||||
{ "guid", CT_GUID, 0, COL_NNUL|COL_PKEY, "guid" },
|
||||
{ "name", CT_STRING, ACCOUNT_MAX_NAME_LEN, COL_NNUL, "name" },
|
||||
{ "account_type", CT_STRING, ACCOUNT_MAX_TYPE_LEN, COL_NNUL, NULL, ACCOUNT_TYPE_ },
|
||||
{ "commodity_guid", CT_COMMODITYREF, 0, 0, "commodity" },
|
||||
{ "commodity_guid", CT_COMMODITYREF, 0, 0, "commodity" },
|
||||
{ "commodity_scu", CT_INT, 0, COL_NNUL, "commodity-scu" },
|
||||
{ "non_std_scu", CT_BOOLEAN, 0, COL_NNUL, "non-std-scu" },
|
||||
{ "parent_guid", CT_GUID, 0, 0, NULL, NULL,
|
||||
|
@ -1805,11 +1805,9 @@ load_numeric( const GncSqlBackend* be, GncSqlRow* row,
|
||||
gint64 num, denom;
|
||||
gnc_numeric n;
|
||||
gboolean isNull = FALSE;
|
||||
NumericSetterFunc n_setter = (NumericSetterFunc)setter;
|
||||
|
||||
g_return_if_fail( be != NULL );
|
||||
g_return_if_fail( row != NULL );
|
||||
g_return_if_fail( setter != NULL );
|
||||
g_return_if_fail( pObject != NULL );
|
||||
g_return_if_fail( table_row != NULL );
|
||||
|
||||
@ -1833,7 +1831,12 @@ load_numeric( const GncSqlBackend* be, GncSqlRow* row,
|
||||
}
|
||||
n = gnc_numeric_create( num, denom );
|
||||
if( !isNull ) {
|
||||
(*n_setter)( pObject, n );
|
||||
if( table_row->gobj_param_name != NULL ) {
|
||||
g_object_set( pObject, table_row->gobj_param_name, &n, NULL );
|
||||
} else {
|
||||
NumericSetterFunc n_setter = (NumericSetterFunc)setter;
|
||||
(*n_setter)( pObject, n );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1882,16 +1885,18 @@ add_gvalue_numeric_to_slist( const GncSqlBackend* be, QofIdTypeConst obj_name,
|
||||
g_return_if_fail( pObject != NULL );
|
||||
g_return_if_fail( table_row != NULL );
|
||||
|
||||
// if( table_row->gobj_param_name != NULL ) {
|
||||
// g_object_get( pObject, table_row->gobj_param_name, &s, NULL );
|
||||
// } else {
|
||||
if( table_row->gobj_param_name != NULL ) {
|
||||
gnc_numeric *s;
|
||||
g_object_get( pObject, table_row->gobj_param_name, &s, NULL );
|
||||
n = *s;
|
||||
} else {
|
||||
getter = (NumericGetterFunc)gnc_sql_get_getter( obj_name, table_row );
|
||||
if( getter != NULL ) {
|
||||
n = (*getter)( pObject );
|
||||
} else {
|
||||
n = gnc_numeric_zero();
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
num_value = g_new0( GValue, 1 );
|
||||
g_assert( num_value != NULL );
|
||||
|
@ -60,7 +60,7 @@ static const GncSqlColumnTableEntry col_table[] =
|
||||
{ "date", CT_TIMESPEC, 0, COL_NNUL, NULL, PRICE_DATE },
|
||||
{ "source", CT_STRING, PRICE_MAX_SOURCE_LEN, 0, "source" },
|
||||
{ "type", CT_STRING, PRICE_MAX_TYPE_LEN, 0, "type" },
|
||||
{ "value", CT_NUMERIC, 0, COL_NNUL, NULL, PRICE_VALUE },
|
||||
{ "value", CT_NUMERIC, 0, COL_NNUL, "value" },
|
||||
{ NULL }
|
||||
/*@ +full_init_block @*/
|
||||
};
|
||||
|
@ -55,10 +55,6 @@
|
||||
|
||||
#define SX_MAX_NAME_LEN 2048
|
||||
|
||||
static gboolean get_autocreate( gpointer pObject );
|
||||
static void set_autocreate( gpointer pObject, gboolean value );
|
||||
static gboolean get_autonotify( gpointer pObject );
|
||||
static void set_autonotify( gpointer pObject, gboolean value );
|
||||
static gint get_instance_count( gpointer pObject );
|
||||
static /*@ null @*/ gpointer get_template_act_guid( gpointer pObject );
|
||||
static void set_template_act_guid( gpointer pObject, /*@ null @*/ gpointer pValue );
|
||||
@ -74,18 +70,12 @@ static const GncSqlColumnTableEntry col_table[] =
|
||||
{ "end_date", CT_GDATE, 0, 0, NULL, NULL,
|
||||
(QofAccessFunc)xaccSchedXactionGetEndDate, (QofSetterFunc)xaccSchedXactionSetEndDate },
|
||||
{ "last_occur", CT_GDATE, 0, 0, NULL, GNC_SX_LAST_DATE },
|
||||
{ "num_occur", CT_INT, 0, COL_NNUL, NULL, GNC_SX_NUM_OCCUR },
|
||||
{ "rem_occur", CT_INT, 0, COL_NNUL, NULL, GNC_SX_REM_OCCUR },
|
||||
{ "auto_create", CT_BOOLEAN, 0, COL_NNUL, NULL, NULL,
|
||||
(QofAccessFunc)get_autocreate, (QofSetterFunc)set_autocreate },
|
||||
{ "auto_notify", CT_BOOLEAN, 0, COL_NNUL, NULL, NULL,
|
||||
(QofAccessFunc)get_autonotify, (QofSetterFunc)set_autonotify },
|
||||
{ "adv_creation", CT_INT, 0, COL_NNUL, NULL, NULL,
|
||||
(QofAccessFunc)xaccSchedXactionGetAdvanceCreation,
|
||||
(QofSetterFunc)xaccSchedXactionSetAdvanceCreation },
|
||||
{ "adv_notify", CT_INT, 0, COL_NNUL, NULL, NULL,
|
||||
(QofAccessFunc)xaccSchedXactionGetAdvanceReminder,
|
||||
(QofSetterFunc)xaccSchedXactionSetAdvanceReminder },
|
||||
{ "num_occur", CT_INT, 0, COL_NNUL, "num-occurance" },
|
||||
{ "rem_occur", CT_INT, 0, COL_NNUL, "rem-occurance" },
|
||||
{ "auto_create", CT_BOOLEAN, 0, COL_NNUL, "auto-create" },
|
||||
{ "auto_notify", CT_BOOLEAN, 0, COL_NNUL, "auto-create-notify" },
|
||||
{ "adv_creation", CT_INT, 0, COL_NNUL, "advance-creation-days" },
|
||||
{ "adv_notify", CT_INT, 0, COL_NNUL, "advance-reminder-days" },
|
||||
{ "instance_count", CT_INT, 0, COL_NNUL, NULL, NULL,
|
||||
(QofAccessFunc)get_instance_count, (QofSetterFunc)gnc_sx_set_instance_count },
|
||||
{ "template_act_guid", CT_GUID, 0, COL_NNUL, NULL, NULL,
|
||||
@ -96,66 +86,6 @@ static const GncSqlColumnTableEntry col_table[] =
|
||||
|
||||
/* ================================================================= */
|
||||
|
||||
static gboolean
|
||||
get_autocreate( gpointer pObject )
|
||||
{
|
||||
const SchedXaction* pSx;
|
||||
gboolean autoCreate;
|
||||
gboolean autoNotify;
|
||||
|
||||
g_return_val_if_fail( pObject != NULL, FALSE );
|
||||
g_return_val_if_fail( GNC_IS_SX(pObject), FALSE );
|
||||
|
||||
pSx = GNC_SX(pObject);
|
||||
xaccSchedXactionGetAutoCreate( pSx, &autoCreate, &autoNotify );
|
||||
return autoCreate;
|
||||
}
|
||||
|
||||
static void
|
||||
set_autocreate( gpointer pObject, gboolean value )
|
||||
{
|
||||
SchedXaction* pSx;
|
||||
gboolean autoNotify;
|
||||
gboolean dummy;
|
||||
|
||||
g_return_if_fail( pObject != NULL );
|
||||
g_return_if_fail( GNC_IS_SX(pObject) );
|
||||
|
||||
pSx = GNC_SX(pObject);
|
||||
xaccSchedXactionGetAutoCreate( pSx, &dummy, &autoNotify );
|
||||
xaccSchedXactionSetAutoCreate( pSx, value, autoNotify );
|
||||
}
|
||||
|
||||
static gboolean
|
||||
get_autonotify( gpointer pObject )
|
||||
{
|
||||
const SchedXaction* pSx;
|
||||
gboolean autoCreate;
|
||||
gboolean autoNotify;
|
||||
|
||||
g_return_val_if_fail( pObject != NULL, FALSE );
|
||||
g_return_val_if_fail( GNC_IS_SX(pObject), FALSE );
|
||||
|
||||
pSx = GNC_SX(pObject);
|
||||
xaccSchedXactionGetAutoCreate( pSx, &autoCreate, &autoNotify );
|
||||
return autoNotify;
|
||||
}
|
||||
|
||||
static void
|
||||
set_autonotify( gpointer pObject, gboolean value )
|
||||
{
|
||||
SchedXaction* pSx;
|
||||
gboolean autoCreate;
|
||||
gboolean dummy;
|
||||
|
||||
g_return_if_fail( pObject != NULL );
|
||||
g_return_if_fail( GNC_IS_SX(pObject) );
|
||||
|
||||
pSx = GNC_SX(pObject);
|
||||
xaccSchedXactionGetAutoCreate( pSx, &autoCreate, &dummy );
|
||||
xaccSchedXactionSetAutoCreate( pSx, autoCreate, value );
|
||||
}
|
||||
|
||||
static gint
|
||||
get_instance_count( gpointer pObject )
|
||||
{
|
||||
|
@ -108,8 +108,8 @@ static const GncSqlColumnTableEntry split_col_table[] =
|
||||
(QofAccessFunc)get_split_reconcile_state, set_split_reconcile_state },
|
||||
{ "reconcile_date", CT_TIMESPEC, 0, 0, NULL, NULL,
|
||||
(QofAccessFunc)xaccSplitRetDateReconciledTS, (QofSetterFunc)set_split_reconcile_date },
|
||||
{ "value", CT_NUMERIC, 0, COL_NNUL, NULL, SPLIT_VALUE },
|
||||
{ "quantity", CT_NUMERIC, 0, COL_NNUL, NULL, SPLIT_AMOUNT },
|
||||
{ "value", CT_NUMERIC, 0, COL_NNUL, "value" },
|
||||
{ "quantity", CT_NUMERIC, 0, COL_NNUL, "amount" },
|
||||
{ "lot_guid", CT_LOTREF, 0, 0, NULL, NULL,
|
||||
(QofAccessFunc)xaccSplitGetLot, set_split_lot },
|
||||
{ NULL }
|
||||
|
@ -461,8 +461,6 @@ gnc_account_set_property (GObject *object,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
gnc_account_class_init (AccountClass *klass)
|
||||
{
|
||||
|
@ -46,7 +46,13 @@ void sxprivtransactionListMapDelete( gpointer data, gpointer user_data );
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_NAME
|
||||
PROP_NAME,
|
||||
PROP_NUM_OCCURANCE,
|
||||
PROP_REM_OCCURANCE,
|
||||
PROP_AUTO_CREATE,
|
||||
PROP_AUTO_CREATE_NOTIFY,
|
||||
PROP_ADVANCE_CREATION_DAYS,
|
||||
PROP_ADVANCE_REMINDER_DAYS
|
||||
};
|
||||
|
||||
/* GObject initialization */
|
||||
@ -98,6 +104,24 @@ gnc_schedxaction_get_property (GObject *object,
|
||||
case PROP_NAME:
|
||||
g_value_set_string(value, sx->name);
|
||||
break;
|
||||
case PROP_NUM_OCCURANCE:
|
||||
g_value_set_int(value, sx->num_occurances_total);
|
||||
break;
|
||||
case PROP_REM_OCCURANCE:
|
||||
g_value_set_int(value, sx->num_occurances_remain);
|
||||
break;
|
||||
case PROP_AUTO_CREATE:
|
||||
g_value_set_boolean(value, sx->autoCreateOption);
|
||||
break;
|
||||
case PROP_AUTO_CREATE_NOTIFY:
|
||||
g_value_set_boolean(value, sx->autoCreateNotify);
|
||||
break;
|
||||
case PROP_ADVANCE_CREATION_DAYS:
|
||||
g_value_set_int(value, sx->advanceCreateDays);
|
||||
break;
|
||||
case PROP_ADVANCE_REMINDER_DAYS:
|
||||
g_value_set_int(value, sx->advanceRemindDays);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||
break;
|
||||
@ -119,6 +143,24 @@ gnc_schedxaction_set_property (GObject *object,
|
||||
case PROP_NAME:
|
||||
xaccSchedXactionSetName(sx, g_value_get_string(value));
|
||||
break;
|
||||
case PROP_NUM_OCCURANCE:
|
||||
xaccSchedXactionSetNumOccur(sx, g_value_get_int(value));
|
||||
break;
|
||||
case PROP_REM_OCCURANCE:
|
||||
xaccSchedXactionSetRemOccur(sx, g_value_get_int(value));
|
||||
break;
|
||||
case PROP_AUTO_CREATE:
|
||||
xaccSchedXactionSetAutoCreate(sx, g_value_get_boolean(value), sx->autoCreateNotify);
|
||||
break;
|
||||
case PROP_AUTO_CREATE_NOTIFY:
|
||||
xaccSchedXactionSetAutoCreate(sx, sx->autoCreateOption, g_value_get_boolean(value));
|
||||
break;
|
||||
case PROP_ADVANCE_CREATION_DAYS:
|
||||
xaccSchedXactionSetAdvanceCreation(sx, g_value_get_int(value));
|
||||
break;
|
||||
case PROP_ADVANCE_REMINDER_DAYS:
|
||||
xaccSchedXactionSetAdvanceReminder(sx, g_value_get_int(value));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||
break;
|
||||
@ -146,6 +188,70 @@ gnc_schedxaction_class_init (SchedXactionClass *klass)
|
||||
"that is displayed by the GUI.",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property
|
||||
(gobject_class,
|
||||
PROP_NUM_OCCURANCE,
|
||||
g_param_spec_int ("num-occurance",
|
||||
"Number of occurances",
|
||||
"Total number of occurances for this scheduled transaction.",
|
||||
0,
|
||||
G_MAXINT16,
|
||||
1,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property
|
||||
(gobject_class,
|
||||
PROP_REM_OCCURANCE,
|
||||
g_param_spec_int ("rem-occurance",
|
||||
"Number of occurances remaining",
|
||||
"Remaining number of occurances for this scheduled transaction.",
|
||||
0,
|
||||
G_MAXINT16,
|
||||
1,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property
|
||||
(gobject_class,
|
||||
PROP_AUTO_CREATE,
|
||||
g_param_spec_boolean ("auto-create",
|
||||
"Auto-create",
|
||||
"TRUE if the transaction will be automatically "
|
||||
"created when its time comes.",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property
|
||||
(gobject_class,
|
||||
PROP_AUTO_CREATE_NOTIFY,
|
||||
g_param_spec_boolean ("auto-create-notify",
|
||||
"Auto-create-notify",
|
||||
"TRUE if the the user will be notified when the transaction "
|
||||
"is automatically created.",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property
|
||||
(gobject_class,
|
||||
PROP_ADVANCE_CREATION_DAYS,
|
||||
g_param_spec_int ("advance-creation-days",
|
||||
"Days in advance to create",
|
||||
"Number of days in advance to create this scheduled transaction.",
|
||||
0,
|
||||
G_MAXINT16,
|
||||
0,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property
|
||||
(gobject_class,
|
||||
PROP_ADVANCE_REMINDER_DAYS,
|
||||
g_param_spec_int ("advance-reminder-days",
|
||||
"Days in advance to remind",
|
||||
"Number of days in advance to remind about this scheduled transaction.",
|
||||
0,
|
||||
G_MAXINT16,
|
||||
0,
|
||||
G_PARAM_READWRITE));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -62,7 +62,9 @@ static QofLogModule log_module = GNC_MOD_ENGINE;
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_ACTION,
|
||||
PROP_MEMO
|
||||
PROP_MEMO,
|
||||
PROP_VALUE,
|
||||
PROP_AMOUNT
|
||||
};
|
||||
|
||||
/* GObject Initialization */
|
||||
@ -124,6 +126,12 @@ gnc_split_get_property(GObject *object,
|
||||
case PROP_MEMO:
|
||||
g_value_set_string(value, split->memo);
|
||||
break;
|
||||
case PROP_VALUE:
|
||||
g_value_set_boxed(value, &split->value);
|
||||
break;
|
||||
case PROP_AMOUNT:
|
||||
g_value_set_boxed(value, &split->amount);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||
break;
|
||||
@ -137,6 +145,7 @@ gnc_split_set_property(GObject *object,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
Split *split;
|
||||
gnc_numeric* number;
|
||||
|
||||
g_return_if_fail(GNC_IS_SPLIT(object));
|
||||
|
||||
@ -148,6 +157,14 @@ gnc_split_set_property(GObject *object,
|
||||
case PROP_MEMO:
|
||||
xaccSplitSetMemo(split, g_value_get_string(value));
|
||||
break;
|
||||
case PROP_VALUE:
|
||||
number = g_value_get_boxed(value);
|
||||
xaccSplitSetValue(split, *number);
|
||||
break;
|
||||
case PROP_AMOUNT:
|
||||
number = g_value_get_boxed(value);
|
||||
xaccSplitSetAmount(split, *number);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||
break;
|
||||
@ -187,6 +204,28 @@ gnc_split_class_init(SplitClass* klass)
|
||||
"this split.",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property
|
||||
(gobject_class,
|
||||
PROP_VALUE,
|
||||
g_param_spec_boxed("value",
|
||||
"Split Value",
|
||||
"The value for this split in the common currency. "
|
||||
"The value and the amount provide enough information to "
|
||||
"calculate a conversion rate.",
|
||||
GNC_TYPE_NUMERIC,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property
|
||||
(gobject_class,
|
||||
PROP_AMOUNT,
|
||||
g_param_spec_boxed("amount",
|
||||
"Split Amount",
|
||||
"The value for this split in the currency of its account. "
|
||||
"The value and the amount provide enough information to "
|
||||
"calculate a conversion rate.",
|
||||
GNC_TYPE_NUMERIC,
|
||||
G_PARAM_READWRITE));
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
|
@ -38,7 +38,8 @@ static gboolean remove_price(GNCPriceDB *db, GNCPrice *p, gboolean cleanup);
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_SOURCE,
|
||||
PROP_TYPE
|
||||
PROP_TYPE,
|
||||
PROP_VALUE
|
||||
};
|
||||
|
||||
/* GObject Initialization */
|
||||
@ -80,6 +81,9 @@ gnc_price_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec
|
||||
case PROP_TYPE:
|
||||
g_value_set_string(value, price->type);
|
||||
break;
|
||||
case PROP_VALUE:
|
||||
g_value_set_boxed(value, &price->value);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||
break;
|
||||
@ -90,6 +94,7 @@ static void
|
||||
gnc_price_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec)
|
||||
{
|
||||
GNCPrice* price;
|
||||
gnc_numeric* number;
|
||||
|
||||
g_return_if_fail(GNC_IS_PRICE(object));
|
||||
|
||||
@ -101,6 +106,10 @@ gnc_price_set_property(GObject* object, guint prop_id, const GValue* value, GPar
|
||||
case PROP_TYPE:
|
||||
gnc_price_set_typestr(price, g_value_get_string(value));
|
||||
break;
|
||||
case PROP_VALUE:
|
||||
number = g_value_get_boxed(value);
|
||||
gnc_price_set_value(price, *number);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||
break;
|
||||
@ -139,6 +148,15 @@ gnc_price_class_init(GNCPriceClass *klass)
|
||||
"are 'bid', 'ask', 'last', 'nav' and 'unknown'.",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property
|
||||
(gobject_class,
|
||||
PROP_VALUE,
|
||||
g_param_spec_boxed("value",
|
||||
"Value",
|
||||
"The value of the price quote.",
|
||||
GNC_TYPE_NUMERIC,
|
||||
G_PARAM_READWRITE));
|
||||
}
|
||||
|
||||
/* ==================================================================== */
|
||||
|
@ -1048,11 +1048,11 @@
|
||||
account-balances)
|
||||
total))
|
||||
|
||||
;; Adds "file://" to the beginning of a URL if it doesn't already exist
|
||||
;; Adds "file:///" to the beginning of a URL if it doesn't already exist
|
||||
;;
|
||||
;; @param url URL
|
||||
;; @return URL with "file://" as the URL type if it isn't already there
|
||||
;; @return URL with "file:///" as the URL type if it isn't already there
|
||||
(define (make-file-url url)
|
||||
(if (string-prefix? "file://" url)
|
||||
(if (string-prefix? "file:///" url)
|
||||
url
|
||||
(string-append "file://" url)))
|
||||
(string-append "file:///" url)))
|
||||
|
Loading…
Reference in New Issue
Block a user