diff --git a/src/engine/Query.c b/src/engine/Query.c index fb65e0ce9a..87fbc22792 100644 --- a/src/engine/Query.c +++ b/src/engine/Query.c @@ -49,6 +49,8 @@ struct _Query { Timespec earliest; Timespec latest; + int (*sort_func)(const void*, const void *); + char changed; /* flag, has the query changed? */ Split **split_list; }; @@ -66,6 +68,8 @@ xaccMallocQuery (void) /* ================================================== */ +static int Sort_DATE_NUM_AMT_MEMO_DESC (Split **, Split **); + void xaccInitQuery (Query *q) { @@ -82,6 +86,8 @@ xaccInitQuery (Query *q) /* q->latest.tv_sec = ULONG_MAX; */ q->latest.tv_sec = LONG_MAX; q->latest.tv_nsec = 0; + + q->sort_func = (int (*)(const void*, const void *)) Sort_DATE_NUM_AMT_MEMO_DESC; } /* ================================================== */ @@ -455,6 +461,14 @@ DECLARE (DESC, MEMO, AMT, NUM,DATE) /* ================================================== */ +void +xaccQuerySetSortOrder (Query *q, int a, ...) +{ + +} + +/* ================================================== */ + static void SortSplits (Query *q, Split **slist) { @@ -464,9 +478,7 @@ SortSplits (Query *q, Split **slist) while (slist[nsplits]) nsplits ++; /* run the sort routine on the array */ - qsort (slist, nsplits, sizeof (Split *), - (int(*)(const void*, const void *)) xaccSplitOrder); - + qsort (slist, nsplits, sizeof (Split *), q->sort_func); } diff --git a/src/engine/Query.h b/src/engine/Query.h index 8eced3e619..fdbf759ced 100644 --- a/src/engine/Query.h +++ b/src/engine/Query.h @@ -38,7 +38,9 @@ typedef struct _Query Query; enum { BY_DATE, BY_NUM, - BY_AMOUNT + BY_AMOUNT, + BY_MEMO, + BY_DESC }; Query * xaccMallocQuery (void); @@ -56,6 +58,11 @@ void xaccQueryAddAccount (Query *, Account *acc); */ void xaccQuerySetMaxSplits (Query *, int); +/* The xaccQuerySetSortOrder() method sets the sort order that + * should be used on the splits + */ +void xaccQuerySetSortOrder (Query *, int, ...); + /* The xaccQueryGetSplits() method returns a list of splits * matching the query and sorting criteria previously set up. */