packages feed

hum-0.1.0.0: src/Hum/Views/Help.hs

{-#LANGUAGE RankNTypes#-}
-- |

module Hum.Views.Help where
import           Prelude                 hiding ( Down )
import           Hum.Types
import           Brick.Types
import           Graphics.Vty.Input.Events
import           Brick.Main
import           Brick.Widgets.Core
import           Brick.Widgets.Center
import           Control.Lens


drawViewHelp :: HState -> Widget Name
drawViewHelp st = center ((hCenter . txt $ "j/k cycle between help screens.") <=> txt (helpText st))

helpText :: HState -> Text
helpText st = unlines $ case st^.helpScreenL of
  0 -> [
          "Change views:"
        , "  1 - queue"
        , "  2 - library"
        , "  3 - playlists"
        , ""
        , "General Bindings:"
        , "  t       - play/pause toggle"
        , "  ,       - previous song"
        , "  .       - next song"
        , "  [ and ] - skip 5 second in either direction"
        , "  { and } - skip 30 second in either direction"
        , "  hjkl    - vim movements"
        , "  / and ? - forwards and backwards search"
        , "  n and N - move to next and previous match of search"
        , "  :       - execute commands"
        , "  q       - quit"
        , "  s       - toggle single mode in mpd"
        , "  c       - toggle consume mode in mpd"
        , "  x       - toggle crossfade mode in mpd"
        , "  r       - toggle repeat mode in mpd"
        , "  z       - toggle random mode in mpd"]
  1 -> [
          "Queue keybindings:"
        , "  SPC - select song"
        , "  y and d - yank and delete the selected songs"
        , "  p   - paste selected song"
        , "  a   - add selected songs to playlist"
        , ""
        , "Library and Playlists keybindigns:"
        , "  SPC - add song/song collection to queue"
        , "  RET - add song/song collection to queue, and start playing the first one"
        , ""
        , "Playlists keybindigns:"
        , " on playlist conents:"
        , "  e - make playlist editable, press again to get save prompt."
        , "      editing a playlist is the same as editing the queue"
        , " on list of playlists:"
        , "  y and p - copy and paste playlists (with -copy added to the name)"
        , "  d       - delete playlist (with prompt)"
        , ""
        , "Commands:"
        , ":help       - gets you this"
        , ":q          - quits"
        , ":save $name - saves the queue to a playlist called $name"
        ]
  _ -> ["something went wrong."]


handleEventHelp
  :: HState -> BrickEvent Name HumEvent -> EventM Name (Next HState)
handleEventHelp s e = case e of
  VtyEvent vtye -> case vtye of
    EvKey (KChar 'j') [] -> continue $ s & helpScreenL %~ (\x -> if x==1 then 0 else x+1)
    EvKey (KChar 'k') [] -> continue $ s & helpScreenL %~ (\x -> if x==0 then 1 else x-1)
    EvKey (KChar 'n') [] -> continue s
    EvKey (KChar 'N') [] -> continue s
    EvKey (KChar 'G') [] -> continue s
    EvKey (KChar 'g') [] -> continue s
    _                    -> continue s
  _ -> continue s