import Graphics.UI.Gtk import Control.Monad main = do initGUI window <- windowNew set window [windowTitle := "Graphical user input", containerBorderWidth := 10] vb <- vBoxNew False 0 containerAdd window vb hb1 <- hBoxNew False 0 boxPackStart vb hb1 PackNatural 0 hb2 <- hBoxNew False 0 boxPackStart vb hb2 PackNatural 0 lab1 <- labelNew (Just "Enter number 75000") boxPackStart hb1 lab1 PackNatural 0 nrfield <- entryNew entrySetText nrfield "75000" boxPackStart hb1 nrfield PackNatural 5 strfield <- entryNew boxPackEnd hb2 strfield PackNatural 5 lab2 <- labelNew (Just "Enter a text") boxPackEnd hb2 lab2 PackNatural 0 accbox <- hBoxNew False 0 boxPackStart vb accbox PackNatural 5 im <- imageNewFromStock stockApply IconSizeButton acceptButton <- buttonNewWithLabel "Accept" buttonSetImage acceptButton im boxPackStart accbox acceptButton PackRepel 0 txtstack <- statusbarNew boxPackStart vb txtstack PackNatural 0 id <- statusbarGetContextId txtstack "Line" widgetShowAll window onEntryActivate nrfield (showStat nrfield txtstack id) onEntryActivate strfield (showStat strfield txtstack id) onPressed acceptButton $ do g <- entryGetText nrfield if g=="75000" then widgetDestroy window else do msgid <- statusbarPush txtstack id "You didn't enter 75000. Try again" return () onDestroy window mainQuit mainGUI showStat :: Entry -> Statusbar -> ContextId -> IO () showStat fld stk id = do txt <- entryGetText fld let mesg = "You entered \"" ++ txt ++ "\"" msgid <- statusbarPush stk id mesg return ()