lhae-0.0.3: src/Config.hs
module Config (Config,load,save,initI18n
,getLastHandledPathForDialogs,setLastHandledPath
,csvImportParameters
,imageExportParameters,barChartExportParameters
,boxPlotExportParameters
)
where
import System.Directory (createDirectoryIfMissing,doesFileExist)
import System.FilePath (takeDirectory)
import Data.Maybe (fromMaybe)
import qualified I18n
import Util.Sexp (Sexp(..),parseFile,prettyPrint)
import Util.Sexpable (Sexpable(..),PSE,recordToSexp,recordFromSexp)
import qualified Controller.Menu.File.Export.ImageParameters as EImage
import qualified Controller.Menu.File.Export.Diagram.BarChartParameters as EBarChart
import qualified Controller.Menu.File.Export.Diagram.BoxPlotParameters as EBoxPlot
import qualified Controller.Menu.File.Import.CsvParameters as ICsv
data Config = Config { lastHandledPath :: Maybe FilePath
, locale :: String
, csvImportParameters :: ICsv.Parameters
, imageExportParameters :: EImage.Parameters
, barChartExportParameters :: EBarChart.Parameters
, boxPlotExportParameters :: EBoxPlot.Parameters
}
defaultConfig :: Config
defaultConfig = Config Nothing "" ICsv.defaultParams
EImage.defaultParams EBarChart.defaultParams
EBoxPlot.defaultParams
instance Sexpable Config where
toSexp = recordToSexp
[ ("lastHandledPath", toSexp . lastHandledPath)
, ("locale", toSexp . locale)
, ("csvImportParameters", toSexp . csvImportParameters)
, ("imageExportParameters", toSexp . imageExportParameters)
, ("barChartExportParameters", toSexp . barChartExportParameters)
, ("boxPlotExportParameters", toSexp . boxPlotExportParameters)
]
fromSexp = recordFromSexp setOption defaultConfig
setOption :: Config -> Sexp -> PSE Config
setOption config sexp =
case sexp of
List [Atom "lastHandledPath",path] -> do
option <- fromSexp path
return $ config {lastHandledPath = option}
List [Atom "locale",locale] -> do
option <- fromSexp locale
return $ config {locale = option}
List [Atom "csvImportParameters",params] -> do
option <- fromSexp params
return $ config {csvImportParameters = option}
List [Atom "imageExportParameters",params] -> do
option <- fromSexp params
return $ config {imageExportParameters = option}
List [Atom "barChartExportParameters",params] -> do
option <- fromSexp params
return $ config {barChartExportParameters = option}
List [Atom "boxPlotExportParameters",params] -> do
option <- fromSexp params
return $ config {boxPlotExportParameters = option}
_ -> return config
load :: FilePath -> IO (Either String Config)
load filePath = do
fileExist <- doesFileExist filePath
if fileExist
then do
result <- parseFile filePath
let invalidConfig msg = return $ Left $ "Invalid config file: " ++ msg
case result of
Left error -> invalidConfig error
Right sexp -> case fromSexp sexp of
Left error -> invalidConfig $ show error
Right config -> return $ Right config
else return $ Right defaultConfig
save :: FilePath -> Config -> IO ()
save filePath config = do
createDirectoryIfMissing False $ takeDirectory filePath
writeFile filePath $ prettyPrint $ toSexp config
initI18n :: Config -> IO ()
initI18n = I18n.initI18n . locale
getLastHandledPathForDialogs :: Config -> FilePath
getLastHandledPathForDialogs = (fromMaybe "") . lastHandledPath
setLastHandledPath :: FilePath -> Config -> Config
setLastHandledPath filePath config =
config {lastHandledPath = Just filePath}