\section{\module{EasyDialogs} ---
         Basic Macintosh dialogs}

\declaremodule{standard}{EasyDialogs}
  \platform{Mac}
\modulesynopsis{Basic Macintosh dialogs.}


The \module{EasyDialogs} module contains some simple dialogs for
the Macintosh.  All routines have an optional parameter \var{id} with
which you can override the DLOG resource used for the dialog, as long
as the item numbers correspond. See the source for details.

The \module{EasyDialogs} module defines the following functions:


\begin{funcdesc}{Message}{str}
A modal dialog with the message text \var{str}, which should be at
most 255 characters long, is displayed. Control is returned when the
user clicks ``OK''.
\end{funcdesc}

\begin{funcdesc}{AskString}{prompt\optional{, default}}
Ask the user to input a string value, in a modal dialog. \var{prompt}
is the prompt message, the optional \var{default} arg is the initial
value for the string. All strings can be at most 255 bytes
long. \function{AskString()} returns the string entered or \code{None}
in case the user cancelled.
\end{funcdesc}

\begin{funcdesc}{AskPassword}{prompt\optional{, default}}
Ask the user to input a string value, in a modal dialog. Like
\method{AskString}, but with the text shown as bullets. \var{prompt}
is the prompt message, the optional \var{default} arg is the initial
value for the string. All strings can be at most 255 bytes
long. \function{AskString()} returns the string entered or \code{None}
in case the user cancelled.
\end{funcdesc}

\begin{funcdesc}{AskYesNoCancel}{question\optional{, default}}
Present a dialog with text \var{question} and three buttons labelled
``yes'', ``no'' and ``cancel''. Return \code{1} for yes, \code{0} for
no and \code{-1} for cancel. The default return value chosen by
hitting return is \code{0}. This can be changed with the optional
\var{default} argument.
\end{funcdesc}

\begin{funcdesc}{ProgressBar}{\optional{title \optional{, maxval\optional{,label}}}}
Display a modeless progress dialog with a thermometer bar. \var{title}
is the text string displayed (default ``Working...''), \var{maxval} is
the value at which progress is complete (default
\code{100}). \var{label} is the text that is displayed over the progress
bar itself.  The returned object has two methods,
\code{set(\var{value})}, which sets the value of the progress bar, and
\code{label(\var{text})}, which sets the text of the label. The bar
remains visible until the object returned is discarded.

The progress bar has a ``cancel'' button. [NOTE: how does the cancel
button behave?]
\end{funcdesc}
