]> Creatis software - bbtk.git/blobdiff - kernel/doc/bbtkUsersGuide/bbtkUsersGuide.tex
*** empty log message ***
[bbtk.git] / kernel / doc / bbtkUsersGuide / bbtkUsersGuide.tex
index 22f585686e46336242ba2534a89fd9dea4a46367..906cc5412e1eaf10a22bd47fe2bb69faabc83dde 100644 (file)
@@ -3,65 +3,6 @@
 \input{config.tex}
 
 
-\def\todo{\scriptsize\fbox{\bf TODO !!}\normalsize}
-\def\x{\bm{x}}
-\def\BBTK{{\xspace}The {\bf Black Box Toolkit} }
-\def\bbtk{{\xspace}$\texttt{bbtk}$ }
-\def\bbi{{\xspace}$\texttt{bbi}$ }
-\def\bbStudio{{\xspace}$\texttt{bbStudio}$ }
-\def\bbfy{{\xspace}$\texttt{bbfy}$ }
-\def\bbdoc{{\xspace}$\texttt{bbdoc}$ }
-\def\bbCreatePackage{{\xspace}$\texttt{bbCreatePackage}$ }
-
-\def\bb{{\xspace}$\texttt{bb}$ }
-%\def\bbp{{\xspace}$\texttt{bbp}$\xspace}
-
-\def\cmake{{\xspace}$\texttt{cmake}$ }
-
-\def\C{{\xspace}$\texttt{C}$ }
-\def\CPP{{\xspace}$\texttt{C++}$ }
-
-\def\xml{{\xspace}$\texttt{xml}$ }
-
-\def\itk{{\xspace}$\texttt{itk}$ }
-\def\vtk{{\xspace}$\texttt{vtk}$ }
-\def\gdcm{{\xspace}$\texttt{gdcm}$ }
-\def\gsmis{{\xspace}$\texttt{gsmis}$ }
-\def\wx{{\xspace}$\texttt{wxWidgets}$ }
-
-\def\lin{{\xspace}\textit{Linux} }
-\def\win{{\xspace}\textit{Windows} }
-
-% the same macros with no space at the end
-
-\def\BBTKns{{\xspace}The {\bf Black Box Toolkit}}
-\def\bbtkns{{\xspace}$\texttt{bbtk}$}
-\def\bbins{{\xspace}$\texttt{bbi}$}
-\def\bbfyns{{\xspace}$\texttt{bbfy}$}
-\def\bbdocns{{\xspace}$\texttt{bbdoc}$}
-\def\bbCreatePackagens{{\xspace}$\texttt{bbCreatePackage}$}
-
-\def\bbns{{\xspace}$\texttt{bb}$}
-%\def\bbp{{\xspace}$\texttt{bbp}$\xspace}
-
-\def\cmakens{{\xspace}$\texttt{cmake}$}
-
-\def\Cns{{\xspace}$\texttt{C}$}
-\def\CPPns{{\xspace}$\texttt{C++}$}
-
-\def\xmlns{{\xspace}$\texttt{xml}$}
-
-\def\itkns{{\xspace}$\texttt{itk}$}
-\def\vtkns{{\xspace}$\texttt{vtk}$}
-\def\gdcmns{{\xspace}$\texttt{gdcm}$}
-\def\gsmisns{{\xspace}$\texttt{gsmis}$}
-\def\wxns{{\xspace}$\texttt{wxWidgets}$}
-
-\def\linns{{\xspace}\textit{Linux}}
-\def\winns{{\xspace}\textit{Windows}}
-
-
-
 
 \begin{document}
 \begin{center}
 {\Huge User's Guide}
 \vspace{1cm}
 
-\bbtk version 1.0
+\bbtk version \bbtkVersion
 \vspace{0.5cm}
 
 
-Last modified on : September 16, 2008 \\
+Last modified on : October 9, 2008 \\
 Generated on : \today 
 \vspace{0.5cm}
 
@@ -111,9 +52,12 @@ It's a part of the \texttt{Creatools suite} composed mainly of :
 \begin{verbatim}
  bbtk
  creaContours
- creaReaders
- creaViewers
+ creaImageIO
+ creaLib
  gdcm 
+\end{verbatim}
+which depend on the OpenSource libraries: 
+\begin{verbatim}
  itk
  vtk
  wxWidgets
@@ -187,7 +131,7 @@ which allows to manipulate packages and boxes very easily in symbolic way.
 \BBTK provides one : \bbi (the Black Box Interpreter). 
 \item {\bf Automatic documentation} of existing packages. 
 \texttt{html} documentation of packages is proposed by 
-\bbins.
+\bbStudions.
 \end{itemize}
 
 Finally, these different components allow {\bf efficient} :
@@ -216,25 +160,23 @@ have been written by different persons, using different libraries, etc.
       \item {\bf\emph{vtk}} : the basic images and surfaces processing and vizualization package, based on the \vtk library.
       \item {\bf\emph{wxvtk}} : widget boxes based on the \vtk library (2D and 3D vizualization and
       interaction).
-      \item {\bf\emph{itkvtk}} : special boxes (adaptors) to convert \itk structures into \vtk structures and conversally.
-      \item {\bf\emph{creaReaders}} : Provides hight level widgets to read images, including DICOM.
+      %\item {\bf\emph{creaImageIO}} : Provides hight level widgets to read images, including DICOM.
       \item {\bf\emph{toolsbbtk}} : Tools for bbtk administration and package development..      
     \end{itemize}
   \item A {\bf\emph{Developement environment}}, called \bbStudio, which provides
     \begin{itemize}
-      \item An online {\bf\emph{script editor}}
-      \item A powerfull {\bf\emph{Help environment}}, called \bbPackageBrowser
-        whith integrated
+      \item An online {\bf\emph{script editor and interpretor}}
+      \item A powerfull html {\bf\emph{Help environment}},whith integrated :       
         \begin{itemize}
           \item Online documentation scaning
           \item Retreiving boxes on various criterions
           \item Checking Demo and examples
         \end{itemize}
-
-      \item An {\bf\emph{interpreter}}, called \bbins, which allows to 
+      \end{itemize}
+      \item An standalone {\bf\emph{interpreter}}, called \bbins, which allows to 
           load black box packages and to define and execute 
-          processing chains by connecting various black boxes of the already loaded packages.
-      \item {\bf\emph{Utilities}} :
+          processing chains by connecting various black boxes.
+      \item {\bf\emph{Various Development Utilities}} :
          \begin{itemize}
             \item \bbfy generates the \CPP code of a black box from a 
                description file written in \texttt{xml}.
@@ -243,9 +185,12 @@ have been written by different persons, using different libraries, etc.
                 %author, description, inputs, outputs, and so on).
             \item \bbCreatePackage allows to create the basic file architecture 
                to start the development of a new black box package.
