module Controller.Menu.Table.Transpose (tableEventHandler ,columnEventHandler ,rowEventHandler) where import Control.Monad (forM_,forM) import Controller (Controller,onGridView) import Controller.Dialog (chooseColumnsDialog,chooseRowsDialog) import Controller.Canonical (getColumn,getRow,addRow',addColumn') import qualified Controller.Grid as Grid import View.Component.Grid (getRowLabels,getColumnLabels ,numDataColumns) import I18n (__) tableEventHandler :: Controller () tableEventHandler = do n <- onGridView numDataColumns transposeColumns [0..n-1] columnEventHandler :: Controller () columnEventHandler = chooseColumnsDialog (__ "Transpose") >>= transposeColumns rowEventHandler :: Controller () rowEventHandler = chooseRowsDialog (__ "Transpose") >>= transposeRows transposeColumns :: [Int] -> Controller () transposeColumns cols = do columnData <- forM cols getColumn rowLabels <- onGridView getRowLabels Grid.new Nothing forM_ columnData addRow' Grid.updateColumnLabels rowLabels transposeRows :: [Int] -> Controller () transposeRows rows = do rowData <- forM rows getRow colLabels <- onGridView getColumnLabels Grid.new Nothing forM_ rowData addColumn' Grid.updateRowLabels colLabels