packages feed

cursor-brick-0.1.0.1: src/Cursor/Brick/List/NonEmpty.hs

module Cursor.Brick.List.NonEmpty where

import Brick.Types as B
import Brick.Widgets.Core as B
import Cursor.List.NonEmpty
import Data.List

verticalNonEmptyCursorTableWithHeader ::
  (b -> [Widget n]) -> (a -> [Widget n]) -> (b -> [Widget n]) -> [Widget n] -> NonEmptyCursor a b -> Widget n
verticalNonEmptyCursorTableWithHeader prevFunc curFunc nextFunc header =
  nonEmptyCursorWidget (\ps c ns -> tableWidget $ header : (map prevFunc ps ++ [curFunc c] ++ map nextFunc ns))

verticalNonEmptyCursorTableWithHeaderM ::
  Applicative f =>
  (b -> f [Widget n]) ->
  (a -> f [Widget n]) ->
  (b -> f [Widget n]) ->
  [Widget n] ->
  NonEmptyCursor a b ->
  f (Widget n)
verticalNonEmptyCursorTableWithHeaderM prevFunc curFunc nextFunc header =
  nonEmptyCursorWidgetM (\ps c ns -> tableWidget <$> sequenceA (pure header : (map prevFunc ps ++ [curFunc c] ++ map nextFunc ns)))

verticalNonEmptyCursorTable ::
  (b -> [Widget n]) -> (a -> [Widget n]) -> (b -> [Widget n]) -> NonEmptyCursor a b -> Widget n
verticalNonEmptyCursorTable prevFunc curFunc nextFunc =
  nonEmptyCursorWidget
    ( \ps c ns ->
        tableWidget $ map prevFunc ps ++ [curFunc c] ++ map nextFunc ns
    )

verticalNonEmptyCursorTableM ::
  Applicative f =>
  (b -> f [Widget n]) ->
  (a -> f [Widget n]) ->
  (b -> f [Widget n]) ->
  NonEmptyCursor a b ->
  f (Widget n)
verticalNonEmptyCursorTableM prevFunc curFunc nextFunc =
  nonEmptyCursorWidgetM (\ps c ns -> tableWidget <$> sequenceA (map prevFunc ps ++ [curFunc c] ++ map nextFunc ns))

tableWidget :: [[Widget n]] -> Widget n
tableWidget = hBox . intersperse (str " ") . map vBox . transpose

horizontalNonEmptyCursorWidgetM ::
  Applicative f =>
  (b -> f (Widget n)) ->
  (a -> f (Widget n)) ->
  (b -> f (Widget n)) ->
  NonEmptyCursor a b ->
  f (Widget n)
horizontalNonEmptyCursorWidgetM beforeFunc curFunc afterFunc =
  nonEmptyCursorWidgetM $ \befores current afters ->
    hBox
      <$> sequenceA
        (concat [map beforeFunc befores, [curFunc current], map afterFunc afters])

horizontalNonEmptyCursorWidget ::
  (b -> Widget n) ->
  (a -> Widget n) ->
  (b -> Widget n) ->
  NonEmptyCursor a b ->
  Widget n
horizontalNonEmptyCursorWidget beforeFunc curFunc afterFunc =
  nonEmptyCursorWidget $ \befores current afters ->
    hBox $
      concat [map beforeFunc befores, [curFunc current], map afterFunc afters]

verticalNonEmptyCursorWidgetM ::
  Applicative f =>
  (b -> f (Widget n)) ->
  (a -> f (Widget n)) ->
  (b -> f (Widget n)) ->
  NonEmptyCursor a b ->
  f (Widget n)
verticalNonEmptyCursorWidgetM beforeFunc curFunc afterFunc =
  nonEmptyCursorWidgetM $ \befores current afters ->
    vBox
      <$> sequenceA
        (concat [map beforeFunc befores, [curFunc current], map afterFunc afters])

verticalNonEmptyCursorWidget ::
  (b -> Widget n) ->
  (a -> Widget n) ->
  (b -> Widget n) ->
  NonEmptyCursor a b ->
  Widget n
verticalNonEmptyCursorWidget beforeFunc curFunc afterFunc =
  nonEmptyCursorWidget $ \befores current afters ->
    vBox $
      concat [map beforeFunc befores, [curFunc current], map afterFunc afters]

nonEmptyCursorWidgetM ::
  ([b] -> a -> [b] -> m (Widget n)) -> NonEmptyCursor a b -> m (Widget n)
nonEmptyCursorWidgetM = foldNonEmptyCursor

nonEmptyCursorWidget ::
  ([b] -> a -> [b] -> Widget n) -> NonEmptyCursor a b -> Widget n
nonEmptyCursorWidget = foldNonEmptyCursor