packages feed

hzenity-0.1: examples/Simple.hs

{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE OverloadedStrings #-}

module Simple where

import Control.Monad
import Data.Monoid
import System.Process

import Zenity

-- Ask for a name and display a greeting
greeting = do
  Just name <-
    zenity def {title = Just "Name entry"} $
    Entry $ def {text = Just "What's your name?"}
  zenity def $ Info def {text = Just $ "Greetings, " <> name <> "!"}

data SystemCommand
  = Ls
  | Pwd
  | Uname
  deriving (Eq, Show, Read)

-- Ask for a system command to be executed
--
-- `keyedList` allows associating each option with a value of some type. We can
-- then scrutinize the result by matching on the associated values.
systemOperation = do
  op <- keyedList def radio def
    "Select a command"
    [ (Ls, "List files")
    , (Pwd, "Show current directory")
    , (Uname, "OS information")
    ]
  case op of
    Just Ls -> do
      putStrLn "These are the files in the current directory:"
      void $ system "ls"
    Just Pwd -> do
      putStrLn "This is the current directory:"
      void $ system "pwd"
    Just Uname -> do
      putStrLn "This is the OS that's running:"
      void $ system "uname"
    Nothing -> return ()