namespace itk {
namespace simple {
/** \page CommandPage Commands and Events for SimpleITK

SimpleITK has the ability to add commands or callbacks as observers of
events that may occur during data processing. This feature can be used to add
progress reporting to a console, to monitor the process of optimization,
to abort a process, or to improve the integration of
SimpleITK into Graphical User Interface event queues.

\section Events

Events are a simple enumerated type in SimpleITK, represented by
the #EventEnum type. More information about each event type can be
found in the documentation for the enum. All SimpleITK filters, including the reading
and writing ones, are derived from the ProcessObject class which has
support for events. SimpleITK utilizes the native ITK event system
but has simpler events and methods to add an observer or commands. The goal
is to provide a simpler interface more suitable for scripting
languages.

\section Commands

The command design pattern is used to allow user code to be executed
when an event occurs. It is encapsulated in the Command class. The
Command class provides a virtual Execute method to be overridden in
derived classes. Additionally, SimpleITK provides internal reference
tracking between the ProcessObject and the Command. This reference tracking
allows an object to be created on the stack or dynamically allocated, without
additional burden when the object

\subsection CommandDirector Command Directors for Wrapped Languages

SimpleITK uses SWIG's director feature to enable wrapped languages to
derive classes from the Command class.  Thus a user may  override the
Command class's Execute method for custom call-backs. The following
languages support deriving classes from the Command class:

\subsubsection CommandPython
\snippet  FilterProgressReporting.py python director command

\subsubsection CommandCSharp
\snippet  FilterProgressReporting.cs csharp director command

\subsubsection CommandRuby
\snippet  FilterProgressReporting.rb ruby director command


\subsection CommandFunction Command Functions and Lambdas for Wrapped Languages

Not all scripting languages are naturally object oriented, and it is
often easier to simply define a callback inline with a lambda
function. The following language supports inline function definitions
for functions for the ProcessObject::AddCommand method:

\subsubsection CommandFunctionPython
\snippet FilterProgressReporting.py python lambda command

\subsubsection CommandFunctionR
\snippet FilterProgressReporting.R R lambda command


*/
}
}
