packages feed

fltkhs-0.1.0.0: src/Examples/table-simple.hs

module Main where
import qualified Graphics.UI.FLTK.LowLevel.FL as FL
import Graphics.UI.FLTK.LowLevel.FLTKHS
import Graphics.UI.FLTK.LowLevel.Fl_Enumerations

maxRows :: Int
maxRows = 30
maxCols :: Int
maxCols = 26
tableData :: [[Int]]
tableData =
    let rowIndices = [0 .. (maxRows - 1)]
        colIndices = [0 .. (maxCols - 1)]
    in
      map (\r -> map (\c -> 1000 + (r * 1000) + c) colIndices) rowIndices
drawHeader :: Ref Table -> String -> Rectangle -> IO ()
drawHeader table s rectangle = do
  flcPushClip rectangle
  rhc <- getRowHeaderColor table
  flcDrawBox ThinUpBox rectangle rhc
  flcSetColor blackColor
  flcDrawInBox s rectangle alignCenter Nothing Nothing
  flcPopClip
drawData :: Ref Table -> String -> Rectangle -> IO ()
drawData table s rectangle = do
  flcPushClip rectangle
  flcSetColor whiteColor >> flcRectf rectangle
  flcSetColor gray0Color >> flcDrawInBox s rectangle alignCenter Nothing Nothing
  color' <- getColor table
  flcSetColor color' >> flcRect rectangle
  flcPopClip
drawCell :: Ref Table -> TableContext -> TableCoordinate -> Rectangle -> IO ()
drawCell table context (TableCoordinate (Row row) (Column col)) rectangle = do
  case context of
   ContextStartPage -> flcSetFont helvetica (FontSize 16)
   ContextColHeader ->
       let a = fromEnum 'A'
           currentLetter :: Char
           currentLetter = (toEnum $ fromEnum a + col)
       in
       drawHeader table [currentLetter] rectangle
   ContextRowHeader -> drawHeader table (show row) rectangle
   ContextCell -> drawData table (show $ tableData !! row !! col) rectangle
   _ -> return ()
initializeTable :: Ref Table -> IO ()
initializeTable table = do
  begin table
  setRows table maxRows
  setRowHeader table True
  setRowHeightAll table 20
  setRowResize table False
  setCols table maxCols
  setColHeader table True
  setColWidthAll table 80
  setColResize table True
  end table
main :: IO ()
main = do
  window <- doubleWindowNew
              (Size (Width 900) (Height 400))
              Nothing
              (Just "Simple Table")
  begin window
  table <- tableCustom
             (Rectangle
               (Position (X 10) (Y 10))
               (Size (Width 880) (Height 380)))
             Nothing
             defaultCustomWidgetFuncs
             defaultCustomTableFuncs {
               drawCellCustom = (Just drawCell)
             }
  initializeTable table
  setResizable window table
  end window
  showWidget window
  _ <- FL.run
  return ()