module Matterhorn.Events.ShowHelp where import Prelude () import Matterhorn.Prelude import Brick import Brick.Keybindings import qualified Graphics.Vty as Vty import Network.Mattermost.Types ( TeamId ) import Matterhorn.Constants import Matterhorn.Types onEventShowHelp :: TeamId -> Vty.Event -> MH Bool onEventShowHelp :: TeamId -> Event -> MH Bool onEventShowHelp TeamId tId = [Event -> MH Bool] -> Event -> MH Bool handleEventWith [ (KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH) -> Event -> MH Bool mhHandleKeyboardEvent (TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH helpKeybindings TeamId tId) , TeamId -> Event -> MH Bool closeHelp TeamId tId ] closeHelp :: TeamId -> Vty.Event -> MH Bool closeHelp :: TeamId -> Event -> MH Bool closeHelp TeamId tId (Vty.EvKey {}) = do TeamId -> MH () popMode TeamId tId forall (m :: * -> *) a. Monad m => a -> m a return Bool True closeHelp TeamId _ Event _ = forall (m :: * -> *) a. Monad m => a -> m a return Bool False helpKeybindings :: TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH helpKeybindings :: TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH helpKeybindings TeamId tId KeyConfig KeyEvent kc = forall k (m :: * -> *). Ord k => KeyConfig k -> [KeyEventHandler k m] -> KeyDispatcher k m unsafeKeyDispatcher KeyConfig KeyEvent kc (TeamId -> [MHKeyEventHandler] helpKeyHandlers TeamId tId) helpKeyHandlers :: TeamId -> [MHKeyEventHandler] helpKeyHandlers :: TeamId -> [MHKeyEventHandler] helpKeyHandlers TeamId tId = [ forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent ScrollUpEvent Text "Scroll up" forall a b. (a -> b) -> a -> b $ forall a. EventM Name ChatState a -> MH a mh forall a b. (a -> b) -> a -> b $ forall n. ViewportScroll n -> forall s. Int -> EventM n s () vScrollBy (forall n. n -> ViewportScroll n viewportScroll Name HelpViewport) (-Int 1) , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent ScrollDownEvent Text "Scroll down" forall a b. (a -> b) -> a -> b $ forall a. EventM Name ChatState a -> MH a mh forall a b. (a -> b) -> a -> b $ forall n. ViewportScroll n -> forall s. Int -> EventM n s () vScrollBy (forall n. n -> ViewportScroll n viewportScroll Name HelpViewport) Int 1 , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent PageUpEvent Text "Page up" forall a b. (a -> b) -> a -> b $ forall a. EventM Name ChatState a -> MH a mh forall a b. (a -> b) -> a -> b $ forall n. ViewportScroll n -> forall s. Int -> EventM n s () vScrollBy (forall n. n -> ViewportScroll n viewportScroll Name HelpViewport) (-Int 1 forall a. Num a => a -> a -> a * Int pageAmount) , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent PageDownEvent Text "Page down" forall a b. (a -> b) -> a -> b $ forall a. EventM Name ChatState a -> MH a mh forall a b. (a -> b) -> a -> b $ forall n. ViewportScroll n -> forall s. Int -> EventM n s () vScrollBy (forall n. n -> ViewportScroll n viewportScroll Name HelpViewport) (Int 1 forall a. Num a => a -> a -> a * Int pageAmount) , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent CancelEvent Text "Close the help window" forall a b. (a -> b) -> a -> b $ TeamId -> MH () popMode TeamId tId , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent ScrollBottomEvent Text "Scroll to the end of the help" forall a b. (a -> b) -> a -> b $ forall a. EventM Name ChatState a -> MH a mh forall a b. (a -> b) -> a -> b $ forall n. ViewportScroll n -> forall s. EventM n s () vScrollToEnd (forall n. n -> ViewportScroll n viewportScroll Name HelpViewport) , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent ScrollTopEvent Text "Scroll to the beginning of the help" forall a b. (a -> b) -> a -> b $ forall a. EventM Name ChatState a -> MH a mh forall a b. (a -> b) -> a -> b $ forall n. ViewportScroll n -> forall s. EventM n s () vScrollToBeginning (forall n. n -> ViewportScroll n viewportScroll Name HelpViewport) ]