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{
aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}},
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
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
l' | T.null selacct = l
| otherwise = maybe l (flip listMoveTo l) midx
-- keep the selection near the last selected account
-- (may need to move to the next leaf account when entering flat mode)
newl' = listMoveTo selidx newl
where
midx = findIndex (\((a,_,_),_) -> a==selacctclipped) items
selacctclipped = case depth_ ropts of
Nothing -> selacct
Just d -> clipAccountName d selacct
selidx = case listSelectedElement oldl of
Nothing -> 0
Just (_,(_,a,_,_)) -> fromMaybe (fromMaybe 0 mprefixmatch) mexactmatch
where
mexactmatch = findIndex ((a ==) . second4) displayitems
mprefixmatch = findIndex ((a `isAccountNamePrefixOf`) . second4) displayitems
uopts' = uopts{cliopts_=copts{reportopts_=ropts'}}
ropts' = ropts {
-- XXX balanceReport doesn't respect this yet