AutoForms-0.4.0: src/Examples/Misc/WxEmbedded.hs
{-# LANGUAGE FlexibleContexts, FlexibleInstances
, MultiParamTypeClasses, TemplateHaskell, UndecidableInstances #-}
module WxEmbedded where
import Graphics.UI.WX
import Graphics.UI.AF.AFWx as AF -- cannot do qualified as `derive` then complains
data Counter = Counter Int deriving (Show, Eq)
$(derive [''Counter])
-- Should not be neccesary, but GHC 6.6 requires it. Remove when we stop support for GHC 6.6.
instance ECCreator Counter
main :: IO ()
main = start $
do w <- frame [text := "Counter"]
p <- panel w []
wid <- AF.makeWidget (Counter 117) p []
upButton <- button p [ text := "Up", enabled := True
, on command := set wid [ value :~ \(Counter val) -> Counter $ val + 1 ]
]
downButton <- button p [ text := "Down", enabled := True
, on command := set wid [ value :~ \(Counter val) -> Counter $ val - 1 ]
]
restoreButton <- button p [ text := "Restore", enabled := True
, on command := set wid [ value := Counter 117 ]
]
disableButton <- button p [ text := "Disable", enabled := True
, on command := set wid [ enabled := False ]
]
enableButton <- button p [ text := "Enable", enabled := True
, on command := set wid [ enabled := True ]
]
set wid [ on command := do val <- get wid value
putStr $ "Direct input by user: " ++ show val ++ "\n"
]
set p [ layout := column 10 [ widget wid
, row 5 [glue, widget upButton, widget downButton]
, row 5 [glue, widget restoreButton]
, row 5 [glue, widget disableButton, widget enableButton]
]
]
set w [ layout := fill $ widget p ]