Several fixes to get the state flags to appear right in "print".

This commit is contained in:
John Wiegley 2009-02-07 23:30:40 -04:00
parent 6f37d88391
commit ffba456113
4 changed files with 24 additions and 14 deletions

View file

@ -61,14 +61,14 @@ entry_base_t::~entry_base_t()
item_t::state_t entry_base_t::state() const item_t::state_t entry_base_t::state() const
{ {
bool first = true; bool first = true;
state_t result = UNCLEARED; state_t result = CLEARED;
foreach (xact_t * xact, xacts) { foreach (xact_t * xact, xacts) {
if ((result == UNCLEARED && xact->_state != UNCLEARED) || if (xact->_state == UNCLEARED)
(result == PENDING && xact->_state == CLEARED)) return UNCLEARED;
result = xact->_state; else if (xact->_state == PENDING)
result = PENDING;
} }
return result; return result;
} }

View file

@ -58,11 +58,13 @@ report_t::report_t(session_t& _session) : session(_session)
"%48|%-.38A %22.108t %!22.132T\n"); "%48|%-.38A %22.108t %!22.132T\n");
HANDLER(print_format_).on( HANDLER(print_format_).on(
"%(entry.date)%(entry.cleared ? \" *\" : (entry.uncleared ? \"\" : \" !\"))" "%(entry.date)%(entry.cleared ? \" *\" : (entry.pending ? \" !\" : \"\"))"
"%(code ? \" (\" + code + \")\" : \"\") %(payee)%(entry.comment | \"\")\n" "%(code ? \" (\" + code + \")\" : \"\") %(payee)%(entry.comment | \"\")\n"
" %(cleared ? \"* \" : (uncleared ? \"\" : \"! \"))%-34(account)" " %(entry.uncleared ? (cleared ? \"* \" : (pending ? \"! \" : \"\")) : \"\")"
"%-34(account)"
" %12(amount)%(comment | \"\")\n%/" " %12(amount)%(comment | \"\")\n%/"
" %(cleared ? \"* \" : (uncleared ? \"\" : \"! \"))%-34(account)" " %(entry.uncleared ? (cleared ? \"* \" : (pending ? \"! \" : \"\")) : \"\")"
"%-34(account)"
" %12(amount)%(comment | \"\")\n%/\n"); " %12(amount)%(comment | \"\")\n%/\n");
HANDLER(balance_format_).on( HANDLER(balance_format_).on(
@ -84,7 +86,7 @@ report_t::report_t(session_t& _session) : session(_session)
"%(quoted(payee))," "%(quoted(payee)),"
"%(quoted(account))," "%(quoted(account)),"
"%(quoted(display_amount))," "%(quoted(display_amount)),"
"%(quoted(cleared ? \"*\" : (uncleared ? \"\" : \"!\")))," "%(quoted((cleared or entry.cleared) ? \"*\" : ((pending or entry.pending) ? \"!\" : \"\"))),"
"%(quoted(code))," "%(quoted(code)),"
"%(quoted(join(note)))\n"); "%(quoted(join(note)))\n");
} }

View file

@ -752,8 +752,8 @@ xact_t * instance_t::parse_xact(char * line,
} }
if (entry && if (entry &&
((entry->_state == item_t::CLEARED && xact->state() != item_t::CLEARED) || ((entry->_state == item_t::CLEARED && xact->_state != item_t::CLEARED) ||
(entry->_state == item_t::PENDING && xact->state() == item_t::UNCLEARED))) (entry->_state == item_t::PENDING && xact->_state == item_t::UNCLEARED)))
xact->set_state(entry->_state); xact->set_state(entry->_state);
// Parse the account name // Parse the account name
@ -1050,15 +1050,14 @@ entry_t * instance_t::parse_entry(char * line,
// Parse the optional cleared flag: * // Parse the optional cleared flag: *
item_t::state_t state = item_t::UNCLEARED;
if (next) { if (next) {
switch (*next) { switch (*next) {
case '*': case '*':
state = item_t::CLEARED; curr->_state = item_t::CLEARED;
next = skip_ws(++next); next = skip_ws(++next);
break; break;
case '!': case '!':
state = item_t::PENDING; curr->_state = item_t::PENDING;
next = skip_ws(++next); next = skip_ws(++next);
break; break;
} }

View file

@ -66,6 +66,10 @@ item_t::state_t xact_t::state() const
} }
namespace { namespace {
value_t get_this(xact_t& xact) {
return value_t(static_cast<scope_t *>(&xact));
}
value_t get_entry(xact_t& xact) { value_t get_entry(xact_t& xact) {
return value_t(static_cast<scope_t *>(xact.entry)); return value_t(static_cast<scope_t *>(xact.entry));
} }
@ -198,6 +202,11 @@ expr_t::ptr_op_t xact_t::lookup(const string& name)
else if (name == "total_cost") else if (name == "total_cost")
return WRAP_FUNCTOR(get_wrapper<&get_total_cost>); return WRAP_FUNCTOR(get_wrapper<&get_total_cost>);
break; break;
case 'x':
if (name == "xact")
return WRAP_FUNCTOR(get_wrapper<&get_this>);
break;
} }
return item_t::lookup(name); return item_t::lookup(name);