module Main where

import TestSample ( myConfig, Config(..) )
import Control.EventDriven ( initializeTalker, putEvent_ )

import Graphics.UI.Gtk
import Data.IORef
import Data.Maybe

putEvent__ tkref ev = do
  tk  <- readIORef tkref
  mtk <- putEvent_ ( ebind myConfig ) ( output myConfig ) tk ev
  case mtk of
       Nothing  -> mainQuit
       Just ntk -> writeIORef tkref ntk

main :: IO ()
main = do
  talker <- newIORef $ initializeTalker ( initV myConfig ) ( kbind myConfig )
  initGUI
  window <- windowNew
  vbox   <- vBoxNew True 1
  succB  <- buttonNew
  showB  <- buttonNew
  quitB  <- buttonNew
  set window [ containerChild := vbox ]
  boxPackStart vbox succB  PackNatural 0
  boxPackStart vbox showB  PackNatural 0
  boxPackStart vbox quitB  PackNatural 0
  set succB  [ buttonLabel := "succ" ]
  set showB  [ buttonLabel := "show" ]
  set quitB  [ buttonLabel := "quit" ]
  onClicked succB  $ do
    putStrLn "succ"
    putEvent__ talker "succ"
  onClicked showB  $ do
    putStrLn "show"
    putEvent__ talker "show"
  onClicked quitB  $ do
    putStrLn "quit"
    putEvent__ talker "quit"
  onDestroy window mainQuit
  widgetShowAll window
  mainGUI
