packages feed

sandwich-0.1.0.9: src/Test/Sandwich/Formatters/TerminalUI/AttrMap.hs

{-# LANGUAGE OverloadedStrings #-}
-- |

module Test.Sandwich.Formatters.TerminalUI.AttrMap where

import Brick
import Brick.Widgets.ProgressBar
import qualified Graphics.Vty as V
import Test.Sandwich.Types.RunTree
import Test.Sandwich.Types.Spec


mainAttrMap :: AttrMap
mainAttrMap = attrMap V.defAttr [
  -- (listAttr, V.white `on` V.blue)
   -- (listSelectedAttr, V.blue `on` V.white)
  -- (listSelectedAttr, bg (V.Color240 $ V.rgbColorToColor240 0 1 0))
  -- (selectedAttr, bg (V.Color240 $ V.rgbColorToColor240 0 1 0))

  -- Top bar
  (visibilityThresholdNotSelectedAttr, fg midGray)
  , (visibilityThresholdSelectedAttr, fg solarizedBase2)

  -- Statuses
  -- , (notStartedAttr, fg V.)
  , (runningAttr, fg V.blue)
  , (pendingAttr, fg V.yellow)
  , (successAttr, fg V.green)
  , (failureAttr, fg V.red)
  , (totalAttr, fg solarizedCyan)

  -- Logging
  , (debugAttr, fg V.blue), (infoAttr, fg V.yellow), (warnAttr, fg V.red), (errorAttr, fg V.red), (otherAttr, V.defAttr)
  , (logTimestampAttr, fg midGray)
  , (logFilenameAttr, fg solarizedViolet)
  , (logModuleAttr, fg solarizedMagenta)
  , (logPackageAttr, fg solarizedGreen)
  , (logLineAttr, fg solarizedCyan)
  , (logChAttr, fg solarizedOrange)
  , (logFunctionAttr, fg solarizedMagenta)

  -- Progress bar
  , (progressCompleteAttr, bg (V.Color240 235))
  , (progressIncompleteAttr, bg (V.Color240 225))

  -- Main list
  , (toggleMarkerAttr, fg midGray)
  , (openMarkerAttr, fg midGray)
  , (visibilityThresholdIndicatorMutedAttr, fg $ grayAt 50)
  , (visibilityThresholdIndicatorAttr, fg $ grayAt 150)

  -- Hotkey stuff
  , (hotkeyAttr, fg V.blue)
  , (disabledHotkeyAttr, fg midGray)
  , (hotkeyMessageAttr, fg brightWhite)
  , (disabledHotkeyMessageAttr, fg brightGray)

  -- Exceptions and pretty printing
  , (expectedAttr, fg midWhite)
  , (sawAttr, fg midWhite)
  , (integerAttr, fg solarizedMagenta)
  , (floatAttr, fg solarizedMagenta)
  , (charAttr, fg solarizedCyan)
  , (stringAttr, fg solarizedYellow)
  , (dateAttr, fg solarizedBase2)
  , (timeAttr, fg solarizedBase1)
  , (quoteAttr, fg solarizedBase1)
  , (slashAttr, fg solarizedViolet)
  , (negAttr, fg solarizedViolet)
  , (listBracketAttr, fg solarizedOrange) -- TODO: make green?
  , (tupleBracketAttr, fg solarizedGreen)
  , (braceAttr, fg solarizedGreen)
  , (ellipsesAttr, fg solarizedBase0)
  , (recordNameAttr, fg solarizedRed)
  , (fieldNameAttr, fg solarizedYellow)
  , (constructorNameAttr, fg solarizedViolet)
  ]

-- selectedAttr :: AttrName
-- selectedAttr = "list_line_selected"

visibilityThresholdNotSelectedAttr :: AttrName
visibilityThresholdNotSelectedAttr = "visibility_threshold_not_selected"

visibilityThresholdSelectedAttr :: AttrName
visibilityThresholdSelectedAttr = "visibility_threshold_selected"

runningAttr :: AttrName
runningAttr = "running"

notStartedAttr :: AttrName
notStartedAttr = "not_started"

pendingAttr :: AttrName
pendingAttr = "pending"

totalAttr :: AttrName
totalAttr = "total"

successAttr :: AttrName
successAttr = "success"

failureAttr :: AttrName
failureAttr = "failure"

toggleMarkerAttr :: AttrName
toggleMarkerAttr = "toggleMarker"

openMarkerAttr :: AttrName
openMarkerAttr = "openMarker"

visibilityThresholdIndicatorAttr :: AttrName
visibilityThresholdIndicatorAttr = "visibilityThresholdIndicator"

visibilityThresholdIndicatorMutedAttr :: AttrName
visibilityThresholdIndicatorMutedAttr = "visibilityThresholdMutedIndicator"

hotkeyAttr, disabledHotkeyAttr, hotkeyMessageAttr, disabledHotkeyMessageAttr :: AttrName
hotkeyAttr = "hotkey"
disabledHotkeyAttr = "disableHotkey"
hotkeyMessageAttr = "hotkeyMessage"
disabledHotkeyMessageAttr = "disabledHotkeyMessage"

chooseAttr :: Status -> AttrName
chooseAttr NotStarted = notStartedAttr
chooseAttr (Running {}) = runningAttr
chooseAttr (Done _ _ (Success {})) = successAttr
chooseAttr (Done _ _ (Failure (Pending {}))) = pendingAttr
chooseAttr (Done _ _ (Failure {})) = failureAttr
chooseAttr (Done _ _ DryRun) = notStartedAttr
chooseAttr (Done _ _ Cancelled) = failureAttr

-- * Logging and callstacks

debugAttr, infoAttr, warnAttr, errorAttr, otherAttr :: AttrName
debugAttr = "log_debug"
infoAttr = "log_info"
warnAttr = "log_warn"
errorAttr = "log_error"
otherAttr = "log_other"

logTimestampAttr :: AttrName
logTimestampAttr = "log_timestamp"

logFilenameAttr, logModuleAttr, logPackageAttr, logLineAttr, logChAttr :: AttrName
logFilenameAttr = "logFilename"
logModuleAttr = "logModule"
logPackageAttr = "logPackage"
logLineAttr = "logLine"
logChAttr = "logCh"
logFunctionAttr = "logFunction"

-- * Exceptions and pretty printing

expectedAttr, sawAttr :: AttrName
expectedAttr = "expected"
sawAttr = "saw"

integerAttr, timeAttr, dateAttr, stringAttr, charAttr, floatAttr, quoteAttr, slashAttr, negAttr :: AttrName
listBracketAttr, tupleBracketAttr, braceAttr, ellipsesAttr, recordNameAttr, fieldNameAttr, constructorNameAttr :: AttrName
integerAttr = "integer"
floatAttr = "float"
charAttr = "char"
stringAttr = "string"
dateAttr = "date"
timeAttr = "time"
quoteAttr = "quote"
slashAttr = "slash"
negAttr = "neg"
listBracketAttr = "listBracket"
tupleBracketAttr = "tupleBracket"
braceAttr = "brace"
ellipsesAttr = "ellipses"
recordNameAttr = "recordName"
fieldNameAttr = "fieldName"
constructorNameAttr = "fieldName"

-- * Colors

solarizedBase03 = V.rgbColor 0x00 0x2b 0x36
solarizedBase02 = V.rgbColor 0x07 0x36 0x42
solarizedBase01 = V.rgbColor 0x58 0x6e 0x75
solarizedbase00 = V.rgbColor 0x65 0x7b 0x83
solarizedBase0 = V.rgbColor 0x83 0x94 0x96
solarizedBase1 = V.rgbColor 0x93 0xa1 0xa1
solarizedBase2 = V.rgbColor 0xee 0xe8 0xd5
solarizedBase3 = V.rgbColor 0xfd 0xf6 0xe3
solarizedYellow = V.rgbColor 0xb5 0x89 0x00
solarizedOrange = V.rgbColor 0xcb 0x4b 0x16
solarizedRed = V.rgbColor 0xdc 0x32 0x2f
solarizedMagenta = V.rgbColor 0xd3 0x36 0x82
solarizedViolet = V.rgbColor 0x6c 0x71 0xc4
solarizedBlue = V.rgbColor 0x26 0x8b 0xd2
solarizedCyan = V.rgbColor 0x2a 0xa1 0x98
solarizedGreen = V.rgbColor 0x85 0x99 0x00

midGray = grayAt 50
brightGray = grayAt 80
midWhite = grayAt 140
brightWhite = grayAt 200

grayAt level = V.rgbColor level level level
-- grayAt level = V.Color240 $ V.rgbColorToColor240 level level level