packages feed

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 ()