71 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
{-# LANGUAGE TemplateHaskell #-}
 | 
						|
{-|
 | 
						|
 | 
						|
-}
 | 
						|
 | 
						|
module Hledger.Chart.Options
 | 
						|
where
 | 
						|
import Data.Maybe
 | 
						|
import System.Console.CmdArgs
 | 
						|
import System.Console.CmdArgs.Explicit
 | 
						|
 | 
						|
import Hledger.Cli hiding (progname)
 | 
						|
--import qualified Hledger.Cli (progname)
 | 
						|
 | 
						|
progname    = "hledger-chart"
 | 
						|
progversion = progname ++ " dev"
 | 
						|
 | 
						|
defchartoutput   = "hledger.png"
 | 
						|
defchartitems    = 10
 | 
						|
defchartsize     = "600x400"
 | 
						|
 | 
						|
chartmode = (defCommandMode ["hledger-chart"]) {
 | 
						|
   modeArgs = ([], Just $ argsFlag "[PATTERNS] --add-posting \"ACCT  AMTEXPR\" ...")
 | 
						|
  ,modeHelp = "generate a pie chart image for the top account balances (of one sign only)"
 | 
						|
  ,modeHelpSuffix=[]
 | 
						|
  ,modeGroupFlags = Group {
 | 
						|
     groupNamed = [generalflagsgroup1]
 | 
						|
    ,groupUnnamed = [
 | 
						|
         flagReq ["chart-output","o"]  (\s opts -> Right $ setopt "chart-output" s opts) "IMGFILE" ("output filename (default: "++defchartoutput++")")
 | 
						|
        ,flagReq ["chart-items"]  (\s opts -> Right $ setopt "chart-items" s opts) "N" ("number of accounts to show (default: "++show defchartitems++")")
 | 
						|
        ,flagReq ["chart-size"]  (\s opts -> Right $ setopt "chart-size" s opts) "WIDTHxHEIGHT" ("image size (default: "++defchartsize++")")
 | 
						|
        ]
 | 
						|
    ,groupHidden = []
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
-- hledger-chart options, used in hledger-chart and above
 | 
						|
data ChartOpts = ChartOpts {
 | 
						|
     chart_output_ :: FilePath
 | 
						|
    ,chart_items_ :: Int
 | 
						|
    ,chart_size_ :: String
 | 
						|
    ,cliopts_   :: CliOpts
 | 
						|
 } deriving (Show)
 | 
						|
 | 
						|
defchartopts = ChartOpts
 | 
						|
    def
 | 
						|
    def
 | 
						|
    def
 | 
						|
    def
 | 
						|
 | 
						|
-- instance Default CliOpts where def = defcliopts
 | 
						|
 | 
						|
toChartOpts :: RawOpts -> IO ChartOpts
 | 
						|
toChartOpts rawopts = do
 | 
						|
  cliopts <- rawOptsToCliOpts rawopts
 | 
						|
  return defchartopts {
 | 
						|
              chart_output_ = fromMaybe defchartoutput $ maybestringopt "debug-chart" rawopts
 | 
						|
             ,chart_items_ = fromMaybe defchartitems $ maybeintopt "debug-items" rawopts
 | 
						|
             ,chart_size_ = fromMaybe defchartsize $ maybestringopt "debug-size" rawopts
 | 
						|
             ,cliopts_   = cliopts
 | 
						|
             }
 | 
						|
 | 
						|
checkChartOpts :: ChartOpts -> IO ChartOpts
 | 
						|
checkChartOpts opts = do
 | 
						|
  checkCliOpts $ cliopts_ opts
 | 
						|
  return opts
 | 
						|
 | 
						|
getHledgerChartOpts :: IO ChartOpts
 | 
						|
getHledgerChartOpts = processArgs chartmode >>= return . decodeRawOpts >>= toChartOpts >>= checkChartOpts
 | 
						|
 |