hascard-0.2.0.0: src/UI/Info.hs
module UI.Info (runInfoUI) where
import Brick
import Brick.Widgets.Border
import Brick.Widgets.Border.Style
import Brick.Widgets.Center
import Control.Monad (void)
import qualified Graphics.Vty as V
type Event = ()
type Name = ()
type State = ()
app :: App State Event Name
app = App
{ appDraw = (:[]) . const ui
, appChooseCursor = neverShowCursor
, appHandleEvent = handleEvent
, appStartEvent = return
, appAttrMap = const theMap
}
ui :: Widget Name
ui =
joinBorders $
center $
withBorderStyle unicodeRounded $
border $
hLimit 40 $
hCenter (withAttr titleAttr (str "Info")) <=>
hBorder <=>
drawInfo
handleEvent :: State -> BrickEvent Name Event -> EventM Name (Next State)
handleEvent s (VtyEvent e) =
case e of
V.EvKey (V.KChar 'c') [V.MCtrl] -> halt s
V.EvKey V.KEsc [] -> halt s
V.EvKey V.KEnter [] -> halt s
V.EvKey V.KDown [] -> vScrollBy (viewportScroll ()) 1 >> continue s
V.EvKey (V.KChar 'j') [] -> vScrollBy (viewportScroll ()) 1 >> continue s
V.EvKey V.KUp [] -> vScrollBy (viewportScroll ()) (-1) >> continue s
V.EvKey (V.KChar 'k') [] -> vScrollBy (viewportScroll ()) (-1) >> continue s
_ -> continue s
handleEvent s _ = continue s
titleAttr :: AttrName
titleAttr = attrName "title"
theMap :: AttrMap
theMap = attrMap V.defAttr
[ (titleAttr, fg V.yellow) ]
drawInfo :: Widget Name
drawInfo =
padLeftRight 1 $
vLimitPercent 60 $
viewport () Vertical (strWrap info)
runInfoUI :: IO ()
runInfoUI = void $ defaultMain app ()
info :: String
info =
"Hascard is a text-based user interface for reviewing notes using 'flashcards'. Cards are written in markdown-like syntax; for more info see the README file. Use the --help flag for information on the command line options.\n\nControls:\n * Use arrows or the j and k keys for menu navigation\n * Enter confirms a selection, flips a card or continues to the next card\n * Use TAB or the arrow keys for navigating gaps in open questions\n * Use the c key for confirming reorder questions or multiple choice questions with more than 1 possible answer\n * Use F1 to show the answers of a open question.\n * Use CTRL+Left and CTRL+Right to move to previous and next cards without having to answer them"