StatusIndicator.hs

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

Plain-text version of StatusIndicator.hs | Valid HTML?