{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} module Cursor.Brick.Map where import Cursor.Map import Brick.Types import Brick.Widgets.Core horizontalMapCursorWidget :: (k -> v -> Widget n) -> (KeyValueCursor kc vc k v -> Widget n) -> (k -> v -> Widget n) -> MapCursor kc vc k v -> Widget n horizontalMapCursorWidget beforeFunc curFunc afterFunc = mapCursorWidget $ \befores current afters -> hBox $ concat [ map (uncurry beforeFunc) befores , [curFunc current] , map (uncurry afterFunc) afters ] horizontalMapCursorWidgetM :: Applicative f => (k -> v -> f (Widget n)) -> (KeyValueCursor kc vc k v -> f (Widget n)) -> (k -> v -> f (Widget n)) -> MapCursor kc vc k v -> f (Widget n) horizontalMapCursorWidgetM beforeFunc curFunc afterFunc = mapCursorWidgetM $ \befores current afters -> hBox <$> sequenceA (concat [ map (uncurry beforeFunc) befores , [curFunc current] , map (uncurry afterFunc) afters ]) verticalMapCursorWidget :: (k -> v -> Widget n) -> (KeyValueCursor kc vc k v -> Widget n) -> (k -> v -> Widget n) -> MapCursor kc vc k v -> Widget n verticalMapCursorWidget beforeFunc curFunc afterFunc = mapCursorWidget $ \befores current afters -> vBox $ concat [ map (uncurry beforeFunc) befores , [curFunc current] , map (uncurry afterFunc) afters ] verticalMapCursorWidgetM :: Applicative f => (k -> v -> f (Widget n)) -> (KeyValueCursor kc vc k v -> f (Widget n)) -> (k -> v -> f (Widget n)) -> MapCursor kc vc k v -> f (Widget n) verticalMapCursorWidgetM beforeFunc curFunc afterFunc = mapCursorWidgetM $ \befores current afters -> vBox <$> sequenceA (concat [ map (uncurry beforeFunc) befores , [curFunc current] , map (uncurry afterFunc) afters ]) mapCursorWidget :: ([(k, v)] -> KeyValueCursor kc vc k v -> [(k, v)] -> Widget n) -> MapCursor kc vc k v -> Widget n mapCursorWidget = foldMapCursor mapCursorWidgetM :: ([(k, v)] -> KeyValueCursor kc vc k v -> [(k, v)] -> m (Widget n)) -> MapCursor kc vc k v -> m (Widget n) mapCursorWidgetM = foldMapCursor