]> Creatis software - creaWT.git/blob - wt/bbtk_wt_PKG/src/bbwtViewerNVWeb.cxx
33dd441b31c5aacfd3f09169de6cde381e622a90
[creaWT.git] / wt / bbtk_wt_PKG / src / bbwtViewerNVWeb.cxx
1 //===== 
2 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
3 //===== 
4 #include "bbwtViewerNVWeb.h"
5 #include "bbwtPackage.h"
6 namespace bbwt
7 {
8
9
10
11
12   Viewer_NV::Viewer_NV(Wt::WContainerWidget* parent,int typeRender)
13   :
14   Wt::WContainerWidget(parent),
15   mType(typeRender)
16   {
17     //configureWt();
18   }
19
20
21
22   Viewer_NV::~Viewer_NV()
23   {
24
25   }
26
27   void Viewer_NV::configureWt()
28   {
29                 std::cout<<"---- CREACION DE RENDER ----"<<std::endl;
30           Wt::WContainerWidget* w = this;
31      
32         
33                 std::string jsCom;
34
35                 if(mType == 0 )
36                 {
37                         jsCom = "\
38                   var mRenderer = new X.renderer2D();   \
39                   mRenderer.container = '" + w->id() + "';    \
40                                                                         mRenderer.orientation = 'Z';\
41                                                                         mRenderer.init() ;\
42                                                       " + w->jsRef() + ".mRenderer = mRenderer;";
43                 }
44                 else if(mType == 1)
45                 {
46                         jsCom = "\
47                   var mRenderer = new X.renderer2D();   \
48                   mRenderer.container = '" + w->id() + "';    \
49                                                                         mRenderer.orientation = 'Y';\
50                                                                         mRenderer.init() ;       \
51                                                       " + w->jsRef() + ".mRenderer = mRenderer;";
52                 }
53                 else if(mType == 2)
54                 {
55                         jsCom = "\
56                   var mRenderer = new X.renderer2D();   \
57                   mRenderer.container = '" + w->id() + "';    \
58                                                                         mRenderer.orientation = 'X';\
59                                                                         mRenderer.init() ;       \
60                                                       " + w->jsRef() + ".mRenderer = mRenderer;";
61                 }
62                 else if(mType == 3)
63                 {
64                                 jsCom = "\
65                   var mRenderer = new X.renderer3D();   \
66                   mRenderer.container = '" + w->id() + "';\
67                                                                         mRenderer.init() ; \
68                                 " + w->jsRef() + ".mRenderer = mRenderer;";
69         
70         w->resize(Wt::WLength::Auto, 700);
71                 }
72                  
73
74  
75   w->doJavaScript(jsCom);
76   std::cout<<"       REF:   "<<w->jsRef()<<std::endl;
77         std::cout<<"       CREANDO TIPO:   "<<mType<<" ---  "<<jsCom<<std::endl;
78
79   }
80 BBTK_ADD_BLACK_BOX_TO_PACKAGE(wt,ViewerNVWeb)
81 BBTK_BLACK_BOX_IMPLEMENTATION(ViewerNVWeb,bbtk::WtBlackBox);
82 //===== 
83 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
84 //===== 
85 /*void ViewerNVWeb::Process()
86 {
87
88   //------------- This part works perfectly, uncomment it for use it safe
89
90   /*Wt::WContainerWidget* w = (Wt::WContainerWidget*)bbGetOutputWidget();
91
92         cont++;
93         std::string jsCom;
94         
95
96                 
97          //jsCom = "\
98                       " + wtWindow1->jsRef() + ".mRenderer.add(" +bbGetInputImagePath() + ".mObject);\
99                       " + wtWindow1->jsRef() + ".mRenderer.render();";
100
101         std::cout<<std::endl;
102         std::cout<<std::endl;
103         std::cout<<std::endl;
104         std::cout<<std::endl;
105         std::cout<<"CADENA -- "<<std::endl;
106         std::cout<<jsCom<<std::endl;
107
108  //jsCom = "\
109                         var volume = new X.volume();\
110                         volume.file = '" + bbGetInputImagePath() + "';\
111                         " + wtWindow1->jsRef() + ".mRenderer.add(volume);\
112                         " + wtWindow1->jsRef() + ".mRenderer.render();";
113   
114   
115  jsCom = "\
116                         var volume = new X.volume();\
117                         volume.file = '" + bbGetInputImagePath() + "';\
118                                                                         " + w->jsRef() +".mVolume = volume;\
119                         " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
120                         " + wtWindow1->jsRef() + ".mRenderer.render();";
121
122
123   if(nType.size() >1)
124         {
125                 jsCom = jsCom + "\
126                         " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
127                         " + wtWindow2->jsRef() + ".mRenderer.render();";
128         }
129   if(nType.size() >2 )
130         {
131                 jsCom = jsCom + "\
132                         " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
133                         " + wtWindow3->jsRef() + ".mRenderer.render();";
134         }
135         if(nType.size() > 3)
136         {
137                 jsCom = jsCom + "\
138                         " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
139                         " + wtWindow4->jsRef() + ".mRenderer.render();";
140         }
141
142   
143
144
145         std::cout<<"PROCESSSSS>>>>"<<jsCom<<std::endl;
146         w->doJavaScript(jsCom);
147   */
148   
149  /* Wt::WContainerWidget* w = (Wt::WContainerWidget*)bbGetOutputWidget();
150
151         cont++;
152         std::string jsCom;
153         
154   std::cout<<"Process ----"<<std::endl; 
155
156   //if(cont ==1) 
157  // {
158   
159       jsCom = "\
160                         var volume = new X.volume();\
161                         volume.spacing = [0.7,0.7,0.7 ];\
162                         volume.center = [0,0,0];\
163                         volume.file = '" + bbGetInputImagePath() + "';\
164                                                                         " + w->jsRef() +".mVolume = volume;\
165                         " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
166                         " + wtWindow1->jsRef() + ".mRenderer.render();";
167                         
168          //   jsCom = jsCom + "\
169                       var gui = new dat.GUI();\
170                 var volumegui = gui.addFolder('Volume');\
171                 var vrController = volumegui.add(volume, 'volumeRendering');\
172                 var opacityController = volumegui.add(volume, 'opacity', 0, 1).listen();\
173                 var lowerThresholdController = volumegui.add(volume, 'lowerThreshold',volume.min, volume.max);\
174                 var upperThresholdController = volumegui.add(volume, 'upperThreshold',volume.min, volume.max);\
175                 volumegui.open();";
176         
177         //jsCom = jsCom + "\
178                       var gui = new dat.GUI();\
179                 var volumegui = gui.addFolder('Volume');\
180                 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
181                 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1).listen();\
182                 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', " + w->jsRef() +".mVolume.min," + w->jsRef() +".mVolume.max);\
183                 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', " + w->jsRef() +".mVolume.min," + w->jsRef() +".mVolume.max);\
184                 volumegui.open();";
185         
186         
187                 
188                 
189
190
191
192           
193     if(nType.size() >1)
194           {
195                   jsCom = jsCom + "\
196                                 setTimeout(function(){\
197                         " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
198                           " + wtWindow2->jsRef() + ".mRenderer.render();";
199           }
200
201     if(nType.size() >2 )
202           {
203                   jsCom = jsCom + "\
204                         " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
205                           " + wtWindow3->jsRef() + ".mRenderer.render();";
206           }
207
208           if(nType.size() > 3)
209           {
210                   jsCom = jsCom + "\
211                         " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
212                           " + wtWindow4->jsRef() + ".mRenderer.render();\
213                         " + w->jsRef() +".mVolume.upperTheshold =0;\
214                         " + w->jsRef() +".mVolume.windowLow =0;\
215                         " + w->jsRef() +".mVolume.windowHigh =1900;";
216                           
217
218       jsCom = jsCom + "\
219                       var gui = new dat.GUI();\
220                 var volumegui = gui.addFolder('Volume');\
221                 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
222                 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1).listen();\
223                 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
224                 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
225                 volumegui.open();\
226                 var lowerThresholdController = volumegui.add(" + w->jsRef() +".mVolume, 'lowerThreshold'," + w->jsRef() +".mVolume.min, " + w->jsRef() +".mVolume.max);\
227                 var upperThresholdController = volumegui.add(" + w->jsRef() +".mVolume, 'upperThreshold'," + w->jsRef() +".mVolume.min, " + w->jsRef() +".mVolume.max);";          
228       }
229       
230       
231       if(nType.size() >1)
232             {
233                    jsCom = jsCom + "\
234                           },2000);";
235             }
236
237   
238
239
240         std::cout<<"PROCESSSSS>>>>"<<jsCom<<std::endl;
241         //w->doJavaScript(jsCom);
242         
243         Wt::WApplication::instance()->refresh();
244   
245
246
247 }*/
248
249 void ViewerNVWeb::Process()
250 {
251
252
253   Wt::WContainerWidget* w = (Wt::WContainerWidget*)bbGetOutputWidget();
254
255         cont++;
256         std::string jsCom;
257         
258   std::cout<<"Process ----"<<std::endl; 
259
260    jsCom = "\
261                         var volume = new X.volume();\
262                         volume.spacing = [0.7,0.7,0.7 ];\
263                         volume.center = [0,0,0];\
264                         volume.file = '" + bbGetInputImagePath() + "';\
265                                                                         " + w->jsRef() +".mVolume = volume;\
266                         " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
267                         " + wtWindow1->jsRef() + ".onShowTime = function(){";
268
269           
270     if(nType.size() >1)
271           {
272                   jsCom = jsCom + "\
273                         " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
274                           " + wtWindow2->jsRef() + ".mRenderer.render();";
275           }
276
277     if(nType.size() >2 )
278           {
279                   jsCom = jsCom + "\
280                         " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
281                           " + wtWindow3->jsRef() + ".mRenderer.render();";
282           }
283
284           if(nType.size() > 3)
285           {
286                   jsCom = jsCom + "\
287                         " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
288                           " + wtWindow4->jsRef() + ".mRenderer.render();\
289                         " + w->jsRef() +".mVolume.upperTheshold =0;\
290                         " + w->jsRef() +".mVolume.windowLow =0;\
291                         " + w->jsRef() +".mVolume.windowHigh =1900;";
292                           
293
294       jsCom = jsCom + "\
295                       var gui = new dat.GUI();\
296                 var volumegui = gui.addFolder('Volume');\
297                 var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
298                 var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1).listen();\
299                 var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
300                 var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
301                 volumegui.open();\
302                 var lowerThresholdController = volumegui.add(" + w->jsRef() +".mVolume, 'lowerThreshold'," + w->jsRef() +".mVolume.min, " + w->jsRef() +".mVolume.max);\
303                 var upperThresholdController = volumegui.add(" + w->jsRef() +".mVolume, 'upperThreshold'," + w->jsRef() +".mVolume.min, " + w->jsRef() +".mVolume.max);";          
304       }
305       
306       
307      jsCom = jsCom + "\
308                   };\
309                   " + wtWindow1->jsRef() + ".mRenderer.render();";
310   
311
312
313         std::cout<<"PROCESSSSS>>>>"<<jsCom<<std::endl;
314         //w->doJavaScript(jsCom);
315         
316         Wt::WApplication::instance()->refresh();
317   
318
319
320 }
321
322
323 //--------------------------------------------------------------------------------------------------------
324 //--------------------------------------------------------------------------------------------------------
325
326
327
328 void ViewerNVWeb::loadImage()
329 {
330
331   
332   Wt::WContainerWidget* w = (Wt::WContainerWidget*)bbGetOutputWidget();
333         std::string jsCom;
334         
335   std::cout<<"Process ----"<<std::endl; 
336
337
338   //jsCom = "\
339                         var volume = new X.volume();\
340                         volume.spacing = [0.7,0.7,0.7 ];\
341                         volume.file = '" + bbGetInputImagePath() + "';\
342                         " +w->jsRef() + ".mVolume = volume;\
343                         setTimeout(function(){\
344                         var center = [0,0,0\
345                   ];\
346                         " +w->jsRef() + ".mVolume.center = center;\
347                         volume.center = [0,0,0];\
348                         " + wtWindow1->jsRef() + ".mRenderer.add(" + w->jsRef() + ".mVolume);\
349                         " + wtWindow1->jsRef() + ".mRenderer.onShowTime = function(){\
350                         " + w->jsRef() +".mVolume.upperThreshold =20000;\
351                         " + w->jsRef() +".mVolume.windowHigh =1670;\
352                         var gui = new dat.GUI();\
353                   var volumegui = gui.addFolder('Volume');\
354                   var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
355                   var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
356                   var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
357                   var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
358                   var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
359                   var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
360                   var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
361                         " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
362                           " + wtWindow2->jsRef() + ".mRenderer.render();\
363                         " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
364                           " + wtWindow3->jsRef() + ".mRenderer.render();\
365                         " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
366                           " + wtWindow4->jsRef() + ".mRenderer.render();\
367                           };\
368                         " + wtWindow1->jsRef() + ".mRenderer.render();\
369                         },500";
370
371   jsCom = "\
372                         var volume = new X.volume();\
373                         volume.spacing = [0.7,0.7,0.7 ];\
374                         volume.file = '" + bbGetInputImagePath() + "';\
375                         " +w->jsRef() + ".mVolume = volume;\
376                         var center = [0,0,0\
377                   ];\
378                         " +w->jsRef() + ".mVolume.center = center;\
379                         volume.center = [0,0,0];\
380                         setTimeout(function(){\
381                         " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
382                         " + wtWindow1->jsRef() + ".mRenderer.render();\
383                       },300);\
384                         setTimeout(function(){\
385                         " + w->jsRef() +".mVolume.upperThreshold =20000;\
386                         " + w->jsRef() +".mVolume.windowHigh =1670;\
387                         var gui = new dat.GUI();\
388                   var volumegui = gui.addFolder('Volume');\
389                   var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
390                   var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
391                   var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
392                   var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
393                   var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
394                   var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
395                   var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
396                         " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
397                           " + wtWindow2->jsRef() + ".mRenderer.render();\
398                         " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
399                           " + wtWindow3->jsRef() + ".mRenderer.render();\
400                         " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
401                           " + wtWindow4->jsRef() + ".mRenderer.render();\
402                       },3000);";
403                       
404    // jsCom = "\
405                         var volume = new X.volume();\
406                         volume.spacing = [0.7,0.7,0.7 ];\
407                         volume.file = '" + bbGetInputImagePath() + "';\
408                         " +w->jsRef() + ".mVolume = volume;\
409                         var center = [0,0,0\
410                   ];\
411                         " +w->jsRef() + ".mVolume.center = center;\
412                         volume.center = [0,0,0];\
413                         setTimeout(function(){\
414                         " + wtWindow1->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
415                       },300);\
416                         " + wtWindow1->jsRef() + ".mRenderer.onShowTime = function(){\
417                         " + w->jsRef() +".mVolume.upperThreshold =20000;\
418                         " + w->jsRef() +".mVolume.windowHigh =1670;\
419                         var gui = new dat.GUI();\
420                   var volumegui = gui.addFolder('Volume');\
421                   var vrController = volumegui.add(" + w->jsRef() +".mVolume, 'volumeRendering');\
422                   var opacityController = volumegui.add(" + w->jsRef() +".mVolume, 'opacity', 0, 1);\
423                   var lowerWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowLow', 0,2000);\
424                   var upperWindowController = volumegui.add(" + w->jsRef() +".mVolume, 'windowHigh', 0,2000);\
425                   var sliceXController = volumegui.add(" + w->jsRef() +".mVolume, 'indexX', 0,volume.range[0] - 1);\
426                   var sliceYController = volumegui.add(" + w->jsRef() +".mVolume, 'indexY', 0,volume.range[1] - 1);\
427                   var sliceZController = volumegui.add(" + w->jsRef() +".mVolume, 'indexZ', 0,volume.range[2] - 1);\
428                         " + wtWindow2->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
429                           " + wtWindow2->jsRef() + ".mRenderer.render();\
430                         " + wtWindow3->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
431                           " + wtWindow3->jsRef() + ".mRenderer.render();\
432                         " + wtWindow4->jsRef() + ".mRenderer.add(" +w->jsRef() + ".mVolume);\
433                           " + wtWindow4->jsRef() + ".mRenderer.render();\
434                           };\
435                         " + wtWindow1->jsRef() + ".mRenderer.render();";
436                         
437
438
439
440
441         std::cout<<"LOADzzzzzzzzzzzzzzzzzzzzzzzzzzzz"<<jsCom<<std::endl;
442         w->doJavaScript(jsCom);
443         
444         
445         //Wt::WApplication::instance()->refresh();
446         // wtWindow2->resize(Wt::WLength::Auto, 200);
447         // wtWindow3->resize(Wt::WLength::Auto, 200);
448         // wtWindow4->resize(Wt::WLength::Auto, 200);
449          
450          
451          Wt::WApplication::instance()->refresh();
452         
453   
454
455
456 }
457
458 //===== 
459 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
460 //===== 
461 void ViewerNVWeb::bbUserSetDefaultValues()
462 {
463
464 //  SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX 
465 //    Here we initialize the input 'In' to 0
466   bbSetInputImagePath("");
467   int n[] = {3,2,1,0};
468   std::vector<int> nn (n,n+sizeof(n)/sizeof(int));
469   bbSetInputnTypeView(nn);
470         bbSetOutputviewer1("");
471         bbSetOutputviewer2("");
472         bbSetOutputviewer3("");
473         bbSetOutputviewer4("");
474   
475 }
476 //=======
477
478
479 //=======
480
481 void ViewerNVWeb::CreateWidget(Wt::WContainerWidget* parent)
482 {
483   nType = bbGetInputnTypeView();
484
485   Wt::WContainerWidget *w = new Wt::WContainerWidget(parent);
486         cont = 0;
487   wtWindow1 = NULL;
488   wtWindow2 = NULL;
489   wtWindow3 = NULL;
490   wtWindow4 = NULL;
491
492         if(nType.size() == 1 )
493         {
494                 wtWindow1 = new Viewer_NV(w,nType[0]);
495                 wtWindow1->configureWt();
496                 wtWindow1->setStyleClass("black-box");
497                 std::cout<<"   PRUEBA 1 RENDERER"<<std::endl;
498                 bbSetOutputviewer1(wtWindow1->jsRef());
499         }
500         else if(nType.size() == 2)
501         {
502                 //Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
503           Wt::WHBoxLayout *l = new  Wt::WHBoxLayout();
504           
505                 wtWindow1 = new Viewer_NV(0,nType[0]);
506                 wtWindow2 = new Viewer_NV(0,nType[1]);
507                 
508
509                 /*l->addWidget(wtWindow1);
510                 l->addWidget(wtWindow2);
511
512                 w->addWidget(l);
513     */
514     
515     l->addWidget(wtWindow1);
516     l->addWidget(wtWindow2);
517     l->setResizable(0,true,400);
518     w->setLayout(l);
519     
520                 wtWindow1->configureWt();       
521                 wtWindow2->configureWt();
522                 wtWindow1->setStyleClass("black-box");
523                 wtWindow2->setStyleClass("black-box");
524                 bbSetOutputviewer1(wtWindow1->jsRef());
525                 bbSetOutputviewer2(wtWindow2->jsRef());
526         }
527         else if(nType.size() == 3)
528         {
529                 /*Wt::Ext::Splitter *l = new Wt::Ext::Splitter(Wt::Horizontal);
530                 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
531                 */
532           Wt::WHBoxLayout *l = new  Wt::WHBoxLayout();
533           Wt::WVBoxLayout *l2 = new  Wt::WVBoxLayout();
534           
535           Wt::WContainerWidget *aux1 = new        Wt::WContainerWidget();
536           
537                 wtWindow1 = new Viewer_NV(0,nType[0]);
538                         
539                 wtWindow2 = new Viewer_NV(0,nType[1]);
540
541                 wtWindow3 = new Viewer_NV(0,nType[2]);
542
543         /*
544                 l->addWidget(wtWindow2);http://www.creatis.insa-lyon.fr/~davila/links/links_EED.html
545                 l->addWidget(wtWindow3);
546                 
547                 
548                 l2->addWidget(wtWindow1);
549                 l2->addWidget(l);
550                 
551                 w->addWidget(l);
552                 
553                 */
554                 
555                 l->addWidget(wtWindow2);
556                 l->addWidget(wtWindow3);
557                 l->setResizable(0,true,400);
558                 aux1->setLayout(l);
559                 
560                 l2->addWidget(wtWindow1);
561                 l2->addWidget(aux1);
562                 l2->setResizable(0,true,400);
563                 w->setLayout(l2);
564                 
565           wtWindow1->configureWt();     
566           wtWindow2->configureWt();
567           wtWindow3->configureWt();
568     wtWindow1->setStyleClass("black-box");
569     wtWindow2->setStyleClass("black-box");
570     wtWindow3->setStyleClass("black-box");
571                 bbSetOutputviewer1(wtWindow1->jsRef());
572                 bbSetOutputviewer2(wtWindow2->jsRef());
573                 bbSetOutputviewer3(wtWindow3->jsRef());
574
575         }
576         else if(nType.size() == 4)
577         {
578         /*
579                 Wt::Ext::Splitter *l2 = new Wt::Ext::Splitter(Wt::Vertical);
580                 Wt::WGridLayout *l = new Wt::WGridLayout();
581                 Wt::WContainerWidget *aux1 = new Wt::WContainerWidget();
582         */      
583           Wt::WVBoxLayout *l2 = new  Wt::WVBoxLayout();
584           Wt::WGridLayout *l = new Wt::WGridLayout();
585           Wt::WContainerWidget *aux1 = new        Wt::WContainerWidget();
586         
587                 wtWindow1 = new Viewer_NV(0,nType[0]);
588     
589                 wtWindow2 = new Viewer_NV(0,nType[1]);
590
591                 wtWindow3 = new Viewer_NV(0,nType[2]);
592
593                 wtWindow4 = new Viewer_NV(0,nType[3]);
594 /*
595         
596                 l2->addWidget(wtWindow1);
597                 l->addWidget(wtWindow2,0,1);
598                 l->addWidget(wtWindow3,0,2);
599                 l->addWidget(wtWindow4,0,3);
600                 aux1->setLayout(l);
601                 l2->addWidget(aux1);
602                 
603                 w->addWidget(l2);
604                 */
605                 l->addWidget(wtWindow2,0,1);
606                 l->addWidget(wtWindow3,0,2);
607                 l->addWidget(wtWindow4,0,3);
608                 l->setColumnResizable(0,true,400);
609                 l->setColumnResizable(1,true,400);
610                 l->setColumnResizable(2,true,400);
611                 aux1->setLayout(l);
612                 
613                 l2->addWidget(wtWindow1);
614                 l2->addWidget(aux1);
615                 l2->setResizable(0,true,600);
616                 w->setLayout(l2);
617         
618         
619           wtWindow1->setStyleClass("black-box");
620     wtWindow2->setStyleClass("black-box");
621     wtWindow3->setStyleClass("black-box");
622     wtWindow4->setStyleClass("black-box");
623         
624           wtWindow1->configureWt();     
625           wtWindow2->configureWt();
626           wtWindow3->configureWt();     
627           wtWindow4->configureWt();
628
629                 bbSetOutputviewer1(wtWindow1->jsRef());
630                 bbSetOutputviewer2(wtWindow2->jsRef());
631                 bbSetOutputviewer3(wtWindow3->jsRef());
632                 bbSetOutputviewer4(wtWindow4->jsRef());
633
634                 bbSetOutputViewer1(wtWindow1);
635                 bbSetOutputViewer2(wtWindow2);
636                 bbSetOutputViewer3(wtWindow3);
637                 bbSetOutputViewer4(wtWindow4);
638
639
640         }
641
642
643   
644   bbSetOutputWidget(w);
645   loadImage();
646   //Process();
647
648 }
649
650 //===== 
651 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
652 //===== 
653 void ViewerNVWeb::bbUserInitializeProcessing()
654 {
655
656 //  THE INITIALIZATION METHOD BODY :
657 //    Here does nothing 
658 //    but this is where you should allocate the internal/output pointers 
659 //    if any 
660
661   
662 }
663 //===== 
664 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
665 //===== 
666 void ViewerNVWeb::bbUserFinalizeProcessing()
667 {
668
669 //  THE FINALIZATION METHOD BODY :
670 //    Here does nothing 
671 //    but this is where you should desallocate the internal/output pointers 
672 //    if any
673   
674 }
675 }
676 // EO namespace bbwt
677
678