lhae-0.0.3: src/Controller/Menu/File/Save.hs
module Controller.Menu.File.Save (saveAsEventHandler,saveEventHandler)
where
import Control.Monad (forM)
import Control.Monad.Trans (liftIO)
import Controller (Controller,onGridView,onGridModel)
import Controller.Dialog (saveFileDialog)
import View.Component.Grid (getRowLabel,getColumnLabel
,numDataRows,numDataColumns)
import Util (justWhen)
import Util.Sexp (Sexp(..),prettyPrint)
import Model.Cell (input)
import Model.Grid (getCell,getFilePath,save)
import I18n (__)
saveAsEventHandler,saveEventHandler :: Controller ()
saveAsEventHandler = do
result <- saveFileDialog (__ "Save") [(__ "Tables",["*.table"])]
justWhen result saveAs
saveEventHandler = do
do result <- onGridModel getFilePath
case result of
Nothing -> saveAsEventHandler
Just path -> saveAs path
saveAs :: FilePath -> Controller ()
saveAs filePath = do
toSexp >>= liftIO . writeFile filePath . prettyPrint
onGridModel $ save filePath
toSexp :: Controller Sexp
toSexp = do
maxRow <- do r <- onGridView numDataRows
return $ r-1
maxCol <- do c <- onGridView numDataColumns
return $ c-1
rows <- forM [0..maxRow] $ onGridView . getRowLabel
cols <- forM [0..maxCol] $ onGridView . getColumnLabel
rowList <-
forM [0..maxRow] $ \row ->
do cells <- forM [0..maxCol] $ \col ->
onGridModel $ getCell (row,col)
return $ List $ map (Atom . input) cells
return $ List [ List $ map Atom rows, List $ map Atom cols
, List rowList]