swarm-0.4: src/Swarm/TUI/List.hs
-- |
-- SPDX-License-Identifier: BSD-3-Clause
--
-- A special modified version of 'Brick.Widgets.List.handleListEvent'
-- to deal with skipping over separators.
module Swarm.TUI.List (handleListEventWithSeparators) where
import Brick (EventM)
import Brick.Widgets.List qualified as BL
import Brick.Widgets.List.Skip
import Graphics.Vty qualified as V
-- | Handle a list event, taking an extra predicate to identify which
-- list elements are separators; separators will be skipped if
-- possible.
handleListEventWithSeparators ::
(Foldable t, BL.Splittable t, Ord n, Searchable t) =>
V.Event ->
-- | Is this element a separator?
(e -> Bool) ->
EventM n (BL.GenericList n t e) ()
handleListEventWithSeparators e isSep =
listSkip isSep movement
where
movement = case e of
V.EvKey V.KUp [] -> Move One Bwd
V.EvKey (V.KChar 'k') [] -> Move One Bwd
V.EvKey V.KDown [] -> Move One Fwd
V.EvKey (V.KChar 'j') [] -> Move One Fwd
V.EvKey V.KHome [] -> Move Most Bwd
V.EvKey V.KEnd [] -> Move Most Fwd
V.EvKey V.KPageDown [] -> Move Page Fwd
V.EvKey V.KPageUp [] -> Move Page Bwd
_ -> NoMove