\section{Standard Module \sectcode{EasyDialogs}}
\label{module-EasyDialogs}
\stmodindex{EasyDialogs}

The \code{EasyDialogs} module contains some simple dialogs for
the Macintosh, modelled after the \code{stdwin} dialogs with similar
names. 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 \code{EasyDialogs} module defines the following functions:

\setindexsubitem{(in module EasyDialogs)}

\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 promt message, the optional \var{default} arg is the initial
value for the string. All strings can be at most 255 bytes
long. \var{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{label\, maxval}}
Display a modeless progress dialog with a thermometer bar. \var{Label}
is the textstring displayed (default ``Working...''), \var{maxval} is
the value at which progress is complete (default 100). The returned
object has one method, \code{set(value)}, which sets the value of the
progress bar. The bar remains visible until the object returned is
discarded.

The progress bar has a ``cancel'' button, but it is currently
non-functional.
\end{funcdesc}

Note that \code{EasyDialogs} does not currently use the notification
manager. This means that displaying dialogs while the program is in
the background will lead to unexpected results and possibly
crashes. Also, all dialogs are modeless and hence expect to be at the
top of the stacking order. This is true when the dialogs are created,
but windows that pop-up later (like a console window) may also result
in crashes.
