ui: simpler forecast toggle: just visibility, no reload (#1193)

This commit is contained in:
Simon Michael 2020-02-22 11:02:30 -08:00
parent 4eba930a5c
commit 3bee9a96c9
3 changed files with 31 additions and 29 deletions

View File

@ -83,13 +83,15 @@ asInit d reset ui@UIState{
uopts' = uopts{cliopts_=copts{reportopts_=ropts'}} uopts' = uopts{cliopts_=copts{reportopts_=ropts'}}
ropts' = ropts{accountlistmode_=if tree_ ropts then ALTree else ALFlat} ropts' = ropts{accountlistmode_=if tree_ ropts then ALTree else ALFlat}
q = And [queryFromOpts d ropts q = And [queryFromOpts d ropts, excludeforecastq (forecast_ ropts)]
-- Exclude future transactions except in forecast mode where
-- XXX this necessitates special handling in multiBalanceReport, at least -- Except in forecast mode, exclude future/forecast transactions.
,if forecast_ ropts excludeforecastq True = Any
then Any excludeforecastq False = -- not:date:tomorrow- not:tag:generated-transaction
else Date $ DateSpan Nothing (Just $ addDays 1 d) And [
] Not (Date $ DateSpan (Just $ addDays 1 d) Nothing)
,Not (Tag "generated-transaction" Nothing)
]
-- run the report -- run the report
(items,_total) = report ropts' q j (items,_total) = report ropts' q j
@ -337,9 +339,7 @@ asHandle ui0@UIState{
VtyEvent (EvKey (KChar 'U') []) -> asCenterAndContinue $ regenerateScreens j d $ toggleUnmarked ui VtyEvent (EvKey (KChar 'U') []) -> asCenterAndContinue $ regenerateScreens j d $ toggleUnmarked ui
VtyEvent (EvKey (KChar 'P') []) -> asCenterAndContinue $ regenerateScreens j d $ togglePending ui VtyEvent (EvKey (KChar 'P') []) -> asCenterAndContinue $ regenerateScreens j d $ togglePending ui
VtyEvent (EvKey (KChar 'C') []) -> asCenterAndContinue $ regenerateScreens j d $ toggleCleared ui VtyEvent (EvKey (KChar 'C') []) -> asCenterAndContinue $ regenerateScreens j d $ toggleCleared ui
VtyEvent (EvKey (KChar 'F') []) -> VtyEvent (EvKey (KChar 'F') []) -> continue $ regenerateScreens j d $ toggleForecast ui
let ui'@UIState{aopts=UIOpts{cliopts_=copts'}} = toggleForecast ui
in liftIO (uiReloadJournal copts' d ui') >>= continue
VtyEvent (EvKey (KDown) [MShift]) -> continue $ regenerateScreens j d $ shrinkReportPeriod d ui VtyEvent (EvKey (KDown) [MShift]) -> continue $ regenerateScreens j d $ shrinkReportPeriod d ui
VtyEvent (EvKey (KUp) [MShift]) -> continue $ regenerateScreens j d $ growReportPeriod d ui VtyEvent (EvKey (KUp) [MShift]) -> continue $ regenerateScreens j d $ growReportPeriod d ui

View File

@ -62,15 +62,18 @@ writeChan = BC.writeBChan
main :: IO () main :: IO ()
main = do main = do
opts <- getHledgerUIOpts opts@UIOpts{cliopts_=copts@CliOpts{inputopts_=_iopts,reportopts_=ropts,rawopts_=rawopts}} <- getHledgerUIOpts
-- when (debug_ $ cliopts_ opts) $ printf "%s\n" prognameandversion >> printf "opts: %s\n" (show opts) -- when (debug_ $ cliopts_ opts) $ printf "%s\n" prognameandversion >> printf "opts: %s\n" (show opts)
run opts
where -- always include forecasted periodic transactions when loading data;
run opts -- they will be toggled on and off in the UI.
| "help" `inRawOpts` (rawopts_ $ cliopts_ opts) = putStr (showModeUsage uimode) >> exitSuccess let copts' = copts{reportopts_=ropts{forecast_=True}}
| "version" `inRawOpts` (rawopts_ $ cliopts_ opts) = putStrLn prognameandversion >> exitSuccess
| "binary-filename" `inRawOpts` (rawopts_ $ cliopts_ opts) = putStrLn (binaryfilename progname) case True of
| otherwise = withJournalDo (cliopts_ opts) (runBrickUi opts) _ | "help" `inRawOpts` rawopts -> putStr (showModeUsage uimode) >> exitSuccess
_ | "version" `inRawOpts` rawopts -> putStrLn prognameandversion >> exitSuccess
_ | "binary-filename" `inRawOpts` rawopts -> putStrLn (binaryfilename progname)
_ -> withJournalDo copts' (runBrickUi opts)
runBrickUi :: UIOpts -> Journal -> IO () runBrickUi :: UIOpts -> Journal -> IO ()
runBrickUi uopts@UIOpts{cliopts_=copts@CliOpts{inputopts_=_iopts,reportopts_=ropts}} j = do runBrickUi uopts@UIOpts{cliopts_=copts@CliOpts{inputopts_=_iopts,reportopts_=ropts}} j = do

