lhae-0.0.2: src/Controller/Canonical.hs
module Controller.Canonical (Row,Column,RowData,ColumnData
,getRow,getColumn
,addRow,addColumn,addRow',addColumn'
,writeRowData,writeColumnData)
where
import Control.Monad (forM)
import Controller (Controller,onGridView)
import Controller.Cell (getInput)
import Controller.Grid (writeCells)
import qualified Controller.Menu.Table.Add as Add
import View.Component.Grid (numDataRows,numDataColumns,getColumnLabel
,getRowLabel)
import CellCoordinate (coordRange)
type ColumnData = [String]
type Column = (String,ColumnData)
type RowData = [String]
type Row = (String,RowData)
getRow :: Int -> Controller Row
getRow row = do
label <- onGridView $ getRowLabel row
cells <- do cols <- onGridView numDataColumns
forM [0..cols-1] $ \c -> getInput (row,c)
return (label,cells)
getColumn :: Int -> Controller Column
getColumn col = do
label <- onGridView $ getColumnLabel col
cells <- do rows <- onGridView numDataRows
forM [0..rows-1] $ \r -> getInput (r,col)
return (label,cells)
addColumn :: (Maybe String,ColumnData) -> Controller ()
addColumn (label,cells) = do
index <- onGridView numDataColumns
Add.addColumn label
writeColumnData index cells
addColumn' :: Column -> Controller ()
addColumn' (label,cells) = addColumn (Just label,cells)
addRow :: (Maybe String,RowData) -> Controller ()
addRow (label,cells) = do
index <- onGridView numDataRows
Add.addRow label
writeRowData index cells
addRow' :: Row -> Controller ()
addRow' (label,cells) = addRow (Just label,cells)
writeColumnData :: Int -> ColumnData -> Controller ()
writeColumnData index columnData = do
rowsInView <- onGridView numDataRows
let range = let numRows = max rowsInView $ length columnData
in coordRange ((0,index),(numRows-1,index))
writeCells $ zip range columnData
writeRowData :: Int -> RowData -> Controller ()
writeRowData index rowData = do
colsInView <- onGridView numDataColumns
let range = let numCols = max colsInView $ length rowData
in coordRange ((index,0),(index,numCols-1))
writeCells $ zip range rowData