module Graphics.UI.AF.General.Misc ( enabledWhen, enabledWhen2 , affect ) where import Graphics.UI.AF.General.AutoForm enabledWhen :: AutoForm action comH builder satCxt com => comH b -> (b -> Bool) -> comH a -> builder (comH a) enabledWhen source ableFun target = do let setEnabled' = getValue source >>= setEnabled target . ableFun addListener setEnabled' source postponeAction setEnabled' return target enabledWhen2 :: AutoForm action comH builder satCxt com => comH b -> comH c -> (b -> c -> Bool) -> comH a -> builder (comH a) enabledWhen2 source1 source2 ableFun target = do let setEnabled' = do source1' <- getValue source1 source2' <- getValue source2 setEnabled target $ ableFun source1' source2' addListener setEnabled' source1 addListener setEnabled' source2 postponeAction setEnabled' return target affect :: AutoForm action comH builder satCxt com => (a -> b) -> comH a -> comH b -> builder () affect f source target = do let affectTarget = getValue source >>= setValue target . f addListener affectTarget source postponeAction affectTarget