{-# LANGUAGE RankNTypes #-} module Matterhorn.Events.TabbedWindow ( handleTabbedWindowEvent , tabbedWindowKeybindings , tabbedWindowKeyHandlers ) where import Prelude () import Matterhorn.Prelude import qualified Graphics.Vty as Vty import Lens.Micro.Platform ( Lens', (.=) ) import Matterhorn.Types import Matterhorn.Types.KeyEvents import Matterhorn.Events.Keybindings handleTabbedWindowEvent :: (Show a, Eq a) => Lens' ChatState (TabbedWindow a) -> Vty.Event -> MH Bool handleTabbedWindowEvent :: Lens' ChatState (TabbedWindow a) -> Event -> MH Bool handleTabbedWindowEvent Lens' ChatState (TabbedWindow a) target Event e = do TabbedWindow a w <- Getting (TabbedWindow a) ChatState (TabbedWindow a) -> MH (TabbedWindow a) forall s (m :: * -> *) a. MonadState s m => Getting a s a -> m a use Getting (TabbedWindow a) ChatState (TabbedWindow a) Lens' ChatState (TabbedWindow a) target (KeyConfig -> KeyHandlerMap) -> (Event -> MH ()) -> Event -> MH Bool handleKeyboardEvent (Lens' ChatState (TabbedWindow a) -> KeyConfig -> KeyHandlerMap forall a. (Show a, Eq a) => Lens' ChatState (TabbedWindow a) -> KeyConfig -> KeyHandlerMap tabbedWindowKeybindings Lens' ChatState (TabbedWindow a) target) (TabbedWindow a -> Event -> MH () forall a. (Show a, Eq a) => TabbedWindow a -> Event -> MH () forwardEvent TabbedWindow a w) Event e forwardEvent :: (Show a, Eq a) => TabbedWindow a -> Vty.Event -> MH () forwardEvent :: TabbedWindow a -> Event -> MH () forwardEvent TabbedWindow a w Event e = do let cur :: TabbedWindowEntry a cur = TabbedWindow a -> TabbedWindowEntry a forall a. (Show a, Eq a) => TabbedWindow a -> TabbedWindowEntry a getCurrentTabbedWindowEntry TabbedWindow a w TabbedWindowEntry a -> a -> Event -> MH () forall a. TabbedWindowEntry a -> a -> Event -> MH () tweHandleEvent TabbedWindowEntry a cur (TabbedWindow a -> a forall a. TabbedWindow a -> a twValue TabbedWindow a w) Event e tabbedWindowKeybindings :: (Show a, Eq a) => Lens' ChatState (TabbedWindow a) -> KeyConfig -> KeyHandlerMap tabbedWindowKeybindings :: Lens' ChatState (TabbedWindow a) -> KeyConfig -> KeyHandlerMap tabbedWindowKeybindings Lens' ChatState (TabbedWindow a) target = [KeyEventHandler] -> KeyConfig -> KeyHandlerMap mkKeybindings ([KeyEventHandler] -> KeyConfig -> KeyHandlerMap) -> [KeyEventHandler] -> KeyConfig -> KeyHandlerMap forall a b. (a -> b) -> a -> b $ Lens' ChatState (TabbedWindow a) -> [KeyEventHandler] forall a. (Show a, Eq a) => Lens' ChatState (TabbedWindow a) -> [KeyEventHandler] tabbedWindowKeyHandlers Lens' ChatState (TabbedWindow a) target tabbedWindowKeyHandlers :: (Show a, Eq a) => Lens' ChatState (TabbedWindow a) -> [KeyEventHandler] tabbedWindowKeyHandlers :: Lens' ChatState (TabbedWindow a) -> [KeyEventHandler] tabbedWindowKeyHandlers Lens' ChatState (TabbedWindow a) target = [ KeyEvent -> Text -> MH () -> KeyEventHandler mkKb KeyEvent CancelEvent Text "Close window" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler forall a b. (a -> b) -> a -> b $ do TabbedWindow a w <- Getting (TabbedWindow a) ChatState (TabbedWindow a) -> MH (TabbedWindow a) forall s (m :: * -> *) a. MonadState s m => Getting a s a -> m a use Getting (TabbedWindow a) ChatState (TabbedWindow a) Lens' ChatState (TabbedWindow a) target Mode -> MH () setMode (TabbedWindow a -> Mode forall a. TabbedWindow a -> Mode twReturnMode TabbedWindow a w) , KeyEvent -> Text -> MH () -> KeyEventHandler mkKb KeyEvent SelectNextTabEvent Text "Select next tab" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler forall a b. (a -> b) -> a -> b $ do TabbedWindow a w' <- TabbedWindow a -> MH (TabbedWindow a) forall a. (Show a, Eq a) => TabbedWindow a -> MH (TabbedWindow a) tabbedWindowNextTab (TabbedWindow a -> MH (TabbedWindow a)) -> MH (TabbedWindow a) -> MH (TabbedWindow a) forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Getting (TabbedWindow a) ChatState (TabbedWindow a) -> MH (TabbedWindow a) forall s (m :: * -> *) a. MonadState s m => Getting a s a -> m a use Getting (TabbedWindow a) ChatState (TabbedWindow a) Lens' ChatState (TabbedWindow a) target (TabbedWindow a -> Identity (TabbedWindow a)) -> ChatState -> Identity ChatState Lens' ChatState (TabbedWindow a) target ((TabbedWindow a -> Identity (TabbedWindow a)) -> ChatState -> Identity ChatState) -> TabbedWindow a -> MH () forall s (m :: * -> *) a b. MonadState s m => ASetter s s a b -> b -> m () .= TabbedWindow a w' , KeyEvent -> Text -> MH () -> KeyEventHandler mkKb KeyEvent SelectPreviousTabEvent Text "Select previous tab" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler forall a b. (a -> b) -> a -> b $ do TabbedWindow a w' <- TabbedWindow a -> MH (TabbedWindow a) forall a. (Show a, Eq a) => TabbedWindow a -> MH (TabbedWindow a) tabbedWindowPreviousTab (TabbedWindow a -> MH (TabbedWindow a)) -> MH (TabbedWindow a) -> MH (TabbedWindow a) forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Getting (TabbedWindow a) ChatState (TabbedWindow a) -> MH (TabbedWindow a) forall s (m :: * -> *) a. MonadState s m => Getting a s a -> m a use Getting (TabbedWindow a) ChatState (TabbedWindow a) Lens' ChatState (TabbedWindow a) target (TabbedWindow a -> Identity (TabbedWindow a)) -> ChatState -> Identity ChatState Lens' ChatState (TabbedWindow a) target ((TabbedWindow a -> Identity (TabbedWindow a)) -> ChatState -> Identity ChatState) -> TabbedWindow a -> MH () forall s (m :: * -> *) a b. MonadState s m => ASetter s s a b -> b -> m () .= TabbedWindow a w' ]