grapefruit-ui-0.1.0.0: src/Graphics/UI/Grapefruit/Backend/Container.hs
module Graphics.UI.Grapefruit.Backend.Container (
-- * Interface
ContainerUIBackend (..),
-- * Utilities
Column (Column),
TextCellDisplay (TextCellDisplay),
ProgressCellDisplay (ProgressCellDisplay),
Availability (Never, AsNecessary, Always),
-- * Field names
Elements (Elements),
Columns (Columns),
HasScrollbars (HasScrollbars),
Selection (Selection)
) where
-- Data
import Data.Sequence as Seq
import Data.Set as Set
import Data.Fraction as Fraction
import Data.Colour.RGBSpace as RGBSpace
import Data.Record as Record
import Data.Record.Optionality as OptionalityRecord
-- FRP.Grapefruit
import FRP.Grapefruit.Signal as Signal
import FRP.Grapefruit.Signal.Segmented as SSignal
import FRP.Grapefruit.Signal.Incremental as ISignal
-- Graphics.UI.Grapefruit
import Graphics.UI.Grapefruit.Item as UIItem
import Graphics.UI.Grapefruit.Backend.Basic as BasicUIBackend
-- * Interface
class (BasicUIBackend uiBackend) => ContainerUIBackend uiBackend where
listView :: Brick Widget
uiBackend
(X :& Req Elements ::: ISignal `Of` Seq el
:& Req Columns ::: ISignal `Of` Seq (Column uiBackend el)
:& Opt HasScrollbars ::: SSignal `Of` (Orientation -> Availability))
(X :& Selection ::: SSignal `Of` Seq el)
setView :: (Ord el) =>
Brick Widget
uiBackend
(X :& Req Elements ::: ISignal `Of` Set el
:& Req Columns ::: ISignal `Of` Seq (Column uiBackend el)
:& Opt HasScrollbars ::: SSignal `Of` (Orientation -> Availability))
(X :& Selection ::: SSignal `Of` Set el)
data Cell uiBackend :: * -> *
textCell :: Cell uiBackend TextCellDisplay
progressCell :: Cell uiBackend ProgressCellDisplay
-- * Utilities
data Column uiBackend el where
Column :: String -> (el -> display) -> Cell uiBackend display -> Column uiBackend el
data TextCellDisplay = TextCellDisplay String (RGB Fraction)
data ProgressCellDisplay = ProgressCellDisplay Fraction (Maybe String)
-- FIXME: This should probably go into some more general module.
data Availability = Never | AsNecessary | Always
-- * Field names
data Elements = Elements
data Columns = Columns
data HasScrollbars = HasScrollbars
data Selection = Selection