]> Creatis software - bbtk.git/blob - kernel/doc/bbtkUsersGuide/bbtkUsersGuide.tex
9679dd01531162eb25a4eb86c3820e21074728bf
[bbtk.git] / kernel / doc / bbtkUsersGuide / bbtkUsersGuide.tex
1 % ==========================================
2 \documentclass[11pt,final,a4paper]{article}
3 \input{config.tex}
4
5
6
7 \begin{document}
8
9 \begin{center}
10
11 {\Large \BBTK}
12 \vspace{1cm}
13
14 {\Huge User's Guide}
15 \vspace{1cm}
16
17 \bbtk version \bbtkVersion
18 \vspace{0.5cm}
19
20
21 Last modified on : October 16, 2008 \\
22 Generated on : \today 
23 \vspace{0.5cm}
24 \end{center}
25 \begin{center}
26 Eduardo D\'avila, Laurent Guigues, Jean-Pierre Roux 
27 \end{center}
28 \begin{center}
29 CREATIS-LRMN, Centre de Recherche en Imagerie Medicale \\ CNRS UMR 5220, INSERM U620\\
30 INSA Lyon\\
31 Universit\'e Claude-Bernard Lyon 1
32 \end{center}
33
34 % ==========================================
35 \tableofcontents
36 % ==========================================
37
38 \listoftables
39
40 \listoffigures
41
42
43
44 % ==========================================
45 %\section*{Abstract}
46 % ==========================================
47 \newpage
48 % ==========================================
49 \hrule
50 \section{What is bbtk ?}
51 % ==========================================
52 \BBTK(\bbtkns) is a set of tools 
53 (\CPP libraries and executables) 
54 providing a \CPP framework for the definition 
55 of elementary processing \emph{units}, called {\bf black boxes}, 
56 and the definition and execution of processing \emph{chains} 
57 made up of these black boxes. \\
58 It's a part of the \texttt{Creatools suite} composed mainly of :
59 \begin{verbatim}
60  bbtk
61  creaContours
62  creaImageIO
63  creaLib
64  
65 \end{verbatim}
66 which depend on the OpenSource libraries: 
67 \begin{verbatim}
68  gdcm 
69  itk
70  vtk
71  wxWidgets
72 \end{verbatim}
73
74 % ==========================================
75 \subsection{The black box philosophy}
76 % ==========================================
77
78 \href{http://www.answers.com/topic/black-box-theater}{The Answers Dictionary} defines a {\bf black box} as 
79 \emph{``A device or theoretical construct with known or specified performance characteristics 
80 but unknown or unspecified constituents and means of operation''} \\
81 \href{http://en.wikipedia.org/wiki/Black_box_\%28disambiguation\%29}{Wikipedia}
82 defines a {\bf black box} as 
83 \emph{``any component in a system in which only the input and output 
84 characteristics are of interest, without regard to its internal mechanism 
85 or structure''}. \\
86 We should merge theese definitions. : 
87 not only the inputs and outputs are of interest but also 
88 \emph{what the box does} !
89 Hence, I would say that a black box is any \emph{\bf documented} 
90 component of a system, letting the user know  
91 \emph{\bf what} the box is supposed to do and 
92 \emph{\bf how to use it}
93 but not \emph{\bf how it does it}. \\
94
95 \BBTK provides a systematic framework 
96 to encapsulate (or ``wrap'') any 
97 existing \texttt{C} or \CPP processing code into an object 
98 (a black box) having a {\bf generic symbolic interface}, where 
99
100 \begin{itemize}
101 \item{\bf generic} means that the interface is \emph{the same} 
102 for all boxes. Hence one does not need to know which particular 
103 method allows, say, to set a particular input or 
104 get a particular output of the box. 
105 One can use a black box in a purely abstract way. 
106 \item{\bf symbolic} means that a particular 
107 input or output is referenced by a 'name', that is by a symbol 
108 which identifies the input or output. 
109 It also means that symbolic information (text) is 
110 attached to a box: description of the box, author, 
111 description of its inputs and outputs, etc.
112 \end{itemize}
113
114 (Actually, genericity is achieved because the interface is symbolic. 
115 We let you think about this\dots)
116
117 Of course, symbolic data attached to a box may be 
118 {\bf queried} : what are the inputs/outputs of the box ? 
119 what are their type ? their description ? etc.
120 This allows {\bf automatic documentation} of boxes. 
121
122 The abstract definition of black boxes is the most basic 
123 aspect of \BBTK architecture. 
124 Another key aspect is the groupement of black boxes into 
125 so called {\bf packages}, 
126 which are \emph{dynamic libraries} which can also 
127 be queried, in particular about the boxes they provide. 
128 The package structure then offers a mechanism which 
129 is like a \emph{'plug-in'} mechanism.
130 \BBTK provides the methods to load a package at run-time, 
131 and create instances of the boxes it contains. 
132
133 These two mechanisms (black boxes and packages) 
134 then gives the way to:
135
136 \begin{itemize}
137 \item The definition of an {\bf interpreted script language}, 
138 which allows to manipulate packages and boxes very easily in symbolic way. 
139 \BBTK provides one : \bbi (the Black Box Interpreter). 
140 \item {\bf Automatic documentation} of existing packages. 
141 \texttt{html} documentation of packages is proposed by 
142 \bbStudions.
143 \end{itemize}
144
145 Finally, these different components allow {\bf efficient} :
146
147 \begin{itemize}
148 \item {\bf capitalization and reuse} of existing processing units, 
149 including {\bf documentation} 
150 \item {\bf testing, prototyping} in a very simple script language
151 \item {\bf inter-operability} between atomic processings which 
152 have been written by different persons, using different libraries, etc. 
153 \end{itemize}
154
155 % ==========================================
156 \subsection{\bbtk components}
157 % ==========================================
158 \BBTK includes :
159 \begin{itemize}
160   \item A \CPP {\bf\emph{library}} - called \bbtk - which defines a framework 
161     (abstract classes) to develop black boxes and store them into 
162     dynamic libraries, called black box \emph{packages}.
163   \item Different {\bf\emph{black box packages}} :
164     \begin{itemize}
165       \item {\bf\emph{std}} : the 'standard' package including basic useful boxes.
166       \item {\bf\emph{wx}} : basic graphical interface elements (widgets : sliders, buttons, etc. based on the \texttt{wxWidgets} library).  
167       \item {\bf\emph{itk}} : the basic image processing package, based on the \itk library.
168       \item {\bf\emph{vtk}} : the basic images and surfaces processing and visualization package, based on the \vtk library.
169       \item {\bf\emph{wxvtk}} : widget boxes based on the \vtk library (2D and 3D vizualization and
170       interaction).
171       %\item {\bf\emph{creaImageIO}} : Provides hight level widgets to read images, including DICOM.
172       \item {\bf\emph{toolsbbtk}} : Tools for bbtk administration and package development..      
173     \end{itemize}
174   \item A {\bf\emph{Developement environment}}, called \bbStudio, which provides
175     \begin{itemize}
176       \item An online {\bf\emph{script editor and interpretor}}
177       \item A powerful html {\bf\emph{Help environment}}, integrating :       
178         \begin{itemize}
179           \item Online documentation scaning
180           \item Retreiving boxes on various criterions
181           \item Checking Demo and examples
182         \end{itemize}
183       \end{itemize}
184       \item An standalone {\bf\emph{interpreter}}, called \bbins, which allows to 
185           load black box packages and to define and execute 
186           processing chains by connecting various black boxes.
187       \item {\bf\emph{Various Development Utilities}} :
188          \begin{itemize}
189             \item \bbfy generates the \CPP code of a black box from a 
190                description file written in \texttt{xml}.
191                 %\item \bbdoc generates the html documentation of a black box package 
192                 %(author, description, description of its black boxes : 
193                 %author, description, inputs, outputs, and so on).
194             \item \bbCreatePackage allows to create the basic file architecture 
195                to start the development of a new black box package.
196             \item \text{bbCreateBlackbox} allows to create the basic file architecture 
197                to start the development of a new black box, that will be included in an already existing package.              
198             \item \texttt{bbs2cpp} translates a \texttt{.bbs} script into a \CPP file.
199             \item \texttt{bbc} that interprets (i.e. : executes) a \texttt{.bbs} script.                  
200          \end{itemize}
201       \item A full {\bf\emph{documentation}} printable (pdf), browsable (html),
202       queryable throught keywords.        
203 \end{itemize}
204
205 The general architecture of \BBTK 
206 is shown in figure \ref{bb-architecture}.
207
208 \begin{figure}[!ht]
209 \caption{\label{bb-architecture}\BBTK architecture}
210 \begin{center}
211 \includegraphics[width=0.6\textwidth]{bb-architecture.png}
212 \end{center}
213 \end{figure}
214
215 \newpage
216
217 % ==========================================
218 \section{Getting started with bbStudio}
219 % ==========================================
220
221 % ==========================================
222 % ==========================================
223 % ==========================================
224 % ==========================================
225 % ==========================================
226 % ==========================================
227
228 % ==========================================
229 \subsection{The interface}
230 % ==========================================
231
232
233 %\vspace{0.5cm}\hrule
234 %\section{The Development environment (bbStudio)}
235 %\label{bbStudio}
236
237 Just run it, typing in a console \bbStudio 
238 or clicking on its icon or its menu entry.
239 At start, \bbStudio opens with a very minimal 'How to use' in the middle. \\
240 Don't forget to read it : it will vanish at the first mouse click. \\
241 \begin{verbatim}
242 1) Click on the 'Demo' or 'Examples' link.
243 2) Select a Demo or an Example
244 3) Click on the [Source] link : the source file is loaded in bbStudio
245 4) Click on the 'Run button' (the down arrow at the bottom right
246    of the source file).
247 \end{verbatim}
248
249 You'll get something like in figure 
250 \ref{bbi-fig-bbStudio-gui-start}
251 (the exact appearance of \bbStudio is Operating System and \bbtk version dependent)
252
253 \newpage
254
255
256 \begin{figure}[!ht]
257 \caption{\label{bbi-fig-bbStudio-gui-start}The bbStudio Development environment interface at start time}
258 \begin{center}
259 \includegraphics[width=0.7\textwidth]{bbStudioMainPageStart.png}
260 \end{center}
261 \end{figure}
262
263
264 Feel free to resize any part you want.
265 Your preferences will be kept next time you run again \bbStudio. \\
266
267 Let's have a look at the resized window :
268
269 \begin{figure}[!ht]
270 \caption{\label{bbi-fig-bbStudio-gui}The bbStudio Development environment interface}
271 \begin{center}
272 \includegraphics[width=0.7\textwidth]{bbStudioMainPage.png}
273 \end{center}
274 \end{figure}
275
276 You can see four parts : \texttt{Files}, \texttt{Messages},
277  \texttt{Command}, \texttt{Help}.\\
278
279 The stuff is written using the Advanced User Interface library of wxWidgets
280 (a.k.a. AUI),
281 whose 'docking manager' allows windows and toolbars to be floated/docked 
282 onto a frame.\\
283 Please don't use this feature at learning time (the snapshots of this document
284  wouldn't match with your screen ...)
285
286 \subsubsection{'Files' part}
287 \label{bbi-FilesPart}
288
289 It's the .bbs script editor.\\
290 If you load a file holding a script, it will be displayed here, and you'll be
291 able to modify it, to save it, to save-as it, to run it, using the
292 lower toolbar (see figure : \ref{lowertoolbar})
293
294 \begin{figure}[!ht]
295 \caption{\label{lowertoolbar}The lower tool bar}
296 \begin{center}
297 \includegraphics[width=0.7\textwidth]{lowertoolbar2.png}
298 \end{center}
299 \end{figure}
300
301
302 % \begin{itemize}
303 %   \item {\bf\emph{New file}} : Create a new file to hold a script
304 %   \item {\bf\emph{Open file}} : Open an already existing file holding a script 
305 %   \item {\bf\emph{Close file}} : Close a file holding a script
306 %   \item {\bf\emph{Save file}} : Save he current file (if modified)
307 %   \item {\bf\emph{Save file as}} : Save he current file under a different name
308 %   \item {\bf\emph{Run file}} : Execute the script you just loaded/modified/written
309 %   \item {\bf\emph{cursor position}} : column number : line number   
310 % \end{itemize}
311
312
313 \subsubsection{'Messages' part}
314 \label{bbi-MessagesPart}
315
316 Two kinds of messages will be output here:\\
317 System messages : produced by the kernel, in case of a user mistyping, or an execution error\\
318 Script messages : produced by the \bbtk equivalent of \texttt{printf} 
319 or \texttt{std::cout} in user programs
320
321 \subsubsection{'Command' part}
322 \label{bbi-CommandPart}
323
324 This is where user will type his requirements.
325
326 \subsubsection{'Help Contents' part}
327 \label{bbi-HelpContentsPart}
328
329 The 'Help Contents' part of \bbStudio is used to browse the html help of \BBTK.
330 All the entries of the starting page are self-explanatory :
331  \begin{itemize}
332    \item {\bf\emph{Help Contents}}
333    \begin{itemize}
334      %\item {\bf\emph{Wiki}} : Direct link to the bbtk Wiki (intranet only, right now, www
335      %later).
336      \item {\bf\emph{Demo}} : Link to some 'sophisticated' demonstrations.
337      \item {\bf\emph{Examples}} : Link to some detailed 'How to use' examples
338    \end{itemize}
339    
340    \item {\bf\emph{Guides}}   
341    \begin{itemize}      
342      \item {\bf\emph{User's Guide}} : Step to step How-to for user who wants to create his own
343      application, just using already existing boxes.
344      \item {\bf\emph{Package Developper's Guide}} : Step to step How-to for user who wants to create his own
345      black boxes.
346      \item {\bf\emph{Developper's Guide}} : For bbtk kernel developpers. .
347      \item {\bf\emph{Reference Manual}} : 
348      \item {\bf\emph{Booklet}} : Vade mecum.    
349      \item {\bf\emph{Doxygen Documentation}} : Doxygen source browser.
350    \end{itemize}
351         
352    \item {\bf\emph{Boxes}} : Box retrieving on various criterions :
353    \begin{itemize} 
354     \item {\bf\emph{ \texttt{By name}}} (Alphabetical list), 
355     \item {\bf\emph{    \texttt{By package}}}, 
356      \item {\bf\emph{   \texttt{By category}}}.
357    \end{itemize} 
358    
359         A special hidden Box category, called \texttt{{Adaptors}} exists. \\ 
360         They are used internaly to perform type conversions. Thought there are not end user intended, you may query them.     
361
362       
363  \end{itemize}
364
365
366 % ==========================================
367
368
369
370
371 % ==========================================
372 % ==========================================
373 % ==========================================
374 % ==========================================
375 % ==========================================
376
377
378
379
380 % ==========================================
381
382 \newpage
383
384 % ==============================================
385 \subsection{Running Demo and Examples}
386 % ==============================================
387
388 Run \bbStudio the way you need. \\
389 In the part 'Help contents' (See figure \ref{HelpContents}), select \texttt{Examples} link.
390
391 \begin{figure}[!ht]
392 \caption{\label{HelpContents}Help Contents}
393 \begin{center}
394 \includegraphics[width=0.7\textwidth]{HelpContents.png}
395 \end{center}
396 \end{figure}
397
398 \newpage
399
400 You will be asked to select a Box category (See figure \ref{BoxCategories}); \\ 
401 Select \texttt{example}.
402
403
404 \begin{figure}[!ht]
405 \caption{\label{BoxCategories}Box Categories}
406 \begin{center}
407 \includegraphics[width=0.7\textwidth]{BoxCategories.png}
408 \end{center}
409 \end{figure} 
410
411 You will be asked to choose a script (See figure \ref{example}).
412
413 \begin{figure}[!ht]
414 \caption{\label{example}example list}
415 \begin{center}
416 \includegraphics[width=0.7\textwidth]{example.png}
417 \end{center}
418 \end{figure}
419
420
421
422 Select \texttt{wx::exampleSlider} (See figure \ref{exampleSlider});
423  
424 \begin{figure}[!ht]
425 \caption{\label{exampleSlider}example 'exampleSlider'}
426 \begin{center}
427 \includegraphics[width=0.7\textwidth]{exampleSlider.png}
428 \end{center}
429 \end{figure}
430
431 You can see the graphical summary representation of the current script (the elementary boxes that compose it, and their
432 connections) \\
433 Click on \texttt{source}, and you'll be able to see the (very simple) script, 
434 in the 'Files' part, within the script editor (See figure \ref{exampleSliderSource});
435
436 \begin{figure}[!ht]
437 \caption{\label{exampleSliderSource}source code of 'exampleSlider'}
438 \begin{center}
439 \includegraphics[width=0.7\textwidth]{exampleSliderSource.png}
440 \end{center}
441 \end{figure}
442
443 Run it, using the lower toolbar  (see figure : \ref{lowertoolbar})
444
445 You'll get something like in figure \ref{execSliderSource}.
446
447 \begin{figure}[!ht]
448 \caption{\label{execSliderSource}execution of 'exampleSlider'}
449 \begin{center}
450 \includegraphics[width=0.7\textwidth]{execSliderSource.png}
451 \end{center}
452 \end{figure}
453
454 Feel free to move the slider, to check it actually works...
455
456 \newpage
457
458 Just a few words on what you saw :
459 \begin{itemize}
460 \item{in the File part} \\
461 The source code of the script
462 \begin{verbatim}
463    new Slider     slider
464      set slider.ReactiveOnTrack 1
465 \end{verbatim}
466 We create a \texttt{Slider} called \emph{slider}\\
467 We tell it to inform anybody that's interested in, that the cursor moved, each time it moved. \\
468 The deafuault behaviour is to inform, only when cursor is released.
469 \begin{verbatim}
470    new OutputText text
471 \end{verbatim}
472 We create a \texttt{OutputText} called \emph{text} 
473 (in which slider value will be displayed)
474
475 \begin{verbatim}
476    new LayoutLine layout
477 \end{verbatim}
478 We create a \texttt{LayoutLine} called \emph{layout},
479 a \emph{container} widget, designed to embed other wigets (say, a main window)
480 \begin{verbatim}
481    connect slider.Widget    layout.Widget1
482    connect text.Widget      layout.Widget2
483 \end{verbatim}
484 We embed \emph{slider} and \emph{text} into  \emph{layout}.
485 \begin{verbatim}
486    connect slider.BoxChange text.BoxExecute
487    connect slider.Out       text.In
488 \end{verbatim}
489 We tell  \emph{slider} to inform \emph{text} every time it's modified.\\
490 We tell  \emph{slider} to pass its output value (\texttt{Out} to \emph{text}  input value (\texttt{In})
491 \begin{verbatim}
492    exec layout
493 \end{verbatim}
494 We tell \emph{layout} to process itself (it will do it only if it's warned 
495 that one of its entries was modified since its (own) last processing.
496
497 \item{in the Help part}
498
499 You can see the graphical representation of the script, as in figure \ref{SmallGraph}.
500
501
502 \begin{figure}[!ht]
503 \caption{\label{SmallGraph}Graphical representation of a script}
504 \begin{center}
505 \includegraphics[width=0.7\textwidth]{SmallGraph.png}
506 \end{center}
507 \end{figure}
508
509 Both graphical pipe line (\emph{slider} and \emph{text} are embedded into \emph{layout})
510  and processing pipe line (\emph{slider} warns \emph{text} immedialtely when it's modified, \emph{slider} passed \emph{text} its new value).\\
511  Yes, we know : all the arrows (pipe line arrows and processing arrows) are blue; we are sorry about that...\\
512  
513  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
514  figure  \ref{LargeGraph}.
515  
516 \begin{figure}[!ht]
517 \caption{\label{LargeGraph}Detailled graphical representation of a script}
518 \begin{center}
519 \includegraphics[width=0.75\textwidth]{LargeGraph.png}
520 \end{center}
521 \end{figure} 
522
523 \end{itemize}
524 \newpage
525
526 % ==============================================
527 \subsection{Online Help}
528 % ==============================================
529
530 Various levels or help are suplied by \bbStudions.
531
532 % ==========================================
533 \subsubsection{Command line help}
534 % ==========================================
535
536
537 The 'working' area (the left one, as opposed to the 'help' area, on the right side) is composed of : 
538 one single line area (\texttt{Command}), at the bottom in which you can enter your commands and 
539 a multiple line zone in which the Command interpreter prints out the result of your commands.
540 The upper part contains the script editor; we shall not use it right now, you may reduce it
541
542 Try typing in the \texttt{Command} area (in this manual, 
543 the commands entered by the user will be preceded by a prompt \textgreater) :
544 \begin{verbatim}
545 > help 
546 \end{verbatim}
547
548 you get the list of the commands of the interpreter :
549 \begin{verbatim}
550 Available commands :
551  author
552  category
553  config
554  connect
555  debug
556  define
557  delete
558  description
559  endefine
560  endpackage
561  exec
562  graph
563  help
564  include
565  index
566  input
567  kind
568  load
569  message
570  new
571  newgui
572  output
573  package
574  print
575  quit
576  reset
577  set
578  unload
579 \end{verbatim}
580
581 To get help on a particular command type \texttt{help <command-name>},
582 for example:
583 \begin{verbatim}
584 > help author
585 \end{verbatim}
586
587 gives :
588 \begin{verbatim}
589  usage : author <string>
590   Adds the string <string> to the author information of the black box being defined
591 \end{verbatim}
592
593 The \texttt{help} command has multiple usages. 
594 It is used to get help about almost anything in the interpretor!
595 Type \texttt{'help help'} to get help on the \texttt{help} command itself :
596 \begin{verbatim}
597 > help help
598  usage : 
599          (1) help 
600          (2) help <command name> 
601          (3) help packages [all]
602          (4) help <package name> [all]
603          (5) help <black box type> 
604          (6) help <black box name>
605   Effect :
606          (1) Lists all available commands;
607          (2) Prints help on a particular command; 
608          (3) Lists the packages loaded and their black boxes.
609              Add 'all' to list adaptors; 
610          (4) Prints short help on the black boxes of a package.
611              Add 'all' to include adaptors; 
612          (5) Prints full help on a black box type; 
613          (6) Prints information on the inputs, outputs and connectionns
614              of a black box instance.
615 \end{verbatim}
616
617 At start the interpretor does not know any black box. 
618 If you type \texttt{'help packages'}, which is 
619 the third form of the \texttt{help} command, you get :
620 \begin{verbatim}
621 > help packages
622 user
623   workspace
624 \end{verbatim}
625
626 which means that the interpretor only knows one package 
627 (library of black boxes) called \texttt{user}
628 and which contains a black box called \texttt{workspace}.
629 The \texttt{user} package is an internal package of the interpreter, 
630 which stores user-defined black box types. 
631 At start, it already contains 
632 one box, called \texttt{workspace}.
633 \texttt{workspace} is a special type of black box, 
634 called complex black box, whose purpose is 
635 to store other black boxes. 
636 Any black box you create in \bbStudio is stored 
637 in \texttt{workspace}  
638 (this will be explained in details in sections 
639 \ref{bbi-writing-scripts} and 
640 \ref{bbi-more-on-complex-black-boxes}). 
641
642 If you type \texttt{'help workspace'}, you get :
643 \begin{verbatim}
644 > help workspace
645  Complex Black Box <user::workspace>
646   User's workspace
647   By : bbtk
648   Category(s) : complex box;
649   * No inputs
650   * No outputs
651   * No boxes
652 \end{verbatim}
653
654 In the text displayed, 
655 the \texttt{user::} prepended to the name \texttt{workspace} 
656 means that the box \texttt{workspace} 
657 belongs to the \texttt{user} package. 
658 Then comes a description and three lines which 
659 tell that \texttt{workspace} does not have any input 
660 nor output nor boxes yet.
661
662 In order to let the interpreter know of some black boxes, 
663 you must load another package. 
664 The \texttt{std} package is the ``standard'' package, 
665 which contains basic useful black boxes. 
666
667 To load it, type :
668 \begin{verbatim}
669 > include std
670 \end{verbatim}
671
672 Then if you type :
673 \begin{verbatim}
674 > help packages
675 \end{verbatim}
676
677 you get something like :
678
679 \begin{verbatim}
680
681  std
682    ASCII                   : ascii codes sequence to string - string to ascii...
683    Add                     : Adds its inputs
684    ConcatStrings           : String concatenation
685    Configuration           : Gets configuration informations
686    Div                     : Divides its inputs
687    ExecBbiCommand          : Executes bbi commands
688    ExecSystemCommand       : Executes system (O.S.) commands
689    GetVectorCharElement    : Gets the i-th element from the input vector (std...
690      ...
691    MagicBox                : Takes *any kind* of data and copies it to its ou...
692    MakeFileName            : Makes a kosher file name
693    Mul                     : Multiplies its inputs
694    MultipleInputs          : This box has multiple Void inputs and one Void o...
695    StringRelay             : Just copies the value of its input to its output...
696    StringSelect            : Outputs the string set to the ith input Ini (In0...
697  user
698    workspace 
699 \end{verbatim}
700
701 Now the interpreter knows the package \texttt{std} and the black boxes it provides,
702 such as the \texttt{Add} box, the \texttt{ConcatStrings} box, and so on. Remark that the 
703 content of \texttt{std} may vary from one version to another 
704 as new black boxes might be added to it. 
705 If you type :  
706 \begin{verbatim}
707 > help Add
708 \end{verbatim}
709
710 You'll get a text help, in the 'Message' part :
711 \begin{verbatim}
712 Black Box <std::Add>
713   Adds its inputs
714   By : laurent.guigues@creatis.insa-lyon.fr
715   Categories : atomic box;math;
716   * Inputs : 
717      'BoxExecute'     <bbtk::Void> [signal] : Any signal received by this input 
718                                               executes the box
719      'BoxProcessMode' <String>     []       : Sets the processing mode of the box 
720                                               (Pipeline | Always | Reactive)
721      'In1'            <Double>     []       : First number to add
722      'In2'            <Double>     []       : Second number to add
723   * Outputs : 
724      'BoxChange'      <bbtk::VoidS> [signal] : Signals modifications of the box
725      'Out'            <Double>     []       : Result
726 \end{verbatim}
727
728 More information about what is a 'box' will be given in the 'Scripting' part of this manual.
729
730 % ==========================================
731 \subsubsection{Guides}
732 % ==========================================
733
734 An html version of all the guides is browsable in the \texttt{Help} part of \bbStudions.
735  \begin{itemize}      
736      \item {\bf\emph{User's Guide}} : Step to step How-to for user who wants to create his own
737      application, just using already existing boxes.
738      \item {\bf\emph{Package Developper's Guide}} : Step to step How-to for programmer who wants to create his own
739      black boxes/packages.
740      \item {\bf\emph{Developper's Guide}} : For bbtk kernel developpers only. (This one is probably not very much
741      up-to-date, since we spend more time in developping than writing documentation that's not of user concern).
742      \item {\bf\emph{Reference Manual}} : Contains a exaustive description of all the features for all the commands.
743      \item {\bf\emph{Booklet}} : Vade mecum.     
744      \item {\bf\emph{Doxygen Documentation}} : Doxygen source browser.\\ Automatically generated from source file
745      headers. Should concern only the kernel developpers (i.e. : us).
746    \end{itemize}
747         
748
749    
750 % ==========================================
751 \subsubsection{Boxes Help}
752 % ==========================================
753  Box retrieving on various criteria :
754    \begin{itemize} 
755     \item {\bf\emph{Alphabetical list}} \\ This is the 'zero-level' of retrieving.
756     \item {\bf\emph{List by package}} \\ Several packages are supplied with bbtk :
757     \begin{itemize}
758       \item {\bf\emph{std}} : the 'standard' package including basic useful boxes.
759       \item {\bf\emph{wx}} : basic graphical interface elements (widgets : sliders, buttons, etc. based on the \texttt{wxWidgets} library).  
760       \item {\bf\emph{itk}} : the basic image processing package, based on the \itk library.
761       \item {\bf\emph{vtk}} : the basic images and surfaces processing and vizualization package, based on the \vtk library.
762       \item {\bf\emph{wxvtk}} : widget boxes based on the \vtk library (2D and 3D vizualization and
763       interaction).
764       %\item {\bf\emph{creaImageIO}} : Provides hight level widgets to read images, including DICOM.
765       \item {\bf\emph{toolsbbtk}} : Tools for bbtk administration and package development, such as :
766          \begin{itemize}
767          \item{\texttt{GUICreateBlackBox}} For creating the XML or C++ code for a new black box 
768          \item{\texttt{GUICreatePackage}} For creating a new bbtk package file structure on disk (Graphical user interface for the shell script bbCreatePackage)
769          \item{\texttt{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.         
770          \end{itemize}               
771     \end{itemize}
772     \item {\bf\emph{List by category}}.
773     
774     
775     A given box may belong to more than one \texttt{category}.\\
776     You have to consider categories like keywords to index black boxes.\\
777     Some of them are mutually exclusive.
778     A black box may be :
779     \begin {itemize}
780        \item{atomic box / complex box}\\
781        Whether it's written is C++ or it's an assembly of several black boxes (atomic or complex).\\
782        Any box is either atomic ou complex.
783        \item{example / demo / application}\\
784            These ones are always complex black boxes. 
785           \begin {itemize}
786              \item{example}\\
787              It's just a (simple) example, for programmers, on how to use a given feature.
788              \item{demo}\\
789              It can be a 'good looking' (a.k.a 'sexy') example on some sophisticated work, done only by using \texttt{bbtk} 
790              boxes.      
791              \item{application}\\
792              It's a Final application, end user intended (e.g. Subscale a huge volume witout loading it in memory, Crop a DICOM image, etc)      
793           \end {itemize}
794         \item{widget}\\
795         Piece of graphical interface (based on \texttt{wxWidgets})
796         \item{Dicom}\\
797         Dicom medical image related box.
798         \item{viewer}
799         \item{read/write}
800         \item{mesh}
801         \item{3D Object creator}
802         \item{math}
803         \item{misc}              
804     \end {itemize}
805   \end {itemize}
806   
807 % ==========================================      
808 \subsubsection{The Package Browser}
809 \label{Package_Browser}
810 % ==========================================
811
812
813 You can run it using the tool bar of the 'Command' part. See figure \ref{imPackage_Browser}.
814
815 \begin{figure}[!ht]
816 \caption{\label{imPackage_Browser}The Package Browser}
817 \begin{center}
818 \includegraphics[width=0.6\textwidth]{Package_Browser.png}
819 \end{center}
820 \end{figure}
821
822 It allows you to query informations about what you can find in the packages (boxes and applications), using several criterions
823 (warning : it's case sensitive, i.e '\texttt{Button}' will give different results than '\texttt{button}' ...)
824 \begin {itemize}
825 \item Packages :\\
826 All the boxes and applications held in a given package (e.g. \texttt{wxvtk}, \texttt{std}, ...)
827 \item Name :\\
828 You can query on a subpart of the name of a box or an application (e.g. \texttt{DICOM})
829 \item Description :\\
830 You can query on a substring of the description of a box or an application (e.g. \texttt{utton} : user wants to get all
831 the\texttt{Button} as well as the \texttt{button} )
832 \item Category :\\
833 You can query on a sub part of the category name of a box or an application (e.g. \texttt{3D})
834 \item Input Type :\\
835 You can query all the boxes or applications that have at least one Input entry of the given type (e.g. \texttt{int})
836 \item Output Type :\\
837 You can query all the boxes or applications that have at least one Output entry of the given type (e.g. \texttt{int})
838 \item Input Nature :\\
839 You can query all the boxes or applications that have at least one Input entry of the given nature (e.g. \texttt{signal})
840 \item Output Nature :\\
841 You can query all the boxes or applications that have at least one Output entry of the given nature (e.g.
842 \texttt{signal},\texttt{file name})
843 \end {itemize}
844
845
846 All these criterions are \emph{AND}ed while the query process.\\
847 You can get the whole description of a given box or application clicking on its name.
848
849 \newpage 
850
851 % ==============================================
852 \subsection{The Menu}
853 % ==============================================
854
855 At last, let's have a look at \bbStudio menu.(See figure \ref{themenu})
856
857 \begin{figure}[!ht]
858 \caption{\label{themenu}The bbStudio menu}
859 \begin{center}
860 \includegraphics[width=0.7\textwidth]{themenu.png}
861 \end{center}
862 \end{figure}
863
864 \begin {itemize}
865   \item{\texttt{File}}
866      \begin {itemize}
867         \item{\texttt{Open the bbtk configuration file}}
868         \item{\texttt{Quit}}
869      \end {itemize}       
870   \item{\texttt{Tools}}
871      \begin {itemize}
872         \item{\texttt{Create package}} :
873         Provides a graphical interface to help Package developper to create a new empty package.
874         \item{\texttt{Create black box}}
875         Provides a graphical interface to help Package developper to create a new empty black box, and add it to an already existing package.   
876         \item{\texttt{Show last image graph}}
877         \item{\texttt{Regenerate package doc}} :
878         if user was supplied new black boxes, and added them to an already existing package, he can update the package documentation, in order to benefit all the features of the Help mechanisms.      
879         \item{\texttt{Regenerate boxes list}} :
880         if user wants to update only boxes list (quicker)
881         \item{\texttt{Regenerate all}}
882         User wants to rebuild the whole documentation.     
883      \end {itemize}     
884   \item{\texttt{Options}}
885      \begin {itemize}
886         \item{\texttt{Reset before running}} Before running, all the already boxes are destroyed, all the already loaded packages are unloaded (this is the recomended option).   
887      \end {itemize}     
888   \item{\texttt{Windows}}
889   User may decide, for any reason of his own, to hide one or more pannels:
890      \begin {itemize}
891         \item{\texttt{Show 'Files' panel}}
892         \item{\texttt{Show 'Help' panel}}
893         \item{\texttt{Show 'Command' panel}}
894         \item{\texttt{Show 'Messages' panel}}
895         \item{\texttt{Launch Package browser}} The package browser is a stand alone application. This can be achieved, too,
896          using the lower tool bar : button \texttt{Start Package Browser}.      
897         \item{}     
898      \end {itemize}     
899   \item{\texttt{About}}
900      \begin {itemize}
901         \item{\texttt{About}} : Info about \texttt{bbStudio}.       
902      \end {itemize}     
903 \end {itemize}
904 % ==========================================
905 \section{bbs scripting}
906 % ==========================================
907
908 % ==========================================
909 \subsection{Using an already existing script}
910 % ==========================================
911
912 Using the lower toolbar (see figure : \ref{lowertoolbarsmall}), open the file
913 holding the script.
914
915 \begin{figure}[!ht]
916 \caption{\label{lowertoolbarsmall}The lower tool bar}
917 \begin{center}
918 \includegraphics[width=0.7\textwidth]{lowertoolbar.png}
919 \end{center}
920 \end{figure}
921
922  You'll see it, in the '\texttt{Files}' part.\\ \\
923  You may run it, using the lower toolbar. \\ 
924  %\texttt{WARNING :} if the script contains one or more \texttt{LayoutSplit}
925 % object, you will have to resize the sub windows. \\ \\
926  You may modify, save or save-as the current script, using the lower toolbar.\\ \\
927  You may have a look at the graphical representation of the pipeline (sorry,
928  right now, to modify the pipeline, you have to modify the script; 
929  you cannot modify grapically the pipeline; Work in progress...)
930   
931
932 % ==========================================
933 \subsection{Inside black boxes}
934 % ==========================================
935
936 After loading the package it belongs to, you can You can create an \emph{instance} of an \texttt{Add} box by 
937 the command \texttt{new} :
938
939 \begin{verbatim}
940 > new Add a
941 \end{verbatim}
942
943 The \texttt{'a'} at the end is the \emph{name} of the instance, 
944 which will be used to reference it later. 
945 It is important to distinguish a box \emph{type} 
946 and an \emph{instance} of a box type. 
947 The \texttt{Add} box of the package \texttt{std} is actually 
948 a \emph{box type} , like \texttt{int} is a data type 
949 in \texttt{C} langage. The \texttt{new} command allows to create 
950 an instance of a box type, exactly like \texttt{int i;} in 
951 a \texttt{C} code, it declares a variable of type \texttt{int} whose 
952 name is \texttt{i}. 
953 Of course, like in \texttt{C} Language, you can declare multiple boxes of the 
954 same type in \bbi. \\
955
956 You can ask information about a given black box :\\
957 In the \texttt{Command part}, type \texttt{help} + black box name, e.g. \\
958
959 \begin{verbatim}
960 > help Add a
961 \end{verbatim}
962 Have a look to the 'Help' Part (see figure : \ref{HelpAdd}) :
963
964 \begin{figure}[!ht]
965 \caption{\label{HelpAdd}The html Help}
966 \begin{center}
967 \includegraphics[width=0.7\textwidth]{HelpAdd.png}
968 \end{center}
969 \end{figure}
970
971 The \texttt{std::} prepended to the name \texttt{Add} 
972 means that the box \texttt{Add} 
973 belongs to the \texttt{std} package. 
974 Then comes a description 
975 (the one which was provided by the author of the box), 
976 the author(s) of the box (usually e-mail adress(es)) and 
977 the categories to which the box belongs. 
978 Finally comes the lists of inputs and outputs of the box.
979 For each input or output, \bbi provides 
980 its \emph{name} (between quotes, e.g. \texttt{'ProcessMode'}), 
981 its \emph{type} (between \texttt{<} and  \texttt{>}, e.g. \texttt{<Int>})
982 and a description.    
983 Remark that the box \texttt{Add} is not a 'complex' black box 
984 but an 'atomic' box, hence its help does not 
985 mention any information concerning possible internal boxes. 
986
987 After the creation of the box \texttt{a}, type :
988 \begin{verbatim}
989 > help workspace
990 \end{verbatim}
991
992 you get :
993 \begin{verbatim}
994 Complex Black Box <user::workspace>
995  User's workspace
996  By : bbtk
997  Category(s) : complex box;
998  * No inputs
999  * No outputs
1000  * Boxes : 
1001     'a' <std::Add>
1002 \end{verbatim}
1003
1004 which means that \bbi workspace now contains a black box named \texttt{a},
1005 of type \texttt{std::Add}.
1006
1007 Now look back at the help on \texttt{Add} boxes : 
1008 you can see that this type of box has two inputs, 
1009 with name \texttt{In1} and \texttt{In2},
1010 and an output, with name \texttt{Out}.
1011
1012 You can set the input \texttt{In1} 
1013 of the \texttt{Add} box \texttt{a} to the value $1$ 
1014 by the command :
1015 \begin{verbatim}
1016 > set a.In1 1 
1017 \end{verbatim}
1018
1019 Similarly, setting the input \texttt{In2} of \texttt{a} to the value $2$
1020 is done with :
1021 \begin{verbatim}
1022 > set a.In2 2
1023 \end{verbatim}
1024  
1025 And you print the output \texttt{Out} of the box \texttt{a} with :
1026 \begin{verbatim}
1027 > print "result=$a.Out$"
1028 result=3
1029 \end{verbatim}
1030
1031 In the string passed to the \texttt{print} command, 
1032 each substring enclosed between a couple of \$ is considered 
1033 as the name of an output of a box. 
1034 To process this special substrings, the interpretor :
1035 \begin{enumerate}
1036 \item Processes the box if needed (see below)
1037 \item Converts the output of the box to a string if possible 
1038 (see below)
1039 \item Substitutes the result in the string to print
1040 \item Postpones an implicit 'new line' character to the string
1041 \end{enumerate}
1042
1043 %\paragraph
1044
1045 Box processing is needed if :
1046
1047 \begin{itemize}
1048 \item either at least input has changed since last processing 
1049 \item or the input \texttt{'BoxProcessMode'} of the box is set to 
1050 \texttt{'Always'}, which forces box reprocessing. 
1051 \end{itemize}
1052
1053 Note that all boxes have an input named \texttt{'BoxProcessMode'}.
1054
1055 Another way to process the box \texttt{a} is to issue the command :
1056 \begin{verbatim}
1057 > exec a
1058 \end{verbatim}
1059
1060 however this command does not display anything (except if the 
1061 box itself displays something in its processing).
1062 It just processes the box if needed. 
1063 This command is used to execute boxes that do not have any output,  
1064 such as boxes that write something to a file or, display a 
1065 graphical interface, and so on. \newline
1066
1067 %To exit \bbi, type :
1068 %\begin{verbatim}
1069 %> quit
1070 %Good bye !
1071 %\end{verbatim}
1072
1073
1074
1075 % ==========================================
1076 \hrule
1077
1078 \paragraph{Summary}
1079 %\hrule
1080 \begin{itemize}
1081 \item The \texttt{include} command allows to load a package, and the complex black boxes that come with it..
1082 \item \texttt{help} gives help on :
1083 \begin{itemize} 
1084 \item Available commands if you just type \texttt{help}.
1085 \item A particular command if you type \texttt{help <command-name>}.
1086 \item All available packages and their boxes (without description) if you type \texttt{help packages}.
1087 \item A particular package and its boxes (with brief description) if you type \texttt{help <package-name>}.
1088 \item A particular black box type (with full description) if you type \texttt{help <box-type-name>}. In particular, \texttt{help workspace} displays information on the content of the \texttt{'workspace'} black box, which stores the boxes created by the user (by \texttt{new}).
1089 \end{itemize}
1090 %\item \texttt{list} displays the list of black box instances created so far (by \texttt{new}).
1091 \item \texttt{new} : creates an instance of a black box. 
1092 \item \texttt{set} : sets the value of an input of a black box. 
1093 \item Under any component of  \bbStudions, to reference the input called \texttt{i} 
1094 of a black box called \texttt{b} you must type \texttt{'b.i'}. 
1095 The same syntax holds for outputs.
1096 \item \texttt{print} : prints a string, substituting each substring of the form \$b.o\$ by the value of the output \texttt{o} of the black box \texttt{b}. Note that an
1097 implicit trailing 'new line character' is added at the final string.
1098 \item \texttt{exec} : runs, if needed, the process of a box. 
1099 %\item \texttt{quit} : quits \bbi.
1100 \end{itemize}
1101 \hrule
1102
1103 %\paragraph{Note :}
1104 %A more 'modern' way to proceed is to run \texttt{bbStudio}, drag and drop the  \texttt{Command} bookmark to the lower \texttt{Welcome to bbStudio!} bar.
1105 %Wou'll get something like in figure \ref{bbCommandPlusHelp} :
1106
1107 %\begin{figure}[!ht]
1108 %\caption{\label{bbCommandPlusHelp}
1109 %An other way to run the command interpreter}
1110 %\begin{center}
1111 %\includegraphics[width=0.5\textwidth]{bbCommandPlusHelp.png}
1112 %\end{center}
1113 %\end{figure}
1114
1115 % ==========================================
1116
1117 % ==========================================
1118 \subsubsection{Connecting black boxes}
1119 \label{bbi-connecting-black-boxes}
1120 % ==========================================
1121
1122 \BBTK allows to create 
1123 and execute processing chains, 
1124 also called \emph{pipelines}, 
1125 by connecting black boxes.
1126 This section explains how to do it with examples. 
1127 Read section \ref{bbi-more-on-pipeline-processing} to get 
1128 more information on pipeline processing.
1129
1130 First start \bbStudio and load the package \texttt{std}, typing :
1131 \begin{verbatim}
1132 > include std
1133 \end{verbatim}
1134 in the 'Command' part.
1135
1136 Assume you want to compute $1+2+3$. You can do it by 
1137 chaining two \texttt{Add} boxes, as shown in figure 
1138 \ref{bbi-fig-connecting-black-boxes-1}. 
1139
1140 \begin{figure}[!ht]
1141 \caption{\label{bbi-fig-connecting-black-boxes-1} A simple pipeline which adds 3 numbers}
1142 \begin{center}
1143 \includegraphics[width=0.5\textwidth]{1plus2plus3.png}
1144 \end{center}
1145 \end{figure}
1146
1147
1148 The \bbi instructions to create and execute this pipeline are :
1149 \begin{verbatim}
1150 > new Add a
1151 > new Add b
1152 > connect a.Out b.In1
1153 > set a.In1 1
1154 > set a.In2 2
1155 > set b.In2 3
1156 > print $b.Out$
1157 \end{verbatim}
1158
1159 You will see the (very expected) result :
1160 \begin{verbatim}
1161 6
1162 \end{verbatim}
1163
1164 The first three commands build the pipeline, 
1165 the next three set \texttt{a} and \texttt{b} black boxes inputs and the last one 
1166 prints \texttt{b} black box output (the pipeline is executed before printing, because the interpretor 'knows' the box  \texttt{b}, 
1167 whose output is requested, is not up to date.
1168  
1169 The command \texttt{'connect a.Out b.In1'} ``plugs'' the output 
1170 \texttt{Out} of the box \texttt{a} into the input \texttt{In1} of the 
1171 box \texttt{b}. 
1172 Once the boxes are connected, the processing of the two boxes are chained :
1173 getting the output of \texttt{b} requires getting its inputs, 
1174 hence getting the output of \texttt{a} which is connected to it. 
1175 This pipeline mechanism can recurse into arbitrary long 
1176 chains of boxes (see \ref{bbi-more-on-pipeline-processing} 
1177 for details).
1178
1179
1180 Lets' consider an other, more image oriented, example :
1181
1182 \begin{verbatim}
1183 > include vtk
1184 > include wx
1185 > include itk
1186 > include wxvtk
1187
1188 > new FileSelector fileDialog
1189 > new ImageReader  reader 
1190 > new Slider       slider
1191 > new Viewer2D     viewer
1192
1193 > connect fileDialog.Out   reader.In 
1194 > connect reader.Out       viewer.In
1195 > connect slider.Out       viewer.Slice
1196 > connect slider.BoxChange viewer.BoxExecute
1197
1198 > exec viewer
1199 \end{verbatim}
1200
1201 Some explainations : the \texttt{include} instructions load the necessary packages. \\
1202
1203 \texttt{new FileSelector} will pop a File Selector, at run time, that will out the user chosen file name. \\
1204 \texttt{new Slider} will pop a Slider, at run time, that will out an integer, used later as a slice number.\\ 
1205 \texttt{new ImageReader} will read any itk readable file, whose name is passed as a std::string, and return a itk::ImagePointer.\\
1206 \texttt{new Viewer2D} display a plane, whose number id specified by an integer.\\
1207 \\
1208 \texttt{connect fileDialog.Out   reader.In} plugs the output of the File Selector (a std::string) to the input of the reader (a std::string, too).\\
1209 \texttt{connect reader.Out       viewer.In} plugs the output of the reader (an itk::ImagePointer) to the input of the Viewer (a vtkImageData *)\\
1210 \texttt{connect slider.Out       viewer.Slice} plugs the output of the slider (an int) to an other output (named Slide) of the viewer.\\
1211 \texttt{connect slider.BoxChange viewer.BoxExecute} says the viewer that it must re process itself any time the slider is modified.\\
1212 \\
1213 \texttt{exec viewer} processes the viewer.
1214
1215
1216 This would correspond to the graph in figure \ref{bbi-simplegraph}
1217
1218
1219 \begin{figure}[!ht]
1220 \caption{\label{bbi-simplegraph}(Very) simple Graph of a (very) simple pipeline}
1221 \begin{center}
1222 \includegraphics[width=0.8\textwidth]{bbi-simplegraph.png}
1223 \end{center}
1224 \end{figure}
1225    
1226 Of course, to be able to connect two boxes, 
1227 the output and the input must be compatibles. 
1228 You can always connect an output to an input of the \emph{same} type, 
1229 but you can do more, thanks to particular (hidden) black boxes called {\bf adaptors}.
1230
1231 An adaptor is a black box which has at least one input, called \texttt{In}, 
1232 and at least one ouput called \texttt{Out} and whose role is to convert 
1233 a data of the type of \texttt{In} 
1234 into a data of the type of \texttt{Out} (other inputs or outputs may serve 
1235 to parameter the adaptor or retreive other useful information).
1236
1237 Under \bbStudions, if you type :
1238 \begin{verbatim}
1239 > load std
1240 > help std all
1241 \end{verbatim}
1242 you get :
1243 \begin{verbatim}
1244  Package std v1.0.0 - laurent.guigues@creatis.insa-lyon.fr
1245  Basic useful black boxes
1246  Black boxes : 
1247       ...
1248    BoolToString        [DA]  : Converts a Bool (bool) into a string
1249    CastBoolToChar      [DA]  : Static cast from Bool (bool) to Char (signed c...
1250    CastBoolToDouble    [DA]  : Static cast from Bool (bool) to Double (double...
1251       ...
1252    CastBoolToUChar     [DA]  : Static cast from Bool (bool) to UChar (unsigne...
1253    CastBoolToUInt      [DA]  : Static cast from Bool (bool) to UInt (unsigned...
1254       ...
1255    CastUIntToBool      [DA]  : Static cast from UInt (unsigned int) to Bool (...
1256    CastUIntToChar      [DA]  : Static cast from UInt (unsigned int) to Char (...
1257    CastUIntToDouble    [DA]  : Static cast from UInt (unsigned int) to Double...
1258       ...      
1259
1260 \end{verbatim}
1261
1262 \texttt{[DA]}  stands for \emph{default adaptor}.
1263
1264 Once you have loaded the package \texttt{std}, you can 
1265 plug an output of type \texttt{char} into an input of type \texttt{double}. 
1266 When the interpreter encounters the \texttt{connect} command, 
1267 it looks for an adequate \emph{adaptor} in the  loaded packages. 
1268 In our case, as the package \texttt{std} provides the 
1269 \texttt{CastUCharToDouble} adaptor, the interpreter automatically creates an 
1270 instance of this adaptor and place it \emph{between} 
1271 the output and the input you want to connect 
1272 (however this adaptor is hidden to you, 
1273 it is embedded into the created connection and does not appear 
1274 as an existing black box). 
1275 When the pipeline is processed the 
1276 adaptor converts the output data into the required input type, 
1277 in a totally transparent way.
1278 In our example, the \texttt{CastUCharToDouble} adaptor 
1279 would simply cast the value of the \texttt{char} into a \texttt{double}, 
1280 however arbitrarily complex type conversion may be done.\\
1281 \texttt{WARNING} : these adaptors are \texttt{C++ static cast}, i.e., there is, right now',
1282  no 'intelligent' conversion (only truncation) e.g. think to \texttt{CastDoubleToUChar}!
1283
1284 %\begin{verbatim}
1285 %Question (for info-dev): 
1286 %if two adaptors with the same input and output types exist 
1287 %in two different packages, currenly loaded, 
1288 %which one is chosen by the interpreter at connection time?
1289 %A feature is missing to specify explicitely which one user wants to choose 
1290 %(use a namespace notation ?)
1291
1292 %-> Role of default adaptors
1293 %\end{verbatim}
1294
1295 Note that the \texttt{set} and \texttt{print} commands of interpreter 
1296 work with adaptors from \texttt{string} to the type of the input to set 
1297 or from the type of the output to print to \texttt{string}. 
1298 Hence in order to \texttt{set} or \texttt{print} values the adequate 
1299 adaptors must be available in the packages currently loaded. \\
1300
1301
1302 % ==========================================
1303 \hrule
1304 \paragraph{Summary}
1305 %\hrule
1306 \begin{itemize}
1307 \item The \texttt{connect} command allows to connect two black boxes
1308 \item You can connect two black boxes if (and only if) : 
1309 \begin{itemize}
1310 \item The output and the input are of the same type, or
1311 \item There is an adaptor black box in the packages loaded which 
1312 converts data of the output type into data of the input type
1313 \end{itemize}
1314 \item \texttt{help <package name>} does not display the adaptors of the package. To see them use : \texttt{help <package name> all}.
1315 including adaptors
1316 \end{itemize}
1317 \hrule
1318 % ==========================================
1319
1320 % ==========================================
1321 \subsubsection{Creating complex black boxes}
1322 \label{bbi-complex-black-boxes}
1323 % ==========================================
1324
1325 Remember the pipeline of figure 
1326 \ref{bbi-fig-connecting-black-boxes-1}, which 
1327 computed the sum of three doubles.
1328 You can consider it as a whole and define 
1329 a new black box type, which will be a \emph{complex black box}, 
1330 having three inputs and one output, 
1331 as shown in figure \ref{bbi-fig-complex-black-box-1}.
1332
1333 \begin{figure}[!ht]
1334 \caption{\label{bbi-fig-complex-black-box-1} Creating the complex black box \texttt{Add3}}
1335 \begin{center}
1336 \includegraphics[width=0.5\textwidth]{Add3.png}
1337 \end{center}
1338 \end{figure}
1339
1340 The \bbi commands to define this complex black box are 
1341 the following :
1342
1343 \begin{verbatim}
1344 > load std
1345 >
1346 > define Add3
1347 >
1348 > new Add a
1349 > new Add b
1350 > connect a.Out b.In1
1351 >
1352 > author "myself"
1353 > description "adds 3 doubles"
1354 > input x a.In1 "first double to add"
1355 > input y a.In2 "second double to add"
1356 > input z b.In2 "third double to add"
1357 > output result b.Out "output"
1358 >
1359 > endefine
1360 \end{verbatim}
1361
1362 Explainations :
1363
1364 As we will use \texttt{Add} boxes, we need to load the package \texttt{std}, which is done in first line.
1365
1366 The command \texttt{define} then starts the definition 
1367 of the complex box type, which will be called \texttt{Add3}. 
1368
1369 The next three lines define the pipeline, 
1370 exactly in the same way than outside a complex box definition. 
1371
1372 The commands \texttt{author}, \texttt{description}, \texttt{input} 
1373 and \texttt{output} are commands specific to complex boxes definition :
1374
1375 \texttt{author} and \texttt{description} are used for the documentation 
1376 of the new box. You can provide multiple \texttt{author} or 
1377 \texttt{description} commands, the arguments of the commands will 
1378 be concatenated to produce the final author and description strings.
1379
1380 \texttt{input} and \texttt{output} are used to define the inputs and outputs 
1381 of the new complex box. 
1382 Their syntax is the same : for each new input/output you need to say 
1383 to which internal input/output it corresponds and to provide 
1384 a help string documenting the input/output.
1385 In our example, we define that the box \texttt{Add3} has 
1386 three inputs : \texttt{x}, \texttt{y} and \texttt{z}. 
1387 The input \texttt{x} corresponds to the input \texttt{In1} of the 
1388 internal box \texttt{a}. 
1389 In the same way, the external input \texttt{y} 
1390 corresponds to the internal input \texttt{a.In2}, and 
1391 the external input \texttt{In3} to \texttt{b.In2}. 
1392 The only output of the new box is called \texttt{result}
1393 and corresponds to \texttt{b.Out}. 
1394 The figure \ref{bbi-fig-complex-black-box-1} 
1395 illustrates the external to internal 
1396 input/output correspondence.
1397
1398 Finally, the \texttt{endefine} command ends the definition of the 
1399 new box type.
1400
1401 After this definition, if you ask for help 
1402 on packages, you get :
1403 \begin{verbatim}
1404 > help packages
1405 std
1406   Add
1407   ...
1408 user
1409   Add3
1410   workspace
1411 \end{verbatim}
1412
1413 The \texttt{user} package now contains a new black box type, called 
1414 \texttt{Add3}. If you ask for help on this type of box, you get :
1415 \begin{verbatim}
1416 > help Add3
1417 Complex Black Box <user::Add3>
1418  adds 3 doubles
1419  By : myself
1420  * Inputs : 
1421     'x'      <double> : first double to add
1422     'y'      <double> : second double to add
1423     'z'      <double> : third double to add
1424  * Outputs : 
1425     'result' <double> : output
1426  * Boxes : 
1427     'a' <std::Add>
1428     'b' <std::Add>
1429 \end{verbatim}
1430
1431 and you can use it like any other box, for example type :
1432
1433 \begin{verbatim}
1434 > new Add3 a
1435 > set a.x 1
1436 > set a.y 2
1437 > set a.z 3
1438 > print $a.result$
1439 6
1440 \end{verbatim}
1441
1442
1443 As a side note, we can say that, for consistency reasons, it would have been better to name  
1444 \texttt{In1}, \texttt{In2} and \texttt{In3} the inputs of the black box \texttt{Add3}, 
1445 since all the 'natural entry' of a box is named \texttt{In}, or \texttt{In}\emph{x} if there are more than one  'natural
1446 entry'
1447 .
1448 \newline
1449 % ==========================================
1450 \hrule
1451 \paragraph{Summary}
1452 %\hrule
1453 \begin{itemize}
1454 \item The \texttt{define/endefine} commands allows to define complex black box types, i.e. types of black boxes made up of other black boxes. 
1455 Inside a \texttt{define/endefine} block :
1456 \begin{itemize}
1457 \item The \texttt{author} and \texttt{description} commands allow to document the new type of box
1458 \item The \texttt{input} and \texttt{output} commands allow to define the inputs and outputs of the new type of box, that is to which inputs and outputs 
1459 of internal boxes they correspond.  
1460 \end{itemize}
1461 \end{itemize}
1462 \hrule
1463 % ==========================================
1464
1465 % ==========================================
1466 \subsubsection{Writing scripts}
1467 \label{bbi-writing-scripts}
1468 % ==========================================
1469
1470 Once you have defined a new type of complex box, you 
1471 may like to reuse it. To do this, you can simply 
1472 write the \bbi commands defining the new box 
1473 into a text file and afterwards include that file in \bbins. 
1474 Doing this, you start writing \bbi scripts.
1475 The conventionnal (and mandatory) extension for such scripts is \texttt{bbs} 
1476 (black box script).
1477 For consistency reasons, you are requested to prepend \texttt{bb} to the name.
1478
1479 For example, the \texttt{Add3} complex box we previously worked on 
1480 can be defined in the \texttt{bbAdd3.bbs} file :
1481
1482 \begin{file}{bbAdd3.bbs}
1483 \begin{verbatim}
1484 # Defines the Add3 black box which adds 3 doubles 
1485 load std
1486
1487 define Add3
1488   # I am the author 
1489   author "myself"
1490   description "adds 3 doubles"
1491   # Pipeline creation
1492   new Add a
1493   new Add b
1494   connect a.Out b.In1
1495   # Inputs definition
1496   input x a.In1 "first double to add
1497   input y a.In2 "second double to add
1498   input z b.In2 "third double to add"
1499   # Output definition
1500   output result b.Out "output"
1501 endefine
1502 \end{verbatim}
1503 \end{file}
1504
1505 Lines starting with a \texttt{\#} character or a \texttt{\//\//} character are ignored, they 
1506 are considered as comments by the interpreter.
1507 To use this file in \bbStudions, click on the \texttt{include} button, and browse your filestore to find the file.
1508
1509 \begin{verbatim}
1510 > include bbAdd3.bbs
1511 > help Add3
1512 Complex Black Box <user::Add3>
1513  adds 3 doubles
1514  By : myself
1515  * Inputs : 
1516     'x'      <double> : first double to add
1517     'y'      <double> : second double to add
1518     'z'      <double> : third double to add
1519  * Outputs : 
1520     'result' <double> : output
1521  * Boxes : 
1522     'a' <std::Add>
1523     'b' <std::Add>
1524 >
1525 and so on ...
1526 \end{verbatim}
1527
1528 If the file has the \texttt{bbs} extension, you can ommit it and just type :
1529 \begin{verbatim}
1530 > include Add3
1531 \end{verbatim}
1532
1533 \subsubsection{Creating complex black boxes that use complex black boxes}
1534 \label{bbi-complex-complex-black-boxes}
1535
1536
1537 Of course, you can include script files in other script files, 
1538 like in the following example :
1539
1540 \begin{file}{bbAdd4.bbs}
1541 \begin{verbatim}
1542 # Defines the Add4 black box which adds 4 doubles 
1543 include Add3
1544
1545 define Add4
1546   author "myself"
1547   description "adds 4 doubles"
1548   new Add3 a
1549   new Add b
1550   connect a.Out b.In1
1551   input In1 a.In1 "first double to add
1552   input In2 a.In2 "second double to add
1553   input In3 a.In3 "third double to add"
1554   input In4 b.In2 "fourth double to add"
1555   output Out b.Out "output"
1556 endefine
1557 \end{verbatim}
1558 \end{file}
1559
1560
1561
1562 \subsubsection{Naming Conventions}
1563 \label{bbi-Naming Conventions}
1564
1565
1566 % ==========================================
1567 %\hrule
1568 %\paragraph{Naming Conventions}
1569 %\hrule
1570
1571 %\hrule
1572 % ==========================================
1573 \begin{itemize}
1574 \item
1575 File names : 
1576 For consistency reasons, you are requested to prepend \texttt{bb}, and postpone an extention \texttt{.bbs},
1577 to the names of the files that hold a \texttt{complex black box} definition.
1578
1579 For example, the \texttt{Add3} complex box we previously worked on 
1580 can be defined in the \texttt{bbAdd3.bbs} file.
1581 \item
1582 Search Paths :
1583 For consistency reasons, the names of dynamic libraries holding the packages must start by \texttt{libbb}.
1584 For instance, the package \texttt{wx} will be in the library \texttt{libbbwx.dll} (Windows) or \texttt{libbbwx.so}
1585 (Linux).
1586
1587
1588 \end{itemize}
1589 % ==========================================
1590 \hrule
1591
1592 \paragraph{Summary}
1593 %\hrule
1594 \begin{itemize}
1595 \item The \texttt{include} command tells the interpreter to include a script file.
1596 \item Lines starting with a \texttt{\#} or with a \texttt{\//\//} are considered as comments by the interpreter.
1597 \item Lines between a line starting with a \texttt{\//*} an a line starting with a \texttt{*\//} are considered as comments by the interpreter.
1598 \end{itemize}
1599
1600 \hrule
1601 % ==========================================
1602
1603 % ==========================================
1604 \subsubsection{Creating command line applications}
1605 \label{bbi-command-line-app}
1606 % ==========================================
1607
1608 Now that you know how to create complex black boxes 
1609 (with \texttt{define/endefine}), think 
1610 back to the \texttt{workspace} object. 
1611 Remember that it is also 
1612 a \texttt{complex black box}. 
1613 Actually, when you type interpreter commands 
1614 outside a \texttt{define/endefine} block, 
1615 you progressively define the \texttt{workspace} 
1616 complex black box.
1617 You can think of it like if at start the interpreter
1618 was issuing a command \texttt{'define workspace'} 
1619 and then letting you define the interior of the box 
1620 \texttt{workspace}.
1621
1622 Remember that the command \texttt{inputs} 
1623 allows to define an input of a complex box. 
1624 Now, if you use the command \texttt{input} 
1625 outside a \texttt{define/endefine} block then 
1626 it defines an input of the \texttt{workspace} box, 
1627 that is an input of the \emph{main program}. 
1628 This input will then be connected to the 
1629 parameters that the user passes to the command line.
1630
1631 For example, consider the script : 
1632
1633 \begin{file}{add.bbs}
1634 \begin{verbatim}
1635 load std
1636 new Add a
1637 input x a.In1 "first number to add"
1638 input y a.In2 "second number to add"
1639 print "x+y=$a.Out$"
1640 \end{verbatim}
1641 \end{file}
1642
1643 The third and fourth lines define two inputs \texttt{x} 
1644 and \texttt{y}. When you execute this script, 
1645 you can pass these two arguments on the command line, 
1646 like this :
1647
1648 \begin{verbatim}
1649 > bbi add x=1 y=1
1650 x+y=2
1651 \end{verbatim}
1652
1653 You can also invoke \bbi the option \texttt{-h}, 
1654 which gives help on the \texttt{workspace} box :
1655
1656 \begin{verbatim}
1657 > bbi add -h
1658  User's workspace
1659  By : bbi (internal)
1660  * Inputs : 
1661     'x' <double> : first number to add
1662     'y' <double> : second number to add
1663 \end{verbatim}
1664
1665 To get a better help, use the \texttt{description} 
1666 and \texttt{author} commands :
1667
1668 \begin{file}{add.bbs}
1669 \begin{verbatim}
1670 description "Adds two numbers"
1671 author "foo@bar.com"
1672 load std
1673 new Add a
1674 input x a.In1 "first number to add"
1675 input y a.In2 "second number to add"
1676 print "x+y=$a.Out$"
1677 \end{verbatim}
1678 \end{file}
1679
1680 Now if you ask for help on the \texttt{add} script, you get :
1681
1682 \begin{verbatim}
1683 > bbi add -h
1684  Adds two numbers
1685  By : foo@bar.com
1686  * Inputs : 
1687     'x' <double> : first number to add
1688     'y' <double> : second number to add
1689 \end{verbatim}
1690
1691 Rather than getting the inputs of a script 
1692 from the command line, you can ask \bbi to 
1693 prompt the user for the values, using the \texttt{-t}
1694 commutator :
1695
1696 \begin{verbatim}
1697 > bbi add -t
1698 x=[the program waits for user answer]2
1699 y=[the program waits for user answer]5
1700 x+y=7
1701 \end{verbatim}
1702
1703 \bbStudio is always compiled in graphical mode (with \wx), therefore
1704 you can also use the \texttt{-g} commutator. 
1705 \bbi then prompts the user in graphical mode, 
1706 displaying a dialog box for each input,
1707 like in fig. \ref{bb-input-dialog-box}.
1708
1709 \begin{figure}[!ht]
1710 \caption{\label{bb-input-dialog-box}Input dialog box}
1711 \begin{center}
1712 \includegraphics[width=0.6\textwidth]{enter-the-value-of-x.png}
1713 \end{center}
1714 \end{figure}
1715
1716 % ==========================================
1717 \hrule
1718 \paragraph{Summary}
1719 %\hrule
1720 \begin{itemize}
1721 \item The \texttt{input}, \texttt{description} and \texttt{author} commands,
1722 when they are used outside a \texttt{define/endefine} block allow 
1723 to define the inputs, description and author of the main program.
1724 \item Inputs of the main program can be passed on the command line 
1725 using the syntax \texttt{<input-name>=<value>}. 
1726 No white space is allowed, if the value or the input name 
1727 contains white spaces, enclose them 
1728 between double quotes, e.g. \texttt{"parameter with white spaces = gnu's not unix"}.
1729 \item The \texttt{-h} option of \bbi prints help on the main program.
1730 \item The \texttt{-t} option of \bbi orders the program to prompt for its inputs in text mode.
1731 \item The \texttt{-g} option of \bbi orders the program to prompt for its inputs in graphical mode.
1732 \end{itemize}
1733 \hrule
1734 % ==========================================
1735
1736 % ==========================================
1737 \subsubsection{Using graphical interface boxes (widget boxes)}
1738 \label{bbi-widget}
1739 % ==========================================
1740
1741 % ==========================================
1742 \subsubsection{Overwiew}
1743 \label{bbi-overview}
1744 % ==========================================
1745
1746 \bbStudio is always compiled in graphical mode 
1747 (option \texttt{BUILD\_bbi\_GRAPHICAL} of \cmakens, requires \wxns),
1748 then you can use special black boxes which are 
1749 graphical interface components (widgets). 
1750 Basic components are provided in the package \texttt{wx}, 
1751 such as buttons, sliders, file open/save dialogs, etc.
1752
1753 As first example, type the following commands in \bbi :
1754 \begin{verbatim}
1755 > load wx 
1756 > new InputText t
1757 > print $t.Out$\n
1758 \end{verbatim}
1759
1760 When you type \texttt{enter} after the last line, 
1761 a window pops up in which you can entrer a text.
1762 When you close the window, the text you entered is printed by 
1763 the \texttt{print} command.
1764
1765 Type \texttt{help wx}, you get something like :
1766 \begin{verbatim}
1767  Package wx v1.0.0- info-dev@creatis.insa-lyon.fr
1768  Basic graphical interface elements (sliders, buttons ...) based on wxWidgets
1769  Black boxes : 
1770    ColourSelector        : Colour Selector dialog (bbfication of wxColourSele...
1771    ColourSelectorButton  : A button which displays a colour picker dialog whe...
1772    CommandButton         : Button which executes bbi commands
1773    DirectorySelector     : Pops up a directory selection dialog (wxDirDialog)
1774    FileSelector          : Pops up a file selection dialog for reading or sav...
1775    InputText             : A zone in which the user can enter a text (wxTextC...
1776    LayoutLine            : LayoutLine widget (wxBoxSizer)
1777    LayoutSplit           : Widget which splits a window in two fixed size par...
1778    LayoutTab             : LayoutTab widget (wxNotebook)
1779    OutputText            : Text zone to be inserted into a window (wxStaticTe...
1780    RadioButton           : RadioButton group widget 0-9 entries
1781    Slider                : Slider widget (wxSlider)
1782 \end{verbatim}
1783
1784 You can reproduce the same experiment as above using a 
1785 \texttt{Slider} or a \texttt{FileDialog} rather than a \texttt{InputText}.
1786 See the files \texttt{test*.bbs} in the \texttt{scripts/test} directory.
1787
1788
1789 %There are two kinds of widgets : ``terminal'' widgets and ``container'' widgets.
1790 %The \texttt{InputText}, \texttt{FileDialog} or \texttt{Slider} widgets 
1791 %are ``terminal'' widgets. 
1792 %``container'' widgets are of another kind : they are 
1793 There is a special kind of widget, called '\texttt{Layout}', designed to  
1794 contain other widgets in order to build larger dialog boxes. 
1795 For example, the \texttt{LayoutSplit} widget is a container which 
1796 ``splits'' horizontally a window into two parts, 
1797 each part including another widget. 
1798 The size of the two parts can be adjusted by the user thanks 
1799 to a ``handle''.
1800
1801 The script \texttt{scripts/test/testSplit.bbs} demonstrate its use. 
1802 Run it : it displays a window with two sliders. 
1803 Move the sliders and close the window. 
1804 The final positions of the sliders are printed out. 
1805 Now edit the file to see how this is done :
1806
1807 \begin{file}{scripts/test/testSplit.bbs}
1808 \begin{verbatim}
1809 load std
1810 load wx
1811
1812 new Slider s1
1813 new Slider s2
1814
1815 new LayoutSplit s
1816 connect  s1.Widget s.Widget1
1817 connect  s2.Widget s.Widget2
1818
1819 print s1=$s1.Out$\\n
1820 print s2=$s2.Out$\\n
1821 \end{verbatim}
1822 \end{file}
1823
1824 First, the two sliders \texttt{s1} and \texttt{s2} are created.
1825 A \texttt{LayoutSplit} box \texttt{s} is also created. 
1826 The \texttt{connect} commands then ``includes'' the sliders in the 
1827 split ``container''. 
1828 The input \texttt{Widget} is common to all widget boxes : 
1829 every widget can be inserted into another widget. 
1830 The outputs \texttt{Widget1},\texttt{Widget2}  are specific of \emph{container} 
1831 widgets 
1832 (in \bbi type \texttt{help Slider} : 
1833 you will see the output \texttt{Widget}; 
1834 type \texttt{help LayoutSplit} : 
1835 you will see the inputs \texttt{Widget1} and \texttt{Widget2} 
1836 and the output \texttt{Widget}). 
1837 When you connect the \texttt{Widget} output of a container 
1838 to the \texttt{Widget}i input of a widget, 
1839 you order to include the widget in the container.
1840 Of course, the order of connection is important. 
1841 In our case, the slider \texttt{s1} is included first, 
1842 then the slider \texttt{s2} : \texttt{s1} will be placed 
1843 on top of \texttt{s2} (the \texttt{LayoutSplit} box is 
1844 implemented that way, but this is arbitrary choice).
1845
1846 Right now, there are only \emph{three} container widgets in the \texttt{wx} package : 
1847 \begin{itemize} 
1848 \item {the \texttt{LayoutSplit} widget} we just described, the \texttt{LayoutLine} , and the \texttt{LayoutTab}
1849 widget. 
1850
1851 \item {the \texttt{LayoutLine} widget} can have multiple children and 
1852 divides its window into as much parts as children, 
1853 each part of equal size. 
1854 The orientation of the \texttt{LayoutSplit} or of the \texttt{LayoutLine}  can be changed by the input \texttt{Orientation}.
1855 See the example \texttt{test/testSizer.bbs}.
1856 With only those two containers you can already create 
1857 complex dialog boxes (of course containers can be nested, which leads to tree-like structures of widgets). \\
1858 See the script \texttt{bbtk/share/bbtk/bbs/wx/appli/ExampleLayoutSplit.bbs} for an example.
1859
1860 \item {The \texttt{LayoutTab}  widget} is based on the \texttt{wxNotebook.}\\
1861 The label of each 'note book' is the name of the object it contains.
1862 \end{itemize}
1863
1864
1865 %=====> TODO \\
1866
1867
1868 %One word about a special widget in the package \texttt{wx} : 
1869 %the \texttt{Button}... to be continued.
1870
1871 % ==========================================
1872 \subsubsection{Deeper in the boxes}
1873 \label{bbi-deep-box}
1874 % ==========================================
1875
1876 Any widget box has two mandatory Inputs :
1877 \begin{itemize}
1878   \item {\bf\emph{BoxExecute}}     : Any signal received by this input executes the box
1879   \item {\bf\emph{BoxProcessMode}} : Sets the processing mode of the box :
1880   \begin{itemize}
1881     \item {\bf\emph{Pipeline}} : bbBackwardUpdate() calls Process() only if Status == MODIFIED \\
1882                                  The box executes itself only when an entry was changed (normal pipeline processing).
1883     \item {\bf\emph{Reactive}} : bbSetModifiedStatus() calls bbUpdate() \\
1884                                  Warning : Re-processed immediately when \emph{any entry} changed.\\
1885                                  To be more selective, better use \texttt{connect A.BoxChange \emph{currentBox}.BoxExecute}.    
1886     \item {\bf\emph{Always}}   : bbUpdate() always calls Process. \\
1887                                  Usefull for 'sources', that must be processed, even when no entry changed (e.g. : FileSelector, ColorSelector)\\
1888                                  This one is not end user intended (for Package developer only)
1889   \end{itemize}   
1890 \end{itemize}
1891
1892 Any widget box has five Inputs, that will be dealt with only if the box is not connected to the \emph{Widget}i of any \emph{Layout box} :  
1893 \begin{itemize}
1894   \item {\bf\emph{WinHeight}} : Height of the window 
1895   \item {\bf\emph{WinWidth}}  : Width of the window  
1896   \item {\bf\emph{WinTitle}}  : Title of the window
1897   \item {\bf\emph{WinClose}}  : Any received signal closes the window
1898   \item {\bf\emph{WinHide}}   : Any received signal hides the window
1899   \item {\bf\emph{WinDialog}} : When set to 'true', creates a \emph{dialog window}, that blocks the pipeline until it is closed (\emph{modal})   
1900 \end{itemize}
1901
1902
1903 Any \emph{Layout box} (i.e. \emph{LayoutLine}, \emph{LayoutSplit} or \emph{LayoutTab}) has at one or more mandatory Inputs :
1904 \begin{itemize}
1905   \item {\bf\emph{Widget}}\texttt{i} : e.g. a \emph{LayoutSplit} box (Widget which splits a window in two resizeable parts) 
1906        has two Input parameters \emph{Widget1} and \emph{Widget2}, used to embed the child windows.\\
1907        e.g. a  \emph{LayoutLine} divides the window in up to 9 (depending on the number of inputs \emph{Widget}i) fixed size parts.  
1908 \end{itemize} 
1909
1910
1911 Any widget box has two mandatory Outputs  :
1912
1913 \begin{itemize}
1914   \item {\bf\emph{Widget}} : that is the \texttt{wxWindow} itself. If it's not connected to the \texttt{Widget}\emph{i} of any \emph{Layout box}, it
1915      will popup. If it's connected to the \texttt{Widget}\texttt{\emph{i}} of any \texttt{Layout box}, it will be embedded in its parent window.
1916   \item {\bf\emph{Boxchange}}  : Signals any modification of the box. This output may be connect if necessary to the \emph{BoxExecute} entry of an other box,
1917    further within the execution pipeline.
1918 \end{itemize}    
1919
1920
1921
1922 % ==========================================
1923 \subsection{More on ...}
1924 \label{bbi-more-on}
1925 % ==========================================
1926
1927 % ==========================================
1928 %\subsubsection{Black box packages}
1929 %\label{bbi-more-on-packages}
1930 % ==========================================
1931 %There are various others user-intended packages :
1932
1933 %\begin{verbatim}
1934 %---> Were moved in a 'Reference Manual' ?\\
1935 %---> Any suggestion welcome!
1936 %\end{verbatim}
1937
1938 %\begin{itemize}
1939 %\item{vtk} \\
1940 %\item{itk} \\
1941 %\item{...} \\
1942 %\end{itemize}
1943 % ==========================================
1944 \subsubsection{Pipeline processing}
1945 \label{bbi-more-on-pipeline-processing}
1946 % ==========================================
1947 \begin{itemize}
1948 \item the ``control'' mechanism in bbi.
1949
1950 When a box is requested to update itself, it asks (recursively) each one of its inputs if it was modified.\\
1951 In normal pipe-line mode, it will be re-processed if at least one of its imputs was actually modified, as the output of a previous box.
1952
1953 (switch exec commands, e.g. Button)
1954 \item the role of ProcessMode to update widgets.
1955 \end{itemize}
1956 % ==========================================
1957 \subsubsection{Complex black boxes}
1958 \label{bbi-more-on-complex-black-boxes}
1959 Creation of complex widgets (containers, contained...)
1960
1961 You can include script files in other script files, 
1962 like in the following example :
1963
1964
1965 \begin{verbatim}
1966 # Defines the Add4 black box which adds 4 doubles 
1967 include Add3
1968 define Add4
1969   author "myself"
1970   description "adds 4 doubles"
1971   new Add3 a
1972   new Add b
1973   connect a.Out b.In1
1974   input In1 a.In1 "first double to add"
1975   input In2 a.In2 "second double to add"
1976   input In3 a.In3 "third double to add"
1977   input In4 b.In2 "fourth double to add"
1978   output Out b.Out "output"
1979 endefine
1980 \end{verbatim}
1981
1982 The inner boxes have they own entries (In1, In2, In3 for box a, In1, In2 for box b )\\
1983 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
1984 care neither about the inner boxes name, nor about the names of their Inputs.\\
1985 The writer of the complex box has the ability to give these inputs a meaningfull name !
1986 \begin{verbatim}
1987   input In3 a.In3 "third double to add"
1988   input In4 b.In2 "fourth double to add"
1989 \end{verbatim}
1990
1991 %\subsubsection{Advanced issues}
1992 %\paragraph{Reducing the number of inputs of a box}
1993
1994 % ==========================================
1995 %\subsubsection{Errors}
1996 %\label{bbi-more-on-errors}
1997
1998 % ==========================================
1999 \subsubsection{Creating and using your own uninstalled version of bbStudio}
2000 \label{bbi-more-on-your_own_version}
2001
2002 Suppose you want to run your own uninstalled version (say : you downloaded and compiled the
2003 cvs version in order to use a recently commited patch, but you want to be able
2004 to still use the standard version).
2005  
2006 You have to :
2007 \begin{itemize} 
2008 \item cvs checkout the sources :
2009 \begin{verbatim}
2010 cvs checkout bbtk
2011 \end{verbatim}
2012 \item 
2013 create a build directory
2014 \begin{verbatim}
2015 mkdir buildBBTK
2016 \end{verbatim}
2017 \item cd in the build directory:
2018 \begin{verbatim}
2019 cd buildBBTK
2020 \end{verbatim}
2021 \item run ccmake.
2022 \begin{verbatim}
2023 ccmake ../bbtk
2024 \end{verbatim}
2025
2026 Don't forget to switch ON the flag \texttt{BBTK\_COMPILE\_DEBUG\_MESSAGE} \\
2027 (see figure : \ref{bb-ccmake})
2028
2029 \begin{figure}[!ht]
2030 \caption{\label{bb-ccmake}Running ccmake}
2031 \begin{center}
2032 \includegraphics[width=0.6\textwidth]{ccmake.png}
2033 \end{center}
2034 \end{figure}
2035
2036 \item As usual, type \texttt{c} until there is no longer any area quoted with a * (or highlighted in red)\\
2037 Ask for generation (type \texttt{g} -once is always enough-)
2038
2039 \item Ask for compilation and link.
2040 \begin{verbatim}
2041 make
2042 \end{verbatim}
2043
2044
2045 The dynamic libraries (\texttt{.dll} or \texttt{.so} and the executable programs will be created in the \texttt{bin}
2046 directory of the built tree.
2047
2048 \item choose to install or not your own version.
2049 \begin{verbatim}
2050 make install
2051 \end{verbatim}
2052 Linux users : Don't forget to \texttt{sudo} before.
2053 \end{itemize}
2054 % ==========================================
2055
2056
2057 \newpage
2058
2059
2060
2061 % ==========================================
2062 %\vspace{0.5cm}\hrule \\
2063
2064 \section{Using third party Package}
2065 \label{Third_Party_Package}
2066 % ==========================================
2067 % ==========================================
2068 \subsection{Plugging in a Package}
2069 \label{Plugging_in_a_Package}
2070 % ==========================================
2071
2072 \bbStudio makes it easy for you : in the menu \texttt{Tools} just click on the 
2073 option \texttt{Plug Package}. You will be asked to  to '\texttt{Select
2074 package directory}'. Browse untill you find the the install tree, or the the build tree,
2075 depending whether you installed the package or not.\\
2076
2077 \bbStudio will update the Configuration file, generate the 'Package
2078 documentaion', and update the 'Box List'.\\
2079 You will be able to use the new package just as you did for any other \bbtk
2080 canonical Package.
2081
2082 % ==========================================
2083 \subsection{Hard incorporating of a Package}
2084 \label{Hard_incorporating_of_a_Package}
2085 % ==========================================
2086
2087 If the Package you want to use is supplied in a non standard way (e.g. : you
2088 where given one ore more dynamic libraries (\texttt{.dll} or \texttt{.so}), and
2089 one or more directories containing \bbtk scripts (\texttt{.bbs}), you will have
2090 to proceed to some (simple) manual operations.\\
2091 \texttt{Nota bene} : This way is hightly discouraged !
2092
2093 % ==========================================
2094 \subsubsection{More on the configuration file}
2095 \label{The_configuration_file}
2096 % ==========================================
2097
2098 First, have a glance at the Configuration,  just clicking on \texttt{Config} button of the \texttt{Command} part toolbar.
2099
2100 You'll get something like :
2101
2102 \begin{verbatim}
2103 =============
2104  Configuration
2105  =============
2106  bbtk_config.xml    : [/home/jpr/Creatis/bbtk/binLIN/bin/bbtk_config.xml]
2107  Documentation Path : [/home/jpr/Creatis/bbtk/binLIN/bin/../share/bbtk/doc]
2108  Data Path          : [/home/jpr/Creatis/bbtk/binLIN/bin/../share/bbtk/data]
2109  Temp Directory     : [/home/jpr/Creatis/bbtk/binLIN]
2110  File Separator     : [/]
2111  BBS Paths   
2112  --- [.]
2113  --- [/home/jpr/Creatis/bbtk/binLIN/bin/../share/bbtk/bbs]
2114  --- [/home/jpr/Creatis/bbtk/binLIN/share/bbtk/bbs]
2115  PACKAGE Paths : 
2116  --- [.]
2117  --- [/home/jpr/Creatis/bbtk/binLIN/bin]
2118  --- [/home/jpr/Creatis/bbtk/binLIN/bin/../lib]
2119  --- [/home/jpr/Creatis/bbtk/binLIN/bin]
2120  --- [/home/jpr/Creatis/bbtk/binLIN/bin\Debug]
2121  --- [/home/jpr/Creatis/bbtk/binLIN/bin\Release] 
2122 \end{verbatim}
2123
2124 (depending on who you are, and whether \texttt{bbStudio} is installed or not.)\\
2125
2126 Note the two main parts : \texttt{BBS Paths} and \texttt{PACKAGE Paths}
2127 \subsubsection{How bbStudio uses the Configuration file}
2128 \label{How_bbStudio_uses_the_Configuration_file}
2129
2130
2131 At start, \bbi tries to open an \texttt{xml} 
2132 configuration file named \texttt{bbtk\_config.xml}. 
2133 The search order is 
2134 \begin{enumerate}
2135 \item The current directory
2136 \item The subdir \texttt{.bbtk} of the user's home directory. 
2137 \begin{itemize} 
2138 \item On \texttt{Unix}, the home directory is the
2139 one stored by the environnement variable \texttt{HOME}, 
2140 typically \texttt{/home/username}.
2141 \item On \texttt{Windows}, the home directory is 
2142 the user's profile directory stored by the environnement 
2143 variable \texttt{USERPROFILE}, 
2144 typically \texttt{C:\\...}.
2145 \end{itemize}
2146 \item If none of these two paths contains the file then it creates 
2147 a new one in the \texttt{.bbtk} directory. 
2148 \end{enumerate}
2149
2150
2151 To use a third party Package, you will have to update it.\\
2152
2153 \subsubsection{Modifying the Configuration file}
2154 \label{Modifying_the_Configuration_file}
2155
2156 Just use the \texttt{Open bbtk Config file} option of the \texttt{Files} of the \bbStudio menu.
2157
2158 You will get something like :
2159 \begin{verbatim}
2160 <config>
2161   <description> Sets the search directories in the build tree </description>
2162   <url> </url>
2163   <bbs_path> /home/jpr/Creatis/bbtk/binLIN/share/bbtk/bbs </bbs_path>
2164   <package_path> /home/jpr/Creatis/bbtk/binLIN/bin </package_path> 
2165 # For windows
2166   <package_path> /home/jpr/Creatis/bbtk/binLIN/bin\Debug </package_path> 
2167   <package_path> /home/jpr/Creatis/bbtk/binLIN/bin\Release </package_path> 
2168 #
2169   <data_path> </data_path>
2170
2171   <default_temp_dir>  /home/jpr/Creatis/bbtk/binLIN </default_temp_dir>   
2172 </config>
2173 \end{verbatim}
2174
2175 To use a new Package :
2176 \begin{itemize}
2177 \item {}
2178 After the already existing \texttt{xml} tags 
2179 \texttt{bbs\_path}
2180  (i.e. the lines begining by 
2181  \texttt{<bbs\_path>} 
2182  %bbs_path
2183 and ending by 
2184 \texttt{</bbs\_path>}), 
2185 you can add paths to :
2186 \begin{itemize}
2187 \item A custom folder in which to search for \texttt{.bbs} scripts (\texttt{include} command of \bbins) by adding
2188  an \texttt{xml} tag:\\ 
2189  \texttt{<bbs\_path>} 
2190 \emph{complete\_path\_to\_scripts\_folder}
2191 \texttt{<\/bbs\_path>}.
2192 \end{itemize}
2193
2194 \item {}
2195 After the already existing tags 
2196 \texttt{package\_path}
2197  (i.e. the lines begining by 
2198  \texttt{package\_path} 
2199  %bbs_path
2200 and ending by 
2201 \texttt{/package\_path}), 
2202 you can add paths to :
2203 \begin{itemize}
2204 \item A custom folder in which to search for packages (the dynamic libraries
2205  (\texttt{.dll} or \texttt{.so}, called with the \texttt{load} command of \bbins) by adding an \texttt{xml} tag :\\ 
2206 \texttt{<package\_path>} 
2207 \emph{complete\_path\_to\_dynamic\_library\_folder}
2208 \texttt{<\/package\_path>}.
2209 \end{itemize}
2210 \end{itemize}
2211
2212
2213 %\end{itemize}
2214 % ==========================================
2215 \subsection{Updating the documentation}
2216 \label{Updating_the_documentation}
2217 % ==========================================
2218 You may add your own boxes (simple boxes, if you are aware enough in \CPP
2219 language), or complex boxes if you are aware enough in bbtk scripting).
2220
2221 To be able to use the Help tools as well as the features provided by this package,
2222  you must use the
2223 option \texttt{Regenerate package doc}  in the menu \texttt{Tools} of \texttt{bbStudio}.\\
2224 You'll be prompted for the Package name. Avoid using the \texttt{-a} option (Regenerate all), since it's time consumming.
2225
2226 To benefit the features of Box indexing you must use the
2227 option \texttt{Regenerate Boxes Lists}  in the menu \texttt{Tools} of \texttt{bbStudio}.\\
2228
2229
2230 % ==========================================
2231 \subsection{Using the package}
2232 \label{Using_the_package}
2233 % ==========================================
2234
2235 The only thing you have to do is to \texttt{load} the package, within the script, or from the
2236 \texttt{Command} part, and enjoy the black boxes it contains.
2237
2238 % ==========================================
2239 \subsection{Packages you'll probably want to use }
2240 \label{Packages_you_ll_want_to_use}
2241 % ==========================================
2242 \begin {itemize}
2243 \item{\texttt{creaLib}} \\
2244 a.k.a \texttt{crea}. It's a set of 'low level' utilities, needed by other
2245 packages (an, sure,  useful as well for people that doesn't use bbtkns.
2246
2247 \item{\texttt{creaContours}} \\
2248 Provides sophisticated widgets for managing 3D R.O.I. (Regions of interest)
2249 \item{\texttt{creaImageIO}} \\
2250 Allows browsing, selectionning, ordering directories containing images of almost any type
2251 (including DICOM)
2252 \end {itemize}
2253
2254 \newpage
2255  
2256 % ==========================================
2257 %\vspace{0.5cm}\hrule \\
2258 \section{Using black boxes in \CPP programs}
2259 \label{cpp}
2260 % ==========================================
2261
2262 A very useful feature is that you may use any black box within a \CPP program without worrying about \texttt{wxWigets} main window.\\
2263
2264 Let's look a the following bbs script :
2265
2266 \begin{verbatim}
2267 # Load the packages
2268 load std
2269 load wx
2270
2271 # Create the Objects
2272 new Slider     slider
2273 new OutputText text
2274 new LayoutLine layout
2275
2276 # Graphical pipeline
2277 connect slider.Widget    layout.Widget1
2278 connect text.Widget      layout.Widget2
2279
2280 # Execution pipeline
2281 connect slider.BoxChange text.BoxExecute
2282 connect slider.Out       text.In
2283
2284 # Go!
2285 exec layout
2286 \end{verbatim}
2287
2288 User wants to create a slider and an output text, within a LayoutLine, and display the slider value in the output text.\\ 
2289 Think about the (little!) nightmare to code the same, in 'raw C++', using wxWidgets.\\
2290
2291 Using the standalone application \texttt{bbc} you just 'convert' the script.
2292
2293 \begin{verbatim}
2294 #include <bbwxSlider.h>
2295 #include <bbwxOutputText.h>
2296 #include <bbtkFactory.h>
2297 #include <bbwxLayoutLine.h>
2298
2299 int main(int argv, char* argc[])
2300 {
2301       // we need to intanciate a bbtk::Factory to be aware of the adaptors
2302       bbtk::Factory::Pointer factory = bbtk::Factory::New();
2303       
2304       // Load the packages
2305       // ----------------  
2306       factory->LoadPackage("std");
2307       factory->LoadPackage("wx");
2308       
2309       // Create the Objects
2310       // ------------------      
2311       bbwx::Slider::Pointer     slider   = bbwx::Slider::New("slider");
2312       bbwx::OutputText::Pointer text     = bbwx::OutputText::New("text");
2313       bbwx::LayoutLine::Pointer layout   = bbwx::LayoutLine::New("layout");
2314       
2315       // Graphical pipeline
2316       bbtk::Connection::Pointer c1       = bbtk::Connection::New(slider,"Widget",
2317                                                            layout,"Widget1");
2318                                                            
2319       bbtk::Connection::Pointer c2       = bbtk::Connection::New(text,"Widget",
2320                                                            layout,"Widget2");
2321                                                                                                                                                                            
2322       // Execution pipeline
2323       // ------------------
2324       
2325       // We have to pass the 'factory', in order to call automatically an adaptor,
2326       // if necessary.
2327       bbtk::Connection::Pointer s2t      = bbtk::Connection::New(slider,"Out",
2328                                                             text,"In",
2329                                                             factory);      
2330        bbtk::Connection::Pointer c3       = bbtk::Connection::New(slider,"BoxChange",
2331                                                             text,"BoxExecute");      
2332       layout->bbSetInputWinDialog(true);
2333       
2334       // Go!
2335       // ---     
2336       layout->bbExecute();
2337
2338     }
2339   catch (bbtk::Exception e)
2340     {
2341       bbtk::MessageManager::SetMessageLevel("Error",1);
2342       e.Print();
2343     }
2344 }
2345 \end{verbatim}
2346
2347 %\bibliography{all}
2348
2349 % ==========================================
2350 \section{Language reference}
2351 \label{bbi-reference}
2352 % ==========================================
2353
2354
2355 % ==========================================
2356 \subsection{Pipeline creation and execution related commands}
2357 \label{bbi-reference-creation-execution}
2358 % ==========================================
2359  See table \ref{bbi-reference-box}
2360
2361 % ==========================================
2362 \begin{table}[!ht]
2363 \caption{\label{bbi-reference-box} \bbi pipeline creation and execution related commands.}
2364 \small
2365 \begin{tabular}{|lcm{6cm}|}
2366 \hline
2367 Command & Parameters & Effect \\ \hline
2368
2369 \texttt{new} & \texttt{<boxtype>} \texttt{<box-name>}& 
2370 Creates a box of type \texttt{boxtype} and name  
2371 \texttt{box-name}.\\ \hline
2372
2373 \texttt{delete} & \texttt{<box-name>} & 
2374 Destroys the box named \texttt{box-name}.\\ \hline 
2375
2376 \texttt{connect} & \texttt{<box1.output>} \texttt{<box2.input>} & 
2377 Connects the output 
2378 \texttt{output} of the box named \texttt{box1} 
2379 to the input \texttt{input} of the box named \texttt{box2} \\ \hline 
2380
2381 \texttt{set} & \texttt{<box.input>} \texttt{<value>} &
2382 Sets the input \texttt{input} of 
2383 the box named \texttt{box} to the value \texttt{value}.
2384 An \texttt{adaptor} must exist
2385 in the packages loaded which converts a \texttt{std::string} 
2386 to the type of the input \texttt{input}. \\ \hline 
2387
2388 \texttt{print} & \texttt{<string>} & 
2389 Prints the string after substituting each token of the form \texttt{\$box.output\$} by the adaptation to string of the value of the 
2390 output \texttt{output} of the box named \texttt{box}. 
2391 An \texttt{adaptor} must exist
2392 in the packages loaded which converts 
2393 the type of the output \texttt{output}
2394 to a \texttt{std::string}.
2395 \\ \hline 
2396
2397 \texttt{exec} & \texttt{<box-name>} & 
2398 Executes the box named \texttt{box-name}.
2399 If needed the boxes 
2400 connected to its inputs 
2401 are also processed recursively (pipeline processing).\\ \hline 
2402 \texttt{exec} & \texttt{freeze} & 
2403  Allows to block execution commands while keeping definition commands active.(This one is not for end user)\\ \hline 
2404 \texttt{exec} & \texttt{unfreeze} & 
2405  Turns back to 'normal' mode (This one is not for end user).\\ \hline 
2406 \end{tabular}
2407 \end{table}
2408 % ==========================================
2409
2410 \newpage
2411
2412 % ==========================================
2413 \subsection{Interpreter related commands}
2414 \label{bbi-reference-interpreter}
2415 % ==========================================
2416 See table \ref{tabbbi-reference-interpreter_1} and \ref{tabbbi-reference-interpreter_2}
2417 % ==========================================
2418 \begin{table}[!ht]
2419 \caption{\label{tabbbi-reference-interpreter_1}\bbi intepreter related commands (part 1).}
2420 \small
2421 \begin{tabular}{|lcm{6cm}|}
2422 \hline
2423 Command & Parameters & Effect \\ \hline
2424
2425 \texttt{author} &  \texttt{<author-name>} & 
2426 Adds the string \texttt{<author-name>} to the author information of the black box being defined \\ \hline 
2427
2428 \texttt{category} & \texttt{<category-name>} & 
2429   Adds the string \texttt{<category-name>} to the category information of the black box being defined \\ \hline 
2430
2431 \texttt{help} & - & 
2432 Prints help on available commands \\ \hline 
2433
2434 & \texttt{<command-name>} & 
2435 Prints help on the command \texttt{command-name} \\ \hline 
2436
2437 & \texttt{packages} & 
2438 Prints help on available packages and their box types 
2439 (without description)\\ \hline 
2440
2441 & \texttt{<package-name>} & 
2442 Prints help on the package \texttt{package-name} and its boxes 
2443 (with brief description). 
2444 The package must have been previously loaded \\ \hline 
2445
2446 & \texttt{<box-type>} & 
2447 Prints help (with full description) on the type of box 
2448 \texttt{box-type}. 
2449 The box type must belong to a package which has been previously loaded \\ \hline 
2450
2451 & \texttt{<debug-directive>} & 
2452 [expr|-C|-D] 
2453   Prints debug info on living bbtk objects containing the string \texttt{expr} (default expr=''). 
2454          \texttt{-C} checks the factory integrity.
2455          \texttt{-D} turns on objects debug info after main ends\\ \hline 
2456
2457 \texttt{include} & \texttt{<file-name>} & 
2458 Includes and executes the content of the file named \texttt{file-name} 
2459 exactly like if you were typing its content at the place were the 
2460 \texttt{include} command is. \\ \hline 
2461
2462 \texttt{load} & \texttt{<package-name>} & 
2463 Loads the package \texttt{package-name} (use it only if you know that you won't work with complex black boxes) \\ \hline 
2464
2465 \texttt{include} & \texttt{<package-name>} & 
2466 Loads the package \texttt{package-name} and includes all the complex black boxes that comes with it \\ \hline 
2467
2468 \texttt{kind} & \texttt{<box kind>} & 
2469 Specifies the \texttt{kind} of the complex black boxes you are describing \\ \hline 
2470 \end{tabular}
2471 \end{table}
2472
2473 %
2474 % This arbitrary part1/part2 is to avoid to have all the tables at the end of the docoment ...
2475 %
2476
2477 \begin{table}[!ht]
2478 \caption{\label{tabbbi-reference-interpreter_2}\bbi intepreter related commands (part 2).}
2479 \small
2480 \begin{tabular}{|lcm{6cm}|}
2481 \hline
2482 Command & Parameters & Effect \\ \hline
2483 \texttt{unload} & \texttt{<package-name>}& 
2484 Unloads the package \texttt{package-name}. 
2485 The package must have been previously loaded. 
2486 No box of a type defined in this package must still exist.\\ \hline 
2487
2488 \texttt{message} & \texttt{<category>} \texttt{<level>} & 
2489 Sets the level of verbosity of \bbi for the category of messages 
2490 \texttt{category} to \texttt{level}.\\ \hline 
2491 %See \ref{verbosity}.
2492
2493 \texttt{config} & - & Displays the Configuration parameters\\ \hline 
2494
2495 \texttt{reset} & - & Deletes all boxes and unloads all packages so 
2496 that \bbi gets back to its initial state \\ \hline 
2497
2498 \texttt{quit} & - & Exits the interpreter (Don't use it under \bbStudions)\\ \hline 
2499
2500 \end{tabular}
2501 \end{table}
2502 % ==========================================
2503
2504 \newpage
2505
2506 % ==========================================
2507 \subsection{Complex black box definition related commands}
2508 \label{bbi-reference-black-box-definition}
2509 % ==========================================
2510
2511 See table \ref{bbi-reference-complex-box} 
2512 % ==========================================
2513 \begin{table}[!ht]
2514 \caption{\label{bbi-reference-complex-box} \bbi complex black box definition related commands.}
2515 \small
2516 \begin{tabular}{|lcm{6cm}|}
2517 \hline
2518 Command & Parameters & Effect \\ \hline
2519
2520
2521 \texttt{define} & \texttt{<box-type>} & 
2522 Starts the definition of a complex black box of type  
2523 \texttt{box-type}\\ \hline 
2524
2525 \texttt{endefine} & - & 
2526 Ends the definition of a complex black box type\\ \hline 
2527
2528 \texttt{author} & \texttt{<string>} & 
2529 Sets the author(s) of the complex black box currently being defined \\ \hline 
2530
2531 \texttt{description} & \texttt{<string>} & 
2532 Sets the description of the complex black box currently being defined \\ \hline 
2533
2534 \texttt{input} & \texttt{<name>} \texttt{<box.input>} \texttt{<help>} & 
2535 Defines a new input for the current complex black box, 
2536 named \texttt{name}. 
2537 It is defined as corresponding to 
2538 the input \texttt{input} of the box \texttt{box}.
2539  
2540 \texttt{<help>} is the help string for the new input.
2541 The box \texttt{box} must already have been created in the complex box 
2542 and of course have an input named \texttt{input}.\\ \hline 
2543
2544 \texttt{output} & \texttt{<name>} \texttt{<box.output>} \texttt{<help>} & 
2545 Defines a new output for the current complex black box, 
2546 named \texttt{name}. 
2547 It is defined as corresponding to 
2548 the output \texttt{output} of the box \texttt{box}. 
2549 \texttt{<help>} is the help string for the new output.
2550 The box \texttt{box} must already have been created in the complex box and of course have an output named \texttt{output}. \\ \hline 
2551
2552
2553 \end{tabular}
2554 \end{table}
2555 % ==========================================
2556
2557 \newpage
2558
2559 \section{Install and run time issues}
2560
2561 \begin {itemize}
2562 \item{make} \\
2563 For some strange reasons (?!?), at \texttt{cmake} time, you may be warned that an error occured while documentation generation.\\
2564 Take it easy, \texttt{make} again!\\
2565
2566 \item{\bbStudio} is written using the Advanced User Interface library of wxWidgets.
2567 If, after some hazardous floating/docking operations onto the frame, you feel
2568 very unhappy with the result, just remove from the hidden directory
2569 \texttt{.bbtk} the file named \texttt{bbStudio.aui}. \\ 
2570
2571  
2572 \end {itemize}
2573
2574 %\section{Conclusion}
2575
2576
2577 \end{document}
2578