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