-         \end{itemize} 
-    \end{itemize}
+            \item \texttt{bbs2cpp} translates a \texttt{.bbs} script into a \CPP file.
+            \item \texttt{bbc} that              
+         \end{itemize}
+      \item A full {\bf\emph{documentation}} printable (pdf), browsable (html), queryable thru keywords.         
 \end{itemize}
+
 The general architecture of \BBTK 
 is shown in figure \ref{bb-architecture}.
 
@@ -259,35 +204,24 @@ is shown in figure \ref{bb-architecture}.
 \newpage
 
 % ==========================================
-\subsection{Structure of this guide}
+\section{Getting started with bbStudio}
 % ==========================================
 
-This guide is divided into three parts. 
-
-The first part (\ref{bbStudio}) is a brief presentation of the very intuitive Development
-environment, \bbStudions.
-
-The second part (\ref{bb0}) 
-is devoted to the use of the \emph{black box interpreter} \bbins. 
-This is the highest level of use of the toolkit, which 
-allows to create and execute processing chains by connecting 
-black boxes of existing packages. 
-
-The third part (\ref{cpp}) explains how to 
-use the black box toolkit framework in \CPP code, 
-typically to develop large applications which 
-involve complex graphical interfaces.
-
-
 % ==========================================
 % ==========================================
 % ==========================================
 % ==========================================
 % ==========================================
 % ==========================================
-\vspace{0.5cm}\hrule
-\section{The Development environment (bbStudio)}
-\label{bbStudio}
+
+% ==========================================
+\subsection{The interface}
+% ==========================================
+
+
+%\vspace{0.5cm}\hrule
+%\section{The Development environment (bbStudio)}
+%\label{bbStudio}
 
 Just run it, typing in a console \bbStudio 
 or clicking on its icon or its menu entry.
@@ -305,6 +239,9 @@ You'll get something like in figure
 \ref{bbi-fig-bbStudio-gui-start}
 (the exact appearance of \bbStudio is Operating System and \bbtk version dependent)
 
+\newpage
+
+
 \begin{figure}[!ht]
 \caption{\label{bbi-fig-bbStudio-gui-start}The bbStudio Development environment interface at start time}
 \begin{center}
@@ -325,13 +262,8 @@ Let's have a look at the resized window :
 \end{center}
 \end{figure}
 
-You can see four parts :
-\begin{itemize}  
-  \item {\bf{Files}}
-  \item {\bf{Messages}}
-  \item {\bf{Command}}
-  \item {\bf{Help}}
-\end{itemize} 
+You can see four parts : \texttt{Files}, \texttt{Messages},
+ \texttt{Command}, \texttt{Help}.\\
 
 The stuff is written using the Advanced User Interface library of wxWidgets,
 whose 'docking manager' allows windows and toolbars to be floated/docked 
@@ -339,28 +271,47 @@ onto a frame.\\
 Please don't use this feature at learning time (the snapshots of this document
  wouldn't match with your screen ...)
 
-\subsection{'Files' part}
+\subsubsection{'Files' part}
 \label{bbi-FilesPart}
 
 It's the .bbs script editor.\\
 If you load a file holding a script, it will be displayed here, and you'll be
 able to modify it, to save it, to save-as it, to run it, using the
-lower toolbar 
+lower toolbar (see figure : \ref{lowertoolbar})
+
+\begin{figure}[!ht]
+\caption{\label{lowertoolbar}The lower tool bar}
+\begin{center}
+\includegraphics[width=0.7\textwidth]{lowertoolbar.png}
+\end{center}
+\end{figure}
+
+
+ \begin{itemize}
+   \item {\bf\emph{New file}} : Create a new file to hold a script
+   \item {\bf\emph{Open file}} : Open an already existing file holding a script 
+   \item {\bf\emph{Close file}} : Close a file holding a script
+   \item {\bf\emph{Save file}} : Save he current file (if modified)
+   \item {\bf\emph{Save file as}} : Save he current file under a different name
+   \item {\bf\emph{Run file}} : Execute the script you just loaded/modified/written
+   \item {\bf\emph{cursor position}} : column number : line number   
+ \end{itemize}
 
 
-\subsection{'Messages' part}
+\subsubsection{'Messages' part}
 \label{bbi-MessagesPart}
 
 Two kinds of messages will be output here:\\
 System messages : produced by the kernel, in case of a user mistyping, or an execution error\\
