;ui: refactor, drop old option support

This commit is contained in:
Simon Michael 2020-12-12 12:13:52 -08:00
parent 349ffd7c0b
commit 8d1e3e638b

View File

@ -22,17 +22,17 @@ import Hledger.UI.UIOptions
-- | Toggle between showing only unmarked items or all items. -- | Toggle between showing only unmarked items or all items.
toggleUnmarked :: UIState -> UIState toggleUnmarked :: UIState -> UIState
toggleUnmarked ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportspec_=rspec}}} = toggleUnmarked ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportspec_=rspec}}} =
ui{aopts=uopts{cliopts_=copts{reportspec_=reportSpecToggleStatusSomehow Unmarked copts rspec}}} ui{aopts=uopts{cliopts_=copts{reportspec_=reportSpecToggleStatus Unmarked copts rspec}}}
-- | Toggle between showing only pending items or all items. -- | Toggle between showing only pending items or all items.
togglePending :: UIState -> UIState togglePending :: UIState -> UIState
togglePending ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportspec_=rspec}}} = togglePending ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportspec_=rspec}}} =
ui{aopts=uopts{cliopts_=copts{reportspec_=reportSpecToggleStatusSomehow Pending copts rspec}}} ui{aopts=uopts{cliopts_=copts{reportspec_=reportSpecToggleStatus Pending copts rspec}}}
-- | Toggle between showing only cleared items or all items. -- | Toggle between showing only cleared items or all items.
toggleCleared :: UIState -> UIState toggleCleared :: UIState -> UIState
toggleCleared ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportspec_=rspec}}} = toggleCleared ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportspec_=rspec}}} =
ui{aopts=uopts{cliopts_=copts{reportspec_=reportSpecToggleStatusSomehow Cleared copts rspec}}} ui{aopts=uopts{cliopts_=copts{reportspec_=reportSpecToggleStatus Cleared copts rspec}}}
-- TODO testing different status toggle styles -- TODO testing different status toggle styles
@ -52,17 +52,12 @@ uiShowStatus copts ss =
showstatus Pending = "pending" showstatus Pending = "pending"
showstatus Unmarked = "unmarked" showstatus Unmarked = "unmarked"
reportSpecToggleStatusSomehow :: Status -> CliOpts -> ReportSpec -> ReportSpec reportSpecToggleStatus :: Status -> CliOpts -> ReportSpec -> ReportSpec
reportSpecToggleStatusSomehow s copts = reportSpecToggleStatus s _copts =
either (error "reportSpecToggleStatusSomehow: updating Status should not result in an error") id -- PARTIAL: either (error "reportSpecToggleStatus: changing status should not have caused this error") id -- PARTIAL:
. updateReportSpecWith update . updateReportSpecWith (reportOptsToggleStatus1 s)
where
update = case maybeposintopt "status-toggles" $ rawopts_ copts of -- various toggle behaviours:
Just 2 -> reportOptsToggleStatus2 s
Just 3 -> reportOptsToggleStatus3 s
-- Just 4 -> reportOptsToggleStatus4 s
-- Just 5 -> reportOptsToggleStatus5 s
_ -> reportOptsToggleStatus1 s
-- 1 UPC toggles only X/all -- 1 UPC toggles only X/all
reportOptsToggleStatus1 s ropts@ReportOpts{statuses_=ss} reportOptsToggleStatus1 s ropts@ReportOpts{statuses_=ss}
@ -77,21 +72,21 @@ reportOptsToggleStatus1 s ropts@ReportOpts{statuses_=ss}
-- pressing Y after first or second step starts new cycle: -- pressing Y after first or second step starts new cycle:
-- [u] P [p] -- [u] P [p]
-- [pc] P [p] -- [pc] P [p]
reportOptsToggleStatus2 s ropts@ReportOpts{statuses_=ss} -- reportOptsToggleStatus2 s ropts@ReportOpts{statuses_=ss}
| ss == [s] = ropts{statuses_=complement [s]} -- | ss == [s] = ropts{statuses_=complement [s]}
| ss == complement [s] = ropts{statuses_=[]} -- | ss == complement [s] = ropts{statuses_=[]}
| otherwise = ropts{statuses_=[s]} -- XXX assume only three values -- | otherwise = ropts{statuses_=[s]} -- XXX assume only three values
-- 3 UPC toggles each X -- 3 UPC toggles each X
reportOptsToggleStatus3 s ropts@ReportOpts{statuses_=ss} -- reportOptsToggleStatus3 s ropts@ReportOpts{statuses_=ss}
| s `elem` ss = ropts{statuses_=filter (/= s) ss} -- | s `elem` ss = ropts{statuses_=filter (/= s) ss}
| otherwise = ropts{statuses_=simplifyStatuses (s:ss)} -- | otherwise = ropts{statuses_=simplifyStatuses (s:ss)}
-- 4 upc sets X, UPC sets not-X -- 4 upc sets X, UPC sets not-X
--reportOptsToggleStatus4 s ropts@ReportOpts{statuses_=ss} --reportOptsToggleStatus4 s ropts@ReportOpts{statuses_=ss}
-- | s `elem` ss = ropts{statuses_=filter (/= s) ss} -- | s `elem` ss = ropts{statuses_=filter (/= s) ss}
-- | otherwise = ropts{statuses_=simplifyStatuses (s:ss)} -- | otherwise = ropts{statuses_=simplifyStatuses (s:ss)}
--
-- 5 upc toggles X, UPC toggles not-X -- 5 upc toggles X, UPC toggles not-X
--reportOptsToggleStatus5 s ropts@ReportOpts{statuses_=ss} --reportOptsToggleStatus5 s ropts@ReportOpts{statuses_=ss}
-- | s `elem` ss = ropts{statuses_=filter (/= s) ss} -- | s `elem` ss = ropts{statuses_=filter (/= s) ss}