module Matterhorn.Events.UrlSelect where import Prelude () import Matterhorn.Prelude import Brick.Widgets.List import qualified Graphics.Vty as Vty import Matterhorn.Events.Keybindings import Matterhorn.State.UrlSelect import Matterhorn.State.SaveAttachmentWindow import Matterhorn.Types onEventUrlSelect :: Vty.Event -> MH Bool onEventUrlSelect :: Event -> MH Bool onEventUrlSelect = (KeyConfig -> KeyHandlerMap) -> (Event -> MH ()) -> Event -> MH Bool handleKeyboardEvent KeyConfig -> KeyHandlerMap urlSelectKeybindings ((Event -> MH ()) -> Event -> MH Bool) -> (Event -> MH ()) -> Event -> MH Bool forall a b. (a -> b) -> a -> b $ \ Event ev -> Lens' ChatState (GenericList Name Vector (Int, LinkChoice)) -> (Event -> GenericList Name Vector (Int, LinkChoice) -> EventM Name (GenericList Name Vector (Int, LinkChoice))) -> Event -> MH () forall b e. Lens' ChatState b -> (e -> b -> EventM Name b) -> e -> MH () mhHandleEventLensed ((TeamState -> f TeamState) -> ChatState -> f ChatState Lens' ChatState TeamState csCurrentTeam((TeamState -> f TeamState) -> ChatState -> f ChatState) -> ((GenericList Name Vector (Int, LinkChoice) -> f (GenericList Name Vector (Int, LinkChoice))) -> TeamState -> f TeamState) -> (GenericList Name Vector (Int, LinkChoice) -> f (GenericList Name Vector (Int, LinkChoice))) -> ChatState -> f ChatState forall b c a. (b -> c) -> (a -> b) -> a -> c .(GenericList Name Vector (Int, LinkChoice) -> f (GenericList Name Vector (Int, LinkChoice))) -> TeamState -> f TeamState Lens' TeamState (GenericList Name Vector (Int, LinkChoice)) tsUrlList) Event -> GenericList Name Vector (Int, LinkChoice) -> EventM Name (GenericList Name Vector (Int, LinkChoice)) forall (t :: * -> *) n e. (Foldable t, Splittable t, Ord n) => Event -> GenericList n t e -> EventM n (GenericList n t e) handleListEvent Event ev urlSelectKeybindings :: KeyConfig -> KeyHandlerMap urlSelectKeybindings :: KeyConfig -> KeyHandlerMap urlSelectKeybindings = [KeyEventHandler] -> KeyConfig -> KeyHandlerMap mkKeybindings [KeyEventHandler] urlSelectKeyHandlers urlSelectKeyHandlers :: [KeyEventHandler] urlSelectKeyHandlers :: [KeyEventHandler] urlSelectKeyHandlers = [ Text -> Event -> MH () -> KeyEventHandler staticKb Text "Open the selected URL, if any" (Key -> [Modifier] -> Event Vty.EvKey Key Vty.KEnter []) (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler forall a b. (a -> b) -> a -> b $ MH () openSelectedURL , KeyEvent -> Text -> MH () -> KeyEventHandler mkKb KeyEvent SaveAttachmentEvent Text "Save the selected attachment" MH () openSaveAttachmentWindow , KeyEvent -> Text -> MH () -> KeyEventHandler mkKb KeyEvent CancelEvent Text "Cancel URL selection" MH () stopUrlSelect , KeyEvent -> Text -> MH () -> KeyEventHandler mkKb KeyEvent SelectUpEvent Text "Move cursor up" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler forall a b. (a -> b) -> a -> b $ Lens' ChatState (GenericList Name Vector (Int, LinkChoice)) -> (Event -> GenericList Name Vector (Int, LinkChoice) -> EventM Name (GenericList Name Vector (Int, LinkChoice))) -> Event -> MH () forall b e. Lens' ChatState b -> (e -> b -> EventM Name b) -> e -> MH () mhHandleEventLensed ((TeamState -> f TeamState) -> ChatState -> f ChatState Lens' ChatState TeamState csCurrentTeam((TeamState -> f TeamState) -> ChatState -> f ChatState) -> ((GenericList Name Vector (Int, LinkChoice) -> f (GenericList Name Vector (Int, LinkChoice))) -> TeamState -> f TeamState) -> (GenericList Name Vector (Int, LinkChoice) -> f (GenericList Name Vector (Int, LinkChoice))) -> ChatState -> f ChatState forall b c a. (b -> c) -> (a -> b) -> a -> c .(GenericList Name Vector (Int, LinkChoice) -> f (GenericList Name Vector (Int, LinkChoice))) -> TeamState -> f TeamState Lens' TeamState (GenericList Name Vector (Int, LinkChoice)) tsUrlList) Event -> GenericList Name Vector (Int, LinkChoice) -> EventM Name (GenericList Name Vector (Int, LinkChoice)) forall (t :: * -> *) n e. (Foldable t, Splittable t, Ord n) => Event -> GenericList n t e -> EventM n (GenericList n t e) handleListEvent (Key -> [Modifier] -> Event Vty.EvKey Key Vty.KUp []) , KeyEvent -> Text -> MH () -> KeyEventHandler mkKb KeyEvent SelectDownEvent Text "Move cursor down" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler forall a b. (a -> b) -> a -> b $ Lens' ChatState (GenericList Name Vector (Int, LinkChoice)) -> (Event -> GenericList Name Vector (Int, LinkChoice) -> EventM Name (GenericList Name Vector (Int, LinkChoice))) -> Event -> MH () forall b e. Lens' ChatState b -> (e -> b -> EventM Name b) -> e -> MH () mhHandleEventLensed ((TeamState -> f TeamState) -> ChatState -> f ChatState Lens' ChatState TeamState csCurrentTeam((TeamState -> f TeamState) -> ChatState -> f ChatState) -> ((GenericList Name Vector (Int, LinkChoice) -> f (GenericList Name Vector (Int, LinkChoice))) -> TeamState -> f TeamState) -> (GenericList Name Vector (Int, LinkChoice) -> f (GenericList Name Vector (Int, LinkChoice))) -> ChatState -> f ChatState forall b c a. (b -> c) -> (a -> b) -> a -> c .(GenericList Name Vector (Int, LinkChoice) -> f (GenericList Name Vector (Int, LinkChoice))) -> TeamState -> f TeamState Lens' TeamState (GenericList Name Vector (Int, LinkChoice)) tsUrlList) Event -> GenericList Name Vector (Int, LinkChoice) -> EventM Name (GenericList Name Vector (Int, LinkChoice)) forall (t :: * -> *) n e. (Foldable t, Splittable t, Ord n) => Event -> GenericList n t e -> EventM n (GenericList n t e) handleListEvent (Key -> [Modifier] -> Event Vty.EvKey Key Vty.KDown []) , Text -> Event -> MH () -> KeyEventHandler staticKb Text "Cancel URL selection" (Key -> [Modifier] -> Event Vty.EvKey (Char -> Key Vty.KChar Char 'q') []) (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler forall a b. (a -> b) -> a -> b $ MH () stopUrlSelect ]