module Controller.Menu.Table.Transpose (tableEventHandler,columnEventHandler,rowEventHandler ,columnEventHandlerWith,rowEventHandlerWith) where import Control.Monad (forM_,forM) import Controller (Controller,onGridView) import Controller.Dialog (chooseColumnsDialog,chooseRowsDialog) import Controller.Canonical (getColumnInput,getRowInput ,addRowInput,addColumnInput) import qualified Controller.Grid as Grid import View.Component.Grid (getRowLabels,getColumnLabels ,numDataColumns) import I18n (__) tableEventHandler,columnEventHandler,rowEventHandler :: Controller () tableEventHandler = do n <- onGridView numDataColumns transposeColumns [0..n-1] columnEventHandler = columnEventHandlerWith [] rowEventHandler = rowEventHandlerWith [] columnEventHandlerWith,rowEventHandlerWith :: [Int] -> Controller () columnEventHandlerWith init = chooseColumnsDialog (__ "Transpose") (__ "&Transpose") init >>= transposeColumns rowEventHandlerWith init = chooseRowsDialog (__ "Transpose") (__ "&Transpose") init >>= transposeRows transposeColumns :: [Int] -> Controller () transposeColumns [] = return () transposeColumns cols = do columnData <- forM cols getColumnInput rowLabels <- onGridView getRowLabels Grid.new forM_ columnData $ \(label,xs) -> addRowInput (Just label) xs Grid.updateColumnLabels rowLabels transposeRows :: [Int] -> Controller () transposeRows [] = return () transposeRows rows = do rowData <- forM rows getRowInput colLabels <- onGridView getColumnLabels Grid.new forM_ rowData $ \(label,xs) -> addColumnInput (Just label) xs Grid.updateRowLabels colLabels