-Script messages : produced by the \bbtk equivalent of \texttt{printf} or \texttt{std::cout} in user programs
+Script messages : produced by the \bbtk equivalent of \texttt{printf} 
+or \texttt{std::cout} in user programs
 
-\subsection{'Command' part}
+\subsubsection{'Command' part}
 \label{bbi-CommandPart}
 
 This is where user will type his requirements.
 
-\subsection{'Help Contents' part}
+\subsubsection{'Help Contents' part}
 \label{bbi-HelpContentsPart}
 
 The 'Help Contents' part of \bbStudio is used to browse the html help of \BBTK.
@@ -387,192 +338,39 @@ All the entries of the starting page are self-explanatory :
    \end{itemize}
         
    \item {\bf\emph{Boxes}} : Box retrieving on various criterions :
-      \begin{itemize}
-        \item {\bf\emph{By name}} (Alphabetical list)
-        \item {\bf\emph{By package}} (see table : \ref{bbi-list_of_packages})
-        \item {\bf\emph{By category}} (see table : \ref{categories})
-        \item {\bf\emph{Adaptors}} Used internaly to perform type conversions (not end user intended)     
-      \end{itemize}
+   \begin{itemize} 
+    \item {\bf\emph{ \texttt{By name}}} (Alphabetical list), 
+    \item {\bf\emph{    \texttt{By package}}}, 
+     \item {\bf\emph{   \texttt{By category}}}.
+   \end{itemize} 
+   
+        A special hidden Box category, called \texttt{{Adaptors}} exists. \\ 
+       They are used internaly to perform type conversions. Thought there are not end user intended, an aware user may query them.     
+
       
  \end{itemize}
 
-% ==========================================
-\begin{table}[!ht]
-\caption{\label{bbi-list_of_packages} List of bbtk supplied packages.}
-\small
-\begin{tabular}{|lp{10cm}|}
-\hline
-Package         & What it's used for \\ \hline
-\texttt{std}    & : the 'standard' package including basic useful boxes \\ \hline 
-\texttt{wx}     & : basic graphical interface elements (widgets : sliders, buttons, etc.) based on the \texttt{wxWidgets} library \\ \hline 
-\itk    & : the basic image processing package, based on the \itk library. (without description)\\ \hline 
-\vtk    & : prints help on the package \texttt{package-name} and its boxes (with brief description). The package must have been previously loaded\\ \hline 
-\texttt{wxvtk}  & : widget boxes based on the \vtk library.\\ \hline 
-\texttt{itkvtk} & : adaptors to convert \itk structures into \vtk structures and conversally.\\ \hline 
-\texttt{creaReaders} & : provides high level widgets to read images including DICOM.\\ \hline 
-\texttt{toolsbbtk} & : Tools for bbtk administration and package development.\\ \hline 
-
-\end{tabular}
-\end{table}
-% ==========================================
-
-
-
 
 % ==========================================
-\begin{table}[!ht]
-\caption{\label{categories} \texttt{Black Box} categories}
-\small
-\begin{tabular}{|lp{10cm}|}
-\hline
- \texttt{Category name}  & : Meaning                                          \\ \hline \\ \hline
- \texttt{adaptor}        & : Adaptor box                                      \\ \hline
- \texttt{application}    & : Final application, end user intended             \\ \hline
- \texttt{atomic box}     & : System category.
-              Automatically assigned to Atomic Black Boxes (c++ defined)     \\ \hline
- \texttt{complex box}    & : System category.
-              Automatically assigned to Complex Black Boxes (script defined) \\ \hline  
- \texttt{command line}   & : Script which defines a command line application \\ 
-                         & :(no embedded GUI, but command line imput parameters) \\ \hline
- \texttt{demo}           & : Demonstration                             \\ \hline
- \texttt{devel}          & : Developer tool (bbCreatePackage.bbs, ...) \\ \hline
- \texttt{dicom}          & : DICOM aware box                            \\ \hline 
- \texttt{example}        & : Example script showing a box use-case      \\ \hline
- \texttt{filter}         & : Image processing box                       \\ \hline
- \texttt{image}          & : Image processing related box               \\ \hline
- \texttt{interaction}    & :                                            \\ \hline
- \texttt{math}           & : Mathematical operations                    \\ \hline
- \texttt{mesh}           & : Mesh processing related box                 \\ \hline
- \texttt{misc}           & : A box that cannot be put in other category ! \\ \hline
- \texttt{read/write}     & : Box that read or write data from or to disk  \\ \hline
- \texttt{viewer}         & : Box which displays some data                \\ \hline
- \texttt{widget}         & : Piece of graphical interface                \\ \hline  
- \texttt{3D object creator} & : Sophisticated 3D widget  \\ \hline  
- \texttt{toolsbbtk}         & : Component of bbStudio    \\ \hline  
-\end{tabular}
-\end{table}
 
-% ==========================================
-
-\begin{table}[!ht]
-\caption{\label{kinds} \texttt{Black Box} kinds}
-\small
-\begin{tabular}{|ll|}
-\hline
-\texttt{Kind name}                & : Meaning                         \\ \hline \\ \hline
-\texttt{ADAPTOR}                  & : Adaptor Box                     \\ \hline
-\texttt{DEFAULT\_ADAPTOR}         & :                                  \\ \hline
-\texttt{WIDGET\_ADAPTOR}          & :                                  \\ \hline
-\texttt{DEFAULT\_WIDGET\_ADAPTOR} & :                                  \\ \hline
-\texttt{GUI}                      & :                                  \\ \hline
-\texttt{DEFAULT\_GUI}             & :                                  \\ \hline
-\texttt{ALL}                      & : If kind='ALL' then sets the level for all kinds \\ \hline
-\end{tabular}
-\end{table}
 
 
-\newpage
- .\newline
- .\newline
-     .\newline
-       .\newline
-         .\newline
-          .\newline
 
