ui: reg: refactor, consolidate state
This commit is contained in:
parent
45db0a28cc
commit
b950bd0d83
@ -247,7 +247,9 @@ handleAccountsScreen st@AppState{
|
|||||||
}
|
}
|
||||||
Vty.EvKey (Vty.KLeft) [] -> continue $ popScreen st'
|
Vty.EvKey (Vty.KLeft) [] -> continue $ popScreen st'
|
||||||
Vty.EvKey (k) [] | k `elem` [Vty.KRight, Vty.KEnter] -> do
|
Vty.EvKey (k) [] | k `elem` [Vty.KRight, Vty.KEnter] -> do
|
||||||
let st'' = screenEnter d RS.screen{rsAcct=selacct'} st'
|
let
|
||||||
|
scr = setRegisterScreenCurrentAccount selacct' RS.screen
|
||||||
|
st'' = screenEnter d scr st'
|
||||||
vScrollToBeginning $ viewportScroll "register"
|
vScrollToBeginning $ viewportScroll "register"
|
||||||
continue st''
|
continue st''
|
||||||
|
|
||||||
|
|||||||
@ -94,7 +94,7 @@ runBrickUi uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}} j = do
|
|||||||
-- with --register, start on the register screen, and also put
|
-- with --register, start on the register screen, and also put
|
||||||
-- the accounts screen on the prev screens stack so you can exit
|
-- the accounts screen on the prev screens stack so you can exit
|
||||||
-- to that as usual.
|
-- to that as usual.
|
||||||
Just apat -> (RS.screen{rsAcct=acct}, [ascr'])
|
Just apat -> (setRegisterScreenCurrentAccount acct RS.screen, [ascr'])
|
||||||
where
|
where
|
||||||
acct = headDef
|
acct = headDef
|
||||||
(error' $ "--register "++apat++" did not match any account")
|
(error' $ "--register "++apat++" did not match any account")
|
||||||
@ -106,12 +106,9 @@ runBrickUi uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}} j = do
|
|||||||
AppState{
|
AppState{
|
||||||
aopts=uopts'
|
aopts=uopts'
|
||||||
,ajournal=j
|
,ajournal=j
|
||||||
,aScreen=setAccountsScreenSelection acct AS.screen
|
,aScreen=setAccountsScreenSelectedAccount acct AS.screen
|
||||||
,aPrevScreens=[]
|
,aPrevScreens=[]
|
||||||
}
|
}
|
||||||
-- ugh
|
|
||||||
setAccountsScreenSelection a scr@AccountsScreen{asState=(l,_)} = scr{asState=(l,a)}
|
|
||||||
setAccountsScreenSelection _ scr = scr
|
|
||||||
|
|
||||||
st = (sInitFn scr) d
|
st = (sInitFn scr) d
|
||||||
AppState{
|
AppState{
|
||||||
|
|||||||
@ -31,16 +31,15 @@ import Hledger.UI.UIUtils
|
|||||||
import qualified Hledger.UI.ErrorScreen as ES (screen)
|
import qualified Hledger.UI.ErrorScreen as ES (screen)
|
||||||
|
|
||||||
screen = RegisterScreen{
|
screen = RegisterScreen{
|
||||||
rsState = list "register" V.empty 1
|
rsState = (list "register" V.empty 1, "")
|
||||||
,rsAcct = ""
|
|
||||||
,sInitFn = initRegisterScreen
|
,sInitFn = initRegisterScreen
|
||||||
,sDrawFn = drawRegisterScreen
|
,sDrawFn = drawRegisterScreen
|
||||||
,sHandleFn = handleRegisterScreen
|
,sHandleFn = handleRegisterScreen
|
||||||
}
|
}
|
||||||
|
|
||||||
initRegisterScreen :: Day -> AppState -> AppState
|
initRegisterScreen :: Day -> AppState -> AppState
|
||||||
initRegisterScreen d st@AppState{aopts=opts, ajournal=j, aScreen=s@RegisterScreen{rsAcct=acct}} =
|
initRegisterScreen d st@AppState{aopts=opts, ajournal=j, aScreen=s@RegisterScreen{rsState=(_,acct)}} =
|
||||||
st{aScreen=s{rsState=l}}
|
st{aScreen=s{rsState=(l,acct)}}
|
||||||
where
|
where
|
||||||
-- gather arguments and queries
|
-- gather arguments and queries
|
||||||
ropts = (reportopts_ $ cliopts_ opts)
|
ropts = (reportopts_ $ cliopts_ opts)
|
||||||
@ -87,7 +86,7 @@ initRegisterScreen _ _ = error "init function called with wrong screen type, sho
|
|||||||
|
|
||||||
drawRegisterScreen :: AppState -> [Widget]
|
drawRegisterScreen :: AppState -> [Widget]
|
||||||
drawRegisterScreen AppState{ -- aopts=_uopts@UIOpts{cliopts_=_copts@CliOpts{reportopts_=_ropts@ReportOpts{query_=querystr}}},
|
drawRegisterScreen AppState{ -- aopts=_uopts@UIOpts{cliopts_=_copts@CliOpts{reportopts_=_ropts@ReportOpts{query_=querystr}}},
|
||||||
aScreen=RegisterScreen{rsState=l,rsAcct=acct}} = [ui]
|
aScreen=RegisterScreen{rsState=(l,acct)}} = [ui]
|
||||||
where
|
where
|
||||||
toplabel = withAttr ("border" <> "bold") (str acct)
|
toplabel = withAttr ("border" <> "bold") (str acct)
|
||||||
<+> str " transactions"
|
<+> str " transactions"
|
||||||
@ -184,7 +183,7 @@ drawRegisterItem (datewidth,descwidth,acctswidth,changewidth,balwidth) selected
|
|||||||
|
|
||||||
handleRegisterScreen :: AppState -> Vty.Event -> EventM (Next AppState)
|
handleRegisterScreen :: AppState -> Vty.Event -> EventM (Next AppState)
|
||||||
handleRegisterScreen st@AppState{
|
handleRegisterScreen st@AppState{
|
||||||
aScreen=s@RegisterScreen{rsState=is}
|
aScreen=s@RegisterScreen{rsState=(l,acct)}
|
||||||
,aopts=UIOpts{cliopts_=_copts}
|
,aopts=UIOpts{cliopts_=_copts}
|
||||||
,ajournal=j
|
,ajournal=j
|
||||||
} e = do
|
} e = do
|
||||||
@ -203,7 +202,7 @@ handleRegisterScreen st@AppState{
|
|||||||
-- Vty.EvKey (Vty.KRight) [] -> error (show curItem) where curItem = listSelectedElement is
|
-- Vty.EvKey (Vty.KRight) [] -> error (show curItem) where curItem = listSelectedElement is
|
||||||
-- fall through to the list's event handler (handles [pg]up/down)
|
-- fall through to the list's event handler (handles [pg]up/down)
|
||||||
ev -> do
|
ev -> do
|
||||||
is' <- handleEvent ev is
|
l' <- handleEvent ev l
|
||||||
continue st{aScreen=s{rsState=is'}}
|
continue st{aScreen=s{rsState=(l',acct)}}
|
||||||
-- continue =<< handleEventLensed st someLens ev
|
-- continue =<< handleEventLensed st someLens ev
|
||||||
handleRegisterScreen _ _ = error "event handler called with wrong screen type, should not happen"
|
handleRegisterScreen _ _ = error "event handler called with wrong screen type, should not happen"
|
||||||
|
|||||||
@ -26,15 +26,14 @@ data AppState = AppState {
|
|||||||
data Screen =
|
data Screen =
|
||||||
AccountsScreen {
|
AccountsScreen {
|
||||||
asState :: (List (Int,String,String,[String]), AccountName) -- ^ list widget holding (indent level, full account name, full or short account name to display, rendered amounts);
|
asState :: (List (Int,String,String,[String]), AccountName) -- ^ list widget holding (indent level, full account name, full or short account name to display, rendered amounts);
|
||||||
-- the currently selected account's full name (or "")
|
-- the full name of the currently selected account (or "")
|
||||||
,sInitFn :: Day -> AppState -> AppState -- ^ function to initialise the screen's state on entry
|
,sInitFn :: Day -> AppState -> AppState -- ^ function to initialise the screen's state on entry
|
||||||
,sHandleFn :: AppState -> V.Event -> EventM (Next AppState) -- ^ brick event handler to use for this screen
|
,sHandleFn :: AppState -> V.Event -> EventM (Next AppState) -- ^ brick event handler to use for this screen
|
||||||
,sDrawFn :: AppState -> [Widget] -- ^ brick renderer to use for this screen
|
,sDrawFn :: AppState -> [Widget] -- ^ brick renderer to use for this screen
|
||||||
}
|
}
|
||||||
| RegisterScreen {
|
| RegisterScreen {
|
||||||
rsState :: List (String,String,String,String,String) -- ^ list widget holding (date, description, other accts, change amt, balance amt)
|
rsState :: (List (String,String,String,String,String), AccountName) -- ^ list widget holding (date, description, other accts, change amt, balance amt);
|
||||||
-- XXX move into rsState ?
|
-- the full name of the account we are showing a register for
|
||||||
,rsAcct :: AccountName -- ^ the account we are showing a register for
|
|
||||||
,sInitFn :: Day -> AppState -> AppState
|
,sInitFn :: Day -> AppState -> AppState
|
||||||
,sHandleFn :: AppState -> V.Event -> EventM (Next AppState)
|
,sHandleFn :: AppState -> V.Event -> EventM (Next AppState)
|
||||||
,sDrawFn :: AppState -> [Widget]
|
,sDrawFn :: AppState -> [Widget]
|
||||||
@ -48,3 +47,10 @@ data Screen =
|
|||||||
deriving (Show)
|
deriving (Show)
|
||||||
|
|
||||||
instance Show (List a) where show _ = "<List>"
|
instance Show (List a) where show _ = "<List>"
|
||||||
|
|
||||||
|
-- ugh
|
||||||
|
setAccountsScreenSelectedAccount a scr@AccountsScreen{asState=(l,_)} = scr{asState=(l,a)}
|
||||||
|
setAccountsScreenSelectedAccount _ scr = scr
|
||||||
|
|
||||||
|
setRegisterScreenCurrentAccount a scr@RegisterScreen{rsState=(l,_)} = scr{rsState=(l,a)}
|
||||||
|
setRegisterScreenCurrentAccount _ scr = scr
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user