packages feed

ghc-debug-brick-0.8.0.0: src/GHC/Debug/Brick/Render/Command.hs

{-# LANGUAGE OverloadedStrings #-}
module GHC.Debug.Brick.Render.Command where

import Brick.Types
import Brick.Widgets.Core
import Data.Text (Text)
import qualified Data.Text as Text
import GHC.Debug.Brick.Lib (Version)
import GHC.Debug.Brick.Model (Command (..), isCmdDisabled)
import GHC.Debug.Brick.Namespace
import GHC.Debug.Brick.Render.Key (renderKey)
import GHC.Debug.Brick.Render.Utils (disabledMenuItem)
import qualified Graphics.Vty.Input as Vty

renderCommand :: Version -> Int -> Command -> Widget Name
renderCommand debuggeeVersion actual_width cmd =
  mayDisableMenuItem $
  renderCommandDesc actual_width (commandDescription cmd, commandKey cmd)
  where
  mayDisableMenuItem
    | isCmdDisabled debuggeeVersion cmd = disabledMenuItem
    | otherwise = id

renderCommandDesc :: Int -> (Text, Maybe Vty.Event) -> Widget Name
renderCommandDesc actual_width (desc, k) = txt (desc <> Text.replicate padding " " <> key)
  where
    key = maybe mempty renderKey k
    padding = (actual_width - Text.length desc - Text.length key)