packages feed

matterhorn-50200.18.0: src/Matterhorn/Events/UrlSelect.hs

{-# LANGUAGE RankNTypes #-}
module Matterhorn.Events.UrlSelect where

import           Prelude ()
import           Matterhorn.Prelude

import           Brick.Keybindings
import           Brick.Widgets.List
import qualified Graphics.Vty as Vty
import           Lens.Micro.Platform ( Lens' )

import           Matterhorn.State.UrlSelect
import           Matterhorn.State.SaveAttachmentWindow
import           Matterhorn.Types


onEventUrlSelect :: Lens' ChatState (MessageInterface Name i) -> Vty.Event -> MH Bool
onEventUrlSelect which =
    handleEventWith [ mhHandleKeyboardEvent (urlSelectKeybindings which)
                    , \e -> mhZoom (which.miUrlList.ulList) handleListEvent e >> return True
                    ]

urlSelectKeybindings :: Lens' ChatState (MessageInterface Name i) -> KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH
urlSelectKeybindings which kc = unsafeKeyDispatcher kc (urlSelectKeyHandlers which)

urlSelectKeyHandlers :: Lens' ChatState (MessageInterface Name i) -> [MHKeyEventHandler]
urlSelectKeyHandlers which =
    [ onKey (bind Vty.KEnter)
          "Open the selected URL, if any" $
          openSelectedURL which

    , onEvent SaveAttachmentEvent "Save the selected attachment" $
        openSaveAttachmentWindow which

    , onEvent CancelEvent "Cancel URL selection" $ stopUrlSelect which

    , onEvent SelectUpEvent "Move cursor up" $
        mhZoom (which.miUrlList.ulList) handleListEvent (Vty.EvKey Vty.KUp [])

    , onEvent SelectDownEvent "Move cursor down" $
        mhZoom (which.miUrlList.ulList) handleListEvent (Vty.EvKey Vty.KDown [])

    , onKey (bind 'q')
         "Cancel URL selection" $
         stopUrlSelect which
    ]