matterhorn-50200.5.0: src/Events/TabbedWindow.hs
{-# LANGUAGE RankNTypes #-}
module Events.TabbedWindow
( handleTabbedWindowEvent
, tabbedWindowKeybindings
)
where
import Prelude ()
import Prelude.MH
import qualified Graphics.Vty as Vty
import Lens.Micro.Platform ( Lens', (.=) )
import Types
import Types.KeyEvents
import Events.Keybindings
handleTabbedWindowEvent :: (Show a, Eq a)
=> Lens' ChatState (TabbedWindow a)
-> Vty.Event
-> MH ()
handleTabbedWindowEvent target e = do
w <- use target
handleKeyboardEvent (tabbedWindowKeybindings target) (forwardEvent w) e
forwardEvent :: (Show a, Eq a)
=> TabbedWindow 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 a)
-> KeyConfig
-> [Keybinding]
tabbedWindowKeybindings target = mkKeybindings
[ mkKb CancelEvent "Close window" $ do
w <- use target
setMode (twReturnMode w)
, mkKb SelectNextTabEvent "Select next tab" $ do
w' <- tabbedWindowNextTab =<< use target
target .= w'
, mkKb SelectPreviousTabEvent "Select previous tab" $ do
w' <- tabbedWindowPreviousTab =<< use target
target .= w'
]