ui: d cycles report duration, n/p steps to next/prev period (#381)
This commit is contained in:
parent
0cb5703ad1
commit
3c724efe4f
@ -155,6 +155,7 @@ asDraw UIState{aopts=UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}
|
||||
<+> withAttr (borderAttr <> "query") (str (if flat_ ropts then " (flat)" else ""))
|
||||
<+> borderQueryStr querystr
|
||||
<+> togglefilters
|
||||
<+> borderPeriodStr (period_ ropts)
|
||||
<+> borderDepthStr mdepth
|
||||
<+> str " ("
|
||||
<+> cur
|
||||
@ -288,6 +289,9 @@ asHandle ui0@UIState{
|
||||
EvKey (KChar '-') [] -> continue $ regenerateScreens j d $ decDepth ui
|
||||
EvKey (KChar '_') [] -> continue $ regenerateScreens j d $ decDepth ui
|
||||
EvKey (KChar c) [] | c `elem` ['+','='] -> continue $ regenerateScreens j d $ incDepth ui
|
||||
EvKey (KChar 'd') [] -> continue $ regenerateScreens j d $ cycleReportDuration d ui
|
||||
EvKey (KChar 'n') [] -> continue $ regenerateScreens j d $ nextReportPeriod ui
|
||||
EvKey (KChar 'p') [] -> continue $ regenerateScreens j d $ previousReportPeriod ui
|
||||
EvKey (KChar 'F') [] -> continue $ regenerateScreens j d $ toggleFlat ui
|
||||
EvKey (KChar 'Z') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleEmpty ui)
|
||||
EvKey (KChar 'C') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleCleared ui)
|
||||
|
||||
@ -160,11 +160,12 @@ rsDraw UIState{aopts=UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}
|
||||
where
|
||||
toplabel =
|
||||
withAttr ("border" <> "bold") (str $ T.unpack $ replaceHiddenAccountsNameWith "All" rsAccount)
|
||||
<+> withAttr (borderAttr <> "query") (str $ if inclusive then "" else " (exclusive)")
|
||||
<+> withAttr (borderAttr <> "query") (str $ if inclusive then "" else " exclusive")
|
||||
<+> togglefilters
|
||||
<+> str " transactions"
|
||||
<+> borderQueryStr (query_ ropts)
|
||||
-- <+> str " and subs"
|
||||
<+> borderPeriodStr (period_ ropts)
|
||||
<+> str " ("
|
||||
<+> cur
|
||||
<+> str "/"
|
||||
@ -258,6 +259,9 @@ rsHandle ui@UIState{
|
||||
EvKey (KChar 'g') [] -> liftIO (uiReloadJournalIfChanged copts d j ui) >>= continue
|
||||
EvKey (KChar 'I') [] -> continue $ uiCheckBalanceAssertions d (toggleIgnoreBalanceAssertions ui)
|
||||
EvKey (KChar 'a') [] -> suspendAndResume $ clearScreen >> setCursorPosition 0 0 >> add copts j >> uiReloadJournalIfChanged copts d j ui
|
||||
EvKey (KChar 'd') [] -> continue $ regenerateScreens j d $ cycleReportDuration d ui
|
||||
EvKey (KChar 'n') [] -> continue $ regenerateScreens j d $ nextReportPeriod ui
|
||||
EvKey (KChar 'p') [] -> continue $ regenerateScreens j d $ previousReportPeriod ui
|
||||
EvKey (KChar 'E') [] -> suspendAndResume $ void (runEditor pos f) >> uiReloadJournalIfChanged copts d j ui
|
||||
where
|
||||
(pos,f) = case listSelectedElement rsList of
|
||||
|
||||
@ -68,6 +68,36 @@ toggleIgnoreBalanceAssertions :: UIState -> UIState
|
||||
toggleIgnoreBalanceAssertions ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{}}} =
|
||||
ui{aopts=uopts{cliopts_=copts{ignore_assertions_=not $ ignore_assertions_ copts}}}
|
||||
|
||||
-- | Cycle through increasingly larger report periods enclosing the current one.
|
||||
cycleReportDuration :: Day -> UIState -> UIState
|
||||
cycleReportDuration d ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} =
|
||||
ui{aopts=uopts{cliopts_=copts{reportopts_=reportOptsCycleDuration d ropts}}}
|
||||
|
||||
-- | Cycle through increasingly larger report periods.
|
||||
-- Simple periods (a specific day, monday-starting week, month, quarter, year)
|
||||
-- become the next larger enclosing period.
|
||||
-- Other periods (between two arbitrary dates, or unbounded on one or both ends)
|
||||
-- become today.
|
||||
reportOptsCycleDuration :: Day -> ReportOpts -> ReportOpts
|
||||
reportOptsCycleDuration d ropts@ReportOpts{period_=p} = ropts{period_=p'}
|
||||
where
|
||||
p' = case p of
|
||||
PeriodAll -> DayPeriod d
|
||||
PeriodFrom _ -> DayPeriod d
|
||||
PeriodTo _ -> DayPeriod d
|
||||
PeriodBetween _ _ -> DayPeriod d
|
||||
_ -> periodGrow p
|
||||
|
||||
-- | Step the report start/end dates to the next period of same duration.
|
||||
nextReportPeriod :: UIState -> UIState
|
||||
nextReportPeriod ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts@ReportOpts{period_=p}}}} =
|
||||
ui{aopts=uopts{cliopts_=copts{reportopts_=ropts{period_=periodNext p}}}}
|
||||
|
||||
-- | Step the report start/end dates to the next period of same duration.
|
||||
previousReportPeriod :: UIState -> UIState
|
||||
previousReportPeriod ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts@ReportOpts{period_=p}}}} =
|
||||
ui{aopts=uopts{cliopts_=copts{reportopts_=ropts{period_=periodPrevious p}}}}
|
||||
|
||||
-- | Apply a new filter query.
|
||||
setFilter :: String -> UIState -> UIState
|
||||
setFilter s ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} =
|
||||
@ -82,6 +112,7 @@ resetFilter ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=rop
|
||||
,clearedstatus_=Nothing
|
||||
,real_=False
|
||||
,query_=""
|
||||
,period_=PeriodAll
|
||||
}}}}
|
||||
|
||||
resetDepth :: UIState -> UIState
|
||||
|
||||
@ -127,6 +127,10 @@ borderDepthStr :: Maybe Int -> Widget Name
|
||||
borderDepthStr Nothing = str ""
|
||||
borderDepthStr (Just d) = str " to " <+> withAttr (borderAttr <> "query") (str $ "depth "++show d)
|
||||
|
||||
borderPeriodStr :: Period -> Widget Name
|
||||
borderPeriodStr PeriodAll = str ""
|
||||
borderPeriodStr p = str " in " <+> withAttr (borderAttr <> "query") (str $ showPeriod p)
|
||||
|
||||
borderKeysStr :: [(String,String)] -> Widget Name
|
||||
borderKeysStr keydescs =
|
||||
hBox $
|
||||
|
||||
@ -84,10 +84,11 @@ The cursor keys navigate:
|
||||
`left` returns to the previous screen,
|
||||
`up`/`down`/`page up`/`page down`/`home`/`end` move up and down through lists.
|
||||
Vi-style `h`/`j`/`k`/`l` movement keys are also supported.
|
||||
A tip: movement speed is limited by your keyboard repeat rate,
|
||||
(A tip: movement speed is limited by your keyboard repeat rate,
|
||||
to move faster you may want to adjust that.
|
||||
(On a mac, the Karabiner app is one way to do that).
|
||||
On a mac, the Karabiner app is one way to do that.)
|
||||
|
||||
On most screens,
|
||||
`/` lets you set or change the [filter query](/hledger.html#queries),
|
||||
which limits the data shown on most screens (in addition to the quick
|
||||
filters described below). While editing the query you can use typical
|
||||
@ -95,6 +96,12 @@ command-line edit keys
|
||||
([CTRL-a/e/d/k, cursor keys etc.](http://hackage.haskell.org/package/brick-0.7/docs/Brick-Widgets-Edit.html#t:Editor)),
|
||||
and `ENTER`to set the new filter or `ESCAPE`to cancel.
|
||||
|
||||
`d` cycles through the common report period durations:
|
||||
day, week, month, quarter, year, and unlimited (the default).
|
||||
When the report duration is limited in this way, `n` and `p`
|
||||
step to the next or previous day/week/month/etc.
|
||||
(To set arbitrary start/end dates, you can use `/` and a `date:` query.)
|
||||
|
||||
`BACKSPACE` or `DELETE` clears any filters in effect.
|
||||
|
||||
`ESCAPE` removes any filters currently in effect, and jumps to the top screen.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user