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