wxHaskell を使ってみる(2)


以下を参考にしました。

module Main where

import Graphics.UI.WX
import Graphics.UI.WXCore 

main :: IO ()
main = start gui

gui :: IO ()
gui = do 
    form    <- frame [text := "コントロール"]
    p       <- panel form []
    textlog <- textCtrl p [enabled := True, wrap := WrapNone] 
    textCtrlMakeLogActiveTarget textlog
    logMessage "ログの記録を開始します。"              

    ok   <- button p [text := "OK", on command := appendText textlog "OKボタンが押されました。\n"]
    quit <- button p [text := "終了", on command := close form]
    let rlabels = ["第一", "第二", "第三"]
    radioBox       <- radioBox p Horizontal rlabels [text := "横並び", on select ::= logSelect]
    disableButton  <- button   p [text := "無効", on command ::= onEnable radioBox]

    set form [layout :=
                container p $
                 column 0
                     [( margin 10 $  row 7 [widget radioBox ,
                                            widget disableButton ,widget ok, widget quit])
                 , hfill $ minsize (sz 400 150) $ widget textlog ]
             , clientSize := sz 400 200 ]
    return ()

        where
            logSelect w = do
                i <- get w selection
                s <- get w (item i)
                logMessage ("selected index: " ++ show i ++ ": " ++ s)

            onEnable w b = do 
                set w [enabled :~ not]
                enable <- get w enabled
                set b [text := (if enable then "無効" else "有効")]