handle events for password entry form
This commit is contained in:
@@ -26,15 +26,13 @@ module Password.App (passmanApp) where
|
||||
|
||||
import Brick
|
||||
( App (..)
|
||||
, BrickEvent
|
||||
, EventM
|
||||
, attrMap
|
||||
, halt
|
||||
, showFirstCursor
|
||||
, style
|
||||
)
|
||||
|
||||
import Password.App.Draw
|
||||
import Password.App.Event
|
||||
import Password.App.Types
|
||||
|
||||
-- | The main application
|
||||
@@ -47,7 +45,4 @@ passmanApp = App
|
||||
, appAttrMap = const $ attrMap (style 0) []
|
||||
}
|
||||
|
||||
eventHandler :: BrickEvent ResName () -> EventM ResName AppState ()
|
||||
eventHandler = const halt
|
||||
|
||||
--jl
|
||||
|
||||
79
src/Password/App/Event.hs
Normal file
79
src/Password/App/Event.hs
Normal file
@@ -0,0 +1,79 @@
|
||||
{-|
|
||||
|
||||
Module: Password.App.Event
|
||||
Description: event handling functions
|
||||
Copyright: (C) Jonathan Lamothe
|
||||
License: LGPLv3 (or later)
|
||||
Maintainer: jonathan@jlamothe.net
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this program. If not, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
-}
|
||||
|
||||
{-# LANGUAGE LambdaCase, OverloadedStrings #-}
|
||||
|
||||
module Password.App.Event (eventHandler) where
|
||||
|
||||
import Brick (BrickEvent (VtyEvent), EventM, halt)
|
||||
import Brick.Forms (handleFormEvent)
|
||||
import Brick.Keybindings
|
||||
( Binding
|
||||
, KeyDispatcher
|
||||
, ctrl
|
||||
, handleKey
|
||||
, keyDispatcher
|
||||
, keyEvents
|
||||
, newKeyConfig
|
||||
, onEvent
|
||||
)
|
||||
import Control.Monad (unless)
|
||||
import Control.Monad.State.Class (gets)
|
||||
import Graphics.Vty.Input.Events (Event (EvKey))
|
||||
import Lens.Micro ((^.))
|
||||
import Lens.Micro.Mtl (zoom)
|
||||
|
||||
import Password.App.Types
|
||||
|
||||
data KEventID = QuitKE deriving (Eq, Ord, Show)
|
||||
|
||||
-- | The main event handler
|
||||
eventHandler :: BrickEvent ResName () -> EventM ResName AppState ()
|
||||
eventHandler e@(VtyEvent (EvKey k m)) = do
|
||||
disp <- gets getKeyDispatcher
|
||||
handleKey disp k m >>= flip unless (fallbackHandler e)
|
||||
eventHandler e = fallbackHandler e
|
||||
|
||||
fallbackHandler :: BrickEvent ResName () -> EventM ResName AppState ()
|
||||
fallbackHandler e = gets (^.appMode) >>= \case
|
||||
InitMode _ -> zoom (appMode.initState.setPassForm) $
|
||||
handleFormEvent e
|
||||
|
||||
getKeyDispatcher
|
||||
:: AppState
|
||||
-> KeyDispatcher KEventID (EventM ResName AppState)
|
||||
getKeyDispatcher s = either (error "can't build dispatcher") id $
|
||||
keyDispatcher conf handlers
|
||||
where
|
||||
conf = newKeyConfig ke bs []
|
||||
ke = keyEvents []
|
||||
bs = keyBindingsFor s
|
||||
handlers =
|
||||
[ onEvent QuitKE "Quit Application" halt
|
||||
]
|
||||
|
||||
keyBindingsFor :: AppState -> [(KEventID, [Binding])]
|
||||
keyBindingsFor = const [(QuitKE, [ctrl 'c'])]
|
||||
|
||||
--jl
|
||||
Reference in New Issue
Block a user