From bdb36b8480e265dbbe46227c2e54f7013c272a1d Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Fri, 10 Jun 2016 17:50:57 -0700 Subject: [PATCH] ui: refactor: events, imports cleanup --- hledger-ui/Hledger/UI/AccountsScreen.hs | 37 +++++++++------------- hledger-ui/Hledger/UI/ErrorScreen.hs | 20 ++---------- hledger-ui/Hledger/UI/RegisterScreen.hs | 20 ++++-------- hledger-ui/Hledger/UI/TransactionScreen.hs | 12 +------ 4 files changed, 26 insertions(+), 63 deletions(-) diff --git a/hledger-ui/Hledger/UI/AccountsScreen.hs b/hledger-ui/Hledger/UI/AccountsScreen.hs index 7c6511a7f..b4b8819cd 100644 --- a/hledger-ui/Hledger/UI/AccountsScreen.hs +++ b/hledger-ui/Hledger/UI/AccountsScreen.hs @@ -10,32 +10,25 @@ module Hledger.UI.AccountsScreen ) where --- import Control.Monad -import Control.Monad.IO.Class (liftIO) --- import Data.Default -import Data.List -import Data.Maybe -import Data.Monoid --- import Data.Text (Text) -import qualified Data.Text as T -import Data.Time.Calendar (Day) -import System.FilePath (takeFileName) -import qualified Data.Vector as V -import Graphics.Vty import Brick --- import Brick.Widgets.Center import Brick.Widgets.List import Brick.Widgets.Edit import Brick.Widgets.Border (borderAttr) --- import Brick.Widgets.Center +import Control.Monad.IO.Class (liftIO) +import Data.List +import Data.Maybe +import Data.Monoid +import qualified Data.Text as T +import Data.Time.Calendar (Day) +import qualified Data.Vector as V +import Graphics.Vty import Lens.Micro.Platform import System.Console.ANSI +import System.FilePath (takeFileName) import Hledger import Hledger.Cli hiding (progname,prognameandversion,green) --- import Hledger.Cli.CliOptions (defaultBalanceLineFormat) import Hledger.UI.UIOptions --- import Hledger.UI.Theme import Hledger.UI.UITypes import Hledger.UI.UIState import Hledger.UI.UIUtils @@ -268,8 +261,8 @@ asHandle ui0@UIState{ case ev of EvKey (KChar 'q') [] -> halt ui -- EvKey (KChar 'l') [MCtrl] -> do - EvKey KEsc [] -> continue $ resetScreens d ui - EvKey k [] | k `elem` [KChar 'h', KChar '?'] -> continue $ setMode Help ui + EvKey KEsc [] -> continue $ resetScreens d ui + EvKey (KChar c) [] | c `elem` ['h','?'] -> continue $ setMode Help ui EvKey (KChar 'g') [] -> liftIO (uiReloadJournalIfChanged copts d j ui) >>= continue EvKey (KChar 'a') [] -> suspendAndResume $ clearScreen >> setCursorPosition 0 0 >> add copts j >> uiReloadJournalIfChanged copts d j ui EvKey (KChar '0') [] -> continue $ regenerateScreens j d $ setDepth (Just 0) ui @@ -284,16 +277,16 @@ asHandle ui0@UIState{ EvKey (KChar '9') [] -> continue $ regenerateScreens j d $ setDepth (Just 9) ui EvKey (KChar '-') [] -> continue $ regenerateScreens j d $ decDepth ui EvKey (KChar '_') [] -> continue $ regenerateScreens j d $ decDepth ui - EvKey k [] | k `elem` [KChar '+', KChar '='] -> continue $ regenerateScreens j d $ incDepth ui + EvKey (KChar c) [] | c `elem` ['+','='] -> continue $ regenerateScreens j d $ incDepth ui EvKey (KChar 'F') [] -> continue $ regenerateScreens j d $ toggleFlat ui EvKey (KChar 'E') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleEmpty ui) EvKey (KChar 'C') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleCleared ui) EvKey (KChar 'U') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleUncleared ui) EvKey (KChar 'R') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleReal ui) - EvKey k [] | k `elem` [KChar '/'] -> continue $ regenerateScreens j d $ showMinibuffer ui - EvKey k [] | k `elem` [KBS, KDel] -> (continue $ regenerateScreens j d $ resetFilter ui) + EvKey (KChar '/') [] -> continue $ regenerateScreens j d $ showMinibuffer ui + EvKey k [] | k `elem` [KBS, KDel] -> (continue $ regenerateScreens j d $ resetFilter ui) EvKey (KLeft) [] -> continue $ popScreen ui - EvKey (k) [] | k `elem` [KRight, KEnter] -> scrollTopRegister >> continue (screenEnter d scr ui) + EvKey k [] | k `elem` [KRight, KEnter] -> scrollTopRegister >> continue (screenEnter d scr ui) where scr = rsSetAccount selacct registerScreen diff --git a/hledger-ui/Hledger/UI/ErrorScreen.hs b/hledger-ui/Hledger/UI/ErrorScreen.hs index cb16f57de..88686f544 100644 --- a/hledger-ui/Hledger/UI/ErrorScreen.hs +++ b/hledger-ui/Hledger/UI/ErrorScreen.hs @@ -8,23 +8,14 @@ module Hledger.UI.ErrorScreen ) where --- import Lens.Micro.Platform ((^.)) import Control.Monad.IO.Class (liftIO) import Data.Monoid --- import Data.Maybe import Data.Time.Calendar (Day) import Graphics.Vty import Brick --- import Brick.Widgets.List --- import Brick.Widgets.Border --- import Brick.Widgets.Border.Style --- import Brick.Widgets.Center --- import Text.Printf --- import Hledger import Hledger.Cli hiding (progname,prognameandversion,green) import Hledger.UI.UIOptions --- import Hledger.UI.Theme import Hledger.UI.UITypes import Hledger.UI.UIState import Hledger.UI.UIUtils @@ -84,19 +75,14 @@ esHandle ui@UIState{ case ev of EvKey (KChar 'q') [] -> halt ui EvKey KEsc [] -> continue $ resetScreens d ui - EvKey k [] | k `elem` [KChar 'h', KChar '?'] -> continue $ setMode Help ui + EvKey (KChar c) [] | c `elem` ['h','?'] -> continue $ setMode Help ui EvKey (KChar 'g') [] -> do (ej, _) <- liftIO $ journalReloadIfChanged copts d j case ej of Left err -> continue ui{aScreen=s{esError=err}} -- show latest parse error Right j' -> continue $ regenerateScreens j' d $ popScreen ui -- return to previous screen, and reload it - -- EvKey (KLeft) [] -> continue $ popScreen ui - -- EvKey (KRight) [] -> error (show curItem) where curItem = listSelectedElement is - -- fall through to the list's event handler (handles [pg]up/down) - _ -> do continue ui - -- is' <- handleEvent ev is - -- continue ui{aScreen=s{rsState=is'}} - -- continue =<< handleEventLensed ui someLens e + _ -> continue ui + esHandle _ _ = error "event handler called with wrong screen type, should not happen" -- If journal file(s) have changed, reload the journal and regenerate all screens. diff --git a/hledger-ui/Hledger/UI/RegisterScreen.hs b/hledger-ui/Hledger/UI/RegisterScreen.hs index 8984aab2a..e2edfddb7 100644 --- a/hledger-ui/Hledger/UI/RegisterScreen.hs +++ b/hledger-ui/Hledger/UI/RegisterScreen.hs @@ -14,7 +14,6 @@ import Data.List import Data.List.Split (splitOn) import Data.Monoid import Data.Maybe --- import Data.Text (Text) import qualified Data.Text as T import Data.Time.Calendar (Day) import qualified Data.Vector as V @@ -23,9 +22,7 @@ import Brick import Brick.Widgets.List import Brick.Widgets.Edit import Brick.Widgets.Border (borderAttr) --- import Brick.Widgets.Center import System.Console.ANSI --- import Text.Printf import Hledger @@ -247,18 +244,17 @@ rsHandle ui@UIState{ case ev of EvKey (KChar 'q') [] -> halt ui EvKey KEsc [] -> continue $ resetScreens d ui - EvKey k [] | k `elem` [KChar 'h', KChar '?'] -> continue $ setMode Help ui + EvKey (KChar c) [] | c `elem` ['h','?'] -> continue $ setMode Help ui EvKey (KChar 'g') [] -> liftIO (uiReloadJournalIfChanged copts d j ui) >>= continue EvKey (KChar 'a') [] -> suspendAndResume $ clearScreen >> setCursorPosition 0 0 >> add copts j >> uiReloadJournalIfChanged copts d j ui EvKey (KChar 'E') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleEmpty ui) EvKey (KChar 'C') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleCleared ui) EvKey (KChar 'U') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleUncleared ui) EvKey (KChar 'R') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleReal ui) - EvKey k [] | k `elem` [KChar '/'] -> (continue $ regenerateScreens j d $ showMinibuffer ui) - EvKey k [] | k `elem` [KBS, KDel] -> (continue $ regenerateScreens j d $ resetFilter ui) + EvKey (KChar '/') [] -> (continue $ regenerateScreens j d $ showMinibuffer ui) + EvKey k [] | k `elem` [KBS, KDel] -> (continue $ regenerateScreens j d $ resetFilter ui) EvKey (KLeft) [] -> continue $ popScreen ui - - EvKey (k) [] | k `elem` [KRight, KEnter] -> do + EvKey k [] | k `elem` [KRight, KEnter] -> do case listSelectedElement rsList of Just (_, RegisterScreenItem{rsItemTransaction=t}) -> let @@ -270,14 +266,12 @@ rsHandle ui@UIState{ ,tsTransactions=numberedts ,tsAccount=rsAccount} ui Nothing -> continue ui - -- fall through to the list's event handler (handles [pg]up/down) ev -> do newitems <- handleEvent ev rsList continue ui{aScreen=s{rsList=newitems}} -- continue =<< handleEventLensed ui someLens ev - - where - -- Encourage a more stable scroll position when toggling list items (cf AccountsScreen.hs) - scrollTop = vScrollToBeginning $ viewportScroll "register" + where + -- Encourage a more stable scroll position when toggling list items (cf AccountsScreen.hs) + scrollTop = vScrollToBeginning $ viewportScroll "register" rsHandle _ _ = error "event handler called with wrong screen type, should not happen" diff --git a/hledger-ui/Hledger/UI/TransactionScreen.hs b/hledger-ui/Hledger/UI/TransactionScreen.hs index cf53afdfa..21bef1f17 100644 --- a/hledger-ui/Hledger/UI/TransactionScreen.hs +++ b/hledger-ui/Hledger/UI/TransactionScreen.hs @@ -8,25 +8,15 @@ module Hledger.UI.TransactionScreen ) where --- import Lens.Micro.Platform ((^.)) import Control.Monad.IO.Class (liftIO) import Data.List --- import Data.List.Split (splitOn) --- import Data.Ord import Data.Monoid --- import Data.Maybe --- import Data.Text (Text) import qualified Data.Text as T import Data.Time.Calendar (Day) --- import qualified Data.Vector as V import Graphics.Vty --- import Safe (headDef, lastDef) import Brick import Brick.Widgets.List (listMoveTo) import Brick.Widgets.Border (borderAttr) --- import Brick.Widgets.Border.Style --- import Brick.Widgets.Center --- import Text.Printf import Hledger import Hledger.Cli hiding (progname,prognameandversion,green) @@ -131,7 +121,7 @@ tsHandle ui@UIState{aScreen=s@TransactionScreen{tsTransaction=(i,t) case ev of EvKey (KChar 'q') [] -> halt ui EvKey KEsc [] -> continue $ resetScreens d ui - EvKey k [] | k `elem` [KChar 'h', KChar '?'] -> continue $ setMode Help ui + EvKey (KChar c) [] | c `elem` ['h','?'] -> continue $ setMode Help ui EvKey (KChar 'g') [] -> do d <- liftIO getCurrentDay (ej, _) <- liftIO $ journalReloadIfChanged copts d j