-                 . \newline 
-% ==========================================
 % ==========================================
 % ==========================================
 % ==========================================
 % ==========================================
-% ==========================================
-\vspace{0.5cm}\hrule
-\section{The script manager}
-\label{bb0}
 % ==========================================
 
- Atomatically open in the left upper part of bbStudio.
 
-\begin{figure}[!ht]
-\caption{\label{bbi-fig-bbStudio-file0}The bbStudio script manager}
-\begin{center}
-\includegraphics[width=0.7\textwidth]{bbFile0.png}
-\end{center}
-\end{figure}
-
-Using the lower tool bar (see figure : \ref{lowertoolbar}), you can :
-
-
-\begin{figure}[!ht]
-\caption{\label{lowertoolbar}The lower tool bar}
-\begin{center}
-\includegraphics[width=0.7\textwidth]{lowertoolbar.png}
-\end{center}
-\end{figure}
-
-
- \begin{itemize}
-   \item {\bf\emph{New file}} : Create a new file to hold a script
-   \item {\bf\emph{Open file}} : Open a already existing file holding a script 
-   \item {\bf\emph{Close file}} : Close a file holding a script
-   \item {\bf\emph{Save file}} : Save he current file (if modified)
-   \item {\bf\emph{Save file as}} : Save he current file under a different name
-   \item {\bf\emph{Run file}} : Execute the script you just loaded/modified/written
- \end{itemize}
-
-
-The script language is very simple. 
-Everything is done with only a very few commands (See table \ref{bbi-reference-box}).
-The philosophy of this part is also very simple : 
-it introduces the \bbi commands using examples, 
-starting with the most simple commands.  
-The first section of this part 
-(\ref{bbi-getting-started})
-is designed like a tutorial, 
-which progressively introduces all the concepts of the command interpretor. 
-We suggest you run \bbStudio and follow the examples, 
-to see how it works in practice. 
-At the end of this section, 
-you will be able to use \bbStudio and write 
-own black box processing scripts. 
-
-After this tutorial, 
-the section \ref{bbi-more-on} 
-(called \emph{more on...}) 
-goes deeper into various issues of the command interpretor. 
-Read it at your convenience, 
-either linearly to learn more about \bbStudio, 
-or in random order to get an answer 
-to a particular question. 
-
-Finally, the section \ref{bbi-reference}
-summarizes all the commands of \bbStudions, 
-their parameters and effect. 
-Use it as a reference.
-
-
-\newpage
 
 
 % ==========================================
-\subsection{Getting started}
-\label{bbi-getting-started}
-
-% ==============================================
-\subsubsection{Installed tree \emph{vs} Built tree}
-% ==============================================
 
-If you want to use the 'installed' version (it means you downloaded and run the Windows
-installer, or the Fedora package, or you downloaded, compiled and installed the
-cvs version), just open a console and type \bbStudions, or double click on the application icon. \\
-
-If you want to run your own uninstalled version (say : you downloaded and compiled the
-cvs version in order to use a recently commited patch, but you want to be able to still use the standard version), 
-you have to open a console, cd in the bin directory of the built tree and type \texttt{./bbStudio}.
+\newpage
 
 % ==============================================
-\subsubsection{Using an already existing script}
+\subsection{Running Demo and Examples}
 % ==============================================
 
 Run \bbStudio the way you need. \\
