{-# 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 :: forall a. (Show a, Eq a) => Lens' ChatState (TabbedWindow ChatState MH Name a) -> TeamId -> Event -> MH Bool handleTabbedWindowEvent Lens' ChatState (TabbedWindow ChatState MH Name a) target TeamId tId Event e = do TabbedWindow ChatState MH Name a w <- forall s (m :: * -> *) a. MonadState s m => Getting a s a -> m a use Lens' ChatState (TabbedWindow ChatState MH Name a) target [Event -> MH Bool] -> Event -> MH Bool handleEventWith [ (KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH) -> Event -> MH Bool mhHandleKeyboardEvent (forall a. (Show a, Eq a) => Lens' ChatState (TabbedWindow ChatState MH Name a) -> TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH tabbedWindowKeybindings Lens' ChatState (TabbedWindow ChatState MH Name a) target TeamId tId) , \Event _ -> forall a s n. (Show a, Eq a) => TabbedWindow s MH n a -> Event -> MH () forwardEvent TabbedWindow ChatState MH Name a w Event e forall (m :: * -> *) a b. Monad m => m a -> m b -> m b >> forall (m :: * -> *) a. Monad m => a -> m a return Bool True ] Event e forwardEvent :: (Show a, Eq a) => TabbedWindow s MH n a -> Vty.Event -> MH () forwardEvent :: forall a s n. (Show a, Eq a) => TabbedWindow s MH n a -> Event -> MH () forwardEvent TabbedWindow s MH n a w Event e = do let cur :: TabbedWindowEntry s MH n a cur = forall a s (m :: * -> *) n. (Show a, Eq a) => TabbedWindow s m n a -> TabbedWindowEntry s m n a getCurrentTabbedWindowEntry TabbedWindow s MH n a w forall s (m :: * -> *) n a. TabbedWindowEntry s m n a -> a -> Event -> m () tweHandleEvent TabbedWindowEntry s MH n a cur (forall s (m :: * -> *) n a. TabbedWindow s m n a -> a twValue TabbedWindow s MH n a w) Event e tabbedWindowKeybindings :: (Show a, Eq a) => Lens' ChatState (TabbedWindow ChatState MH Name a) -> TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH tabbedWindowKeybindings :: forall a. (Show a, Eq a) => Lens' ChatState (TabbedWindow ChatState MH Name a) -> TeamId -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH tabbedWindowKeybindings Lens' ChatState (TabbedWindow ChatState MH Name a) target TeamId tId KeyConfig KeyEvent kc = forall k (m :: * -> *). Ord k => KeyConfig k -> [KeyEventHandler k m] -> KeyDispatcher k m unsafeKeyDispatcher KeyConfig KeyEvent kc forall a b. (a -> b) -> a -> b $ forall a. (Show a, Eq a) => TeamId -> Lens' ChatState (TabbedWindow ChatState MH Name a) -> [MHKeyEventHandler] tabbedWindowKeyHandlers TeamId tId Lens' ChatState (TabbedWindow ChatState MH Name a) target tabbedWindowKeyHandlers :: (Show a, Eq a) => TeamId -> Lens' ChatState (TabbedWindow ChatState MH Name a) -> [MHKeyEventHandler] tabbedWindowKeyHandlers :: forall a. (Show a, Eq a) => TeamId -> Lens' ChatState (TabbedWindow ChatState MH Name a) -> [MHKeyEventHandler] tabbedWindowKeyHandlers TeamId tId Lens' ChatState (TabbedWindow ChatState MH Name a) target = [ forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent CancelEvent Text "Close window" forall a b. (a -> b) -> a -> b $ TeamId -> MH () popMode TeamId tId , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent SelectNextTabEvent Text "Select next tab" forall a b. (a -> b) -> a -> b $ do TabbedWindow ChatState MH Name a w' <- forall (m :: * -> *) a s n. (Monad m, Show a, Eq a) => TabbedWindow s m n a -> m (TabbedWindow s m n a) tabbedWindowNextTab forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< forall s (m :: * -> *) a. MonadState s m => Getting a s a -> m a use Lens' ChatState (TabbedWindow ChatState MH Name a) target Lens' ChatState (TabbedWindow ChatState MH Name a) target forall s (m :: * -> *) a b. MonadState s m => ASetter s s a b -> b -> m () .= TabbedWindow ChatState MH Name a w' , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m onEvent KeyEvent SelectPreviousTabEvent Text "Select previous tab" forall a b. (a -> b) -> a -> b $ do TabbedWindow ChatState MH Name a w' <- forall (m :: * -> *) a s n. (Monad m, Show a, Eq a) => TabbedWindow s m n a -> m (TabbedWindow s m n a) tabbedWindowPreviousTab forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< forall s (m :: * -> *) a. MonadState s m => Getting a s a -> m a use Lens' ChatState (TabbedWindow ChatState MH Name a) target Lens' ChatState (TabbedWindow ChatState MH Name a) target forall s (m :: * -> *) a b. MonadState s m => ASetter s s a b -> b -> m () .= TabbedWindow ChatState MH Name a w' ]