packages feed

matterhorn-50200.16.0: src/Matterhorn/Events/ShowHelp.hs

module Matterhorn.Events.ShowHelp where

import           Prelude ()
import           Matterhorn.Prelude

import           Brick
import qualified Graphics.Vty as Vty

import           Network.Mattermost.Types ( TeamId )

import           Matterhorn.Constants
import           Matterhorn.Events.Keybindings
import           Matterhorn.Types


onEventShowHelp :: TeamId -> Vty.Event -> MH Bool
onEventShowHelp tId =
  handleKeyboardEvent (helpKeybindings tId) $ \ e -> case e of
    Vty.EvKey _ _ -> popMode tId
    _ -> return ()

helpKeybindings :: TeamId -> KeyConfig -> KeyHandlerMap
helpKeybindings tId = mkKeybindings (helpKeyHandlers tId)

helpKeyHandlers :: TeamId -> [KeyEventHandler]
helpKeyHandlers tId =
    [ mkKb ScrollUpEvent "Scroll up" $
        mh $ vScrollBy (viewportScroll HelpViewport) (-1)
    , mkKb ScrollDownEvent "Scroll down" $
        mh $ vScrollBy (viewportScroll HelpViewport) 1
    , mkKb PageUpEvent "Page up" $
        mh $ vScrollBy (viewportScroll HelpViewport) (-1 * pageAmount)
    , mkKb PageDownEvent "Page down" $
        mh $ vScrollBy (viewportScroll HelpViewport) (1 * pageAmount)
    , mkKb CancelEvent "Return to the previous interface" $
        popMode tId
    , mkKb ScrollBottomEvent "Scroll to the end of the help" $
        mh $ vScrollToEnd (viewportScroll HelpViewport)
    , mkKb ScrollTopEvent "Scroll to the beginning of the help" $
        mh $ vScrollToBeginning (viewportScroll HelpViewport)
    ]

popMode :: TeamId -> MH ()
popMode tId = do
    ShowHelp _ prevMode <- use (csTeam(tId).tsMode)
    setMode tId prevMode