brick-0.18: A declarative terminal user interface library

Safe HaskellNone



This module provides a type and functions for handling focus rings of widgets. Note that this interface is merely provided for managing the focus state for a sequence of resource names; it does not do anything beyond keep track of that.

This interface is experimental.



data FocusRing n Source #

A focus ring containing a sequence of resource names to focus and a currently-focused name.

focusRing :: [n] -> FocusRing n Source #

Construct a focus ring from the list of resource names.

focusNext :: FocusRing n -> FocusRing n Source #

Advance focus to the next widget in the ring.

focusPrev :: FocusRing n -> FocusRing n Source #

Advance focus to the previous widget in the ring.

focusGetCurrent :: FocusRing n -> Maybe n Source #

Get the currently-focused resource name from the ring. If the ring is emtpy, return Nothing.

focusRingCursor Source #


:: Eq n 
=> (a -> FocusRing n)

The function used to get the focus ring out of your application state.

-> a

Your application state.

-> [CursorLocation n]

The list of available cursor positions.

-> Maybe (CursorLocation n)

The cursor position, if any, that matches the resource name currently focused by the FocusRing.

Cursor selection convenience function for use as an appChooseCursor value.

withFocusRing Source #


:: (Eq n, Named a n) 
=> FocusRing n

The focus ring to use as the source of focus state.

-> (Bool -> a -> b)

A function that takes a value and its focus state.

-> a

The wiget state value that we need to check for focus.

-> b

The rest of the computation.

This function is a convenience function to look up a widget state value's resource name in a focus ring and set its focus setting according to the focus ring's state. This function determines whether a given widget state value is the focus of the ring and passes the resulting boolean to a rendering function, along with the state value (a), to produce whatever comes next (b).

Focus-aware widgets have rendering functions that should be usable with this combinator; see List and Edit.

focusRingModify :: (CList n -> CList n) -> FocusRing n -> FocusRing n Source #

Modify the internal circular list structure of a focus ring directly. This function permits modification of the circular list using the rich Data.CircularList API.