ui: accounts: hold selection better during F toggle

This commit is contained in:
Simon Michael 2016-06-03 16:31:53 -07:00
parent ddf18060ab
commit 4ab1536ea0

View File

@ -52,21 +52,22 @@ initAccountsScreen :: Day -> AppState -> AppState
initAccountsScreen d st@AppState{ initAccountsScreen d st@AppState{
aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}, aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}},
ajournal=j, ajournal=j,
aScreen=s@AccountsScreen{asState=(_,selacct)} aScreen=s@AccountsScreen{asState=(oldl,selacct)}
} = } =
st{aopts=uopts', aScreen=s{asState=(l',selacct)}} st{aopts=uopts', aScreen=s{asState=(newl',selacct)}}
where where
l = list (Name "accounts") (V.fromList displayitems) 1 newl = list (Name "accounts") (V.fromList displayitems) 1
-- keep the selection near the last known selected account if possible -- keep the selection near the last selected account
l' | T.null selacct = l -- (may need to move to the next leaf account when entering flat mode)
| otherwise = maybe l (flip listMoveTo l) midx newl' = listMoveTo selidx newl
where where
midx = findIndex (\((a,_,_),_) -> a==selacctclipped) items selidx = case listSelectedElement oldl of
selacctclipped = case depth_ ropts of Nothing -> 0
Nothing -> selacct Just (_,(_,a,_,_)) -> fromMaybe (fromMaybe 0 mprefixmatch) mexactmatch
Just d -> clipAccountName d selacct where
mexactmatch = findIndex ((a ==) . second4) displayitems
mprefixmatch = findIndex ((a `isAccountNamePrefixOf`) . second4) displayitems
uopts' = uopts{cliopts_=copts{reportopts_=ropts'}} uopts' = uopts{cliopts_=copts{reportopts_=ropts'}}
ropts' = ropts { ropts' = ropts {
-- XXX balanceReport doesn't respect this yet -- XXX balanceReport doesn't respect this yet