packages feed

lhae-0.0.2: src/Controller/Menu/Table/Transpose.hs

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