{-# Language OverloadedStrings #-}
module Client.View.RtsStats
( rtsStatsLines
) where
import Client.Image.PackedImage
import Client.Image.Palette
import Control.Lens
import Graphics.Vty.Attributes
import RtsStats
rtsStatsLines :: Maybe Stats -> Palette -> [Image']
rtsStatsLines :: Maybe Stats -> Palette -> [Image']
rtsStatsLines Maybe Stats
Nothing Palette
pal = [Attr -> Text -> Image'
text' (forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Lens' Palette Attr
palError Palette
pal) Text
"Statistics not available"]
rtsStatsLines (Just Stats
stats) Palette
pal
| forall (t :: * -> *) a. Foldable t => t a -> Bool
null [(Text, Text)]
entries = [Attr -> Text -> Image'
text' (forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Lens' Palette Attr
palError Palette
pal) Text
"Statistics empty"]
| Bool
otherwise = forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\Image'
v Image'
l -> Int -> Image' -> Image'
padV Int
wv Image'
v forall a. Semigroup a => a -> a -> a
<> Image'
" " forall a. Semigroup a => a -> a -> a
<> Image'
l) [Image']
valueImages [Image']
labelImages
where
entries :: [(Text, Text)]
entries = Stats -> [(Text, Text)]
statsToEntries Stats
stats
labelImages :: [Image']
labelImages = forall a b. (a -> b) -> [a] -> [b]
map (Attr -> Text -> Image'
text' (forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Lens' Palette Attr
palLabel Palette
pal) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> a
fst) [(Text, Text)]
entries
valueImages :: [Image']
valueImages = forall a b. (a -> b) -> [a] -> [b]
map (Attr -> Text -> Image'
text' Attr
defAttr forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> b
snd) [(Text, Text)]
entries
wv :: Int
wv = forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum (Int
0 forall a. a -> [a] -> [a]
: forall a b. (a -> b) -> [a] -> [b]
map Image' -> Int
imageWidth [Image']
valueImages)
padV :: Int -> Image' -> Image'
padV Int
n Image'
img = Attr -> String -> Image'
string Attr
defAttr (forall a. Int -> a -> [a]
replicate (Int
n forall a. Num a => a -> a -> a
- Image' -> Int
imageWidth Image'
img) Char
' ') forall a. Semigroup a => a -> a -> a
<> Image'
img