matterhorn-50200.18.0: src/Matterhorn/Events/TabbedWindow.hs
{-# LANGUAGE RankNTypes #-}
module Matterhorn.Events.TabbedWindow
( handleTabbedWindowEvent
, tabbedWindowKeybindings
, tabbedWindowKeyHandlers
)
where
import Prelude ()
import Matterhorn.Prelude
import Brick.Keybindings
import qualified Graphics.Vty as Vty
import Lens.Micro.Platform ( Lens', (.=) )
import Network.Mattermost.Types ( TeamId )
import Matterhorn.Types
handleTabbedWindowEvent :: (Show a, Eq a)
=> Lens' ChatState (TabbedWindow ChatState MH Name a)
-> TeamId
-> Vty.Event
-> MH Bool
handleTabbedWindowEvent target tId e = do
w <- use target
handleEventWith [ mhHandleKeyboardEvent (tabbedWindowKeybindings target tId)
, \_ -> forwardEvent w e >> return True
] e
forwardEvent :: (Show a, Eq a)
=> TabbedWindow s MH n a
-> Vty.Event
-> MH ()
forwardEvent w e = do
let cur = getCurrentTabbedWindowEntry w
tweHandleEvent cur (twValue w) e
tabbedWindowKeybindings :: (Show a, Eq a)
=> Lens' ChatState (TabbedWindow ChatState MH Name a)
-> TeamId
-> KeyConfig KeyEvent
-> KeyDispatcher KeyEvent MH
tabbedWindowKeybindings target tId kc = unsafeKeyDispatcher kc $ tabbedWindowKeyHandlers tId target
tabbedWindowKeyHandlers :: (Show a, Eq a)
=> TeamId
-> Lens' ChatState (TabbedWindow ChatState MH Name a)
-> [MHKeyEventHandler]
tabbedWindowKeyHandlers tId target =
[ onEvent CancelEvent "Close window" $
popMode tId
, onEvent SelectNextTabEvent "Select next tab" $ do
w' <- tabbedWindowNextTab =<< use target
target .= w'
, onEvent SelectPreviousTabEvent "Select previous tab" $ do
w' <- tabbedWindowPreviousTab =<< use target
target .= w'
]