module StatusIndicator where
import Fudgets
data Status = Unknown | InProgress | InError | Good deriving (Eq,Ord)
statusF :: (Eq a,Enum a,Bounded a) => F (a,Status) b
statusF =
nullF >==<
(createDrawStatus $ \ draw ->
let u = draw Unknown
pm = setBgColor bgColor . setInitDisp u . setBorderWidth 0
. setMargin 0
in placerF (horizontalP' 0) $
listF [(l,displayF' pm>=^<draw)|l<-[minBound..maxBound]])
createDrawStatus cont =
fg ["black"] $ \ black ->
fg ["red","#ff3300","#ff0033","#cc0000","grey40","black"] $ \ red ->
fg ["yellow","#ffff33","white"] $ \ yellow ->
fg ["green3","#00cc00","#00c000","green","black"] $ \ green ->
--fg ["blue3","#0000cc","#0000c0","blue","black"] $ \ blue ->
let drawStatus status =
g $ FixCD 12 $
case status of
Unknown -> [noLight]
InProgress -> yellowLight
InError -> redLight
Good -> greenLight
redLight = colLight red
greenLight = colLight green
yellowLight = colLight yellow
colLight fg = [light fg,noLight]
light fg = (fg,[FillArc (Rect 2 9) 0 (64*360)])
noLight = (black,[DrawArc (Rect 2 9) 0 (64*360)])
in cont drawStatus
where
fg colspec cont =
wCreateGCtx rootGCtx (gcFgA colspec) $ cont . gctx2gc
--instance Graphic Status where measureGraphicK = measureGraphicK . drawStatus