diff --git a/ChangeLog b/ChangeLog index aecf431be9..ffd0d23f0d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2000-05-30 Dave Peticolas + + * src/register/quickfillcell.c: if a quickfill attempt fails, + replace the string with the original case string. + 2000-05-29 Robert Graham Merkel * src/scm/report/transaction-report-2.scm (make-account-subheading): diff --git a/src/register/Makefile.in b/src/register/Makefile.in index 77bdf366e2..7feb4bfdde 100644 --- a/src/register/Makefile.in +++ b/src/register/Makefile.in @@ -32,7 +32,7 @@ INCLPATH = -I@top_srcdir@/ \ -I@top_srcdir@/src/register/gnome -CFLAGS := @CFLAGS@ @X_CFLAGS@ -DCELL_WIDGETS=1 ${INCLPATH} ${CPPFLAGS} +CFLAGS := @CFLAGS@ @X_CFLAGS@ -DCELL_WIDGETS=1 ${INCLPATH} ${CPPFLAGS} ${GLIB_CFLAGS} ###################################################################### # See Makefile.common for information about these variables. diff --git a/src/register/quickfillcell.c b/src/register/quickfillcell.c index 542b28067a..f89b399c43 100644 --- a/src/register/quickfillcell.c +++ b/src/register/quickfillcell.c @@ -33,6 +33,7 @@ #include #include #include +#include #include "basiccell.h" #include "quickfillcell.h" @@ -69,6 +70,8 @@ quick_enter (BasicCell *_cell, const char *val, *start_selection = 0; *end_selection = -1; + xaccSetQuickFillOriginal(cell, NULL); + return val; } @@ -92,6 +95,17 @@ quick_modify (BasicCell *_cell, /* If deleting, just accept */ if (change == NULL) { + /* if the new value is a prefix of the original modulo case, + * just truncate the end of the original. Otherwise, set it + * to NULL */ + if ((*cursor_position >= strlen(newval)) && + (cell->original != NULL) && + (strlen(cell->original) >= strlen(newval)) && + (strncasecmp(cell->original, newval, strlen(newval)) == 0)) + cell->original[strlen(newval)] = '\0'; + else + xaccSetQuickFillOriginal(cell, NULL); + SET (&(cell->cell), newval); return newval; } @@ -100,15 +114,32 @@ quick_modify (BasicCell *_cell, if (*cursor_position < strlen(oldval)) { SET (&(cell->cell), newval); + xaccSetQuickFillOriginal(cell, NULL); return newval; } + if (cell->original == NULL) + cell->original = g_strdup(newval); + else + { + char *original = g_strconcat(cell->original, change, NULL); + g_free(cell->original); + cell->original = original; + } + match = xaccGetQuickFillStr(cell->qfRoot, newval); if ((match == NULL) || (match->text == NULL)) { - SET (&(cell->cell), newval); - return newval; + if (cell->original != NULL) + retval = strdup(cell->original); + else + retval = newval; + + *cursor_position += strlen(change); + + SET (&(cell->cell), retval); + return retval; } retval = strdup(match->text); @@ -122,7 +153,7 @@ quick_modify (BasicCell *_cell, } /* ================================================ */ -/* when leaving cell, make sure that text was put into the qf */ +/* when leaving cell, make sure that text was put into the qf */ static const char * quick_leave (BasicCell *_cell, const char *val) @@ -156,6 +187,7 @@ xaccInitQuickFillCell (QuickFillCell *cell) cell->qfRoot = xaccMallocQuickFill(); cell->qf = cell->qfRoot; cell->sort = QUICKFILL_LIFO; + cell->original = NULL; cell->cell.enter_cell = quick_enter; cell->cell.modify_verify = quick_modify; @@ -174,6 +206,9 @@ xaccDestroyQuickFillCell (QuickFillCell *cell) cell->qfRoot = NULL; cell->qf = NULL; + g_free(cell->original); + cell->original = NULL; + cell->cell.enter_cell = NULL; cell->cell.modify_verify = NULL; cell->cell.leave_cell = NULL; @@ -202,4 +237,20 @@ xaccSetQuickFillSort (QuickFillCell *cell, QuickFillSort sort) cell->sort = sort; } +/* ================================================ */ + +void +xaccSetQuickFillOriginal (QuickFillCell *cell, const char *original) +{ + if (cell == NULL) + return; + + g_free(cell->original); + + if ((original != NULL) && (*original != '\0')) + cell->original = g_strdup(original); + else + cell->original = NULL; +} + /* =============== END OF FILE ==================== */ diff --git a/src/register/quickfillcell.h b/src/register/quickfillcell.h index aef055b845..4b7a030a98 100644 --- a/src/register/quickfillcell.h +++ b/src/register/quickfillcell.h @@ -49,22 +49,24 @@ typedef struct _QuickFillCell { - BasicCell cell; - QuickFill *qfRoot; /* root of quickfill-tree - * handled by this cell */ - QuickFill *qf; /* current position in tree */ + BasicCell cell; + QuickFill *qfRoot; /* root of quickfill-tree + * handled by this cell */ + QuickFill *qf; /* current position in tree */ - QuickFillSort sort; /* determines order of strings matched. - * default is QUICKFILL_LIFO. */ + QuickFillSort sort; /* determines order of strings matched. + * default is QUICKFILL_LIFO. */ + + char *original; /* original string entered in original case */ } QuickFillCell; -/* installs a callback to handle price recording */ QuickFillCell * xaccMallocQuickFillCell (void); void xaccInitQuickFillCell (QuickFillCell *); void xaccDestroyQuickFillCell (QuickFillCell *); void xaccSetQuickFillCellValue (QuickFillCell *, const char *); void xaccSetQuickFillSort (QuickFillCell *, QuickFillSort); +void xaccSetQuickFillOriginal (QuickFillCell *, const char *); /* GUI-dependent */ void xaccQuickFillGUIInit (QuickFillCell *);