WxGeneric-0.2.0: examples/AlarmMapValue.hs
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses
, TemplateHaskell, UndecidableInstances #-}
module AlarmMapValue where
import Graphics.UI.WxGeneric
import Graphics.UI.SybWidget.MySYB
import Graphics.UI.WX
import Graphics.UI.WXCore
data Minutes = Minutes Int deriving (Show, Eq)
data Alarm = Alarm { name :: String
, timeOfDay :: Minutes
} deriving (Show, Eq)
data UserTime = UserTime { hour :: Int
, minute :: Int
} deriving (Show, Eq)
$(derive [''Minutes,''UserTime,''Alarm])
instance WxGen UserTime
instance WxGen Alarm
instance WxGen Minutes where
mkWid 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) (mkWid (minutes2UserTime m'))
main :: IO ()
main = start $
do f <- frame [ text := "Alarm Map Value" ]
p <- panel f []
en <- genericWidget p (Alarm "My alarm" $ Minutes 117)
b <- button p [ text := "&Print alarm"
, on command := get en widgetValue >>= print ]
set f [ layout := container p $ row 10 [ widget en, widget b ]
, size := Size 275 165 ]