{-# LANGUAGE OverloadedStrings #-} import Graphics.UI.Gtk import qualified Control.Monad.IO.Class as Cl import qualified RealCalc main :: IO () main = do _ <- initGUI w <- windowNew set w [ windowDecorated := False, windowResizable := False ] grid <- gridNew input <- entryNew output <- entryNew set output [ entryEditable := False ] clip <- Cl.liftIO $ clipboardGet selectionPrimary gridAttach grid input 0 0 1 1 gridAttach grid output 0 1 1 1 containerAdd w grid _ <- w `on` deleteEvent $ do Cl.liftIO mainQuit return False _ <- input `on` keyReleaseEvent $ do k <- eventKeyName let quit = Cl.liftIO mainQuit case k of "Escape" -> quit "Return" -> quit _ -> return () s <- Cl.liftIO $ entryGetText input case RealCalc.calculate s of Nothing -> return () Just r -> do Cl.liftIO $ clipboardSetText clip r Cl.liftIO $ set output [ entryText := r ] return False widgetShowAll w mainGUI