\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 take an optional resource ID parameter \var{id}
with which one can override the \constant{DLOG} resource used for the
dialog, provided that the dialog items correspond (both type and item
number) to those in the default \constant{DLOG} resource. See source
code for details.

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


\begin{funcdesc}{Message}{str\optional{, id\optional{, ok}}}
Displays a modal dialog with the message text \var{str}, which should be
at most 255 characters long. The button text defaults to ``OK'', but is
set to the string argument \var{ok} if the latter is supplied. Control
is returned when the user clicks the ``OK'' button.
\end{funcdesc}


\begin{funcdesc}{AskString}{prompt\optional{, default\optional{,
    id\optional{, ok\optional{, cancel}}}}}
Asks the user to input a string value via a modal dialog. \var{prompt}
is the prompt message, and the optional \var{default} supplies the
initial value for the string (otherwise \code{""} is used). The text of
the ``OK'' and ``Cancel'' buttons can be changed with the \var{ok} and
\var{cancel} arguments. All strings can be at most 255 bytes long.
\function{AskString()} returns the string entered or \constant{None}
in case the user cancelled.
\end{funcdesc}


\begin{funcdesc}{AskPassword}{prompt\optional{, default\optional{,
    id\optional{, ok\optional{, cancel}}}}}
Asks the user to input a string value via a modal dialog. Like
\function{AskString()}, but with the text shown as bullets. The
arguments have the same meaning as for \function{AskString()}.
\end{funcdesc}


\begin{funcdesc}{AskYesNoCancel}{question\optional{, default\optional{,
    yes\optional{, no\optional{, cancel\optional{, id}}}}}}
Presents a dialog with prompt \var{question} and three buttons labelled
``Yes'', ``No'', and ``Cancel''. Returns \code{1} for ``Yes'', \code{0}
for ``No'' and \code{-1} for ``Cancel''. The value of \var{default} (or
\code{0} if \var{default} is not supplied) is returned when the
\kbd{RETURN} key is pressed. The text of the buttons can be changed with
the \var{yes}, \var{no}, and \var{cancel} arguments; to prevent a button
from appearing, supply \code{""} for the corresponding argument.
\end{funcdesc}


\begin{funcdesc}{ProgressBar}{\optional{title\optional{, maxval\optional{,
    label\optional{, id}}}}}
Displays a modeless progress-bar dialog. This is the constructor for the
\class{ProgressBar} class described below. \var{title} is the text
string displayed (default ``Working...''), \var{maxval} is the value at
which progress is complete (default \code{0}, indicating that an
indeterminate amount of work remains to be done), and \var{label} is
the text that is displayed above the progress bar itself.
\end{funcdesc}


\begin{funcdesc}{GetArgv}{\optional{optionlist\optional{
    commandlist\optional{, addoldfile\optional{, addnewfile\optional{,
    addfolder\optional{, id}}}}}}}
Displays a dialog which aids the user in constructing a command-line
argument list.  Returns the list in \code{sys.argv} format, suitable for
passing as an argument to \function{getopt.getopt()}.  \var{addoldfile},
\var{addnewfile}, and \var{addfolder} are boolean arguments.  When
nonzero, they enable the user to insert into the command line paths to
an existing file, a (possibly) not-yet-existent file, and a folder,
respectively.  (Note: Option arguments must appear in the command line
before file and folder arguments in order to be recognized by
\function{getopt.getopt()}.)  Arguments containing spaces can be
specified by enclosing them within single or double quotes.  A
\exception{SystemExit} exception is raised if the user presses the
``Cancel'' button.

\var{optionlist} is a list that determines a popup menu from which the
allowed options are selected.  Its items can take one of two forms:
\var{optstr} or \code{(\var{optstr}, \var{descr})}.  When present,
\var{descr} is a short descriptive string that is displayed in the
dialog while this option is selected in the popup menu.  The
correspondence between \var{optstr}s and command-line arguments is:

\begin{tableii}{l|l}{textrm}{\var{optstr} format}{Command-line format}
\lineii{\code{x}}
       {\programopt{-x} (short option)}
\lineii{\code{x:} or \code{x=}}
       {\programopt{-x} (short option with value)}
\lineii{\code{xyz}}
       {\longprogramopt{xyz} (long option)}
\lineii{\code{xyz:} or \code{xyz=}}
       {\longprogramopt{xyz} (long option with value)}
\end{tableii}

\var{commandlist} is a list of items of the form \var{cmdstr} or
\code{(\var{cmdstr}, \var{descr})}, where \var{descr} is as above.  The
\var{cmdstr}s will appear in a popup menu.  When chosen, the text of
\var{cmdstr} will be appended to the command line as is, except that a
trailing \character{:} or \character{=} (if present) will be trimmed
off.

\versionadded{2.0}
\end{funcdesc}

\begin{funcdesc}{AskFileForOpen}{
	\optional{message}
	\optional{, typeList}
	\optional{, defaultLocation}
	\optional{, defaultOptionFlags}
	\optional{, location}
	\optional{, clientName}
	\optional{, windowTitle}
	\optional{, actionButtonLabel}
	\optional{, cancelButtonLabel}
	\optional{, preferenceKey}
	\optional{, popupExtension}
	\optional{, eventProc}
	\optional{, previewProc}
	\optional{, filterProc}
	\optional{, wanted}
	}
