ui: use a custom application event type
This commit is contained in:
parent
015b9570d4
commit
0f1108db07
@ -247,7 +247,7 @@ asDrawItem (acctwidth, balwidth) selected AccountsScreenItem{..} =
|
||||
sel | selected = (<> "selected")
|
||||
| otherwise = id
|
||||
|
||||
asHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
|
||||
asHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
|
||||
asHandle ui0@UIState{
|
||||
aScreen=scr@AccountsScreen{..}
|
||||
,aopts=UIOpts{cliopts_=copts}
|
||||
|
||||
@ -68,7 +68,7 @@ esDraw UIState{ --aopts=UIOpts{cliopts_=copts@CliOpts{}}
|
||||
|
||||
esDraw _ = error "draw function called with wrong screen type, should not happen"
|
||||
|
||||
esHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
|
||||
esHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
|
||||
esHandle ui@UIState{
|
||||
aScreen=ErrorScreen{..}
|
||||
,aopts=UIOpts{cliopts_=copts}
|
||||
|
||||
@ -23,7 +23,6 @@ import qualified Data.Text as T
|
||||
import Safe
|
||||
import System.Exit
|
||||
|
||||
import qualified Graphics.Vty as V
|
||||
import Brick
|
||||
|
||||
import Hledger
|
||||
@ -135,7 +134,7 @@ runBrickUi uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}} j = do
|
||||
,aMode=Normal
|
||||
}
|
||||
|
||||
brickapp :: App (UIState) V.Event Name
|
||||
brickapp :: App (UIState) AppEvent Name
|
||||
brickapp = App {
|
||||
appStartEvent = return
|
||||
, appAttrMap = const theme
|
||||
|
||||
@ -236,7 +236,7 @@ rsDrawItem (datewidth,descwidth,acctswidth,changewidth,balwidth) selected Regist
|
||||
sel | selected = (<> "selected")
|
||||
| otherwise = id
|
||||
|
||||
rsHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
|
||||
rsHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
|
||||
rsHandle ui@UIState{
|
||||
aScreen=s@RegisterScreen{..}
|
||||
,aopts=UIOpts{cliopts_=copts}
|
||||
|
||||
@ -102,7 +102,7 @@ tsDraw UIState{aopts=UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}
|
||||
|
||||
tsDraw _ = error "draw function called with wrong screen type, should not happen"
|
||||
|
||||
tsHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
|
||||
tsHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
|
||||
tsHandle ui@UIState{aScreen=s@TransactionScreen{tsTransaction=(i,t)
|
||||
,tsTransactions=nts
|
||||
,tsAccount=acct}
|
||||
|
||||
@ -39,7 +39,6 @@ Brick.defaultMain brickapp st
|
||||
module Hledger.UI.UITypes where
|
||||
|
||||
import Data.Time.Calendar (Day)
|
||||
import Graphics.Vty (Event)
|
||||
import Brick
|
||||
import Brick.Widgets.List
|
||||
import Brick.Widgets.Edit (Editor)
|
||||
@ -83,6 +82,8 @@ data Name =
|
||||
| RegisterList
|
||||
deriving (Ord, Show, Eq)
|
||||
|
||||
data AppEvent = DummyEvent
|
||||
|
||||
-- | hledger-ui screen types & instances.
|
||||
-- Each screen type has generically named initialisation, draw, and event handling functions,
|
||||
-- and zero or more uniquely named screen state fields, which hold the data for a particular
|
||||
@ -92,7 +93,7 @@ data Screen =
|
||||
AccountsScreen {
|
||||
sInit :: Day -> Bool -> UIState -> UIState -- ^ function to initialise or update this screen's state
|
||||
,sDraw :: UIState -> [Widget Name] -- ^ brick renderer for this screen
|
||||
,sHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState) -- ^ brick event handler for this screen
|
||||
,sHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState) -- ^ brick event handler for this screen
|
||||
-- state fields.These ones have lenses:
|
||||
,_asList :: List Name AccountsScreenItem -- ^ list widget showing account names & balances
|
||||
,_asSelectedAccount :: AccountName -- ^ a backup of the account name from the list widget's selected item (or "")
|
||||
@ -100,7 +101,7 @@ data Screen =
|
||||
| RegisterScreen {
|
||||
sInit :: Day -> Bool -> UIState -> UIState
|
||||
,sDraw :: UIState -> [Widget Name]
|
||||
,sHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
|
||||
,sHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
|
||||
--
|
||||
,rsList :: List Name RegisterScreenItem -- ^ list widget showing transactions affecting this account
|
||||
,rsAccount :: AccountName -- ^ the account this register is for
|
||||
@ -111,7 +112,7 @@ data Screen =
|
||||
| TransactionScreen {
|
||||
sInit :: Day -> Bool -> UIState -> UIState
|
||||
,sDraw :: UIState -> [Widget Name]
|
||||
,sHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
|
||||
,sHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
|
||||
--
|
||||
,tsTransaction :: NumberedTransaction -- ^ the transaction we are currently viewing, and its position in the list
|
||||
,tsTransactions :: [NumberedTransaction] -- ^ list of transactions we can step through
|
||||
@ -120,7 +121,7 @@ data Screen =
|
||||
| ErrorScreen {
|
||||
sInit :: Day -> Bool -> UIState -> UIState
|
||||
,sDraw :: UIState -> [Widget Name]
|
||||
,sHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
|
||||
,sHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
|
||||
--
|
||||
,esError :: String -- ^ error message to show
|
||||
}
|
||||
|
||||
@ -110,7 +110,7 @@ helpDialog =
|
||||
renderKey (key,desc) = withAttr (borderAttr <> "keys") (str key) <+> str " " <+> str desc
|
||||
|
||||
-- | Event handler used when help mode is active.
|
||||
helpHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
|
||||
helpHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
|
||||
helpHandle ui ev =
|
||||
case ev of
|
||||
VtyEvent (EvKey k []) | k `elem` [KEsc, KLeft, KChar 'h', KChar '?'] -> continue $ setMode Normal ui
|
||||
|
||||
Loading…
Reference in New Issue
Block a user