View File

@ -69,14 +69,15 @@ rsInit d reset ui@UIState{aopts=_uopts@UIOpts{cliopts_=CliOpts{reportopts_=ropts
ropts' = ropts{ ropts' = ropts{
depth_=Nothing depth_=Nothing
} }
q = And [queryFromOpts d ropts' q = And [queryFromOpts d ropts, excludeforecastq (forecast_ ropts)]
-- Exclude future transactions except in forecast mode where
-- XXX this necessitates special handling in multiBalanceReport, at least -- Except in forecast mode, exclude future/forecast transactions.
,if forecast_ ropts excludeforecastq True = Any
then Any excludeforecastq False = -- not:date:tomorrow- not:tag:generated-transaction
else Date $ DateSpan Nothing (Just $ addDays 1 d) And [
] Not (Date $ DateSpan (Just $ addDays 1 d) Nothing)
-- reportq = filterQuery (not . queryIsDepth) q ,Not (Tag "generated-transaction" Nothing)
]
(_label,items) = accountTransactionsReport ropts' j q thisacctq (_label,items) = accountTransactionsReport ropts' j q thisacctq
items' = (if empty_ ropts' then id else filter (not . isZeroMixedAmount . fifth6)) $ -- without --empty, exclude no-change txns items' = (if empty_ ropts' then id else filter (not . isZeroMixedAmount . fifth6)) $ -- without --empty, exclude no-change txns
@ -335,9 +336,7 @@ rsHandle ui@UIState{
VtyEvent (EvKey (KChar 'U') []) -> rsCenterAndContinue $ regenerateScreens j d $ toggleUnmarked ui VtyEvent (EvKey (KChar 'U') []) -> rsCenterAndContinue $ regenerateScreens j d $ toggleUnmarked ui
VtyEvent (EvKey (KChar 'P') []) -> rsCenterAndContinue $ regenerateScreens j d $ togglePending ui VtyEvent (EvKey (KChar 'P') []) -> rsCenterAndContinue $ regenerateScreens j d $ togglePending ui
VtyEvent (EvKey (KChar 'C') []) -> rsCenterAndContinue $ regenerateScreens j d $ toggleCleared ui VtyEvent (EvKey (KChar 'C') []) -> rsCenterAndContinue $ regenerateScreens j d $ toggleCleared ui
VtyEvent (EvKey (KChar 'F') []) -> VtyEvent (EvKey (KChar 'F') []) -> rsCenterAndContinue $ regenerateScreens j d $ toggleForecast ui
let ui'@UIState{aopts=UIOpts{cliopts_=copts'}} = toggleForecast ui
in liftIO (uiReloadJournal copts' d ui') >>= rsCenterAndContinue
VtyEvent (EvKey (KChar '/') []) -> continue $ regenerateScreens j d $ showMinibuffer ui VtyEvent (EvKey (KChar '/') []) -> continue $ regenerateScreens j d $ showMinibuffer ui
VtyEvent (EvKey (KDown) [MShift]) -> continue $ regenerateScreens j d $ shrinkReportPeriod d ui VtyEvent (EvKey (KDown) [MShift]) -> continue $ regenerateScreens j d $ shrinkReportPeriod d ui