Post a dialog asking the user for a file to open, and return the file
selected or \constant{None} if the user cancelled.
\var{message} is a text message to display,
\var{typeList} is a list of 4-char filetypes allowable,
\var{defaultLocation} is the pathname, \class{FSSpec} or \class{FSRef}
of the folder to show initially,
\var{location} is the \code{(x, y)} position on the screen where the
dialog is shown,
\var{actionButtonLabel} is a string to show instead of ``Open'' in the
OK button,
\var{cancelButtonLabel} is a string to show instead of ``Cancel'' in the
cancel button,
\var{wanted} is the type of value wanted as a return: \class{str},
\class{unicode}, \class{FSSpec}, \class{FSRef} and subtypes thereof are
acceptable.

\index{Navigation Services}
For a description of the other arguments please see the Apple Navigation
Services documentation and the \module{EasyDialogs} source code.
\end{funcdesc}

\begin{funcdesc}{AskFileForSave}{
	\optional{message}
	\optional{, savedFileName}
	\optional{, defaultLocation}
	\optional{, defaultOptionFlags}
	\optional{, location}
	\optional{, clientName}
	\optional{, windowTitle}
	\optional{, actionButtonLabel}
	\optional{, cancelButtonLabel}
	\optional{, preferenceKey}
	\optional{, popupExtension}
	\optional{, fileType}
	\optional{, fileCreator}
	\optional{, eventProc}
	\optional{, wanted}
	}
Post a dialog asking the user for a file to save to, and return the
file selected or \constant{None} if the user cancelled.
\var{savedFileName} is the default for the file name to save to (the
return value). See \function{AskFileForOpen()} for a description of
the other arguments.
\end{funcdesc}

\begin{funcdesc}{AskFolder}{
	\optional{message}
	\optional{, defaultLocation}
	\optional{, defaultOptionFlags}
	\optional{, location}
	\optional{, clientName}
	\optional{, windowTitle}
	\optional{, actionButtonLabel}
	\optional{, cancelButtonLabel}
	\optional{, preferenceKey}
	\optional{, popupExtension}
	\optional{, eventProc}
	\optional{, filterProc}
	\optional{, wanted}
	}
Post a dialog asking the user to select a folder, and return the
folder selected or \constant{None} if the user cancelled. See
\function{AskFileForOpen()} for a description of the arguments.
\end{funcdesc}


\begin{seealso}
  \seetitle
  [http://developer.apple.com/documentation/Carbon/Reference/Navigation_Services_Ref/]
  {Navigation Services Reference}{Programmer's reference documentation
  for the Navigation Services, a part of the Carbon framework.}
\end{seealso}


\subsection{ProgressBar Objects \label{progressbar-objects}}

\class{ProgressBar} objects provide support for modeless progress-bar
dialogs.  Both determinate (thermometer style) and indeterminate
(barber-pole style) progress bars are supported.  The bar will be
determinate if its maximum value is greater than zero; otherwise it
will be indeterminate.
\versionchanged[Support for indeterminate-style progress bars was
                added]{2.2}

The dialog is displayed immediately after creation. If the dialog's
``Cancel'' button is pressed, or if \kbd{Cmd-.} or \kbd{ESC} is typed,
the dialog window is hidden and \exception{KeyboardInterrupt} is
raised (but note that this response does not occur until the progress
bar is next updated, typically via a call to \method{inc()} or
\method{set()}).  Otherwise, the bar remains visible until the
\class{ProgressBar} object is discarded.

\class{ProgressBar} objects possess the following attributes and
methods:

\begin{memberdesc}[ProgressBar]{curval}
The current value (of type integer or long integer) of the progress
bar.  The normal access methods coerce \member{curval} between
\code{0} and \member{maxval}.  This attribute should not be altered
directly.
\end{memberdesc}

\begin{memberdesc}[ProgressBar]{maxval}
The maximum value (of type integer or long integer) of the progress
bar; the progress bar (thermometer style) is full when \member{curval}
equals \member{maxval}.  If \member{maxval} is \code{0}, the bar will
be indeterminate (barber-pole).  This attribute should not be altered
directly.
\end{memberdesc}

\begin{methoddesc}[ProgressBar]{title}{\optional{newstr}}
Sets the text in the title bar of the progress dialog to
\var{newstr}.
\end{methoddesc}

\begin{methoddesc}[ProgressBar]{label}{\optional{newstr}}
Sets the text in the progress box of the progress dialog to
\var{newstr}.
\end{methoddesc}

\begin{methoddesc}[ProgressBar]{set}{value\optional{, max}}
Sets the progress bar's \member{curval} to \var{value}, and also
\member{maxval} to \var{max} if the latter is provided.  \var{value}
is first coerced between 0 and \member{maxval}.  The thermometer bar
is updated to reflect the changes, including a change from
indeterminate to determinate or vice versa.
\end{methoddesc}

\begin{methoddesc}[ProgressBar]{inc}{\optional{n}}
Increments the progress bar's \member{curval} by \var{n}, or by \code{1}
if \var{n} is not provided.  (Note that \var{n} may be negative, in
which case the effect is a decrement.)  The progress bar is updated to
reflect the change.  If the bar is indeterminate, this causes one
``spin'' of the barber pole.  The resulting \member{curval} is coerced
between 0 and \member{maxval} if incrementing causes it to fall
outside this range.
\end{methoddesc}
