diff --git a/hledger-ui/Hledger/UI/UIOptions.hs b/hledger-ui/Hledger/UI/UIOptions.hs index 8399a7048..4b65e3ea3 100644 --- a/hledger-ui/Hledger/UI/UIOptions.hs +++ b/hledger-ui/Hledger/UI/UIOptions.hs @@ -103,3 +103,21 @@ getHledgerUIOpts = do let args' = replaceNumericFlags args let cmdargopts = either usageError id $ process uimode args' rawOptsToUIOpts cmdargopts + +instance HasCliOpts UIOpts where + cliOpts f uiopts = (\x -> uiopts{cliopts_=x}) <$> f (cliopts_ uiopts) + +instance HasInputOpts UIOpts where + inputOpts = cliOpts.inputOpts + +instance HasBalancingOpts UIOpts where + balancingOpts = cliOpts.balancingOpts + +instance HasReportSpec UIOpts where + reportSpec = cliOpts.reportSpec + +instance HasReportOptsNoUpdate UIOpts where + reportOptsNoUpdate = cliOpts.reportOptsNoUpdate + +instance HasReportOpts UIOpts where + reportOpts = cliOpts.reportOpts diff --git a/hledger-ui/Hledger/UI/UITypes.hs b/hledger-ui/Hledger/UI/UITypes.hs index 96bfba174..afaf3462e 100644 --- a/hledger-ui/Hledger/UI/UITypes.hs +++ b/hledger-ui/Hledger/UI/UITypes.hs @@ -48,6 +48,7 @@ import Text.Show.Functions () -- import the Show instance for functions. Warning, this also re-exports it import Hledger +import Hledger.Cli (HasCliOpts(..)) import Hledger.UI.UIOptions -- | hledger-ui's application state. This holds one or more stateful screens. @@ -160,7 +161,24 @@ type NumberedTransaction = (Integer, Transaction) -- mempty = list "" V.empty 1 -- XXX problem in 0.7, every list requires a unique Name -- mappend l1 l2 = l1 & listElementsL .~ (l1^.listElementsL <> l2^.listElementsL) -concat <$> mapM makeLenses [ - ''Screen - ] +makeLenses ''Screen +uioptslens f ui = (\x -> ui{aopts=x}) <$> f (aopts ui) + +instance HasCliOpts UIState where + cliOpts = uioptslens.cliOpts + +instance HasInputOpts UIState where + inputOpts = uioptslens.inputOpts + +instance HasBalancingOpts UIState where + balancingOpts = uioptslens.balancingOpts + +instance HasReportSpec UIState where + reportSpec = uioptslens.reportSpec + +instance HasReportOptsNoUpdate UIState where + reportOptsNoUpdate = uioptslens.reportOptsNoUpdate + +instance HasReportOpts UIState where + reportOpts = uioptslens.reportOpts