AutoForms-0.4.0: src/Examples/Misc/MVCExample.hs
{-# LANGUAGE FlexibleContexts, FlexibleInstances
, MultiParamTypeClasses, TemplateHaskell, UndecidableInstances #-}
module MVCExample where
import Graphics.UI.AF.WxFormAll
import Graphics.UI.WX as Wx
data Minutes = Minutes Int deriving (Show, Eq)
data Alarm = Alarm { name :: String
, time :: Minutes
} deriving (Show, Eq)
data UserTime = UserTime { hour :: Int
, minute :: Int
} deriving (Show, Eq)
$(derive [''Minutes,''UserTime,''Alarm])
-- Should not be neccesary, but GHC 6.6 requires it. Remove when we stop support for GHC 6.6.
instance ECCreator Alarm
instance (TypePresentation UserTime action comH builder satCxt com, Sat(satCxt UserTime))
=> TypePresentation Minutes action comH builder satCxt com where
mkCom m' =
let minutes2UserTime (Minutes m) = UserTime (m `div` 60) (m `mod` 60)
userTime2Minutes (UserTime h m) = Minutes (60*h + m)
in mapValue userTime2Minutes (const minutes2UserTime) (mkCom (minutes2UserTime m'))
main = startWx "Alarm MVC Example" $ do
{- blockingSettingsDialog (mkCom -}
builderCom (Alarm "My alarm" $ Minutes 117)
return ()