Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
This module provides a table widget that can draw other widgets
in a table layout, draw borders between rows and columns, and allow
configuration of row and column alignment. To get started, see
table
.
Synopsis
- data Table n
- data ColumnAlignment
- data RowAlignment
- data TableException
- table :: [[Widget n]] -> Table n
- alignLeft :: Int -> Table n -> Table n
- alignRight :: Int -> Table n -> Table n
- alignCenter :: Int -> Table n -> Table n
- alignTop :: Int -> Table n -> Table n
- alignMiddle :: Int -> Table n -> Table n
- alignBottom :: Int -> Table n -> Table n
- setColAlignment :: ColumnAlignment -> Int -> Table n -> Table n
- setRowAlignment :: RowAlignment -> Int -> Table n -> Table n
- setDefaultColAlignment :: ColumnAlignment -> Table n -> Table n
- setDefaultRowAlignment :: RowAlignment -> Table n -> Table n
- surroundingBorder :: Bool -> Table n -> Table n
- rowBorders :: Bool -> Table n -> Table n
- columnBorders :: Bool -> Table n -> Table n
- renderTable :: Table n -> Widget n
- data RenderedTableCells n = RenderedTableCells {}
- data BorderConfiguration = BorderConfiguration {}
- tableCellLayout :: Table n -> RenderM n (RenderedTableCells n)
- addBorders :: RenderedTableCells n -> RenderM n (Widget n)
- alignColumns :: [ColumnAlignment] -> [Int] -> [Widget n] -> [Widget n]
Types
data ColumnAlignment Source #
Column alignment modes. Use these modes with the alignment functions in this module to configure column alignment behavior.
AlignLeft | Align all cells to the left. |
AlignCenter | Center the content horizontally in all cells in the column. |
AlignRight | Align all cells to the right. |
Instances
Read ColumnAlignment Source # | |
Defined in Brick.Widgets.Table | |
Show ColumnAlignment Source # | |
Defined in Brick.Widgets.Table showsPrec :: Int -> ColumnAlignment -> ShowS # show :: ColumnAlignment -> String # showList :: [ColumnAlignment] -> ShowS # | |
Eq ColumnAlignment Source # | |
Defined in Brick.Widgets.Table (==) :: ColumnAlignment -> ColumnAlignment -> Bool # (/=) :: ColumnAlignment -> ColumnAlignment -> Bool # |
data RowAlignment Source #
Row alignment modes. Use these modes with the alignment functions in this module to configure row alignment behavior.
AlignTop | Align all cells to the top. |
AlignMiddle | Center the content vertically in all cells in the row. |
AlignBottom | Align all cells to the bottom. |
Instances
Read RowAlignment Source # | |
Defined in Brick.Widgets.Table readsPrec :: Int -> ReadS RowAlignment # readList :: ReadS [RowAlignment] # | |
Show RowAlignment Source # | |
Defined in Brick.Widgets.Table showsPrec :: Int -> RowAlignment -> ShowS # show :: RowAlignment -> String # showList :: [RowAlignment] -> ShowS # | |
Eq RowAlignment Source # | |
Defined in Brick.Widgets.Table (==) :: RowAlignment -> RowAlignment -> Bool # (/=) :: RowAlignment -> RowAlignment -> Bool # |
data TableException Source #
A table creation exception.
TEUnequalRowSizes | Rows did not all have the same number of cells. |
TEInvalidCellSizePolicy | Some cells in the table did not use the |
Instances
Exception TableException Source # | |
Defined in Brick.Widgets.Table | |
Read TableException Source # | |
Defined in Brick.Widgets.Table readsPrec :: Int -> ReadS TableException # readList :: ReadS [TableException] # | |
Show TableException Source # | |
Defined in Brick.Widgets.Table showsPrec :: Int -> TableException -> ShowS # show :: TableException -> String # showList :: [TableException] -> ShowS # | |
Eq TableException Source # | |
Defined in Brick.Widgets.Table (==) :: TableException -> TableException -> Bool # (/=) :: TableException -> TableException -> Bool # |
Construction
table :: [[Widget n]] -> Table n Source #
Construct a new table.
The argument is the list of rows with the topmost row first, with each element of the argument list being the contents of the cells in in each column of the respective row, with the leftmost cell first.
Each row's height is determined by the height of the tallest cell
in that row, and each column's width is determined by the width of
the widest cell in that column. This means that control over row
and column dimensions is a matter of controlling the size of the
individual cells, such as by wrapping cell contents in padding,
fill
and hLimit
or vLimit
, etc. This also means that it is not
necessary to explicitly set the width of most table cells because
the table will determine the per-row and per-column dimensions by
looking at the largest cell contents. In particular, this means
that the table's alignment logic only has an effect when a given
cell's contents are smaller than the maximum for its row and column,
thus giving the table some way to pad the contents to result in the
desired alignment.
By default:
- All columns are left-aligned. Use the alignment functions in this module to change that behavior.
- All rows are top-aligned. Use the alignment functions in this module to change that behavior.
- The table will draw borders between columns, between rows, and
around the outside of the table. Border-drawing behavior can be
configured with the API in this module. Note that tables always draw
with
joinBorders
enabled. If a cell's contents has smart borders but you don't want those borders to connect to the surrounding table borders, wrap the cell's contents withfreezeBorders
.
All cells of all rows MUST use the Fixed
growth policy for both
horizontal and vertical growth. If the argument list contains any
cells that use the Greedy
policy, this function will raise a
TableException
.
All rows MUST have the same number of cells. If not, this function
will raise a TableException
.
Configuration
alignLeft :: Int -> Table n -> Table n Source #
Align the specified column to the left. The argument is the column index, starting with zero. Silently does nothing if the index is out of range.
alignRight :: Int -> Table n -> Table n Source #
Align the specified column to the right. The argument is the column index, starting with zero. Silently does nothing if the index is out of range.
alignCenter :: Int -> Table n -> Table n Source #
Align the specified column to center. The argument is the column index, starting with zero. Silently does nothing if the index is out of range.
alignTop :: Int -> Table n -> Table n Source #
Align the specified row to the top. The argument is the row index, starting with zero. Silently does nothing if the index is out of range.
alignMiddle :: Int -> Table n -> Table n Source #
Align the specified row to the middle. The argument is the row index, starting with zero. Silently does nothing if the index is out of range.
alignBottom :: Int -> Table n -> Table n Source #
Align the specified row to bottom. The argument is the row index, starting with zero. Silently does nothing if the index is out of range.
setColAlignment :: ColumnAlignment -> Int -> Table n -> Table n Source #
Set the alignment for the specified column index (starting at zero). Silently does nothing if the index is out of range.
setRowAlignment :: RowAlignment -> Int -> Table n -> Table n Source #
Set the alignment for the specified row index (starting at zero). Silently does nothing if the index is out of range.
setDefaultColAlignment :: ColumnAlignment -> Table n -> Table n Source #
Set the default column alignment for columns with no explicitly configured alignment.
setDefaultRowAlignment :: RowAlignment -> Table n -> Table n Source #
Set the default row alignment for rows with no explicitly configured alignment.
surroundingBorder :: Bool -> Table n -> Table n Source #
Configure whether the table draws a border on its exterior.
rowBorders :: Bool -> Table n -> Table n Source #
Configure whether the table draws borders between its rows.
columnBorders :: Bool -> Table n -> Table n Source #
Configure whether the table draws borders between its columns.
Rendering
renderTable :: Table n -> Widget n Source #
Render the table.
Low-level API
data RenderedTableCells n Source #
The result of performing table cell intermediate rendering and layout.
RenderedTableCells | |
|
data BorderConfiguration Source #
A border configuration for a table.
tableCellLayout :: Table n -> RenderM n (RenderedTableCells n) Source #
addBorders :: RenderedTableCells n -> RenderM n (Widget n) Source #
Augment rendered table cells with borders according to the border configuration accompanying the cells.
:: [ColumnAlignment] | The column alignments to use for each widget, respectively. |
-> [Int] | The width of each column in terminal columns, respectively. |
-> [Widget n] | The column cells to align. |
-> [Widget n] |
Given a "table row" of widgets, align each one according to the list of specified column alignments in columns of the specified widths.