ui: --watch: track date only when a standard period is in effect
This commit is contained in:
parent
6aeaee17f5
commit
3c4cb4eeeb
@ -118,6 +118,17 @@ isLastDayOfMonth y m d =
|
|||||||
12 -> d==31
|
12 -> d==31
|
||||||
_ -> False
|
_ -> False
|
||||||
|
|
||||||
|
-- | Is this period a "standard" period, referencing a particular day, week, month, quarter, or year ?
|
||||||
|
-- Periods of other durations, or infinite duration, or not starting on a standard period boundary, are not.
|
||||||
|
isStandardPeriod = isStandardPeriod' . simplifyPeriod
|
||||||
|
where
|
||||||
|
isStandardPeriod' (DayPeriod _) = True
|
||||||
|
isStandardPeriod' (WeekPeriod _) = True
|
||||||
|
isStandardPeriod' (MonthPeriod _ _) = True
|
||||||
|
isStandardPeriod' (QuarterPeriod _ _) = True
|
||||||
|
isStandardPeriod' (YearPeriod _) = True
|
||||||
|
isStandardPeriod' _ = False
|
||||||
|
|
||||||
-- | Render a period as a compact display string suitable for user output.
|
-- | Render a period as a compact display string suitable for user output.
|
||||||
--
|
--
|
||||||
-- >>> showPeriod (WeekPeriod (fromGregorian 2016 7 25))
|
-- >>> showPeriod (WeekPeriod (fromGregorian 2016 7 25))
|
||||||
@ -143,7 +154,7 @@ periodEnd p = me
|
|||||||
where
|
where
|
||||||
DateSpan _ me = periodAsDateSpan p
|
DateSpan _ me = periodAsDateSpan p
|
||||||
|
|
||||||
-- | Move a standard period (day, week, month etc.) to the following period of same duration.
|
-- | Move a standard period to the following period of same duration.
|
||||||
-- Non-standard periods are unaffected.
|
-- Non-standard periods are unaffected.
|
||||||
periodNext :: Period -> Period
|
periodNext :: Period -> Period
|
||||||
periodNext (DayPeriod b) = DayPeriod (addDays 1 b)
|
periodNext (DayPeriod b) = DayPeriod (addDays 1 b)
|
||||||
@ -155,7 +166,7 @@ periodNext (QuarterPeriod y q) = QuarterPeriod y (q+1)
|
|||||||
periodNext (YearPeriod y) = YearPeriod (y+1)
|
periodNext (YearPeriod y) = YearPeriod (y+1)
|
||||||
periodNext p = p
|
periodNext p = p
|
||||||
|
|
||||||
-- | Move a standard period (day, week, month etc.) to the preceding period of same duration.
|
-- | Move a standard period to the preceding period of same duration.
|
||||||
-- Non-standard periods are unaffected.
|
-- Non-standard periods are unaffected.
|
||||||
periodPrevious :: Period -> Period
|
periodPrevious :: Period -> Period
|
||||||
periodPrevious (DayPeriod b) = DayPeriod (addDays (-1) b)
|
periodPrevious (DayPeriod b) = DayPeriod (addDays (-1) b)
|
||||||
|
|||||||
@ -291,8 +291,10 @@ asHandle ui0@UIState{
|
|||||||
VtyEvent (EvKey (KChar c) []) | c `elem` ['?'] -> continue $ setMode Help ui
|
VtyEvent (EvKey (KChar c) []) | c `elem` ['?'] -> continue $ setMode Help ui
|
||||||
-- XXX AppEvents currently handled only in Normal mode
|
-- XXX AppEvents currently handled only in Normal mode
|
||||||
-- XXX be sure we don't leave unconsumed events piling up
|
-- XXX be sure we don't leave unconsumed events piling up
|
||||||
AppEvent (DateChange old _) | periodContainsDate (reportPeriod ui) old ->
|
AppEvent (DateChange old _) | isStandardPeriod p && p `periodContainsDate` old ->
|
||||||
continue $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui
|
continue $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui
|
||||||
|
where
|
||||||
|
p = reportPeriod ui
|
||||||
e | e `elem` [VtyEvent (EvKey (KChar 'g') []), AppEvent FileChange] ->
|
e | e `elem` [VtyEvent (EvKey (KChar 'g') []), AppEvent FileChange] ->
|
||||||
liftIO (uiReloadJournal copts d ui) >>= continue
|
liftIO (uiReloadJournal copts d ui) >>= continue
|
||||||
VtyEvent (EvKey (KChar 'I') []) -> continue $ uiCheckBalanceAssertions d (toggleIgnoreBalanceAssertions ui)
|
VtyEvent (EvKey (KChar 'I') []) -> continue $ uiCheckBalanceAssertions d (toggleIgnoreBalanceAssertions ui)
|
||||||
|
|||||||
@ -267,8 +267,10 @@ rsHandle ui@UIState{
|
|||||||
VtyEvent (EvKey (KChar 'q') []) -> halt ui
|
VtyEvent (EvKey (KChar 'q') []) -> halt ui
|
||||||
VtyEvent (EvKey KEsc []) -> continue $ resetScreens d ui
|
VtyEvent (EvKey KEsc []) -> continue $ resetScreens d ui
|
||||||
VtyEvent (EvKey (KChar c) []) | c `elem` ['?'] -> continue $ setMode Help ui
|
VtyEvent (EvKey (KChar c) []) | c `elem` ['?'] -> continue $ setMode Help ui
|
||||||
AppEvent (DateChange old _) | periodContainsDate (reportPeriod ui) old ->
|
AppEvent (DateChange old _) | isStandardPeriod p && p `periodContainsDate` old ->
|
||||||
continue $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui
|
continue $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui
|
||||||
|
where
|
||||||
|
p = reportPeriod ui
|
||||||
e | e `elem` [VtyEvent (EvKey (KChar 'g') []), AppEvent FileChange] ->
|
e | e `elem` [VtyEvent (EvKey (KChar 'g') []), AppEvent FileChange] ->
|
||||||
liftIO (uiReloadJournal copts d ui) >>= continue
|
liftIO (uiReloadJournal copts d ui) >>= continue
|
||||||
VtyEvent (EvKey (KChar 'I') []) -> continue $ uiCheckBalanceAssertions d (toggleIgnoreBalanceAssertions ui)
|
VtyEvent (EvKey (KChar 'I') []) -> continue $ uiCheckBalanceAssertions d (toggleIgnoreBalanceAssertions ui)
|
||||||
|
|||||||
@ -129,8 +129,10 @@ tsHandle ui@UIState{aScreen=s@TransactionScreen{tsTransaction=(i,t)
|
|||||||
VtyEvent (EvKey (KChar 'E') []) -> suspendAndResume $ void (runEditor pos f) >> uiReloadJournalIfChanged copts d j ui
|
VtyEvent (EvKey (KChar 'E') []) -> suspendAndResume $ void (runEditor pos f) >> uiReloadJournalIfChanged copts d j ui
|
||||||
where
|
where
|
||||||
(pos,f) = let GenericSourcePos f l c = tsourcepos t in (Just (l, Just c),f)
|
(pos,f) = let GenericSourcePos f l c = tsourcepos t in (Just (l, Just c),f)
|
||||||
AppEvent (DateChange old _) | periodContainsDate (reportPeriod ui) old ->
|
AppEvent (DateChange old _) | isStandardPeriod p && p `periodContainsDate` old ->
|
||||||
continue $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui
|
continue $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui
|
||||||
|
where
|
||||||
|
p = reportPeriod ui
|
||||||
e | e `elem` [VtyEvent (EvKey (KChar 'g') []), AppEvent FileChange] -> do
|
e | e `elem` [VtyEvent (EvKey (KChar 'g') []), AppEvent FileChange] -> do
|
||||||
d <- liftIO getCurrentDay
|
d <- liftIO getCurrentDay
|
||||||
ej <- liftIO $ journalReload copts
|
ej <- liftIO $ journalReload copts
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user