MenuButtonF

module MenuButtonF(menuButtonF,menuLabelF) where
import ButtonGroupF
import CompOps((>^^=<),(>=^<))
import SpEither(filterRightSP)
import SerCompF(idRightF)
import Defaults(inputFg,inputBg)
--import EitherUtils(stripEither)
import PushButtonF(Click(..))
import ResourceIds(FontName(..))--ColorName(..),
import Spacers(sepS)
import GraphicsF
import FDefaults
import DrawingUtils(g,boxD,spacedD)--fgD,fontD,
import Graphic
import Drawing(DPath)
import Geometry(pP)
import Fudget
import Sizing(Sizing(..))
import GCAttrs()

menuButtonF :: Graphic lbl => FontName -> lbl -> F lbl Click
menuButtonF fname label =
    filterRightSP >^^=< menuButtonGroupF (idRightF lblF >=^< prep)
  where
    lblF = menuLabelF fname label
    toDisp = Left
    through = Right
    prep (Left BMNormal) = toDisp (Left False)
    prep (Left BMInverted) = toDisp (Left True)
    prep (Left BMClick) = through Click
    prep (Right e) = toDisp (Right e)

menuLabelF :: Graphic lbl => FontName -> lbl -> F (Either Bool lbl) (GfxEvent DPath)
menuLabelF fname label =
    lblF >=^< pre
  where
    lblF = graphicsDispF' custom
    custom = setBgColor inputBg . setInitDisp (lblD label) .
	     setGfxEventMask [] . setSizing Dynamic . setBorderWidth 0 .
	     setFgColor inputFg . setFont fname
    lblD label = boxD [spacedD (sepS (pP 3 1)) $ g label]

    pre (Left highlight) = highlightGfx [] highlight
    pre (Right label')  = replaceAllGfx (lblD label')