@@ -585,6 +383,8 @@ In the part 'Help contents' (See figure \ref{HelpContents}), select \texttt{Exam
 \end{center}
 \end{figure}
 
+\newpage
+
 You will be asked to select a Box category (See figure \ref{BoxCategories}); \\ 
 Select \texttt{example}.
 
@@ -630,7 +430,7 @@ in the 'Files' part, within the script editor (See figure \ref{exampleSliderSour
 
 Run it, using the lower toolbar  (see figure : \ref{lowertoolbar})
 
-You'll get something like in \ref{execSliderSource}.
+You'll get something like in figure \ref{execSliderSource}.
 
 \begin{figure}[!ht]
 \caption{\label{execSliderSource}execution of 'exampleSlider'}
@@ -641,37 +441,93 @@ You'll get something like in \ref{execSliderSource}.
 
 Feel free to move the slider, to check it actually works...
 
-
 \newpage
 
-% ==========================================
-\subsubsection{Creating and executing black boxes}
-% ==========================================
+Just a few words on what you saw :
+\begin{itemize}
+\item{in the File part} \\
+The source code of the script
+\begin{verbatim}
+   new Slider     slider
+     set slider.ReactiveOnTrack 1
+\end{verbatim}
+We create a \texttt{Slider} called \emph{slider}\\
+We tell it to inform anybody that's interested in, that the cursor moved, each time it moved. \\
+The standard behaviour is to inform, only when cursor is released.
+\begin{verbatim}
+   new OutputText text
+\end{verbatim}
+We create a \texttt{OutputText} called \emph{text} 
+(in which slider value will be displayed)
 
-To learn interactivelly the script language features, you can use the black box
-interpreter : 
-open a console and type \bbStudio 
-or double click on the application icon.
-You get a window which looks like the one in figure 
-\ref{bbi-fig-bbi-gui} 
-(the exact appearance of \bbStudio is system and \bbtk version dependent)
+\begin{verbatim}
+new LayoutLine layout
+\end{verbatim}
+We create a \texttt{LayoutLine} called \emph{layout},
+a \emph{container} widget, designed to embed other wigets (say, a main window)
+\begin{verbatim}
+connect slider.Widget    layout.Widget1
+connect text.Widget      layout.Widget2
+\end{verbatim}
+We embed \emph{slider} and \emph{text} into  \emph{layout}.
+\begin{verbatim}
+connect slider.BoxChange text.BoxExecute
+connect slider.Out       text.In
+\end{verbatim}
+We tell  \emph{slider} to inform \emph{text} every time it's modified.\\
+We tell  \emph{slider} to pass its output value (\texttt{Out} to \emph{text}  input value (\texttt{In})
+\begin{verbatim}
+exec layout
+\end{verbatim}
+We tell \emph{layout} to process itself (it will do it only if it's warned 
+that one of its entries was modified since its (own) last processing.
+
+\item{in the Help part}
+
+You can see the graphical representation of the script, as in figure \ref{SmallGraph}.
 
-%\footnote{If you compiled \bbtk without \wx then \bbi does not have a 
-%graphical interface but a simple prompt}.
 
 \begin{figure}[!ht]
-\caption{\label{bbi-fig-bbi-gui}The black box interpreter interface}
+\caption{\label{SmallGraph}Graphical representation of a script}
 \begin{center}
-\includegraphics[width=0.7\textwidth]{bbi-gui0.png}
+\includegraphics[width=0.7\textwidth]{SmallGraph.png}
 \end{center}
 \end{figure}
 
+Both graphical pipe line (\emph{slider} and \emph{text} are embedded into \emph{layout})
+ and processing pipe line (\emph{slider} warns \emph{text} immedialtely when it's modified, \emph{slider} passed \emph{text} its new value).\\
+ Yes, we know : all the arrows (pipe line arrows and processing arrows) are blue; we are sorry about that...\\
+ You could get a much more detailled graph, just clicking on the button \\ \texttt{graph (detailled)} in the toolbar of the \texttt{Command} part, like in
+ figure  \ref{LargeGraph}.
+\begin{figure}[!ht]
+\caption{\label{LargeGraph}Detailled graphical representation of a script}
+\begin{center}
+\includegraphics[width=0.75\textwidth]{LargeGraph.png}
+\end{center}
+\end{figure} 
+
+\end{itemize}
+\newpage
+
+% ==============================================
+\subsection{Online Help}
+% ==============================================
+
+Various levels or help are suplied by \bbStudions.
+
+% ==========================================
+\subsubsection{Command line help}
+% ==========================================
+
+
 The 'working' area (the left one, as opposed to the 'help' area, on the right side) is composed of : 
 one single line zone (Command), at the bottom in which you can enter your commands and 
 a multiple line zone in which the Command interpreter prints out the result of your commands.
 The upper part contains the script editor; we shall not use it right now, you may reduce it
 
-Try typing in the input zone (in this manual, 
+Try typing in the \texttt{Command} area (in this manual, 
 the commands entered by the user will be preceded by a prompt \textgreater) :
 \begin{verbatim}
 > help 
@@ -808,30 +664,6 @@ Then if you type :
 
 you get something like :
 
-% std
-%   ASCII                  
-%   Add                    
-%   ConcatStrings          
-%   Configuration          
-%   Div                    
-%   ExecBbiCommand         
-%   ExecSystemCommand      
-%   GetVectorCharElement   
-%      ... 
-%   GetVectorUShortElement 
-%   MagicBox               
-%   MakeFileName           
-%   Mul                    
-%   MultipleInputs         
-%   PrependDataPath        
-%   PrependPackageDataPath 
-%   StringRelay            
-%   StringSelect           
-% user
-% 
-%   workspace
-
-
 \begin{verbatim}
 
  std
@@ -865,7 +697,7 @@ If you type :
 
 You'll get a text help, in the 'Message' part :
 \begin{verbatim}
-Black Box <std::Add>
+Black Box <std::Add>S
   Adds its inputs
   By : laurent.guigues@creatis.insa-lyon.fr
   Categories : atomic box;math;
@@ -877,10 +709,106 @@ Black Box <std::Add>
      'In1'            <Double>     []       : First number to add
      'In2'            <Double>     []       : Second number to add
   * Outputs : 
-     'BoxChange'      <bbtk::Void> [signal] : Signals modifications of the box
+     'BoxChange'      <bbtk::VoidS> [signal] : Signals modifications of the box
      'Out'            <Double>     []       : Result
 \end{verbatim}
 
+More information about what is a 'box' will be given in the 'Scriptting' part of this manual.
+
+% ==========================================
+\subsubsection{Guides}
+% ==========================================
+
+An html version of all the guides is browsable in the \texttt{Help} part of \bbStudions.
+ \begin{itemize}      
+     \item {\bf\emph{User's Guide}} : Step to step How-to for user who wants to create his own
+     application, just using already existing boxes.
+     \item {\bf\emph{Package Developper's Guide}} : Step to step How-to for programmer who wants to create his own
+     black boxes/packages.
+     \item {\bf\emph{Developper's Guide}} : For bbtk kernel developpers only. (This one is probabely not very much
+     up-to-date, since we spend more time in developping than writing documentation that's not of user concern).
+     \item {\bf\emph{Reference Manual}} : Contains a exaustive description of all the features for all the commands.
+     \item {\bf\emph{Booklet}} : Vade mecum.     
+     \item {\bf\emph{Doxygen Documentation}} : Doxygen source browser.\\ Automatically generated from source file
+     headers. Should concern only the kernel developpers (i.e. : us).
+   \end{itemize}
+        
+
+   
+% ==========================================
+\subsubsection{Boxes Help}
+% ==========================================
+ Box retrieving on various criteria :
+   \begin{itemize} 
+    \item {\bf\emph{Alphabetical list}} \\ This is the 'zero-level' of retrieving.
+    \item {\bf\emph{List by package}} \\ Several packages are supplied with bbtk :
+    \begin{itemize}
+      \item {\bf\emph{std}} : the 'standard' package including basic useful boxes.
+      \item {\bf\emph{wx}} : basic graphical interface elements (widgets : sliders, buttons, etc. based on the \texttt{wxWidgets} library).  
+      \item {\bf\emph{itk}} : the basic image processing package, based on the \itk library.
+      \item {\bf\emph{vtk}} : the basic images and surfaces processing and vizualization package, based on the \vtk library.
+      \item {\bf\emph{wxvtk}} : widget boxes based on the \vtk library (2D and 3D vizualization and
+      interaction).
+      %\item {\bf\emph{creaImageIO}} : Provides hight level widgets to read images, including DICOM.
+      \item {\bf\emph{toolsbbtk}} : Tools for bbtk administration and package development, such as :
+         \begin{itemize}
+        \item{GUICreateBlackBox} For creating the XML or C++ code for a new black box 
+        \item{GUICreatePackage} For creating a new bbtk package file structure on disk (Graphical user interface for the shell script bbCreatePackage)
+        \item{MakePackageDoc} For creating the html documentation of a package. The doc is generated at the 'canonical' location. Works both for a build tree or an installed toolkit.  
+         \end{itemize}              
+    \end{itemize}
+    \item {\bf\emph{List by category}}.
+    
+    
+    A given box may belong to more than one \texttt{category}.\\
+    You have to consider categories like keywords to index black boxes.\\
+    Some of them are mutually exclusive.
+    A black box may be :
+    \begin {itemize}
+       \item{atomic box / complex box}\\
+       Whether it's written is C++ or it's an assembly of several black boxes (atomic or complex).\\
+       Any box is either atomic ou complex.
+       \item{example / demo / application}\\
+           Theese ones are always complex black boxes. 
+          \begin {itemize}
+             \item{example}\\
+            It's just a (simple) example on how to use a given feature.
+             \item{demo}\\
+            It can be a 'good looking' (a.k.a 'sexy') example on some sophisticated work.       
+             \item{application}\\
+            It's a Final application, end user intended (e.g. Subscale a huge volume, Crop a DICOM image, etc)  
+          \end {itemize}
+        \item{widget}\\
+        Piece of graphical interface (based on \texttt{wxWidgets})
+        \item{Dicom}\\
+        Dicom medical image related box.
+        \item{viewer}\\
+        \item{read/write}
+        \item{mesh}
+        \item{3D Object creator}
+        \item{math}
+        \item{misc}              
+    \end {itemize}
+  \end {itemize}
+
+% ==============================================
+\subsection{The Menu}
+% ==============================================
+TODO
+
+
+% ==========================================
+\section{bbs scripting}
+% ==========================================
+
+% ==========================================
+\subsection{Using an already existing}
+% ==========================================
+
+% ==========================================
+\subsection{Creating and executing black boxes}
+% ==========================================
+
 You'll get as well the same information in the 'Help' Part, in html format (see figure : \ref{HelpAdd}) :
 
 \begin{figure}[!ht]
@@ -992,7 +920,7 @@ Box processing is needed if :
 \texttt{'Always'}, which forces box reprocessing. 
 \end{itemize}
 
-Note that all boxes have an input named \texttt{'BoxProcessMode'}.\\ 
+Note that all boxes have an input named \texttt{'BoxProcessMode'}.
 
 Another way to process the box \texttt{a} is to issue the command :
 \begin{verbatim}
@@ -1004,7 +932,7 @@ box itself displays something in its processing).
 It just processes the box if needed. 
 This command is used to execute boxes that do not have any output,  
 such as boxes that write something to a file or, display a 
-graphical interface, and so on. \\
+graphical interface, and so on. 
 
 %To exit \bbi, type :
 %\begin{verbatim}
@@ -1219,16 +1147,16 @@ In our example, the \texttt{CastUCharToDouble} adaptor
 would simply cast the value of the \texttt{char} into a \texttt{double}, 
 however arbitrarily complex type conversion may be done.
 
-\begin{verbatim}
-Question (for info-dev): 
-if two adaptors with the same input and output types exist 
-in two different packages, currenly loaded, 
-which one is chosen by the interpreter at connection time?
-A feature is missing to specify explicitely which one user wants to choose 
-(use a namespace notation ?)
--> Role of default adaptors
-\end{verbatim}
+%\begin{verbatim}
+%Question (for info-dev): 
+%if two adaptors with the same input and output types exist 
+%in two different packages, currenly loaded, 
+%which one is chosen by the interpreter at connection time?
+%A feature is missing to specify explicitely which one user wants to choose 
+%(use a namespace notation ?)
+% 
+%-> Role of default adaptors
+%\end{verbatim}
 
 Note that the \texttt{set} and \texttt{print} commands of interpreter 
 work with adaptors from \texttt{string} to the type of the input to set 
@@ -1797,11 +1725,11 @@ The label of each 'note book' is the name of the object it contains.
 \end{itemize}
 
 
-=====> TODO \\
+%=====> TODO \\
 
 
-One word about a special widget in the package \texttt{wx} : 
-the \texttt{Button}... to be continued.
+%One word about a special widget in the package \texttt{wx} : 
+%the \texttt{Button}... to be continued.
 
 % ==========================================
 \subsubsection{Deeper in the boxes}
@@ -1893,6 +1821,36 @@ In normal pipe-line mode, it will be re-processed if at least one of its imputs
 \label{bbi-more-on-complex-black-boxes}
 Creation of complex widgets (containers, contained...)
 
+You can include script files in other script files, 
+like in the following example :
+
+
+\begin{verbatim}
+# Defines the Add4 black box which adds 4 doubles 
+include Add3
+define Add4
+  author "myself"
+  description "adds 4 doubles"
+  new Add3 a
+  new Add b
+  connect a.Out b.In1
+  input In1 a.In1 "first double to add"
+  input In2 a.In2 "second double to add"
+  input In3 a.In3 "third double to add"
+  input In4 b.In2 "fourth double to add"
+  output Out b.Out "output"
+endefine
+\end{verbatim}
+
+The inner boxes have they own entries (In1, In2, In3 for box a, In1, In2 for box b )\\
+Only the inputs In1, In2, In3 of box a and the input In2 of box b is of interest for the end user, but he dosn't want to have to
+care neither about the inner boxes name, nor about the names of their Inputs.\\
+The writer of the complex box has the ability to give these inputs a meaningfull name !
+\begin{verbatim}
+  input In3 a.In3 "third double to add"
+  input In4 b.In2 "fourth double to add"
+\end{verbatim}
+
 %\subsubsection{Advanced issues}
 %\paragraph{Reducing the number of inputs of a box}
 
@@ -1928,11 +1886,11 @@ cd buildBBTK
 ccmake ../bbtk
 \end{verbatim}
 
-Don't forget to switch ON the flag \textttBBTK\_COMPILE\_DEBUG\_MESSAGE \\
+Don't forget to switch ON the flag \texttt{BBTK\_COMPILE\_DEBUG\_MESSAGE} \\
 (see figure : \ref{bb-ccmake})
 
 \begin{figure}[!ht]
-\caption{\label{bb-ccmake}\Running ccmake}
+\caption{\label{bb-ccmake}Running ccmake}
 \begin{center}
 \includegraphics[width=0.6\textwidth]{ccmake.png}
 \end{center}
@@ -1948,7 +1906,7 @@ make
 For some strange reasons (?!?), you may be warned that an error occured while documentation generation.\\
 Take it easy, \texttt{make} again!\\
 
-The dynamic libraries (\texttt{.dll} or {.so} ans the executable programs will be created in the \testtt{bin}
+The dynamic libraries (\texttt{.dll} or \texttt{.so} and the executable programs will be created in the \texttt{bin}
 directory of the built tree.
 
 \item choose to install or not your own version.
@@ -2044,14 +2002,14 @@ to the input \texttt{input} of the box named \texttt{box2} \\ \hline
 \texttt{set} & \texttt{<box.input>} \texttt{<value>} &
 Sets the input \texttt{input} of 
 the box named \texttt{box} to the value \texttt{value}.
-There must exist an \texttt{adaptor} 
+An \texttt{adaptor} must exist
 in the packages loaded which converts a \texttt{std::string} 
 to the type of the input \texttt{input}. \\ \hline 
 
 \texttt{print} & \texttt{<string>} & 
 Prints the string after substituting each token of the form \texttt{\$box.output\$} by the adaptation to string of the value of the 
 output \texttt{output} of the box named \texttt{box}. 
-There must exist an \texttt{adaptor} 
+An \texttt{adaptor} must exist
 in the packages loaded which converts 
 the type of the output \texttt{output}
 to a \texttt{std::string}.
@@ -2063,9 +2021,9 @@ If needed the boxes
 connected to its inputs 
 are also processed recursively (pipeline processing).\\ \hline 
 \texttt{exec} & \texttt{freeze} & 
allows to block execution commands while keeping definition commands active.\\ \hline 
Allows to block execution commands while keeping definition commands active.(This one is not for end user)\\ \hline 
 \texttt{exec} & \texttt{unfreeze} & 
turns back to 'normal' mode.\\ \hline 
Turns back to 'normal' mode (This one is not for end user).\\ \hline 
 \end{tabular}
 \end{table}
 % ==========================================
@@ -2085,11 +2043,11 @@ are also processed recursively (pipeline processing).\\ \hline
 \hline
 Command & Parameters & Effect \\ \hline
 
-\texttt{author} & - & 
-Adds the string <string> to the author information of the black box being defined \\ \hline 
+\texttt{author} &  \texttt{<author-name>} & 
+Adds the string \texttt{<author-name>} to the author information of the black box being defined \\ \hline 
 
-\texttt{category} & - & 
-  Adds the string <string> to the category information of the black box being defined \\ \hline 
+\texttt{category} & \texttt{<category-name>} & 
+  Adds the string \texttt{<category-name>} to the category information of the black box being defined \\ \hline 
 
 \texttt{help} & - & 
 Prints help on available commands \\ \hline 
@@ -2111,13 +2069,19 @@ Prints help (with full description) on the type of box
 \texttt{box-type}. 
 The box type must belong to a package which has been previously loaded \\ \hline 
 
+& \texttt{<debug-directive>} & 
+[expr|-C|-D] 
+  Prints debug info on living bbtk objects containing the string \texttt{expr} (default expr=''). 
+         \texttt{-C} checks the factory integrity.
+        \texttt{-D} turns on objects debug info after main ends\\ \hline 
+
 \texttt{include} & \texttt{<file-name>} & 
 Includes and executes the content of the file named \texttt{file-name} 
 exactly like if you were typing its content at the place were the 
 \texttt{include} command is. \\ \hline 
 
 \texttt{load} & \texttt{<package-name>} & 
-Loads the package \texttt{package-name}\\ \hline 
+Loads the package \texttt{package-name} (use it only if you know that you won't work with complex black boxes) \\ \hline 
 
 \texttt{include} & \texttt{<package-name>} & 
 Loads the package \texttt{package-name} and includes all the complex black boxes that comes with it \\ \hline 
@@ -2140,7 +2104,7 @@ Sets the level of verbosity of \bbi for the category of messages
 \texttt{reset} & - & Deletes all boxes and unloads all packages so 
 that \bbi gets back to its initial state \\ \hline 
 
-\texttt{quit} & - & Exits the interpreter\\ \hline 
+\texttt{quit} & - & Exits the interpreter (Don't use it under \bbStudions)\\ \hline 
 
 \end{tabular}
 \end{table}
@@ -2201,11 +2165,18 @@ The box \texttt{box} must already have been created in the complex box and of co
 \newpage
 
 % ==========================================
-\vspace{0.5cm}\hrule \\
+%\vspace{0.5cm}\hrule \\
+
+
 \section{The Package Browser}
 \label{Package_Browser}
 % ==========================================
 
+
+You can run it using the tool bar of the 'Command' part.
+
+See figure \ref{Package_Browser}.
+
 \begin{figure}[!ht]
 \caption{\label{Package_Browser}The Package Browser}
 \begin{center}
@@ -2213,15 +2184,84 @@ The box \texttt{box} must already have been created in the complex box and of co
 \end{center}
 \end{figure}
 
-% ==========================================
-\vspace{0.5cm}\hrule \\
+It allows you to query informations about what you can find in the packages (boxes and applications), using several criterions
+(warning : it's case sensitive, i.e \texttt{Button} will give different results thn \texttt{button} ...)
+\begin {itemize}
+\item Pakages :\\
+All the boxes and applications held in a given package (e.g. \texttt{wxvtk}, \texttt{std}, ...)
+\item Name :\\
+You can query on a subpart of the name of a box or an application (e.g. \texttt{DICOM})
+\item Description :\\
+You can query on a substring of the description of a box or an application (e.g. \texttt{utton} : user wants to get all
+the\texttt{Button} as well as the \texttt{button} )
+\item Category :\\
+You can query on a sub part of the category name of a box or an application (e.g. \texttt{3D})
+\item Input Type :\\
+You can query all the boxes or applications that have at least one Input entry of the given type (e.g. \texttt{int})
+\item Output Type :\\
+You can query all the boxes or applications that have at least one Output entry of the given type (e.g. \texttt{int})
+\item Input Nature :\\
+You can query all the boxes or applications that have at least one Input entry of the given nature (e.g. \texttt{signal})
+\item Output Nature :\\
+You can query all the boxes or applications that have at least one Output entry of the given nature (e.g.
+\texttt{signal},\texttt{file name})
+\end {itemize}
+
+
+All these criterions are \emph{AND}ed while the query process.\\
+You can get the whole description of a given box or application clicking on its name.
+
+
+% ==========================================
+%\vspace{0.5cm}\hrule \\
+
 \section{Using third party Package}
 \label{Third_Party_Package}
 % ==========================================
 
+You will have to update the \emph{bbtk\_config.xml} file.\\
+To know where it is stored, just click on \texttt{Config} button of the \texttt{Command} part toolbar.
+
+You'll get something like :
+
+\begin{verbatim}
+=============
+ Configuration
+ =============
+ bbtk_config.xml    : [/home/jpr/Creatis/bbtk/binLIN/bin/bbtk_config.xml]
+ Documentation Path : [/home/jpr/Creatis/bbtk/binLIN/bin/../share/bbtk/doc]
+ Data Path          : [/home/jpr/Creatis/bbtk/binLIN/bin/../share/bbtk/data]
+ Temp Directory     : [/home/jpr/Creatis/bbtk/binLIN]
+ File Separator     : [/]
+ BBS Paths   
+ --- [.]
+ --- [/home/jpr/Creatis/bbtk/binLIN/bin/../share/bbtk/bbs]
+ --- [/home/jpr/Creatis/bbtk/binLIN/share/bbtk/bbs]
+ PACKAGE Paths : 
+ --- [.]
+ --- [/home/jpr/Creatis/bbtk/binLIN/bin]
+ --- [/home/jpr/Creatis/bbtk/binLIN/bin/../lib]
+ --- [/home/jpr/Creatis/bbtk/binLIN/bin]
+ --- [/home/jpr/Creatis/bbtk/binLIN/bin\Debug]
+ --- [/home/jpr/Creatis/bbtk/binLIN/bin\Release] 
+\end{verbatim}
+
+(depending on who you are, and whether \texttt{bbStudio} is installed or not.)\\
+
+Just use your favourite text editor to add :
+\begin{itemize}
+\item
+ at the end of the \texttt{BBS Paths} part 
+ the name of the directory that contains the \texttt{.bbs} scripts of the package you
+want to use,
+\item at the end of the \texttt{PACKAGE Paths} part
+ the name of the directory that contains the dynamic libraries (\texttt{.dll} or \texttt{.so}) of the package
+\end{itemize}
 
+If you want (and sure you will) to be able to use the Help tools as well on the features provided by this package, you must use the
+option \texttt{Generate index}  in the menu \texttt{Tools} of the \texttt{Files} part toolbar.  
 % ==========================================
-\vspace{0.5cm}\hrule \\
+%\vspace{0.5cm}\hrule \\
 \section{Using black boxes in \CPP programs}
 \label{cpp}
 % ==========================================
@@ -2289,7 +2329,8 @@ int main(int argv, char* argc[])
       // Execution pipeline
       // ------------------
       
-      // We have to pass the 'factory', in order to call automatically an adaptor, if necessary.
+      // We have to pass the 'factory', in order to call automatically an adaptor,
+      // if necessary.
       bbtk::Connection::Pointer s2t      = bbtk::Connection::New(slider,"Out",
                                                            text,"In",
                                                            factory);