Salome HOME
Fix for bug IPAL9331 ( 3.0.0(debianex): CRASH after trying to import MED or XLS...
[modules/visu.git] / src / VISUGUI / VisuGUI.cxx
1 //  VISU VISUGUI : GUI of VISU component
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 //  This library is free software; you can redistribute it and/or
7 //  modify it under the terms of the GNU Lesser General Public
8 //  License as published by the Free Software Foundation; either
9 //  version 2.1 of the License.
10 //
11 //  This library is distributed in the hope that it will be useful,
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 //  Lesser General Public License for more details.
15 //
16 //  You should have received a copy of the GNU Lesser General Public
17 //  License along with this library; if not, write to the Free Software
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
21 //
22 //
23 //
24 //  File   : VisuGUI.cxx
25 //  Author : Laurent CORNABE
26 //  Module : VISU
27 //  $Header$
28
29 #include "VisuGUI.h"
30
31 // STL Includes
32 #include <exception>
33 #include <typeinfo>
34 #include <vector>
35
36 // QT Includes
37 #include <qptrlist.h>
38 #include <qptrvector.h>
39 #include <qcolordialog.h>
40
41 // VTK Includes
42 #include <vtkRenderer.h>
43 #include <vtkRenderWindow.h>
44 #include <vtkActorCollection.h>
45
46 // SALOME Includes
47 #include "SALOME_LifeCycleCORBA.hxx"
48
49 #include "SUIT_ResourceMgr.h"
50 #include "SUIT_MessageBox.h"
51
52 #include "SUIT_ViewWindow.h"
53 #include "SUIT_ViewManager.h"
54
55 #include "CAM_Module.h"
56
57 #include "SVTK_RenderWindow.h"
58 #include "SVTK_ViewWindow.h"
59 #include "SVTK_ViewModel.h"
60 #include "SVTK_Functor.h"
61
62 #include "SPlot2d_ViewModel.h"
63 #include "VisuGUI_SetupPlot2dDlg.h"
64 #include "Plot2d_SetupCurveDlg.h"
65
66 #include "OB_Browser.h"
67
68 #include "SALOME_ListIO.hxx"
69 #include "SALOME_ListIteratorOfListIO.hxx"
70
71 #include "SalomeApp_Application.h"
72 #include "SalomeApp_DataModel.h"
73 #include "SalomeApp_Study.h"
74 #include "LightApp_SelectionMgr.h"
75 #include "LightApp_Selection.h"
76 #include "LightApp_Preferences.h"
77
78 #include "QtxAction.h"
79
80 #include "VISUConfig.hh"
81 #include "VISU_Gen_i.hh"
82 #include "VISU_Mesh_i.hh"
83 #include "VISU_Table_i.hh"
84 #include "VISU_Result_i.hh"
85 #include "VISU_View_i.hh"
86 #include "VISU_ViewManager_i.hh"
87 #include "VISU_Plot3D_i.hh"
88
89 #include "VISU_Actor.h"
90
91 #include "VisuGUI_Prs3dTools.h"
92 #include "VisuGUI_Tools.h"
93
94 #include "VisuGUI_PopupTools.h"
95 #include "VisuGUI_NameDlg.h"
96 #include "VisuGUI_FileDlg.h"
97 #include "VisuGUI_CursorDlg.h"
98 #include "VisuGUI_Selection.h"
99 #include "VisuGUI_TimeAnimation.h"
100 #include "VisuGUI_EditContainerDlg.h"
101 #include "VisuGUI_NonIsometricDlg.h"
102 #include "VisuGUI_ClippingDlg.h"
103 #include "VisuGUI_Plot3DDlg.h"
104 #include "VisuGUI_CubeAxesDlg.h"
105 #include "VisuGUI_OffsetDlg.h"
106 #include "VisuGUI_Displayer.h"
107
108 #include "VISU_ScalarMap_i.hh"
109 #include "VisuGUI_ScalarBarDlg.h"
110
111 #include "VISU_DeformedShape_i.hh"
112 #include "VisuGUI_DeformedShapeDlg.h"
113
114 #include "VISU_IsoSurfaces_i.hh"
115 #include "VisuGUI_IsoSurfacesDlg.h"
116
117 #include "VISU_CutPlanes_i.hh"
118 #include "VisuGUI_CutPlanesDlg.h"
119
120 #include "VISU_CutLines_i.hh"
121 #include "VisuGUI_CutLinesDlg.h"
122
123 #include "VISU_StreamLines_i.hh"
124 #include "VisuGUI_StreamLinesDlg.h"
125
126 #include "VISU_Vectors_i.hh"
127 #include "VisuGUI_VectorsDlg.h"
128
129 #include "VisuGUI_TableDlg.h"
130
131 #include "SALOMEconfig.h"
132 #include CORBA_SERVER_HEADER(MED_Gen)
133
134 #include "utilities.h"
135
136 #include "VisuGUI_ActionsDef.h"
137
138 using namespace VISU;
139
140 #ifdef _DEBUG_
141 static int MYDEBUG = 1;
142 #else
143 static int MYDEBUG = 0;
144 #endif
145
146 //////////////////////////////////////////////////
147 // Class: VisuGUI
148 //////////////////////////////////////////////////
149
150 VisuGUI::VisuGUI():
151   SalomeApp_Module( "VISU" ),
152   myDisplayer( 0 )
153 {
154 }
155
156
157 VisuGUI::~VisuGUI()
158 {
159 }
160
161
162 void
163 VisuGUI::
164 OnImportFromFile()
165 {
166   if(MYDEBUG) MESSAGE("VisuGUI::OnImportFromFile()");
167   if ( CheckLock(GetCStudy(GetAppStudy(this))) )
168     return;
169   SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr();
170
171   QStringList aFilter;
172   aFilter.append( tr("FLT_MED_FILES") );
173   aFilter.append( tr("FLT_ALL_FILES") );
174
175   QFileInfo aFileInfo =
176     SUIT_FileDlg::getFileName(GetDesktop(this),
177                               "",
178                               aFilter,
179                               tr("MEN_IMPORT_FROM_FILE"),
180                               true);
181   if(aFileInfo.exists()) {
182     application()->putInfo( "Importing From File " + aFileInfo.filePath() + "..." );
183
184     VISU::Result_var aResult;
185     bool anIsBuild = aResourceMgr->booleanValue("VISU", "full_med_loading", false);
186     if (VisuGUI_FileDlg::IsBuild) {
187       aResult = GetVisuGen(this)->ImportFile(aFileInfo.filePath());
188       if (!CORBA::is_nil(aResult.in()))
189         if (Result_i* aRes = dynamic_cast<Result_i*>(GetServant(aResult).in())) {
190           if (!aRes->IsPossible())
191             SUIT_MessageBox::warn1(GetDesktop(this),
192                                    tr("WRN_VISU"),
193                                    tr("ERR_CANT_BUILD_PRESENTATION"),
194                                    tr("BUT_OK"));
195           else
196             aRes->BuildAll();
197         }
198     } else {
199       aResourceMgr->setValue("VISU", "full_med_loading", false);
200       aResult = GetVisuGen(this)->ImportFile(aFileInfo.filePath());
201       aResourceMgr->setValue("VISU", "full_med_loading", anIsBuild);
202     }
203
204     if (CORBA::is_nil(aResult.in())) {
205       SUIT_MessageBox::warn1(GetDesktop(this),
206                              tr("WRN_VISU"),
207                              tr("ERR_ERROR_IN_THE_FILE"),
208                              tr("BUT_OK"));
209     }else{
210       application()->putInfo(aFileInfo.filePath() + tr("INF_DONE"));
211       UpdateObjBrowser(this);
212     }
213   }
214 }
215
216
217 void
218 VisuGUI::
219 OnExploreMEDFile()
220 {
221   if(MYDEBUG) MESSAGE("VisuGUI::OnExploreMEDFile()");
222   _PTR(Study) aStudy = GetCStudy(GetAppStudy(this));
223   if ( CheckLock(aStudy) )
224     return;
225
226   SALOME_MED::MED_Gen_var aGen = GetMEDEngine();
227
228   QStringList aFilter;
229   aFilter.append( tr("FLT_MED_FILES") );
230   aFilter.append( tr("FLT_ALL_FILES") );
231
232   QFileInfo aFileInfo =
233     SUIT_FileDlg::getFileName(GetDesktop(this),
234                               "",
235                               aFilter,
236                               tr("MEN_EXPLORE_MED_FILE"),
237                               true);
238   if(aFileInfo.exists()){
239     application()->putInfo( tr("MEN_EXPLORE_MED_FILE") + " " + aFileInfo.filePath() + "..." );
240     std::string aStudyName = aStudy->Name();
241     try
242     {
243       aGen->readStructFileWithFieldType(aFileInfo.filePath(),aStudyName.c_str());
244     }
245     catch(...)
246     {
247       SUIT_MessageBox::warn1(GetDesktop(this),
248                              tr("WRN_VISU"),
249                              tr("ERR_ERROR_IN_THE_FILE"),
250                              tr("BUT_OK"));
251     }
252     application()->putInfo(aFileInfo.filePath()+tr("INF_DONE"));
253     getApp()->updateObjectBrowser(true); // as need to update MED tree
254     getApp()->updateActions();
255   }
256 }
257
258
259 void
260 VisuGUI::
261 OnImportTableFromFile()
262 {
263   if(MYDEBUG) MESSAGE("VisuGUI::OnImportTableFromFile()");
264   if ( CheckLock(GetCStudy(GetAppStudy(this))) )
265     return;
266
267   QStringList aFilter;
268   aFilter.append( tr("FLT_TABLE_FILES") );
269   aFilter.append( tr("FLT_ALL_FILES") );
270
271   QFileInfo aFileInfo =
272     SUIT_FileDlg::getFileName(GetDesktop(this),
273                               "",
274                               aFilter,
275                               tr("MEN_IMPORT_TABLE"),
276                               true);
277   if (aFileInfo.exists()) {
278     application()->putInfo( tr("MEN_IMPORT_TABLE") + " " + aFileInfo.filePath() + " ..." );
279
280     CORBA::Object_var anObject = GetVisuGen(this)->ImportTables(aFileInfo.filePath());
281
282     if (CORBA::is_nil(anObject.in())) {
283       SUIT_MessageBox::warn1(GetDesktop(this),
284                              tr("WRN_VISU"),
285                              tr("ERR_ERROR_IN_THE_FILE"),
286                              tr("BUT_OK"));
287     } else {
288       application()->putInfo(aFileInfo.filePath()+tr("INF_DONE"));
289       UpdateObjBrowser(this);
290     }
291   }
292 }
293
294 void
295 VisuGUI::
296 OnExportTableToFile()
297 {
298   if(MYDEBUG) MESSAGE("VisuGUI::OnExportTableToFile()");
299
300   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
301
302   LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
303   SALOME_ListIO aListIO;
304   aSelectionMgr->selectedObjects(aListIO);
305
306   if (aListIO.Extent() > 0) {
307     const Handle(SALOME_InteractiveObject)& anIO = aListIO.First();
308     if (anIO->hasEntry()) {
309       _PTR(SObject) aSObj = aCStudy->FindObjectID(anIO->getEntry());
310       if (!aSObj) return;
311
312       // find table attribute
313       bool isTOR = true;
314       _PTR(GenericAttribute) anAttr;
315
316       if (!aSObj->FindAttribute(anAttr, "AttributeTableOfReal")) {
317         isTOR = false;
318         if (!aSObj->FindAttribute(anAttr, "AttributeTableOfInteger")) {
319           // if the current SObject is a table title
320           // we take a father contaning the table
321           aSObj = aSObj->GetFather();
322
323           if (aSObj->FindAttribute(anAttr, "AttributeTableOfReal")) {
324             isTOR = true;
325           } else {
326             if (!aSObj->FindAttribute(anAttr, "AttributeTableOfInteger")) {
327               return;
328             }
329           }
330         }
331       }
332
333       // get table title in order to have default name of the file
334       QString aTitle;
335       if (isTOR) {
336         _PTR(AttributeTableOfReal) aTabAttr (anAttr);
337         if (!aTabAttr) return;
338         aTitle = aTabAttr->GetTitle().c_str();
339       } else {
340         _PTR(AttributeTableOfInteger) aTabAttr (anAttr);
341         if (!aTabAttr) return;
342         aTitle = aTabAttr->GetTitle().c_str();
343       }
344       aTitle.simplifyWhiteSpace();
345       aTitle = aTitle.replace(QRegExp(" "), "_").replace(QRegExp("\\*"), "" );
346
347       // get default path for the file
348       SUIT_ResourceMgr* aResourceMgr = GetResourceMgr();
349       QString aDir = aResourceMgr->stringValue("VISU","OutputDir","");
350       if (aDir.isEmpty()) {
351         aDir = aResourceMgr->stringValue("VISU","InputDir","");
352         if (aDir.isEmpty()) {
353           aDir = getenv("CSF_PATHData");
354         }
355       }
356       QString aPath = Qtx::addSlash(aDir) + aTitle;
357
358       // get name for the file
359       QStringList aFilter;
360       aFilter.append("Table Files (*.xls)");
361
362       QFileInfo aFileInfo =
363         SUIT_FileDlg::getFileName(GetDesktop(this),
364                                   aPath,
365                                   aFilter,
366                                   tr("MEN_EXPORT_TABLE"), // "Export Table To File"
367                                   false);
368
369       // export
370       QString aFile = aFileInfo.filePath();
371       if (!aFile.isEmpty()) {
372         application()->putInfo(tr("MEN_EXPORT_TABLE") + " " + aFile + " ...");
373         aDir = Qtx::dir(aFile, true);
374         aResourceMgr->setValue("VISU", "OutputDir", aDir);
375
376         try {
377           GetVisuGen(this)->ExportTableToFile(GetSObject(aSObj), aFile.latin1());
378           application()->putInfo(aFile + " " + tr("INF_DONE"));
379         } catch(std::exception& ex) {
380           INFOS(ex.what());
381           SUIT_MessageBox::warn1(GetDesktop(this),
382                                  tr("WRN_VISU"),
383                                  tr("ERR_ERROR_DURING_EXPORT") + " " + tr(ex.what()),
384                                  tr("BUT_OK"));
385         } catch(...) {
386           INFOS(tr("ERR_ERROR_DURING_EXPORT"));
387           SUIT_MessageBox::warn1(GetDesktop(this),
388                                  tr("WRN_VISU"),
389                                  tr("ERR_ERROR_DURING_EXPORT"),
390                                  tr("BUT_OK") );
391         }
392       }
393     }
394   }
395 }
396
397 void
398 VisuGUI::
399 OnImportMedField()
400 {
401   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
402   if (CheckLock(aCStudy))
403     return;
404   SALOMEDS::Study_var aStudy = GetDSStudy(aCStudy);
405
406   LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
407   SALOME_ListIO aListIO;
408   aSelectionMgr->selectedObjects(aListIO);
409
410   SALOME_ListIteratorOfListIO It (aListIO);
411   QApplication::setOverrideCursor(Qt::waitCursor);
412   for (; It.More(); It.Next()) {
413     Handle(SALOME_InteractiveObject) anIO = It.Value();
414     SALOMEDS::SObject_var aSObject = aStudy->FindObjectID(anIO->getEntry());
415     if (!aSObject->_is_nil()) {
416       CORBA::Object_var anObject = VISU::SObjectToObject(aSObject);
417       if (!CORBA::is_nil(anObject)) {
418         SALOME_MED::MED_var aMED = SALOME_MED::MED::_narrow(anObject);
419         if (!CORBA::is_nil(aMED.in()))
420           GetVisuGen(this)->ImportMed(aSObject);
421         SALOME_MED::FIELD_var aField = SALOME_MED::FIELD::_narrow(anObject);
422         if (!CORBA::is_nil(aField.in()))
423           GetVisuGen(this)->ImportMedField(aField);
424       } else {
425         SALOMEDS::SObject_var aSFather = aSObject->GetFather();
426         SALOMEDS::GenericAttribute_var anAttr;
427         aSFather->FindAttribute(anAttr, "AttributeName");
428         SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr);
429         CORBA::String_var aValue = aName->Value();
430         if (strcmp(aValue.in(), "MEDFIELD") == 0)
431           GetVisuGen(this)->ImportMed(aSObject);
432       }
433     }
434   }
435   UpdateObjBrowser(this, true);
436   QApplication::restoreOverrideCursor();
437 }
438
439 void
440 CreateCurves( SalomeApp_Module* theModule,
441               VISU::CutLines_i* thePrs,
442               QDialog* theDlg,
443               const bool theCreate = true )
444 {
445   if ( !thePrs )
446     return;
447   VisuGUI_CutLinesDlg* aCutDlg = dynamic_cast<VisuGUI_CutLinesDlg*>( theDlg );
448   if ( !aCutDlg )
449     return;
450
451   _PTR(Study)   aStudy = GetCStudy( GetAppStudy( theModule ) );
452   _PTR(SObject) aSObject = aStudy->FindObjectID( thePrs->GetEntry().latin1() );
453
454   if ( !theCreate && aSObject ) {
455     // Remove old Table
456     _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
457     _PTR(ChildIterator) aIter = aStudy->NewChildIterator(aSObject);
458     for (; aIter->More(); aIter->Next()) {
459       _PTR(SObject) aTblObj = aIter->Value();
460       if ( aTblObj ) {
461         _PTR(GenericAttribute) anAttr;
462         if (aTblObj->FindAttribute( anAttr, "AttributeName" ) ) {
463           aBuilder->RemoveObjectWithChildren( aIter->Value() ); // We should have only one child
464           break;
465         }
466       }
467     }
468   }
469
470   if ( aCutDlg->isGenerateTable() ) {
471     GetVisuGen( theModule )->CreateTable( thePrs->GetEntry() );
472     if ( aCutDlg->isGenerateCurves() ) {
473       if ( aSObject ) {
474         _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
475         _PTR(ChildIterator) aIter = aStudy->NewChildIterator(aSObject);
476         for (; aIter->More(); aIter->Next()) {
477           _PTR(SObject) aTblObj = aIter->Value();
478           if ( aTblObj ) {
479             _PTR(GenericAttribute) anAttr;
480             if ( aTblObj->FindAttribute( anAttr, "AttributeName" ) ) {
481               CreatePlot( theModule, aTblObj );
482             }
483           }
484         }
485       }
486     }
487   }
488
489   if (!theCreate && aSObject) {
490     UpdateObjBrowser(theModule);
491   }
492 }
493
494 void
495 VisuGUI::
496 OnCreateMesh()
497 {
498   _PTR(Study) aStudy = GetCStudy(GetAppStudy(this));
499   if (CheckLock(aStudy))
500     return;
501
502   // Get selected SObject
503   Handle(SALOME_InteractiveObject) anIO;
504   CORBA::Object_var anObject = GetSelectedObj(this, &anIO);
505   if (anIO.IsNull() || !anIO->hasEntry())
506     return;
507
508   // create a VTK view window if it does not exist
509   GetViewWindow( this, /*create=*/true );
510
511   CreateMesh(this, anIO);
512 }
513
514 void
515 VisuGUI::
516 OnCreateManyMesh()
517 {
518   _PTR(Study) aStudy = GetCStudy(GetAppStudy(this));
519   if (CheckLock(aStudy))
520     return;
521
522   // create a VTK view window if it does not exist
523   GetViewWindow( this, /*create=*/true );
524
525   // Get selected SObject
526   LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
527   SALOME_ListIO aListIO;
528   aSelectionMgr->selectedObjects(aListIO);
529   SALOME_ListIteratorOfListIO anIter (aListIO);
530   for (; anIter.More(); anIter.Next()) {
531     Handle(SALOME_InteractiveObject) anIO = anIter.Value();
532     if (anIO.IsNull() || !anIO->hasEntry())
533       return;
534
535     CreateMesh(this, anIO);
536   }
537 }
538
539 void
540 VisuGUI::
541 OnCreateScalarMap()
542 {
543   CreatePrs3d<VISU::ScalarMap_i,VisuGUI_ScalarBarDlg,1>(this);
544 }
545
546
547 void
548 VisuGUI::
549 OnCreateDeformedShape()
550 {
551   CreatePrs3d<VISU::DeformedShape_i,VisuGUI_DeformedShapeDlg,1>(this);
552 }
553
554 void
555 VisuGUI::
556 OnCreateVectors()
557 {
558   CreatePrs3d<VISU::Vectors_i,VisuGUI_VectorsDlg,1>(this);
559 }
560
561 void
562 VisuGUI::
563 OnCreateIsoSurfaces()
564 {
565   CreatePrs3d<VISU::IsoSurfaces_i,VisuGUI_IsoSurfacesDlg,1>(this);
566 }
567
568 void
569 VisuGUI::
570 OnCreateCutPlanes()
571 {
572   CreatePrs3d<VISU::CutPlanes_i,VisuGUI_CutPlanesDlg,0>(this);
573 }
574
575 void
576 VisuGUI::
577 OnCreateCutLines()
578 {
579   CreatePrs3d<VISU::CutLines_i,VisuGUI_CutLinesDlg,0>(this);
580 }
581
582 void
583 VisuGUI::
584 OnCreateStreamLines()
585 {
586   CreatePrs3d<VISU::StreamLines_i,VisuGUI_StreamLinesDlg,1>(this);
587 }
588
589 void
590 VisuGUI::
591 OnCreatePlot3D()
592 {
593   CreatePrs3d<VISU::Plot3D_i,VisuGUI_Plot3DDlg,0>(this);
594 }
595
596 void
597 VisuGUI::
598 OnCreatePlot2dView()
599 {
600   CheckLock(GetCStudy(GetAppStudy(this)));
601   GetVisuGen( this )->CreateContainer();
602   UpdateObjBrowser(this);
603 }
604
605 void
606 VisuGUI::
607 OnDisplayPrs()
608 {
609   if(MYDEBUG) MESSAGE("VisuGUI::OnDisplayPrs");
610
611   QApplication::setOverrideCursor(Qt::waitCursor);
612   SALOME_ListIO aList;
613   LightApp_SelectionMgr* mgr = GetSelectionMgr(this);
614   mgr->selectedObjects(aList);
615
616   Handle(SALOME_InteractiveObject) anIO;
617   for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() ) {
618     anIO = it.Value();
619     CORBA::Object_var anObject = GetSelectedObj( GetAppStudy(this), anIO->getEntry() );
620     if ( !CORBA::is_nil( anObject ) ) {
621       // is it Prs3d object ?
622       VISU::Prs3d_i* aPrsObject = dynamic_cast<VISU::Prs3d_i*>(VISU::GetServant(anObject).in());
623       if(aPrsObject){
624         if(MYDEBUG) MESSAGE("VisuGUI::OnDisplayPrs : Prs3d object");
625         UpdateViewer( this, aPrsObject );
626         SVTK_ViewWindow* vw = GetViewWindow( this, /*create=*/true );
627         if ( vw ) {
628           vw->highlight(anIO, 1);
629         }
630         continue;
631       }
632       // is it Curve ?
633       VISU::Curve_i* aCurve = dynamic_cast<VISU::Curve_i*>(VISU::GetServant(anObject).in());
634       if(aCurve){
635         if(MYDEBUG) MESSAGE("VisuGUI::OnDisplayPrs : Curve object");
636         PlotCurve( this, aCurve, VISU::eDisplay );
637         continue;
638       }
639       // is it Container ?
640       VISU::Container_i* aContainer = dynamic_cast<VISU::Container_i*>(VISU::GetServant(anObject).in());
641       if(aContainer){
642         if(MYDEBUG) MESSAGE("VisuGUI::DisplayPrs : Container object");
643         PlotContainer( this, aContainer, VISU::eDisplay );
644         continue;
645       }
646       // is it Table ?
647       VISU::Table_i* aTable = dynamic_cast<VISU::Table_i*>(VISU::GetServant(anObject).in());
648       if(aTable){
649         if(MYDEBUG) MESSAGE("VisuGUI::DisplayPrs : Table object");
650         PlotTable( this, aTable, VISU::eDisplay );
651         continue;
652       }
653     }
654   }
655   SVTK_ViewWindow* vw = GetViewWindow( this );
656   if ( vw ) {
657     vw->getRenderer()->ResetCameraClippingRange();
658     vw->Repaint();
659   }
660   QApplication::restoreOverrideCursor();
661 }
662
663 void
664 VisuGUI::
665 OnDisplayOnlyPrs()
666 {
667   OnEraseAll();
668   OnDisplayPrs();
669 }
670
671 void
672 VisuGUI::
673 OnErasePrs()
674 {
675   if(MYDEBUG) MESSAGE("OnErasePrs");
676
677   QApplication::setOverrideCursor(Qt::waitCursor);
678
679   SVTK_ViewWindow* vw = GetViewWindow( this );
680   if (vw)
681     vw->unHighlightAll();
682
683   SALOME_ListIO aList;
684   LightApp_SelectionMgr* mgr = GetSelectionMgr(this);
685   mgr->selectedObjects(aList);
686
687   Handle(SALOME_InteractiveObject) anIO;
688   for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() ) {
689     anIO = it.Value();
690     CORBA::Object_var anObject = GetSelectedObj( GetAppStudy(this), anIO->getEntry() );
691     ErasePrs( this, anObject, false );
692   }
693
694   if (vw)
695     vw->Repaint();
696
697   QApplication::restoreOverrideCursor();
698 }
699
700
701 void
702 VisuGUI::
703 OnEditScalarMap()
704 {
705   Handle(SALOME_InteractiveObject) anIO;
706   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
707     EditPrs3d<VISU::ScalarMap_i, VisuGUI_ScalarBarDlg,1>(this, aPrs3d);
708     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
709       aViewWindow->highlight(anIO, 1);
710     }
711   }
712 }
713
714
715 void
716 VisuGUI::
717 OnEditDeformedShape()
718 {
719   Handle(SALOME_InteractiveObject) anIO;
720   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
721     EditPrs3d<VISU::DeformedShape_i, VisuGUI_DeformedShapeDlg,1>(this, aPrs3d);
722     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
723       aViewWindow->highlight(anIO, 1);
724     }
725   }
726 }
727
728
729 void
730 VisuGUI::
731 OnEditCutPlanes()
732 {
733   Handle(SALOME_InteractiveObject) anIO;
734   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
735     EditPrs3d<VISU::CutPlanes_i, VisuGUI_CutPlanesDlg,0>(this, aPrs3d);
736     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
737       aViewWindow->highlight(anIO, 1);
738     }
739   }
740 }
741
742
743 void
744 VisuGUI::
745 OnEditCutLines()
746 {
747   Handle(SALOME_InteractiveObject) anIO;
748   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
749     EditPrs3d<VISU::CutLines_i, VisuGUI_CutLinesDlg,0>(this, aPrs3d);
750     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
751       aViewWindow->highlight(anIO, 1);
752     }
753   }
754 }
755
756
757 void
758 VisuGUI::
759 OnEditIsoSurfaces()
760 {
761   Handle(SALOME_InteractiveObject) anIO;
762   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
763     EditPrs3d<VISU::IsoSurfaces_i, VisuGUI_IsoSurfacesDlg,1>(this, aPrs3d);
764     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
765       aViewWindow->highlight(anIO, 1);
766     }
767   }
768 }
769
770
771 void
772 VisuGUI::
773 OnEditVectors()
774 {
775   Handle(SALOME_InteractiveObject) anIO;
776   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
777     EditPrs3d<VISU::Vectors_i, VisuGUI_VectorsDlg,1>(this, aPrs3d);
778     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
779       aViewWindow->highlight(anIO, 1);
780     }
781   }
782 }
783
784
785 void
786 VisuGUI::
787 OnEditStreamLines()
788 {
789   Handle(SALOME_InteractiveObject) anIO;
790   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
791     EditPrs3d<VISU::StreamLines_i, VisuGUI_StreamLinesDlg,1>(this, aPrs3d);
792     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
793       aViewWindow->highlight(anIO, 1);
794     }
795   }
796 }
797
798
799 void
800 VisuGUI::
801 OnEditPlot3D()
802 {
803   Handle(SALOME_InteractiveObject) anIO;
804   if(VISU::Prs3d_i* aPrs3d = GetPrsToModify(this,&anIO)){
805     EditPrs3d<VISU::Plot3D_i, VisuGUI_Plot3DDlg,0>(this, aPrs3d);
806     if(SVTK_ViewWindow* aViewWindow = GetViewWindow()){
807       aViewWindow->highlight(anIO, 1);
808     }
809   }
810 }
811
812
813 void
814 VisuGUI::
815 OnEraseAll()
816 {
817   if (SVTK_ViewWindow* vw = GetViewWindow()) {
818     vw->unHighlightAll();
819     if (vtkRenderer *aRen = vw->getRenderer()) {
820       vtkActor *anActor;
821       vtkActorCollection *anActColl = aRen->GetActors();
822       for (anActColl->InitTraversal(); (anActor = anActColl->GetNextActor()) != NULL; ) {
823         if (anActor->GetVisibility() > 0)
824           if (VISU_Actor* anVISUActor = VISU_Actor::SafeDownCast(anActor)) {
825             anVISUActor = anVISUActor->GetParent();
826             anVISUActor->VisibilityOff();
827           }
828       }
829       vw->Repaint();
830     }
831   } else if (SPlot2d_Viewer* aPlot2d = GetPlot2dViewer(this, false)) {
832     aPlot2d->EraseAll();
833   }
834 }
835
836 void
837 VisuGUI::
838 OnMakeSurfaceframe()
839 {
840   ChangeRepresentation(this, VISU::SURFACEFRAME);
841 }
842
843 void
844 VisuGUI::
845 OnMakeInsideframe()
846 {
847   ChangeRepresentation(this, VISU::INSIDEFRAME);
848 }
849
850 void
851 VisuGUI::
852 OnMakeWireframe()
853 {
854   ChangeRepresentation(this, VISU::WIREFRAME);
855 }
856
857 void
858 VisuGUI::
859 OnMakeSurface()
860 {
861   ChangeRepresentation(this, VISU::SHADED);
862 }
863
864 void
865 VisuGUI::
866 OnMakePoints()
867 {
868   ChangeRepresentation(this, VISU::POINT);
869 }
870
871 void
872 VisuGUI::
873 OnMakeShrink()
874 {
875   ChangeRepresentation(this, VISU::SHRINK);
876 }
877
878 void
879 VisuGUI::
880 OnSetShadingOn()
881 {
882   SetShading(this, true);
883 }
884
885 void
886 VisuGUI::
887 OnSetShadingOff()
888 {
889   SetShading(this, false);
890 }
891
892 void
893 VisuGUI::
894 OnChangeColor()
895 {
896   Handle(SALOME_InteractiveObject) anIO;
897   CORBA::Object_var anObject = GetSelectedObj(this, &anIO);
898   if (CORBA::is_nil(anObject)) return;
899   PortableServer::ServantBase_var aServant = VISU::GetServant(anObject);
900   if (!aServant.in()) return;
901
902   VISU::Prs3d_i* aPrs3d = dynamic_cast<VISU::Prs3d_i*>(aServant.in());
903   if (!aPrs3d) return;
904
905   SVTK_ViewWindow* vw = GetViewWindow();
906   if (!vw) return;
907
908   VISU_Actor* anActor = GetActor(aPrs3d, vw);
909   if (!anActor) return;
910
911   VISU::Mesh_i* aMesh = dynamic_cast<VISU::Mesh_i*>(aPrs3d);
912   VISU::DeformedShape_i* aDeformedShape = dynamic_cast<VISU::DeformedShape_i*>(aPrs3d);
913   SALOMEDS::Color anOldColor, aNewColor;
914   int aRepresent = anActor->GetRepresentation();
915   if (aMesh) {
916     switch (aRepresent) {
917       case VISU::POINT :
918         anOldColor = aMesh->GetNodeColor();
919         break;
920       case VISU::WIREFRAME :
921       case VISU::INSIDEFRAME :
922         anOldColor = aMesh->GetLinkColor();
923         break;
924       case VISU::SHADED :
925       case VISU::SURFACEFRAME :
926         anOldColor = aMesh->GetCellColor();
927         break;
928     }
929   } else if (aDeformedShape) {
930     anOldColor = aDeformedShape->GetColor();
931   } else {
932     return;
933   }
934
935   QColor aColor (int(255*anOldColor.R),
936                  int(255*anOldColor.G),
937                  int(255*anOldColor.B));
938   QColor aColorNew = QColorDialog::getColor(aColor, GetDesktop(this));
939   if (aColorNew.isValid()) {
940     aNewColor.R = aColorNew.red()/255.;
941     aNewColor.G = aColorNew.green()/255.;
942     aNewColor.B = aColorNew.blue()/255.;
943     if (aMesh) {
944       switch (aRepresent) {
945         case VISU::POINT :
946           aMesh->SetNodeColor(aNewColor);
947           break;
948         case VISU::WIREFRAME :
949         case VISU::INSIDEFRAME :
950           aMesh->SetLinkColor(aNewColor);
951           break;
952         case VISU::SHADED :
953         case VISU::SURFACEFRAME :
954           aMesh->SetCellColor(aNewColor);
955           break;
956       }
957     } else {
958       aDeformedShape->SetColor(aNewColor);
959     }
960     RecreateActor(this, aPrs3d);
961   }
962 }
963
964 void
965 VisuGUI::
966 OnChangeWireframeColor()
967 {
968   Handle(SALOME_InteractiveObject) anIO;
969   CORBA::Object_var anObject = GetSelectedObj(this, &anIO);
970   if (CORBA::is_nil(anObject)) return;
971   PortableServer::ServantBase_var aServant = VISU::GetServant(anObject);
972   if (!aServant.in()) return;
973
974   VISU::Prs3d_i* aPrs3d = dynamic_cast<VISU::Prs3d_i*>(aServant.in());
975   if (!aPrs3d) return;
976
977   SVTK_ViewWindow* vw = GetViewWindow();
978   if (!vw) return;
979
980   VISU_Actor* anActor = GetActor(aPrs3d, vw);
981   if (!anActor) return;
982
983   if (VISU::Mesh_i* aMesh = dynamic_cast<VISU::Mesh_i*>(aPrs3d)) {
984     SALOMEDS::Color anOldColor = aMesh->GetLinkColor(), aNewColor;
985     QColor aColor (int(255*anOldColor.R),
986                    int(255*anOldColor.G),
987                    int(255*anOldColor.B));
988     QColor aColorNew = QColorDialog::getColor(aColor, GetDesktop(this));
989     if (aColorNew.isValid()) {
990       aNewColor.R = aColorNew.red()/255.;
991       aNewColor.G = aColorNew.green()/255.;
992       aNewColor.B = aColorNew.blue()/255.;
993       aMesh->SetLinkColor(aNewColor);
994       RecreateActor(this, aMesh);
995     }
996   }
997 }
998
999 void
1000 VisuGUI::
1001 OnChangeOpacity()
1002 {
1003   Handle(SALOME_InteractiveObject) anIO;
1004   CORBA::Object_var anObject = GetSelectedObj(this, &anIO);
1005   if (CORBA::is_nil(anObject)) return;
1006   PortableServer::ServantBase_var aServant = VISU::GetServant(anObject);
1007   if (!aServant.in()) return;
1008
1009   VISU::Prs3d_i* aPrsObject = dynamic_cast<VISU::Prs3d_i*>(aServant.in());
1010   if (!aPrsObject) return;
1011
1012   SVTK_ViewWindow* vw = GetViewWindow();
1013   if (!vw) return;
1014
1015   VISU_Actor* anActor = GetActor(aPrsObject, vw);
1016   if (!anActor) return;
1017
1018   VisuGUI_CursorDlg* CursorDlg =
1019     new VisuGUI_CursorDlg (GetDesktop(this), tr("DLG_OPACITY_TITLE"), TRUE);
1020
1021   CursorDlg->Comment1->setText(tr("DLG_OPACITY_CMT1"));
1022   CursorDlg->Comment2->setText(tr("DLG_OPACITY_CMT2"));
1023   CursorDlg->SpinBox1->setMinValue(0);
1024   CursorDlg->SpinBox1->setMaxValue(100);
1025
1026   float oldopac = anActor->GetOpacity();
1027   int intopac = int(oldopac*100. + 0.5);
1028   CursorDlg->SpinBox1->setValue(intopac);
1029
1030   int ret = CursorDlg->exec();
1031   if (ret == 1) {
1032     intopac = CursorDlg->SpinBox1->value();
1033     float newopac = intopac/100.;
1034     anActor->SetOpacity(newopac);
1035   }
1036   delete CursorDlg;
1037 }
1038
1039 void
1040 VisuGUI::
1041 OnChangeLines()
1042 {
1043   Handle(SALOME_InteractiveObject) anIO;
1044   CORBA::Object_var anObject = GetSelectedObj(this, &anIO);
1045   if (CORBA::is_nil(anObject)) return;
1046   PortableServer::ServantBase_var aServant = VISU::GetServant(anObject);
1047   if (!aServant.in()) return;
1048
1049   VISU::Prs3d_i* aPrsObject = dynamic_cast<VISU::Prs3d_i*>(aServant.in());
1050   if (!aPrsObject) return;
1051
1052   SVTK_ViewWindow* vw = GetViewWindow();
1053   if (!vw) return;
1054
1055   VISU_Actor* anActor = GetActor(aPrsObject, vw);
1056   if (!anActor) return;
1057
1058   VisuGUI_CursorDlg* CursorDlg =
1059     new VisuGUI_CursorDlg (GetDesktop(this), tr("DLG_LINEWIDTH_TITLE"), TRUE);
1060
1061   CursorDlg->Comment1->setText(tr("DLG_LINEWIDTH_CMT1"));
1062   CursorDlg->Comment2->setText(tr("DLG_LINEWIDTH_CMT2"));
1063   CursorDlg->SpinBox1->setMinValue(1);
1064   CursorDlg->SpinBox1->setMaxValue(10);
1065
1066   float oldlwid = anActor->GetLineWidth();
1067   int intlwid = int(oldlwid);
1068   CursorDlg->SpinBox1->setValue(intlwid);
1069
1070   int ret = CursorDlg->exec();
1071   if (ret == 1) {
1072     intlwid  = CursorDlg->SpinBox1->value();
1073     float newlwid = intlwid;
1074     anActor->SetLineWidth(newlwid);
1075   }
1076   delete CursorDlg;
1077 }
1078
1079 void
1080 VisuGUI::
1081 OnShowTable()
1082 {
1083   Handle(SALOME_InteractiveObject) anIO;
1084   CORBA::Object_var anObject = GetSelectedObj( this, &anIO );
1085   _PTR(SObject) SO;
1086   if ( !CORBA::is_nil( anObject ) ) {
1087     VISU::Base_var aVisuObj = VISU::Base::_narrow( anObject );
1088     if ( !CORBA::is_nil( aVisuObj ) && aVisuObj->GetType() == VISU::TTABLE ) {
1089       CORBA::Object_ptr aTable = VISU::Table::_narrow( anObject );
1090       if( !CORBA::is_nil( aTable ) ) {
1091         VISU::Table_i* table = dynamic_cast<VISU::Table_i*>( VISU::GetServant(aTable).in() );
1092         if ( table ) {
1093           SO = GetCStudy( GetAppStudy( this ) )->FindObjectID( table->GetObjectEntry() );
1094         }
1095       }
1096     }
1097   } else {
1098     // possibly this is Table SObject
1099     SO = GetCStudy( GetAppStudy( this ) )->FindObjectID( anIO->getEntry() );
1100   }
1101
1102   if( !IsSObjectTable( SO ) )
1103     return;
1104
1105   VisuGUI_TableDlg* dlg = new VisuGUI_TableDlg( GetDesktop( this ),
1106                                                SO,
1107                                                false,
1108                                                //SAL2670 Orientation of show tables
1109                                                VisuGUI_TableDlg::ttAuto,
1110                                                Qt::Vertical );
1111   dlg->show();
1112 }
1113
1114 void
1115 VisuGUI::
1116 OnCreateTable()
1117 {
1118   Handle(SALOME_InteractiveObject) anIO;
1119   CORBA::Object_var anObject = GetSelectedObj( this, &anIO );
1120   _PTR(Study) aStudy = GetCStudy( GetAppStudy( this ) );
1121   _PTR(SObject) aSObject = aStudy->FindObjectID(anIO->getEntry());
1122   VISU::CutLines_var aCutLines = VISU::CutLines::_narrow( anObject );
1123   if(!aCutLines->_is_nil() || IsSObjectTable(aSObject)) {
1124     GetVisuGen( this )->CreateTable( aSObject->GetID().c_str() );
1125     UpdateObjBrowser(this);
1126   }
1127 }
1128
1129 void
1130 VisuGUI::
1131 OnDeleteObjects()
1132 {
1133   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
1134   if (CheckLock(aCStudy))
1135     return;
1136
1137   SALOME_ListIO aList;
1138   LightApp_SelectionMgr* mgr = GetSelectionMgr(this);
1139   mgr->selectedObjects(aList,QString::null,false);
1140   int i = 0, nbSelected = aList.Extent();
1141   if (nbSelected < 1) return;
1142
1143   const char* entries [nbSelected];
1144   Handle(SALOME_InteractiveObject) anIO;
1145   for (SALOME_ListIteratorOfListIO it (aList); it.More(); it.Next()) {
1146     anIO = it.Value();
1147     if (anIO->hasEntry())
1148       entries[i++] = anIO->getEntry();
1149   }
1150   nbSelected = i;
1151   if (nbSelected < 1) return;
1152
1153   // There is a transaction
1154   _PTR(StudyBuilder) aStudyBuilder = aCStudy->NewBuilder();
1155   aStudyBuilder->NewCommand();
1156
1157   for (i = 0; i < nbSelected; i++) {
1158     _PTR(SObject) aSObject = aCStudy->FindObjectID(entries[i]);
1159     if (aSObject) {
1160       DeleteSObject(this, aCStudy, aSObject);
1161     }
1162   }
1163
1164   // Finish transaction
1165   aStudyBuilder->CommitCommand();
1166
1167   //GetActiveStudy()->unHighlightAll();
1168   UpdateObjBrowser(this, true);
1169 }
1170
1171 void
1172 VisuGUI::
1173 OnPlotData()
1174 {
1175   Handle(SALOME_InteractiveObject) anIO;
1176   CORBA::Object_var anObject = GetSelectedObj( this, &anIO );
1177   _PTR(SObject) SO;
1178   _PTR(GenericAttribute) anAttr;
1179   _PTR(AttributeName)    aName;
1180   QString SOName;
1181   _PTR(Study) aStudy = GetCStudy( GetAppStudy( this ) );
1182
1183   if ( !CORBA::is_nil( anObject ) ) {
1184     VISU::Base_var aVisuObj = VISU::Base::_narrow(anObject);
1185     if (!CORBA::is_nil(aVisuObj) && aVisuObj->GetType() == VISU::TTABLE) {
1186       // Table (VISU object) is selected
1187       CORBA::Object_ptr aTbl = VISU::Table::_narrow( anObject );
1188       if( !CORBA::is_nil( aTbl ) ) {
1189         VISU::Table_i* table = dynamic_cast<VISU::Table_i*>(VISU::GetServant(aTbl).in());
1190         if ( table ) {
1191           _PTR(SObject) SO = aStudy->FindObjectID( table->GetObjectEntry() );
1192           if ( IsSObjectTable(SO) ) {
1193             // get name of SObject
1194             if ( SO->FindAttribute( anAttr, "AttributeName" ) ) {
1195               aName = anAttr;
1196               SOName = QString( aName->Value().c_str() );
1197             }
1198             VisuGUI_SetupPlot2dDlg* dlg = new VisuGUI_SetupPlot2dDlg( SO, GetDesktop( this ) );
1199             if ( dlg->exec() == QDialog::Accepted ) {
1200               if ( !IsStudyLocked( aStudy ) ) {
1201                 // if study is not locked - create new container, create curves and insert them
1202                 // into container, then plot container if current viewer is of VIEW_PLOT2D type
1203                 int horIndex;
1204                 QValueList<int> verIndices;
1205                 dlg->getCurvesSource( horIndex, verIndices );
1206                 if ( horIndex >= 0 && verIndices.count() > 0 ) {
1207                   CORBA::Object_var aContainer = GetVisuGen(this)->CreateContainer();
1208                   if( !CORBA::is_nil( aContainer ) ) {
1209                     VISU::Container_i* pContainer =
1210                       dynamic_cast<VISU::Container_i*>(VISU::GetServant(aContainer).in());
1211                     if ( pContainer ) {
1212                       for ( int i = 0; i < verIndices.count(); i++ ) {
1213                         CORBA::Object_var aNewCurve =
1214                           GetVisuGen(this)->CreateCurve( table->_this(), horIndex+1, verIndices[i]+1 );
1215                         if( !CORBA::is_nil( aNewCurve ) ) {
1216                           VISU::Curve_i* pCrv =
1217                             dynamic_cast<VISU::Curve_i*>(VISU::GetServant(aNewCurve).in());
1218                           if ( pCrv ) {
1219                             bool isAuto;
1220                             int  marker, line, lineWidth;
1221                             QColor color;
1222                             if ( dlg->getCurveAttributes(verIndices[i], isAuto, marker,
1223                                                          line, lineWidth, color) && !isAuto ) {
1224                               SALOMEDS::Color c;
1225                               c.R = color.red()  /255.;
1226                               c.G = color.green()/255.;
1227                               c.B = color.blue() /255.;
1228                               pCrv->SetColor( c );
1229                               pCrv->SetMarker( ( VISU::Curve::MarkerType )marker );
1230                               pCrv->SetLine( ( VISU::Curve::LineType )line, lineWidth );
1231                             }
1232                             pContainer->AddCurve( pCrv->_this() );
1233                           }
1234                         }
1235                       }
1236                       UpdateObjBrowser(this);
1237                       PlotContainer( this, pContainer, VISU::eDisplay );
1238                     }
1239                   }
1240                 }
1241               }
1242               else {
1243                 // if study is locked just get curves info and plot them
1244                 // if current viewer is of VIEW_PLOT2D type
1245                 QPtrList<Plot2d_Curve> container;
1246                 dlg->getCurves( container );
1247                 if ( !container.isEmpty() ) {
1248                   GetPlot2dViewer( this )->getActiveViewFrame()->displayCurves( container, true );
1249                   GetPlot2dViewer( this )->getActiveViewFrame()->setTitle( SOName );
1250                 }
1251               }
1252             }
1253             delete dlg;
1254           }
1255         }
1256       }
1257     }
1258   }
1259   else if ( !anIO.IsNull() ) {
1260     // check if Table SObject is selected
1261     SO = aStudy->FindObjectID( anIO->getEntry() );
1262     if ( IsSObjectTable(SO) ) {
1263       // get name of SObject
1264       if ( SO->FindAttribute( anAttr, "AttributeName" ) ) {
1265         aName = anAttr;
1266         SOName = QString( aName->Value().c_str() );
1267       }
1268       VisuGUI_SetupPlot2dDlg* dlg = new VisuGUI_SetupPlot2dDlg( SO, GetDesktop( this ) );
1269       if ( dlg->exec() == QDialog::Accepted ) {
1270         if ( !IsStudyLocked( aStudy ) ) {
1271           // if study is not locked - create new table and container objects, create curves
1272           // and insert them into container, then plot container if current viewer is of VIEW_PLOT2D type
1273           int horIndex;
1274           QValueList<int> verIndices;
1275           dlg->getCurvesSource( horIndex, verIndices );
1276           if ( horIndex >= 0 && verIndices.count() > 0 ) {
1277             CORBA::Object_var aTable = GetVisuGen(this)->CreateTable( SO->GetID().c_str() );
1278             CORBA::Object_var aContainer = GetVisuGen(this)->CreateContainer();
1279             if ( !CORBA::is_nil( aTable ) && !CORBA::is_nil( aContainer ) ) {
1280               VISU::Table_i*     pTable     = dynamic_cast<VISU::Table_i*>(VISU::GetServant(aTable).in());
1281               VISU::Container_i* pContainer = dynamic_cast<VISU::Container_i*>(VISU::GetServant(aContainer).in());
1282
1283               if ( pContainer && pTable ) {
1284                 for ( int i = 0; i < verIndices.count(); i++ ) {
1285                   CORBA::Object_var aNewCurve = GetVisuGen(this)->CreateCurve
1286                     ( pTable->_this(), horIndex+1, verIndices[i]+1 );
1287                   if( !CORBA::is_nil( aNewCurve ) ) {
1288                     VISU::Curve_i* pCrv = dynamic_cast<VISU::Curve_i*>(VISU::GetServant(aNewCurve).in());
1289                     if ( pCrv ) {
1290                       bool isAuto;
1291                       int  marker, line, lineWidth;
1292                       QColor color;
1293                       if ( dlg->getCurveAttributes(verIndices[i], isAuto, marker,
1294                                                    line, lineWidth, color) && !isAuto ) {
1295                         SALOMEDS::Color c;
1296                         c.R = color.red()/255.;
1297                         c.G = color.green()/255.;
1298                         c.B = color.blue()/255.;
1299                         pCrv->SetColor( c );
1300                         pCrv->SetMarker( ( VISU::Curve::MarkerType )marker );
1301                         pCrv->SetLine( ( VISU::Curve::LineType )line, lineWidth );
1302                       }
1303                       pContainer->AddCurve( pCrv->_this() );
1304                     }
1305                   }
1306                 }
1307                 UpdateObjBrowser(this);
1308                 PlotContainer( this, pContainer, VISU::eDisplay );
1309               }
1310             }
1311           }
1312         } else {
1313           // if study is locked just get curves info and plot them
1314           QPtrList<Plot2d_Curve> container;
1315           dlg->getCurves( container );
1316           if ( !container.isEmpty() ) {
1317             GetPlot2dViewer( this )->getActiveViewFrame()->displayCurves( container, true );
1318             GetPlot2dViewer( this )->getActiveViewFrame()->setTitle( SOName );
1319           }
1320         }
1321       }
1322       delete dlg;
1323     }
1324   }
1325 }
1326
1327 void
1328 VisuGUI::
1329 OnCurveProperties()
1330 {
1331   LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
1332   SALOME_ListIO aListIO;
1333   aSelectionMgr->selectedObjects(aListIO);
1334   if (aListIO.Extent() != 1) return;
1335
1336   SalomeApp_Study* aAppStudy = GetAppStudy(this);
1337   const Handle(SALOME_InteractiveObject)& anIO = aListIO.First();
1338   CORBA::Object_var anObject = GetSelectedObj( aAppStudy, anIO->getEntry() );
1339   if (CORBA::is_nil( anObject )) return;
1340
1341   VISU::Base_var aVisuObj = VISU::Base::_narrow(anObject);
1342   if (!CORBA::is_nil(aVisuObj) && aVisuObj->GetType() == VISU::TCURVE) {
1343     // Curve object
1344     CORBA::Object_ptr aCurve = VISU::Curve::_narrow( anObject );
1345     if( !CORBA::is_nil( aCurve ) ) {
1346       VISU::Curve_i* aDSCurve = dynamic_cast<VISU::Curve_i*>(VISU::GetServant(aCurve).in());
1347       if ( aDSCurve && (!IsStudyLocked( GetCStudy(aAppStudy) )) ) {
1348         Plot2d_SetupCurveDlg aDlg(GetDesktop( this ));
1349
1350         aDlg.setLine( (int)aDSCurve->GetLine(), aDSCurve->GetLineWidth() );
1351         aDlg.setMarker( (int)aDSCurve->GetMarker() );
1352         SALOMEDS::Color aColor = aDSCurve->GetColor();
1353         aDlg.setColor( QColor( (int)(aColor.R*255.), (int)(aColor.G*255.), (int)(aColor.B*255.) ) );
1354         if( aDlg.exec() == QDialog::Accepted ) {
1355           aDSCurve->SetLine( (VISU::Curve::LineType)aDlg.getLine(), aDlg.getLineWidth() );
1356           aDSCurve->SetMarker( (VISU::Curve::MarkerType)aDlg.getMarker());
1357           SALOMEDS::Color newColor;
1358           newColor.R = aDlg.getColor().red()/255.;
1359           newColor.G = aDlg.getColor().green()/255.;
1360           newColor.B = aDlg.getColor().blue()/255.;
1361           aDSCurve->SetColor( newColor );
1362           PlotCurve(this, aDSCurve, VISU::eDisplay);
1363         }
1364       }
1365     }
1366   }
1367 }
1368
1369 void
1370 VisuGUI::
1371 OnClearContainer()
1372 {
1373   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
1374   if (CheckLock(aCStudy))
1375     return;
1376   Handle(SALOME_InteractiveObject) anIO;
1377   CORBA::Object_var anObject = GetSelectedObj(this, &anIO);
1378   if (anIO.IsNull() || CORBA::is_nil(anObject))
1379     return;
1380
1381   VISU::Base_var aVisuObj = VISU::Base::_narrow(anObject);
1382   if (!CORBA::is_nil(aVisuObj) && aVisuObj->GetType() == VISU::TCONTAINER) {
1383     // Container object
1384     CORBA::Object_ptr aCnt = VISU::Container::_narrow(anObject);
1385     if (!CORBA::is_nil(aCnt)) {
1386       VISU::Container_i* container = dynamic_cast<VISU::Container_i*>(VISU::GetServant(aCnt).in());
1387       if (container && container->GetNbCurves() > 0) {
1388         container->Clear();
1389         UpdateObjBrowser(this);
1390       }
1391     }
1392   }
1393 }
1394
1395 void
1396 VisuGUI::
1397 OnEditContainer()
1398 {
1399   Handle(SALOME_InteractiveObject) anIO;
1400   CORBA::Object_var anObject = GetSelectedObj(this, &anIO);
1401   if (CORBA::is_nil(anObject)) return;
1402
1403   PortableServer::ServantBase_var aServant = VISU::GetServant(anObject);
1404   if (!aServant.in()) return;
1405   VISU::Container_i* aContainer = dynamic_cast<VISU::Container_i*>(aServant.in());
1406   if (!aContainer) return;
1407
1408   VisuGUI_EditContainerDlg* aDlg = new VisuGUI_EditContainerDlg (this);
1409   aDlg->initFromPrsObject(aContainer);
1410   if (aDlg->exec()) {
1411     aDlg->storeToPrsObject(aContainer);
1412     UpdateObjBrowser(this, true);
1413   }
1414   delete aDlg;
1415 }
1416
1417 void
1418 VisuGUI::
1419 OnSaveViewParams()
1420 {
1421   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
1422   if (CheckLock(aCStudy))
1423     return;
1424
1425   SUIT_ViewManager* aViewMgr = getApp()->activeViewManager();
1426   if (aViewMgr->getType() != SVTK_Viewer::Type())
1427     return;
1428
1429   LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
1430   SALOME_ListIO aListIO;
1431   aSelectionMgr->selectedObjects(aListIO);
1432   if (aListIO.Extent() > 1)
1433     return;
1434
1435   if (aListIO.Extent() == 0) {
1436     VISU::View3D_i::SaveViewParams(aViewMgr, VISU::View3D_i::GenerateViewParamsName().latin1());
1437   } else {
1438     const Handle(SALOME_InteractiveObject)& anIO = aListIO.First();
1439     VISU::View3D_i::SaveViewParams(aViewMgr, anIO->getName());
1440   }
1441   UpdateObjBrowser(this);
1442 }
1443
1444 void
1445 VisuGUI::
1446 OnRestoreViewParams()
1447 {
1448   SUIT_ViewManager* aViewMgr = getApp()->activeViewManager();
1449   if (aViewMgr->getType() != SVTK_Viewer::Type())
1450     return;
1451
1452   LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
1453   SALOME_ListIO aListIO;
1454   aSelectionMgr->selectedObjects(aListIO);
1455   if (aListIO.Extent() != 1)
1456     return;
1457
1458   const Handle(SALOME_InteractiveObject)& anIO = aListIO.First();
1459   //jfa tmp:VISU::View3D_i::RestoreViewParams(aViewMgr, anIO->getName());
1460   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));//jfa tmp
1461   _PTR(SObject) aSObj = aCStudy->FindObjectID(anIO->getEntry());//jfa tmp
1462   VISU::View3D_i::RestoreViewParams(aViewMgr, aSObj->GetName().c_str());//jfa tmp
1463 }
1464
1465 void
1466 VisuGUI::
1467 OnRename()
1468 {
1469   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
1470   if (CheckLock(aCStudy))
1471     return;
1472
1473   Handle(SALOME_InteractiveObject) anIO;
1474   CORBA::Object_var anObject = GetSelectedObj(this, &anIO);
1475
1476   _PTR(SObject) aSObj = aCStudy->FindObjectID(anIO->getEntry());
1477   if (!aSObj) return;
1478
1479   //TEST DU PARENT == VISU
1480   _PTR(StudyBuilder) aBuilder = aCStudy->NewBuilder();
1481   _PTR(GenericAttribute) anAttr = aBuilder->FindOrCreateAttribute(aSObj, "AttributeName");
1482   if (anAttr) {
1483     _PTR(AttributeName) aName (anAttr);
1484     QString Name = VisuGUI_NameDlg::getName( GetDesktop( this ), aName->Value().c_str() );
1485     if (!Name.isEmpty()) {
1486       QApplication::setOverrideCursor(Qt::waitCursor);
1487
1488       // rename specific objects
1489       if (!CORBA::is_nil(anObject)) {
1490         VISU::Base_var aVisuObj = VISU::Base::_narrow(anObject);
1491         if (!CORBA::is_nil(aVisuObj)) {
1492           switch (aVisuObj->GetType()) {
1493             case VISU::TCURVE: // Curve object
1494             {
1495               CORBA::Object_ptr aCurve = VISU::Curve::_narrow(anObject);
1496               if (!CORBA::is_nil(aCurve)) {
1497                 VISU::Curve_i* curve =
1498                   dynamic_cast<VISU::Curve_i*>(VISU::GetServant(aCurve).in());
1499                 if (curve)
1500                   curve->SetName(Name.latin1());
1501               }
1502               break;
1503             }
1504             case VISU::TTABLE: // Table object
1505             {
1506               CORBA::Object_ptr aTable = VISU::Table::_narrow(anObject);
1507               if (!CORBA::is_nil(aTable)) {
1508                 VISU::Table_i* table =
1509                   dynamic_cast<VISU::Table_i*>(VISU::GetServant(aTable).in());
1510                 if (table)
1511                   table->SetName(Name.latin1());
1512               }
1513               break;
1514             }
1515             case VISU::TCONTAINER: // Container object
1516             {
1517               CORBA::Object_ptr aContainer = VISU::Container::_narrow(anObject);
1518               if (!CORBA::is_nil(aContainer)) {
1519                 VISU::Container_i* container =
1520                   dynamic_cast<VISU::Container_i*>(VISU::GetServant(aContainer).in());
1521                 if (container)
1522                   container->SetName(Name.latin1());
1523               }
1524               break;
1525             }
1526             default:
1527             {
1528             }
1529           }
1530         }
1531       }
1532
1533       // rename the study object
1534       aName->SetValue(Name.latin1()); // rename the SObject
1535       anIO->setName(Name.latin1()); // rename the InteractiveObject
1536       UpdateObjBrowser(this, false);
1537
1538       QApplication::restoreOverrideCursor();
1539     }
1540   }
1541 }
1542
1543 void
1544 VisuGUI::
1545 OnClippingPlanes()
1546 {
1547   new VisuGUI_ClippingDlg (this, "", false);
1548 }
1549
1550 void
1551 VisuGUI::
1552 OnSweep()
1553 {
1554   // GetSelectedPrs3d
1555   Handle(SALOME_InteractiveObject) anIO;
1556   CORBA::Object_var anObject = GetSelectedObj(this, &anIO);
1557   if (CORBA::is_nil(anObject)) return;
1558   PortableServer::ServantBase_var aServant = VISU::GetServant(anObject);
1559   if (!aServant.in()) return;
1560
1561   VISU::ScalarMap_i* aPrsObject = dynamic_cast<VISU::ScalarMap_i*>(aServant.in());
1562   if (!aPrsObject) return;
1563
1564   SVTK_ViewWindow* vw = GetViewWindow();
1565   if (!vw) return;
1566
1567   VISU_Actor* aActor = GetActor(aPrsObject, vw);
1568   if (!aActor) return;
1569
1570   if (!aActor->GetVisibility()) {
1571     aActor->VisibilityOn();
1572   }
1573
1574   // Get sweep parameters
1575   SUIT_ResourceMgr* aResourceMgr = GetResourceMgr();
1576
1577   double aTempoDbl = aResourceMgr->doubleValue("VISU", "sweeping_time_step", 0.1);
1578   int aTemp = int(1.E6 * aTempoDbl);
1579
1580   int aCycles = aResourceMgr->integerValue("VISU", "sweeping_number_cycles", 1);
1581   int aSteps  = aResourceMgr->integerValue("VISU", "sweeping_time_step", 40);
1582
1583   // Sweep
1584   QApplication::setOverrideCursor(Qt::waitCursor);
1585   for (int j = 0; j < aCycles; j++) {
1586     for (int i = 0; i <= aSteps; i++) {
1587       try {
1588         float aPercents = float(i)/aSteps;
1589         aPrsObject->SetMapScale(aPercents);
1590         aPrsObject->UpdateActor(aActor);
1591         vw->getRenderWindow()->getRenderWindow()->Render();
1592         usleep(aTemp);
1593       } catch (std::exception& exc) {
1594         INFOS("Follow exception was occured :\n" << exc.what());
1595       } catch (...) {
1596         INFOS("Unknown exception was occured!");
1597       }
1598     }
1599   }
1600   QApplication::restoreOverrideCursor();
1601 }
1602
1603 void
1604 VisuGUI::
1605 OnTimeAnimation()
1606 {
1607   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
1608   VisuGUI_TimeAnimationDlg* aAnimationDlg =
1609 //    new VisuGUI_TimeAnimationDlg(GetDesktop(this), aCStudy);
1610     new VisuGUI_TimeAnimationDlg (this, aCStudy);
1611
1612   LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
1613   SALOME_ListIO aListIO;
1614   aSelectionMgr->selectedObjects(aListIO);
1615
1616   bool isDefined = false;
1617   long aNbTimes = 0;
1618   SALOME_ListIteratorOfListIO It (aListIO);
1619   for (; It.More(); It.Next()) {
1620     _PTR(SObject) aSObject = aCStudy->FindObjectID(It.Value()->getEntry());
1621     if (!aSObject) continue;
1622     if (getValue(aSObject, "myComment") == QString("FIELD")) {
1623       long aNumber = getValue(aSObject, "myNbTimeStamps").toLong();
1624       if (aNumber > 1) {
1625         if (!isDefined) {
1626           aNbTimes = aNumber;
1627           aAnimationDlg->addField(aSObject);
1628           isDefined = true;
1629         } else if (aNbTimes == aNumber) {
1630           aAnimationDlg->addField(aSObject);
1631         }
1632       }
1633     }
1634   }
1635   if (isDefined) aAnimationDlg->show();
1636   else delete aAnimationDlg;
1637 }
1638
1639 //************************************************************************
1640 void
1641 VisuGUI::
1642 OnShowAnimation()
1643 {
1644   LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
1645   SALOME_ListIO aListIO;
1646   aSelectionMgr->selectedObjects(aListIO);
1647
1648   if (aListIO.Extent() != 1)
1649     return;
1650
1651   const Handle(SALOME_InteractiveObject)& anIO = aListIO.First();
1652
1653   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
1654
1655   _PTR(SObject) aSObj = aCStudy->FindObjectID(anIO->getEntry());
1656   if (!aSObj) return;
1657
1658   VISU::Storable::TRestoringMap aMap;
1659   _PTR(GenericAttribute) anAttr;
1660   if (!aSObj->FindAttribute(anAttr, "AttributeComment")) return;
1661
1662   _PTR(AttributeComment) aComment (anAttr);
1663   string aComm = aComment->Value();
1664   QString strIn (aComm.c_str());
1665   VISU::Storable::StrToMap(strIn, aMap);
1666   bool isExist;
1667   VISU::VISUType aType = (VISU::VISUType)VISU::Storable::FindValue(aMap,"myType",&isExist).toInt();
1668   if (aType != VISU::TANIMATION) return;
1669
1670   VisuGUI_TimeAnimationDlg* aAnimationDlg =
1671     new VisuGUI_TimeAnimationDlg(this, aCStudy);
1672   aAnimationDlg->restoreFromStudy(aSObj);
1673   aAnimationDlg->show();
1674 }
1675
1676 void
1677 VisuGUI::
1678 OnCopyPresentation()
1679 {
1680   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
1681   if (CheckLock(aCStudy))
1682     return;
1683
1684   Handle(SALOME_InteractiveObject) anIO;
1685   CORBA::Object_var anObject = GetSelectedObj(this, &anIO);
1686   if (CORBA::is_nil(anObject)) return;
1687   PortableServer::ServantBase_var aServant = VISU::GetServant(anObject);
1688   if (!aServant.in()) return;
1689
1690   VISU::Prs3d_i* aPrsObject = dynamic_cast<VISU::Prs3d_i*>(aServant.in());
1691   if (!aPrsObject) return;
1692
1693   switch (aPrsObject->GetType()) {
1694   case VISU::TMESH:
1695     {
1696       VISU::Mesh_i* aMeshPrs = dynamic_cast<VISU::Mesh_i*>(aPrsObject);
1697       VISU::Mesh_i* aSameMesh = new VISU::Mesh_i(aMeshPrs->GetResult());
1698       aSameMesh->SameAs(aMeshPrs);
1699       UpdateViewer(this, aSameMesh);
1700     }
1701     break;
1702   case VISU::TSCALARMAP:
1703     {
1704       VISU::ScalarMap_i* aScalarPrs = dynamic_cast<VISU::ScalarMap_i*>(aPrsObject);
1705       VISU::ScalarMap_i* aSameScalar = new VISU::ScalarMap_i(aScalarPrs->GetResult(),true);
1706       aSameScalar->SameAs(aScalarPrs);
1707       UpdateViewer(this, aSameScalar);
1708     }
1709     break;
1710   case VISU::TDEFORMEDSHAPE:
1711     {
1712       VISU::DeformedShape_i* aDefPrs = dynamic_cast<VISU::DeformedShape_i*>(aPrsObject);
1713       VISU::DeformedShape_i* aSameDeformed = new VISU::DeformedShape_i(aDefPrs->GetResult(),true);
1714       aSameDeformed->SameAs(aDefPrs);
1715       UpdateViewer(this, aSameDeformed);
1716     }
1717     break;
1718   case VISU::TCUTPLANES:
1719     {
1720       VISU::CutPlanes_i* aCutPrs = dynamic_cast<VISU::CutPlanes_i*>(aPrsObject);
1721       VISU::CutPlanes_i* aSameCut = new VISU::CutPlanes_i(aCutPrs->GetResult(),true);
1722       aSameCut->SameAs(aCutPrs);
1723       UpdateViewer(this, aSameCut);
1724     }
1725     break;
1726   case VISU::TCUTLINES:
1727     {
1728       VISU::CutLines_i* aCutPrs = dynamic_cast<VISU::CutLines_i*>(aPrsObject);
1729       VISU::CutLines_i* aSameCut = new VISU::CutLines_i(aCutPrs->GetResult(),true);
1730       aSameCut->SameAs(aCutPrs);
1731       UpdateViewer(this, aSameCut);
1732     }
1733     break;
1734   case VISU::TISOSURFACE:
1735     {
1736       VISU::IsoSurfaces_i* aIsoPrs = dynamic_cast<VISU::IsoSurfaces_i*>(aPrsObject);
1737       VISU::IsoSurfaces_i* aSameIso = new VISU::IsoSurfaces_i(aIsoPrs->GetResult(),true);
1738       aSameIso->SameAs(aIsoPrs);
1739       UpdateViewer(this, aSameIso);
1740     }
1741     break;
1742   case VISU::TSTREAMLINES:
1743     {
1744       VISU::StreamLines_i* aLinesPrs = dynamic_cast<VISU::StreamLines_i*>(aPrsObject);
1745       VISU::StreamLines_i* aSameLines = new VISU::StreamLines_i(aLinesPrs->GetResult(),true);
1746       aSameLines->SameAs(aLinesPrs);
1747       UpdateViewer(this, aSameLines);
1748     }
1749     break;
1750   case VISU::TVECTORS:
1751     {
1752       VISU::Vectors_i* aVectorsPrs = dynamic_cast<VISU::Vectors_i*>(aPrsObject);
1753       VISU::Vectors_i* aSameVectors = new VISU::Vectors_i(aVectorsPrs->GetResult(),true);
1754       aSameVectors->SameAs(aVectorsPrs);
1755       UpdateViewer(this, aSameVectors);
1756     }
1757     break;
1758   case VISU::TPLOT3D:
1759     {
1760       VISU::Plot3D_i* aPlot3DPrs = dynamic_cast<VISU::Plot3D_i*>(aPrsObject);
1761       VISU::Plot3D_i* aSamePlot3D = new VISU::Plot3D_i(aPlot3DPrs->GetResult());
1762       aSamePlot3D->SameAs(aPlot3DPrs);
1763       UpdateViewer(this, aSamePlot3D);
1764     }
1765     break;
1766   }
1767   UpdateObjBrowser(this);
1768 }
1769
1770 void
1771 VisuGUI::
1772 OnSelectionInfo()
1773 {
1774   if (GetViewWindow())
1775     (new VisuGUI_SelectionDlg(GetDesktop(this)))->show();
1776   else
1777     SUIT_MessageBox::warn1(GetDesktop(this),
1778                            tr("WRN_VISU"),
1779                            tr("ERR_ACTIVATE_VIEW3D"),
1780                            tr("BUT_OK") );
1781 }
1782
1783 void
1784 VisuGUI::
1785 OnScaling()
1786 {
1787   VisuGUI_NonIsometricDlg* m_NonIsoDlg =
1788     new VisuGUI_NonIsometricDlg (GetDesktop(this), "m_NonIsoDlg",
1789                                  false, Qt::WDestructiveClose);
1790   m_NonIsoDlg->show();
1791 }
1792
1793 void
1794 VisuGUI::
1795 OnCubeAxes()
1796 {
1797   //Show dialog that allows to select scale function and corresponding scale factor
1798   VisuGUI_CubeAxesDlg* aDlg = new VisuGUI_CubeAxesDlg (GetDesktop(this));
1799   aDlg->show();
1800 }
1801
1802 void
1803 VisuGUI::
1804 OnMergeScalarBars()
1805 {
1806   LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
1807   SALOME_ListIO aListIO;
1808   aSelectionMgr->selectedObjects(aListIO);
1809
1810   SALOME_ListIteratorOfListIO It (aListIO);
1811
1812   // first find the bounds
1813   double aMin, aMax; bool first = true;
1814   for (; It.More(); It.Next()) {
1815     Handle(SALOME_InteractiveObject)& anIO = It.Value();
1816     std::vector<VISU::Prs3d_i*> aPrsList = GetPrs3dList(this, anIO);
1817     if (!aPrsList.empty()) {
1818       for (int i = 0, n = aPrsList.size(); i < n; i++) {
1819         VISU::Prs3d_i* aPrsObject = aPrsList[i];
1820         if (aPrsObject) {
1821           VISU::ScalarMap_i* aScalar = dynamic_cast<VISU::ScalarMap_i*>(aPrsObject);
1822           if (aScalar) {
1823             if (first) {
1824               first = false;
1825               aMin = aScalar->GetMin(); aMax = aScalar->GetMax();
1826             } else {
1827               if (aScalar->GetMin() < aMin) aMin = aScalar->GetMin();
1828               if (aScalar->GetMax() > aMax) aMax = aScalar->GetMax();
1829             }
1830           }
1831         }
1832       }
1833     }
1834   }
1835
1836   // set the computed range to every selected ScalarMap
1837   bool update = false;
1838   for (It.Initialize(aListIO); It.More(); It.Next() ) {
1839     Handle(SALOME_InteractiveObject)& anIO = It.Value();
1840     std::vector<VISU::Prs3d_i*> aPrsList = GetPrs3dList(this, anIO);
1841     if (!aPrsList.empty()) {
1842       for (int i = 0, n = aPrsList.size(); i < n; i++) {
1843         VISU::Prs3d_i* aPrsObject = aPrsList[i];
1844         if(aPrsObject){
1845           VISU::ScalarMap_i* aScalar = dynamic_cast<VISU::ScalarMap_i*>(aPrsObject);
1846           if (aScalar) {
1847             aScalar->SetRange(aMin, aMax);
1848             RecreateActor(this, aScalar);
1849             update = true;
1850           }
1851         }
1852       }
1853     }
1854   }
1855   if (update) {
1856     if (SVTK_ViewWindow* vw = GetViewWindow(this)) {
1857 //if (vw->getRenderer()->GetActors()->GetNumberOfItems() > 0) {
1858         vw->getRenderer()->ResetCameraClippingRange();
1859         vw->Repaint();
1860 //}
1861     }
1862   }
1863 }
1864
1865 void
1866 VisuGUI::
1867 OnFreeScalarBars()
1868 {
1869   LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
1870   SALOME_ListIO aListIO;
1871   aSelectionMgr->selectedObjects(aListIO);
1872
1873   SALOME_ListIteratorOfListIO It (aListIO);
1874
1875   // restore the source range for every ScalarMap
1876   bool update = false;
1877   for (; It.More(); It.Next()) {
1878     Handle(SALOME_InteractiveObject)& anIO = It.Value();
1879     std::vector<VISU::Prs3d_i*> aPrsList = GetPrs3dList(this, anIO);
1880     if (!aPrsList.empty()) {
1881       for (int i = 0, n = aPrsList.size(); i < n; i++) {
1882         VISU::Prs3d_i* aPrsObject = aPrsList[i];
1883         if (aPrsObject) {
1884           VISU::ScalarMap_i* aScalar = dynamic_cast<VISU::ScalarMap_i*>(aPrsObject);
1885           if (aScalar) {
1886             aScalar->SetSourceRange();
1887             RecreateActor(this, aScalar);
1888             update = true;
1889           }
1890         }
1891       }
1892     }
1893   }
1894   if (update) {
1895     if (SVTK_ViewWindow* vw = GetViewWindow(this)) {
1896 //if (vw->getRenderer()->GetActors()->GetNumberOfItems() > 0) {
1897         vw->getRenderer()->ResetCameraClippingRange();
1898         vw->Repaint();
1899 //}
1900     }
1901   }
1902 }
1903
1904 void
1905 VisuGUI::
1906 OnTranslatePrs()
1907 {
1908   if(MYDEBUG) MESSAGE("VisuGUI::OnTranslatePrs");
1909   VisuGUI_OffsetDlg* aDlg = new VisuGUI_OffsetDlg (this);
1910
1911   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
1912
1913   LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
1914   SALOME_ListIO aListIO;
1915   aSelectionMgr->selectedObjects(aListIO);
1916
1917   SALOME_ListIteratorOfListIO It (aListIO);
1918   for (; It.More(); It.Next()) {
1919     Handle(SALOME_InteractiveObject)& anIO = It.Value();
1920     if (anIO->hasEntry()) {
1921       _PTR(SObject) aSObject = aCStudy->FindObjectID(anIO->getEntry());
1922       if (aSObject) {
1923         CORBA::Object_var aCORBAObject = VISU::ClientSObjectToObject(aSObject);
1924         if (!CORBA::is_nil(aCORBAObject)) {
1925           PortableServer::ServantBase_var aServant = VISU::GetServant(aCORBAObject);
1926           if (VISU::Prs3d_i* aPrsObject = dynamic_cast<VISU::Prs3d_i*>(aServant.in())) {
1927             aDlg->addPresentation(aPrsObject);
1928           }
1929         }
1930       }
1931     }
1932   }
1933   if (aDlg->getPrsCount() > 0)
1934     aDlg->show();
1935   else
1936     delete aDlg;
1937 }
1938
1939 void
1940 VisuGUI::
1941 OnArrangeActors()
1942 {
1943   SVTK_ViewWindow* vw = GetViewWindow();
1944   if (vw) {
1945     ArrangeDlg* aDlg = new ArrangeDlg (GetDesktop(this), vw);
1946     aDlg->exec();
1947     delete aDlg;
1948   }
1949 }
1950
1951
1952 void
1953 VisuGUI::
1954 initialize( CAM_Application* theApp )
1955 {
1956   SalomeApp_Module::initialize( theApp );
1957
1958   createActions();
1959   createMenus();
1960   createToolBars();
1961   createPopupMenus();
1962 }
1963
1964 void
1965 VisuGUI::
1966 createActions()
1967 {
1968   QPixmap aPixmap;
1969   QWidget* aParent = application()->desktop();
1970   SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr();
1971
1972   // Create actions
1973   createAction( VISU_IMPORT_FROM_FILE, "", QIconSet(),
1974                 tr("MEN_IMPORT_FROM_FILE"), "", (CTRL + Key_I), aParent, false,
1975                 this, SLOT(OnImportFromFile()));
1976
1977   createAction( VISU_EXPLORE_MED, "", QIconSet(),
1978                 tr("MEN_EXPLORE_MED_FILE"), "", (CTRL + Key_M), aParent, false,
1979                 this, SLOT(OnExploreMEDFile()));
1980
1981   createAction( VISU_IMPORT_TABLE, "", QIconSet(),
1982                 tr("MEN_IMPORT_TABLE"), "", 0, aParent, false,
1983                 this, SLOT(OnImportTableFromFile()));
1984
1985   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_SCALAR_MAP"));
1986   createAction( VISU_SCALAR_MAP, tr("MEN_SCALAR_MAP"), QIconSet(aPixmap),
1987                 tr("MEN_SCALAR_MAP"), "", 0, aParent, false,
1988                 this, SLOT(OnCreateScalarMap()));
1989
1990   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_DEFORMED_SHAPE"));
1991   createAction( VISU_DEFORMED_SHAPE, tr("MEN_DEFORMED_SHAPE"), QIconSet(aPixmap),
1992                 tr("MEN_DEFORMED_SHAPE"), "", 0, aParent, false,
1993                 this, SLOT(OnCreateDeformedShape()));
1994
1995   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_VECTORS"));
1996   createAction( VISU_VECTORS, tr("MEN_VECTORS"), QIconSet(aPixmap),
1997                 tr("MEN_VECTORS"), "", 0, aParent, false,
1998                 this, SLOT(OnCreateVectors()));
1999
2000   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_ISO_SURFACES"));
2001   createAction( VISU_ISO_SURFACES, tr("MEN_ISO_SURFACES"), QIconSet(aPixmap),
2002                 tr("MEN_ISO_SURFACES"), "", 0, aParent, false,
2003                 this, SLOT(OnCreateIsoSurfaces()));
2004
2005   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_CUT_PLANES"));
2006   createAction( VISU_CUT_PLANES, tr("MEN_CUT_PLANES"), QIconSet(aPixmap),
2007                 tr("MEN_CUT_PLANES"), "", 0, aParent, false,
2008                 this, SLOT(OnCreateCutPlanes()));
2009
2010   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_STREAM_LINES"));
2011   createAction( VISU_STREAM_LINES, tr("MEN_STREAM_LINES"), QIconSet(aPixmap),
2012                 tr("MEN_STREAM_LINES"), "", 0, aParent, false,
2013                 this, SLOT(OnCreateStreamLines()));
2014
2015   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_CUT_LINES"));
2016   createAction( VISU_CUT_LINES, tr("MEN_CUT_LINES"), QIconSet(aPixmap),
2017                 tr("MEN_CUT_LINES"), "", 0, aParent, false,
2018                 this, SLOT(OnCreateCutLines()));
2019
2020   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_PLOT_3D"));
2021   createAction( VISU_PLOT_3D, tr("MEN_PLOT_3D"), QIconSet(aPixmap),
2022                 tr("MEN_PLOT_3D"), "", 0, aParent, false,
2023                 this, SLOT(OnCreatePlot3D()));
2024
2025   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_PLOT2D"));
2026   createAction( VISU_PLOT2D, tr("MEN_CREATE_PLOT2D"), QIconSet(aPixmap),
2027                 tr("MEN_CREATE_PLOT2D"), "", 0, aParent, false,
2028                 this, SLOT(OnCreatePlot2dView()));
2029
2030   createAction( VISU_DELETE_OBJS, tr("MEN_DELETE_OBJS"), QIconSet(),
2031                 tr("MEN_DELETE_OBJS"), "", 0, aParent, false,
2032                 this, SLOT(OnDeleteObjects()));
2033
2034   createAction( VISU_SHOW_TABLE, tr("MEN_SHOW_TABLE"), QIconSet(),
2035                 tr("MEN_SHOW_TABLE"), "", 0, aParent, false,
2036                 this, SLOT(OnShowTable()));
2037
2038   createAction( VISU_CREATE_CURVES, tr("MEN_CREATE_CURVES"), QIconSet(),
2039                 tr("MEN_CREATE_CURVES"), "", 0, aParent, false,
2040                 this, SLOT(OnPlotData()));
2041
2042   createAction( VISU_EXPORT_TABLE, tr("MEN_EXPORT_TABLE"), QIconSet(),
2043                 tr("MEN_EXPORT_TABLE"), "", 0, aParent, false,
2044                 this, SLOT(OnExportTableToFile()));
2045
2046   createAction( VISU_IMPORT_MED_STRUCTURE, tr("MEN_IMPORT_MED_STRUCTURE"), QIconSet(),
2047                 tr("MEN_IMPORT_MED_STRUCTURE"), "", 0, aParent, false,
2048                 this, SLOT(OnImportMedField()));
2049
2050   createAction( VISU_IMPORT_MED_TIMESTAMP, tr("MEN_IMPORT_MED_TIMESTAMP"), QIconSet(),
2051                 tr("MEN_IMPORT_MED_TIMESTAMP"), "", 0, aParent, false,
2052                 this, SLOT(OnImportMedField()));
2053
2054   createAction( VISU_IMPORT_MED_FIELD, tr("MEN_IMPORT_MED_FIELD"), QIconSet(),
2055                 tr("MEN_IMPORT_MED_FIELD"), "", 0, aParent, false,
2056                 this, SLOT(OnImportMedField()));
2057
2058   createAction( VISU_CREATE_PRS, tr("MEN_CREATE_PRS"), QIconSet(),
2059                 tr("MEN_CREATE_PRS"), "", 0, aParent, false,
2060                 this, SLOT(OnCreateMesh()));
2061
2062   createAction( VISU_CREATE_MANY_PRS, tr("MEN_CREATE_MANY_PRS"), QIconSet(),
2063                 tr("MEN_CREATE_MANY_PRS"), "", 0, aParent, false,
2064                 this, SLOT(OnCreateManyMesh()));
2065
2066   createAction( VISU_TRANSLATE_PRS, tr("MEN_TRANSLATE_PRS"), QIconSet(),
2067                 tr("MEN_TRANSLATE_PRS"), "", 0, aParent, false,
2068                 this, SLOT(OnTranslatePrs()));
2069
2070   createAction( VISU_MERGE_SCALAR_BARS, tr("MEN_MERGE_SCALAR_BARS"), QIconSet(),
2071                 tr("MEN_MERGE_SCALAR_BARS"), "", 0, aParent, false,
2072                 this, SLOT(OnMergeScalarBars()));
2073
2074   createAction( VISU_FREE_SCALAR_BARS, tr("MEN_FREE_SCALAR_BARS"), QIconSet(),
2075                 tr("MEN_FREE_SCALAR_BARS"), "", 0, aParent, false,
2076                 this, SLOT(OnFreeScalarBars()));
2077
2078   createAction( VISU_ERASE, tr("MEN_ERASE"), QIconSet(),
2079                 tr("MEN_ERASE"), "", 0, aParent, false,
2080                 this, SLOT(OnErasePrs()));
2081
2082   createAction( VISU_DISPLAY, tr("MEN_DISPLAY"), QIconSet(),
2083                 tr("MEN_DISPLAY"), "", 0, aParent, false,
2084                 this, SLOT(OnDisplayPrs()));
2085
2086   createAction( VISU_DISPLAY_ONLY, tr("MEN_DISPLAY_ONLY"), QIconSet(),
2087                 tr("MEN_DISPLAY_ONLY"), "", 0, aParent, false,
2088                 this, SLOT(OnDisplayOnlyPrs()));
2089
2090   createAction( VISU_COPY_PRS, tr("MEN_COPY_PRS"), QIconSet(),
2091                 tr("MEN_COPY_PRS"), "", 0, aParent, false,
2092                 this, SLOT(OnCopyPresentation()));
2093
2094   createAction( VISU_CURVE_PROPS, tr("MEN_CURVE_PROPS"), QIconSet(),
2095                 tr("MEN_CURVE_PROPS"), "", 0, aParent, false,
2096                 this, SLOT(OnCurveProperties()));
2097
2098   createAction( VISU_RENAME, tr("MEN_RENAME"), QIconSet(), tr("MEN_RENAME"), "", 0, aParent, false,
2099                 this, SLOT(OnRename()));
2100
2101   createAction( VISU_EDIT_CONTAINER, tr("MEN_EDIT_CONTAINER"), QIconSet(),
2102                 tr("MEN_EDIT_CONTAINER"), "", 0, aParent, false,
2103                 this, SLOT(OnEditContainer()));
2104
2105   createAction( VISU_CLEAR_CONTAINER, tr("MEN_CLEAR_CONTAINER"), QIconSet(),
2106                 tr("MEN_CLEAR_CONTAINER"), "", 0, aParent, false,
2107                 this, SLOT(OnClearContainer()));
2108
2109   createAction( VISU_SAVE_VIEW_PARAMS, tr("MEN_SAVE_VIEWPARAMS"), QIconSet(),
2110                 tr("MEN_SAVE_VIEWPARAMS"), "", 0, aParent, false,
2111                 this, SLOT(OnSaveViewParams()));
2112   createAction( VISU_SAVE_VIEW_PARAMS_1, tr("MEN_SAVE_VIEWPARAMS"), QIconSet(),
2113                 tr("MEN_SAVE_VIEWPARAMS"), "", 0, aParent, false,
2114                 this, SLOT(OnSaveViewParams()));
2115
2116   createAction( VISU_RESTORE_VIEW_PARAMS, tr("MEN_RESTORE_VIEWPARAMS"), QIconSet(),
2117                 tr("MEN_RESTORE_VIEWPARAMS"), "", 0, aParent, false,
2118                 this, SLOT(OnRestoreViewParams()));
2119
2120   //createAction( VISU_DELETE_VIEW_PARAMS, tr("MEN_DELETE_VIEWPARAMS"), QIconSet(),
2121   //              tr("MEN_DELETE_VIEWPARAMS"), "", 0, aParent, false,
2122   //              this, SLOT(OnDeleteObjects()));
2123
2124   createAction( VISU_ARRANGE_ACTORS, tr("MEN_ARRANGE_ACTORS"), QIconSet(),
2125                 tr("MEN_ARRANGE_ACTORS"), "", 0, aParent, false,
2126                 this, SLOT(OnArrangeActors()));
2127
2128   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_POINTS"));
2129   createAction( VISU_POINTS, tr("MEN_POINTS"), QIconSet(aPixmap),
2130                 tr("MEN_POINTS"), "", 0, aParent, false,
2131                 this, SLOT(OnMakePoints()));
2132
2133   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_WIREFRAME"));
2134   createAction( VISU_WIREFRAME, tr("MEN_WIREFRAME"), QIconSet(aPixmap),
2135                 tr("MEN_WIREFRAME"), "", 0, aParent, false,
2136                 this, SLOT(OnMakeWireframe()));
2137
2138   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_SURFACE"));
2139   createAction( VISU_SURFACE, tr("MEN_SURFACE"), QIconSet(aPixmap),
2140                 tr("MEN_SURFACE"), "", 0, aParent, false,
2141                 this, SLOT(OnMakeSurface()));
2142
2143   createAction( VISU_INSIDEFRAME, tr("MEN_INSIDEFRAME"), QIconSet(),
2144                 tr("MEN_INSIDEFRAME"), "", 0, aParent, false,
2145                 this, SLOT(OnMakeInsideframe()));
2146
2147   createAction( VISU_SURFACEFRAME, tr("MEN_SURFACEFRAME"), QIconSet(),
2148                 tr("MEN_SURFACEFRAME"), "", 0, aParent, false,
2149                 this, SLOT(OnMakeSurfaceframe()));
2150
2151   createAction( VISU_SHRINK, tr("MEN_SHRINK"), QIconSet(),
2152                 tr("MEN_SHRINK"), "", 0, aParent, false,
2153                 this, SLOT(OnMakeShrink()));
2154
2155   createAction( VISU_UNSHRINK, tr("MEN_UNSHRINK"), QIconSet(),
2156                 tr("MEN_UNSHRINK"), "", 0, aParent, false,
2157                 this, SLOT(OnMakeShrink()));
2158   
2159   createAction( VISU_SHADING, tr("MEN_SHADING"), QIconSet(),
2160                 tr("MEN_SHADING"), "", 0, aParent, false,
2161                 this, SLOT(OnSetShadingOn()));
2162   
2163   createAction( VISU_NOSHADING, tr("MEN_NOSHADING"), QIconSet(),
2164                 tr("MEN_NOSHADING"), "", 0, aParent, false,
2165                 this, SLOT(OnSetShadingOff()));
2166
2167   createAction( VISU_CELL_COLOR, tr("MEN_CELL_COLOR"), QIconSet(),
2168                 tr("MEN_CELL_COLOR"), "", 0, aParent, false,
2169                 this, SLOT(OnChangeColor()));
2170
2171   createAction( VISU_COLOR, tr("MEN_COLOR"), QIconSet(),
2172                 tr("MEN_COLOR"), "", 0, aParent, false,
2173                 this, SLOT(OnChangeColor()));
2174
2175   createAction( VISU_EDGE_COLOR, tr("MEN_EDGE_COLOR"), QIconSet(),
2176                 tr("MEN_EDGE_COLOR"), "", 0, aParent, false,
2177                 this, SLOT(OnChangeWireframeColor()));
2178
2179   createAction( VISU_OPACITY, tr("MEN_OPACITY"), QIconSet(),
2180                 tr("MEN_OPACITY"), "", 0, aParent, false,
2181                 this, SLOT(OnChangeOpacity()));
2182
2183   createAction( VISU_LINE_WIDTH, tr("MEN_LINE_WIDTH"), QIconSet(),
2184                 tr("MEN_LINE_WIDTH"), "", 0, aParent, false,
2185                 this, SLOT(OnChangeLines()));
2186
2187
2188   createAction( VISU_EDIT_SCALARMAP, tr("MEN_EDIT_PRS"), QIconSet(),
2189                 tr("MEN_EDIT_PRS"), "", 0, aParent, false,
2190                 this, SLOT(OnEditScalarMap()));
2191
2192   createAction( VISU_EDIT_DEFORMEDSHAPE, tr("MEN_EDIT_PRS"), QIconSet(),
2193                 tr("MEN_EDIT_PRS"), "", 0, aParent, false,
2194                 this, SLOT(OnEditDeformedShape()));
2195
2196   createAction( VISU_EDIT_CUTPLANES, tr("MEN_EDIT_PRS"), QIconSet(),
2197                 tr("MEN_EDIT_PRS"), "", 0, aParent, false,
2198                 this, SLOT(OnEditCutPlanes()));
2199
2200   createAction( VISU_EDIT_CUTLINES, tr("MEN_EDIT_PRS"), QIconSet(),
2201                 tr("MEN_EDIT_PRS"), "", 0, aParent, false,
2202                 this, SLOT(OnEditCutLines()));
2203
2204   createAction( VISU_EDIT_ISOSURFACE, tr("MEN_EDIT_PRS"), QIconSet(),
2205                 tr("MEN_EDIT_PRS"), "", 0, aParent, false,
2206                 this, SLOT(OnEditIsoSurfaces()));
2207
2208   createAction( VISU_EDIT_VECTORS, tr("MEN_EDIT_PRS"), QIconSet(),
2209                 tr("MEN_EDIT_PRS"), "", 0, aParent, false,
2210                 this, SLOT(OnEditVectors()));
2211
2212   createAction( VISU_EDIT_STREAMLINES, tr("MEN_EDIT_PRS"), QIconSet(),
2213                 tr("MEN_EDIT_PRS"), "", 0, aParent, false,
2214                 this, SLOT(OnEditStreamLines()));
2215
2216   createAction( VISU_EDIT_PLOT3D, tr("MEN_EDIT_PRS"), QIconSet(),
2217                 tr("MEN_EDIT_PRS"), "", 0, aParent, false,
2218                 this, SLOT(OnEditPlot3D()));
2219
2220
2221   createAction( VISU_CREATE_TABLE, tr("MEN_CREATE_TABLE"), QIconSet(),
2222                 tr("MEN_CREATE_TABLE"), "", 0, aParent, false,
2223                 this, SLOT(OnCreateTable()));
2224
2225   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_SWEEP"));
2226   createAction( VISU_SWEEP, tr("MEN_SWEEP"), QIconSet(aPixmap),
2227                 tr("MEN_SWEEP"), "", 0, aParent, false,
2228                 this, SLOT(OnSweep()));
2229
2230   createAction( VISU_CLIPPING, tr("MEN_CLIPPING"), QIconSet(),
2231                 tr("MEN_CLIPPING"), "", 0, aParent, false,
2232                 this, SLOT(OnClippingPlanes()));
2233
2234   createAction( VISU_SELECTION_INFO, tr("MEN_SELECTION_INFO"), QIconSet(),
2235                 tr("MEN_SELECTION_INFO"), "", 0, aParent, false,
2236                 this, SLOT(OnSelectionInfo()));
2237
2238   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_TIMEANIMATION"));
2239   createAction( VISU_ANIMATION, tr("MEN_ANIMATION"), QIconSet(aPixmap),
2240                 tr("MEN_ANIMATION"), "", 0, aParent, false,
2241                 this, SLOT(OnTimeAnimation()));
2242
2243   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_ERASE_ALL"));
2244   createAction( VISU_ERASE_ALL, tr("MEN_ERASE_ALL"), QIconSet(aPixmap),
2245                 tr("MEN_ERASE_ALL"), "", 0, aParent, false,
2246                 this, SLOT(OnEraseAll()));
2247
2248   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_GLOBAL_SELECTION"));
2249   createAction( VISU_GLOBAL_SELECTION, tr("MEN_GLOBAL_SELECTION"), QIconSet(aPixmap),
2250                 tr("MEN_GLOBAL_SELECTION"), "", 0, aParent, false,
2251                 //this, SLOT(OnEraseAll()));
2252                 this);
2253
2254   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_PARTIAL_SELECTION"));
2255   createAction( VISU_PARTIAL_SELECTION, tr("MEN_PARTIAL_SELECTION"), QIconSet(aPixmap),
2256                 tr("MEN_PARTIAL_SELECTION"), "", 0, aParent, false,
2257                 //this, SLOT(OnEraseAll()));
2258                 this);
2259
2260   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_SCALING"));
2261   createAction( VISU_SCALING, tr("MEN_SCALING"), QIconSet(aPixmap),
2262                 tr("MEN_SCALING"), "", 0, aParent, false,
2263                 this, SLOT(OnScaling()));
2264
2265   aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_CUBE_AXES"));
2266   createAction( VISU_CUBE_AXES, tr("MEN_CUBE_AXES"), QIconSet(aPixmap),
2267                 tr("MEN_CUBE_AXES"), "", 0, aParent, false,
2268                 this, SLOT(OnCubeAxes()));
2269
2270   createAction( VISU_SHOW_ANIMATION, tr("MEN_SHOW_ANIMATION"), QIconSet(),
2271                 tr("MEN_SHOW_ANIMATION"), "", 0, aParent, false,
2272                 this, SLOT(OnShowAnimation()));
2273 }
2274
2275 void
2276 VisuGUI::
2277 createMenus()
2278 {
2279   // Add actions to menus
2280   int aMenuId;
2281   aMenuId = createMenu( tr( "MEN_DESK_FILE" ), -1 );
2282   createMenu( separator(), aMenuId, -1, 10 );
2283   createMenu( VISU_IMPORT_FROM_FILE, aMenuId, 10 ); // import from file
2284   createMenu( VISU_EXPLORE_MED, aMenuId, 10 ); // explore MED file
2285   createMenu( VISU_IMPORT_TABLE, aMenuId, 10 ); // import table
2286
2287   aMenuId = createMenu( tr( "MEN_VISUALIZATION" ), -1, -1, 30 );
2288   createMenu( VISU_SCALAR_MAP, aMenuId, 10 ); // scalar map
2289   createMenu( VISU_DEFORMED_SHAPE, aMenuId, 10 ); // deformed shape
2290   createMenu( VISU_VECTORS, aMenuId, 10 ); // vectors
2291   createMenu( VISU_ISO_SURFACES, aMenuId, 10 ); // iso surfaces
2292   createMenu( VISU_CUT_PLANES, aMenuId, 10 ); // cut planes
2293   createMenu( VISU_CUT_LINES, aMenuId, 10 ); // cut lines
2294   createMenu( VISU_STREAM_LINES, aMenuId, 10 ); // stream lines
2295   createMenu( VISU_PLOT_3D, aMenuId, 10 ); // Plot3d
2296
2297   aMenuId = createMenu( tr( "MEN_SELECTION" ), -1, -1, 30 );
2298   createMenu( VISU_SELECTION_INFO, aMenuId, 10 ); // selection info
2299
2300   aMenuId = createMenu( tr( "MEN_REPRESENTATION" ), -1, -1, 30 );
2301   int parentId =
2302     createMenu( tr( "MEN_DISPLAY_SELECTION" ), aMenuId, 10 ); // display selection
2303   createMenu( VISU_POINTS, parentId, 10 ); //   points
2304   createMenu( VISU_WIREFRAME, parentId, 10 ); //   wireframe
2305   createMenu( VISU_SURFACE, parentId, 10 ); //   surface
2306   createMenu( VISU_ERASE_ALL, aMenuId, 10 ); // erase all
2307   createMenu( VISU_GLOBAL_SELECTION, aMenuId, 10 ); // global selection
2308   createMenu( VISU_PARTIAL_SELECTION, aMenuId, 10 ); // partial selection
2309   createMenu( VISU_SCALING, aMenuId, 10 ); // scaling
2310   createMenu( VISU_CUBE_AXES, aMenuId, 10 ); // scaling
2311 }
2312
2313 void
2314 VisuGUI::
2315 createToolBars()
2316 {
2317   int aToolId = createTool(tr("TOOL_VISUALISATION"));
2318   createTool( VISU_SCALAR_MAP, aToolId );
2319   createTool( VISU_DEFORMED_SHAPE, aToolId );
2320   createTool( VISU_VECTORS, aToolId );
2321   createTool( VISU_ISO_SURFACES, aToolId );
2322   createTool( VISU_CUT_PLANES, aToolId );
2323   createTool( VISU_CUT_LINES, aToolId );
2324   createTool( VISU_STREAM_LINES, aToolId );
2325   createTool( VISU_PLOT_3D, aToolId );
2326
2327   aToolId = createTool(tr("TOOL_REPRESENTATION"));
2328   createTool( VISU_POINTS, aToolId );
2329   createTool( VISU_WIREFRAME, aToolId );
2330   createTool( VISU_SURFACE, aToolId );
2331   createTool( VISU_ERASE_ALL, aToolId );
2332   createTool( VISU_GLOBAL_SELECTION, aToolId );
2333   createTool( VISU_PARTIAL_SELECTION, aToolId );
2334   createTool( VISU_SCALING, aToolId );
2335   createTool( VISU_CUBE_AXES, aToolId );
2336 }
2337
2338 void
2339 VisuGUI::
2340 createPopupMenus()
2341 {
2342   // Prepare popup menus
2343   QtxPopupMgr* mgr = popupMgr();
2344
2345   // VISU root commands
2346   mgr->insert( action( VISU_IMPORT_FROM_FILE ), -1, -1, -1 ); // import MED file
2347   mgr->insert( action( VISU_IMPORT_TABLE ), -1, -1, -1 ); // import tables from file
2348   mgr->insert( action( VISU_PLOT2D ), -1, -1, -1 ); // create Plot2d View
2349
2350   //mgr->insert( action( VISU_IMPORT_MED ), -1, -1, -1 ); // import MED structure from MED module
2351
2352   // create
2353   mgr->insert( action( VISU_SCALAR_MAP ), -1, -1, -1 ); // scalar bar
2354   mgr->insert( action( VISU_ISO_SURFACES ), -1, -1, -1 ); // iso surface
2355   mgr->insert( action( VISU_CUT_PLANES ), -1, -1, -1 ); // cut planes
2356   mgr->insert( action( VISU_CUT_LINES ), -1, -1, -1 ); // cut lines
2357   mgr->insert( action( VISU_DEFORMED_SHAPE ), -1, -1, -1 ); // deformed shape
2358   mgr->insert( action( VISU_VECTORS ), -1, -1, -1 ); // vectors
2359   mgr->insert( action( VISU_STREAM_LINES ), -1, -1, -1 ); // stream lines
2360   mgr->insert( action( VISU_PLOT_3D ), -1, -1, -1 ); // Plot3d
2361
2362   mgr->insert( action( VISU_CREATE_PRS ), -1, -1, -1 ); // create presentation
2363   mgr->insert( action( VISU_CREATE_MANY_PRS ), -1, -1, -1 ); // create presentations
2364
2365   mgr->insert( action( VISU_CREATE_TABLE ), -1, -1, -1 ); // create table
2366
2367   // edit
2368   mgr->insert( action( VISU_EDIT_SCALARMAP ), -1, -1, -1 );
2369   mgr->insert( action( VISU_EDIT_DEFORMEDSHAPE ), -1, -1, -1 );
2370   mgr->insert( action( VISU_EDIT_CUTPLANES ), -1, -1, -1 );
2371   mgr->insert( action( VISU_EDIT_CUTLINES ), -1, -1, -1 );
2372   mgr->insert( action( VISU_EDIT_ISOSURFACE ), -1, -1, -1 );
2373   mgr->insert( action( VISU_EDIT_VECTORS ), -1, -1, -1 );
2374   mgr->insert( action( VISU_EDIT_STREAMLINES ), -1, -1, -1 );
2375   mgr->insert( action( VISU_EDIT_PLOT3D ), -1, -1, -1 );
2376   mgr->insert( action( VISU_EDIT_CONTAINER ), -1, -1, -1 );
2377
2378   // rename
2379   mgr->insert( action( VISU_RENAME ), -1, -1, -1 );
2380
2381   // copy
2382   mgr->insert( action( VISU_COPY_PRS ), -1, -1, -1 );
2383
2384   // delete
2385   mgr->insert( action( VISU_CLEAR_CONTAINER ), -1, -1, -1 );
2386
2387   // table commands
2388   //mgr->insert( action( VISU_SHOW_TABLE ), -1, -1, -1 ); // show table
2389   //mgr->insert( action( VISU_CREATE_CURVES ), -1, -1, -1 ); // create curves
2390   //mgr->insert( action( VISU_EXPORT_TABLE ), -1, -1, -1 ); // export table
2391
2392   mgr->insert( separator(), -1, -1, -1 );
2393
2394   mgr->insert( action( VISU_ERASE ), -1, -1, -1 ); // erase
2395   mgr->insert( action( VISU_DISPLAY ), -1, -1, -1 ); // display
2396   mgr->insert( action( VISU_DISPLAY_ONLY ), -1, -1, -1 ); // display only
2397
2398   // "Representation" submenu
2399   int parentId = mgr->insert( tr( "MEN_REPRESENTATION" ), -1, -1 );
2400   mgr->insert( action( VISU_POINTS )      , parentId, -1, -1 ); // points
2401   mgr->insert( action( VISU_WIREFRAME )   , parentId, -1, -1 ); // wireframe
2402   mgr->insert( action( VISU_SURFACE )     , parentId, -1, -1 ); // surface
2403   mgr->insert( action( VISU_INSIDEFRAME ) , parentId, -1, -1 ); // insideframe
2404   mgr->insert( action( VISU_SURFACEFRAME ), parentId, -1, -1 ); // surfaceframe
2405   mgr->insert( action( VISU_SHRINK )      , parentId, -1, -1 ); // shrink
2406   mgr->insert( action( VISU_UNSHRINK )    , parentId, -1, -1 ); // unshrink
2407   mgr->insert( separator(), parentId, -1, -1 );
2408   mgr->insert( action( VISU_SHADING )     , parentId, -1, -1 ); // shading
2409   mgr->insert( action( VISU_NOSHADING )   , parentId, -1, -1 ); // noshading
2410
2411   // "Properties" submenu
2412   parentId = mgr->insert( tr( "MEN_PROPERTIES" ), -1, -1 );
2413   mgr->insert( action( VISU_CELL_COLOR ), parentId, -1, -1 ); // cell color
2414   mgr->insert( action( VISU_EDGE_COLOR ), parentId, -1, -1 ); // edge color
2415   mgr->insert( action( VISU_COLOR )     , parentId, -1, -1 ); // color
2416   mgr->insert( action( VISU_OPACITY )   , parentId, -1, -1 ); // opacity
2417   mgr->insert( action( VISU_LINE_WIDTH ), parentId, -1, -1 ); // line width
2418
2419   mgr->insert( separator(), -1, -1, -1 );
2420
2421   // Other presentations management
2422   mgr->insert( action( VISU_TRANSLATE_PRS ), -1, -1, -1 );
2423   mgr->insert( action( VISU_CLIPPING ), -1, -1, -1 );
2424
2425   mgr->insert( action( VISU_MERGE_SCALAR_BARS ), -1, -1, -1 );
2426   mgr->insert( action( VISU_FREE_SCALAR_BARS ), -1, -1, -1 );
2427
2428   mgr->insert( action( VISU_SWEEP ), -1, -1, -1 );
2429   mgr->insert( action( VISU_ANIMATION ), -1, -1, -1 );
2430
2431   mgr->insert( separator(), -1, -1, -1 );
2432
2433   // view parameters commands
2434   mgr->insert( action( VISU_SAVE_VIEW_PARAMS ), -1, -1, -1 ); // save view params
2435   mgr->insert( action( VISU_SAVE_VIEW_PARAMS_1 ), -1, -1, -1 ); // save view params
2436   mgr->insert( action( VISU_RESTORE_VIEW_PARAMS ), -1, -1, -1 ); // restore view params
2437   //mgr->insert( action( VISU_DELETE_VIEW_PARAMS ), -1, -1, -1 ); // delete view params
2438
2439   mgr->insert( action( VISU_ARRANGE_ACTORS ), -1, -1, -1 ); // arrange actors
2440
2441   mgr->insert( action( VISU_CURVE_PROPS ), -1, -1, -1 ); // curve properties
2442
2443   mgr->insert( action( VISU_SELECTION_INFO ), -1, -1, -1 ); // Selection info
2444
2445   // Rules
2446
2447   QString aPrsAll ("'VISU::TSCALARMAP' 'VISU::TISOSURFACE' 'VISU::TDEFORMEDSHAPE' 'VISU::TCUTPLANES' "
2448                    "'VISU::TCUTLINES' 'VISU::TVECTORS' 'VISU::TSTREAMLINES' 'VISU::TPLOT3D'");
2449
2450   // VISU root commands
2451   QString aRule = "client='ObjectBrowser' and selcount=1 and type='VISU::TVISUGEN'";
2452   mgr->setRule( action( VISU_IMPORT_FROM_FILE ), aRule, true );
2453   mgr->setRule( action( VISU_IMPORT_TABLE ), aRule, true );
2454   mgr->setRule( action( VISU_PLOT2D ), aRule, true );
2455
2456   // timestamp commands
2457   aRule = "client='ObjectBrowser' and selcount=1 and type='VISU::TTIMESTAMP'";
2458   mgr->setRule( action( VISU_SCALAR_MAP ), aRule, true );
2459   mgr->setRule( action( VISU_ISO_SURFACES ), aRule, true );
2460   mgr->setRule( action( VISU_CUT_PLANES ), aRule, true );
2461   mgr->setRule( action( VISU_CUT_LINES ), aRule, true );
2462   mgr->setRule( action( VISU_PLOT_3D ), aRule, true );
2463   aRule += " and nbComponents>1";
2464   mgr->setRule( action( VISU_DEFORMED_SHAPE ), aRule, true );
2465   mgr->setRule( action( VISU_VECTORS ), aRule, true );
2466   mgr->setRule( action( VISU_STREAM_LINES ), aRule, true );
2467
2468   // display/erase commands
2469   QString andInvisible = " and (((not isVisible) and isActiveView) or (not isActiveView))";
2470   QString aTableOrCont = "(type='VISU::TTABLE' and nbChildren>0) or type='VISU::TCONTAINER'";
2471   QString orCurveVisible   = "or (type='VISU::TCURVE' and isVisible)";
2472   QString orCurveInvisible = "or (type='VISU::TCURVE'" + andInvisible + ")";
2473   QString aPrsVisible   = "(($type in {'VISU::TMESH' " + aPrsAll + "}) and isVisible)";
2474   QString aPrsInvisible = "(($type in {'VISU::TMESH' " + aPrsAll + "})" + andInvisible + ")";
2475
2476   QString anEraseRule = "selcount>0 and (" + aPrsVisible +
2477     " or (client='ObjectBrowser' and (" + aTableOrCont + orCurveVisible + ")))";
2478
2479   QString aDisplayRule = "selcount>0 and (" + aPrsInvisible +
2480     " or (client='ObjectBrowser' and (" + aTableOrCont + orCurveInvisible + ")))";
2481
2482   QString aDOnlyRule = "selcount>0 and (($type in {'VISU::TMESH' " + aPrsAll + "})"
2483     " or (client='ObjectBrowser' and ((type='VISU::TTABLE' and nbChildren>0) or"
2484     " ($type in {'VISU::TCURVE' 'VISU::TCONTAINER'}))))";
2485
2486   mgr->setRule( action( VISU_ERASE ), anEraseRule, true );
2487   mgr->setRule( action( VISU_DISPLAY ), aDisplayRule, true );
2488   mgr->setRule( action( VISU_DISPLAY_ONLY ), aDOnlyRule, true );
2489
2490   aRule = "selcount>0 and $type in {'VISU::TMESH' " + aPrsAll + "}";
2491   mgr->setRule( action( VISU_TRANSLATE_PRS ), aRule, true );
2492
2493   aRule = "selcount>1 and $type in {'VISU::TMESH' " + aPrsAll + "}";
2494   mgr->setRule( action( VISU_MERGE_SCALAR_BARS ), aRule, true );
2495   mgr->setRule( action( VISU_FREE_SCALAR_BARS ), aRule, true );
2496
2497   // view parameters
2498   aRule = "selcount=1 and type='VISU::TVIEW3D'";
2499   mgr->setRule( action( VISU_SAVE_VIEW_PARAMS_1 ), aRule, true );
2500   mgr->setRule( action( VISU_SAVE_VIEW_PARAMS ), "client='VTKViewer' and selcount=0", true );
2501   mgr->setRule( action( VISU_RESTORE_VIEW_PARAMS ), "selcount=1 and type='VISU::TVIEW3D'", true );
2502   //mgr->setRule( action( VISU_DELETE_VIEW_PARAMS ), "selcount=1 and type='VISU::TVIEW3D'", true );
2503
2504   mgr->setRule( action( VISU_ARRANGE_ACTORS ), "client='VTKViewer' and selcount=0", true );
2505
2506   // 3D presentations commands
2507   QString aPrsType    = " and $type in {'VISU::TMESH' " + aPrsAll + "}";
2508   QString aInsideType = " and $type in {'VISU::TMESH' 'VISU::TSCALARMAP' 'VISU::TDEFORMEDSHAPE'}";
2509   QString aSurfType   = " and $type in {'VISU::TMESH'}";
2510   QString aShrinkType = " and $type in {'VISU::TMESH' 'VISU::TSCALARMAP' 'VISU::TISOSURFACE' "
2511                         "'VISU::TDEFORMEDSHAPE' 'VISU::TCUTPLANES' 'VISU::TCUTLINES' 'VISU::TPLOT3D'}";
2512   QString aLineType   = " and $type in {'VISU::TMESH' 'VISU::TSCALARMAP' 'VISU::TISOSURFACE' 'VISU::TDEFORMEDSHAPE' "
2513                         "'VISU::TCUTPLANES' 'VISU::TCUTLINES' 'VISU::TSTREAMLINES' 'VISU::TPLOT3D'}";
2514
2515   aRule = "selcount=1";
2516   mgr->setRule( action( VISU_CLIPPING ), aRule + aPrsType, true );
2517
2518   // "Representation" submenu
2519   QString aNotPoints = " and $representation in {'VISU::WIREFRAME' 'VISU::SHADED' 'VISU::INSIDEFRAME' 'VISU::SURFACEFRAME'}";
2520   QString aNotWirefr = " and $representation in {'VISU::POINT' 'VISU::SHADED' 'VISU::INSIDEFRAME' 'VISU::SURFACEFRAME'}";
2521   QString aNotSurfac = " and $representation in {'VISU::POINT' 'VISU::WIREFRAME' 'VISU::INSIDEFRAME' 'VISU::SURFACEFRAME'}";
2522   QString aNotInside = " and $representation in {'VISU::POINT' 'VISU::WIREFRAME' 'VISU::SHADED' 'VISU::SURFACEFRAME'}";
2523   QString aNotSurffr = " and $representation in {'VISU::POINT' 'VISU::WIREFRAME' 'VISU::SHADED' 'VISU::INSIDEFRAME'}";
2524
2525   mgr->setRule( action( VISU_POINTS )      , aRule + aPrsType + aNotPoints, true );
2526   mgr->setRule( action( VISU_WIREFRAME )   , aRule + aPrsType + aNotWirefr, true );
2527   mgr->setRule( action( VISU_SURFACE )     , aRule + aPrsType + aNotSurfac, true );
2528   mgr->setRule( action( VISU_INSIDEFRAME ) , aRule + aInsideType + aNotInside, true );
2529   mgr->setRule( action( VISU_SURFACEFRAME ), aRule + aSurfType + aNotSurffr, true );
2530
2531   mgr->setRule( action( VISU_SHRINK )  , aRule + aShrinkType + " and isShrunk=0", true );
2532   mgr->setRule( action( VISU_UNSHRINK ), aRule + aShrinkType + " and isShrunk=1", true );
2533
2534   mgr->setRule( action( VISU_SHADING )  , aRule + " and isScalarMapAct=1 and isShading=0", true );
2535   mgr->setRule( action( VISU_NOSHADING ), aRule + " and isScalarMapAct=1 and isShading=1", true );
2536
2537   // "Properties" submenu
2538   mgr->setRule( action( VISU_CELL_COLOR ), aRule + " and type='VISU::TMESH' and representation='VISU::SURFACEFRAME'", true );
2539   mgr->setRule( action( VISU_EDGE_COLOR ), aRule + " and type='VISU::TMESH' and representation='VISU::SURFACEFRAME'", true );
2540   mgr->setRule( action( VISU_COLOR ), aRule + " and ((type='VISU::TMESH'"
2541                " and $representation in {'VISU::POINT' 'VISU::WIREFRAME' 'VISU::SHADED' 'VISU::INSIDEFRAME'}) "
2542                "or (type='VISU::TDEFORMEDSHAPE' and hasActor=1))", true );
2543   mgr->setRule( action( VISU_OPACITY ), aRule + aShrinkType + " and hasActor=1", true );
2544   mgr->setRule( action( VISU_LINE_WIDTH ), aRule + aLineType + " and hasActor=1", true );
2545
2546   // rename command
2547   QString aCurveAll = "'VISU::TTABLE' 'VISU::TCURVE' 'VISU::TCONTAINER'";
2548
2549   aRule = "selcount=1 and ($type in {'VISU::TVIEW3D' 'VISU::TMESH' " + aCurveAll + " " + aPrsAll + "})";
2550   mgr->setRule( action( VISU_RENAME ), aRule, true );
2551
2552   // copy presentation command
2553   aRule = "selcount=1 and ($type in {" + aPrsAll + "})";
2554   mgr->setRule( action( VISU_COPY_PRS ), aRule, true );
2555
2556   // curve commands
2557   aRule = "selcount=1 and type='VISU::TCURVE'";
2558   mgr->setRule( action( VISU_CURVE_PROPS ), aRule, true );
2559
2560   // curve container commands
2561   aRule = "client='ObjectBrowser' and selcount=1 and type='VISU::TCONTAINER'";
2562   mgr->setRule( action( VISU_EDIT_CONTAINER ), aRule, true );
2563   mgr->setRule( action( VISU_CLEAR_CONTAINER ), aRule, true );
2564
2565   mgr->setRule( action( VISU_EDIT_SCALARMAP ),
2566                 "selcount=1 and type='VISU::TSCALARMAP'", true );
2567   mgr->setRule( action( VISU_EDIT_DEFORMEDSHAPE ),
2568                 "selcount=1 and type='VISU::TDEFORMEDSHAPE'", true );
2569   mgr->setRule( action( VISU_EDIT_CUTPLANES ),
2570                 "selcount=1 and type='VISU::TCUTPLANES'", true );
2571   mgr->setRule( action( VISU_EDIT_CUTLINES ),
2572                 "selcount=1 and type='VISU::TCUTLINES'", true );
2573   mgr->setRule( action( VISU_EDIT_ISOSURFACE ),
2574                 "selcount=1 and type='VISU::TISOSURFACE'", true );
2575   mgr->setRule( action( VISU_EDIT_VECTORS ),
2576                 "selcount=1 and type='VISU::TVECTORS'", true );
2577   mgr->setRule( action( VISU_EDIT_STREAMLINES ),
2578                 "selcount=1 and type='VISU::TSTREAMLINES'", true );
2579   mgr->setRule( action( VISU_EDIT_PLOT3D ),
2580                 "selcount=1 and type='VISU::TPLOT3D'", true );
2581
2582   aRule = "selcount=1 and type='VISU::TCUTLINES' and nbNamedChildren=0";
2583   mgr->setRule( action( VISU_CREATE_TABLE ), aRule, true );
2584
2585   aRule = "selcount=1 and ($type in {" + aPrsAll + "})";
2586   mgr->setRule( action( VISU_SWEEP ), aRule, true );
2587
2588   // "Selection info" popup item
2589   aRule = "client='VTKViewer' and selcount=1" + aInsideType;
2590   mgr->setRule( action( VISU_SELECTION_INFO ), aRule, true );
2591
2592   aRule = "client='ObjectBrowser' and selcount>0 and $type in {'VISU::TFIELD'} and nbTimeStamps>1";
2593   mgr->setRule( action( VISU_ANIMATION ), aRule, true );
2594
2595   aRule = "client='ObjectBrowser' and $type in {'VISU::TENTITY' 'VISU::TFAMILY' 'VISU::TGROUP'}";
2596   mgr->setRule( action( VISU_CREATE_PRS ), aRule + " and selcount=1", true );
2597   mgr->setRule( action( VISU_CREATE_MANY_PRS ), aRule + " and selcount>1", true );
2598
2599   //aRule = "client='ObjectBrowser' and type='MEDFIELD'";
2600   //mgr->setRule( action( VISU_IMPORT_MED ), aRule, true );
2601 }
2602
2603 //***************************************************************************
2604 void VisuGUI::contextMenuPopup( const QString& theClient, QPopupMenu* theMenu, QString& theTitle )
2605 {
2606   SalomeApp_Module::contextMenuPopup(theClient, theMenu, theTitle);
2607
2608   OB_Browser* ob = getApp()->objectBrowser();
2609   bool isOBClient = (ob && theClient == ob->popupClientType());
2610
2611   LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
2612   SALOME_ListIO aListIO;
2613   aSelectionMgr->selectedObjects(aListIO);
2614
2615   if (aListIO.Extent() < 1) return;
2616
2617   _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
2618
2619   // Check if "Merge Scalar Range" can be applied
2620   int nbPrs = 0;
2621   SALOME_ListIteratorOfListIO It (aListIO);
2622   for (; It.More(); It.Next()) {
2623     Handle(SALOME_InteractiveObject)& anIO = It.Value();
2624
2625     if (!anIO.IsNull() && anIO->hasEntry()) {
2626       _PTR(SObject) aSObject = aCStudy->FindObjectID(anIO->getEntry());
2627       CORBA::Object_var aCORBAObject = VISU::ClientSObjectToObject(aSObject);
2628       if (CORBA::is_nil(aCORBAObject)) {
2629         _PTR(GenericAttribute) anAttr;
2630         if (aSObject->FindAttribute(anAttr, "AttributeComment")) {
2631           _PTR(AttributeComment) aComment (anAttr);
2632           string aComm = aComment->Value();
2633           QString strIn (aComm.c_str());
2634           VISU::Storable::TRestoringMap pMap;
2635           VISU::Storable::StrToMap(strIn, pMap);
2636           bool isExist;
2637           VISU::VISUType aType = (VISU::VISUType)VISU::Storable::FindValue(pMap,"myType",&isExist).toInt();
2638           if (isExist && aType == VISU::TTIMESTAMP) {
2639             _PTR(ChildIterator) anIter = aCStudy->NewChildIterator(aSObject);
2640             _PTR(SObject) aPrs;
2641             for (; anIter->More(); anIter->Next()) {
2642               aPrs = anIter->Value();
2643               if (!aPrs) continue;
2644               std::vector<VISU::Prs3d_i*> aSubList = GetPrs3dList(this, aPrs);
2645               nbPrs += aSubList.size();
2646             }
2647           }
2648         }
2649       }
2650     }
2651   }
2652
2653   if (nbPrs > 1) {
2654     theMenu->insertSeparator();
2655     action( VISU_MERGE_SCALAR_BARS )->addTo(theMenu);
2656     action( VISU_FREE_SCALAR_BARS  )->addTo(theMenu);
2657   }
2658
2659   theMenu->insertSeparator();
2660
2661   // Check if some (nb > 0) removable objects selected
2662   if (isOBClient && IsRemovableSelected(this)) {
2663     action( VISU_DELETE_OBJS )->addTo(theMenu);
2664   }
2665
2666   // Check single selection
2667   if (aListIO.Extent() != 1) return;
2668
2669   Handle(SALOME_InteractiveObject) anIO;
2670   VISU::Storable::TRestoringMap aMap;
2671   CORBA::Object_var anObject = GetSelectedObj( this, &anIO, &aMap);
2672
2673   _PTR(SObject) SO = aCStudy->FindObjectID(anIO->getEntry());
2674   bool isExist;
2675   VISU::VISUType aType = (VISU::VISUType)VISU::Storable::FindValue(aMap,"myType",&isExist).toInt();
2676
2677   if (aType == VISU::TANIMATION) {
2678     action( VISU_SHOW_ANIMATION )->addTo(theMenu);
2679
2680   } else if (isOBClient) {
2681     if (IsSObjectTable(SO)) {
2682       action( VISU_SHOW_TABLE )->addTo(theMenu);
2683       action( VISU_CREATE_CURVES )->addTo(theMenu);
2684       action( VISU_EXPORT_TABLE )->addTo(theMenu);
2685       theMenu->insertSeparator();
2686     } else {
2687       if (!CORBA::is_nil(anObject)) {
2688         SALOME_MED::MED_var aMED = SALOME_MED::MED::_narrow(anObject);
2689         if (!CORBA::is_nil(aMED.in())) {
2690           action( VISU_IMPORT_MED_STRUCTURE )->addTo(theMenu);
2691         }
2692
2693         SALOME_MED::FIELD_var aField = SALOME_MED::FIELD::_narrow(anObject); // "Import Structure"
2694         if (!CORBA::is_nil(aField)) {
2695           action( VISU_IMPORT_MED_TIMESTAMP )->addTo(theMenu); // "Import TimeStamp"
2696         }
2697       } else {
2698         _PTR(SObject) aSFather = SO->GetFather();
2699         if (aSFather) {
2700           _PTR(GenericAttribute) anAttr;
2701           aSFather->FindAttribute(anAttr, "AttributeName");
2702           if (anAttr) {
2703             _PTR(AttributeName) aName (anAttr);
2704             std::string aValue = aName->Value();
2705             if (strcmp(aValue.c_str(), "MEDFIELD") == 0) {
2706               action( VISU_IMPORT_MED_FIELD )->addTo(theMenu); // "Import Field"
2707             }
2708           }
2709         }
2710       }
2711     }
2712   }
2713 }
2714
2715
2716 //***************************************************************************
2717 void
2718 VisuGUI::
2719 windows( QMap<int, int>& theMap ) const
2720 {
2721   theMap.clear();
2722   theMap.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::DockLeft );
2723   theMap.insert( SalomeApp_Application::WT_PyConsole, Qt::DockBottom );
2724 }
2725
2726
2727 void
2728 VisuGUI::
2729 viewManagers( QStringList& theList ) const
2730 {
2731   theList.clear();
2732   theList.append( SVTK_Viewer::Type() );
2733 }
2734
2735
2736 QString
2737 VisuGUI::
2738 engineIOR() const
2739 {
2740   CORBA::String_var anIOR = GetVisuGen(this)->GetID();
2741   return QString(anIOR.in());
2742 }
2743
2744
2745 bool
2746 VisuGUI::
2747 activateModule( SUIT_Study* theStudy )
2748 {
2749   SalomeApp_Module::activateModule( theStudy );
2750   studyActivated();
2751   setMenuShown( true );
2752   setToolShown( true );
2753   return true;
2754 }
2755
2756
2757 bool
2758 VisuGUI::
2759 deactivateModule( SUIT_Study* theStudy )
2760 {
2761   setMenuShown( false );
2762   setToolShown( false );
2763
2764   SalomeApp_Module::deactivateModule( theStudy );
2765   return true;
2766 }
2767
2768 LightApp_Selection*
2769 VisuGUI::
2770 createSelection() const
2771 {
2772   return new VisuGUI_Selection( (SalomeApp_Module*)this );
2773 }
2774
2775 //******************************************************************
2776 void VisuGUI::studyActivated()
2777 {
2778   GetVisuGen(this)->SetCurrentStudy(GetDSStudy(GetCStudy(GetAppStudy(this))));
2779 }
2780
2781 /*
2782 extern "C" {
2783   CAM_Module*
2784   createModule()
2785   {
2786     return new VisuGUI();
2787   }
2788 }
2789 */
2790 void VisuGUI::createPreferences()
2791 {
2792   int sbarTab = addPreference( tr( "VISU_SCALAR_BAR" ) );
2793
2794   int fontGr = addPreference( tr( "VISU_FONT" ), sbarTab );
2795   int tfont = addPreference( tr( "VISU_TITLE" ), fontGr, LightApp_Preferences::Font, "VISU", "scalar_bar_title_font" );
2796   addPreference( tr( "VISU_TITLE" ), fontGr, LightApp_Preferences::Color, "VISU", "scalar_bar_title_color" );
2797   int lfont = addPreference( tr( "VISU_LABELS" ), fontGr, LightApp_Preferences::Font, "VISU", "scalar_bar_label_font" );
2798   addPreference( tr( "VISU_LABELS" ), fontGr, LightApp_Preferences::Color, "VISU", "scalar_bar_label_color" );
2799
2800   QStringList fam;
2801   fam.append( tr( "VISU_FONT_ARIAL" ) );
2802   fam.append( tr( "VISU_FONT_COURIER" ) );
2803   fam.append( tr( "VISU_FONT_TIMES" ) );
2804   int wflag = ( QtxListResourceEdit::FontItem::All & ( ~( QtxListResourceEdit::FontItem::Size | QtxListResourceEdit::FontItem::UserSize ) ) );
2805
2806   setPreferenceProperty( tfont, "families", fam );
2807   setPreferenceProperty( tfont, "system", false );
2808   setPreferenceProperty( tfont, "widget_flags", wflag );
2809   setPreferenceProperty( lfont, "families", fam );
2810   setPreferenceProperty( lfont, "system", false );
2811   setPreferenceProperty( lfont, "widget_flags", wflag );
2812
2813   int colorsLabelsGr = addPreference( tr( "VISU_COLORS_AND_LABELS" ), sbarTab );
2814
2815   int numcol = addPreference( tr( "VISU_NB_COLORS" ), colorsLabelsGr, LightApp_Preferences::IntSpin, "VISU", "scalar_bar_num_colors" );
2816   setPreferenceProperty( numcol, "min", 2 );
2817   setPreferenceProperty( numcol, "max", 64 );
2818
2819   int numlab = addPreference( tr( "VISU_NB_LABELS" ), colorsLabelsGr, LightApp_Preferences::IntSpin, "VISU", "scalar_bar_num_labels" );
2820   setPreferenceProperty( numlab, "min", 2 );
2821   setPreferenceProperty( numlab, "max", 65 );
2822
2823   int orientGr = addPreference( tr( "VISU_ORIENTATION" ), sbarTab );
2824   int orient = addPreference( tr( "VISU_ORIENTATION" ), orientGr, LightApp_Preferences::Selector, "VISU", "scalar_bar_orientation" );
2825   QStringList orients;
2826   orients.append( tr( "VISU_VERTICAL" ) );
2827   orients.append( tr( "VISU_HORIZONTAL" ) );
2828   QValueList<QVariant> indices;
2829   indices.append( 0 );
2830   indices.append( 1 );
2831   setPreferenceProperty( orient, "strings", orients );
2832   setPreferenceProperty( orient, "indexes", indices );
2833
2834   int posVSizeGr = addPreference( tr( "VISU_ORIGIN_AND_SIZE" ) + " " + tr( "VISU_VERTICAL" ), sbarTab );
2835   int xv = addPreference( tr( "VISU_X" ), posVSizeGr, LightApp_Preferences::DblSpin, "VISU", "scalar_bar_vertical_x" );
2836   int yv = addPreference( tr( "VISU_Y" ), posVSizeGr, LightApp_Preferences::DblSpin, "VISU", "scalar_bar_vertical_y" );
2837   int wv = addPreference( tr( "VISU_WIDTH" ), posVSizeGr, LightApp_Preferences::DblSpin, "VISU", "scalar_bar_vertical_width" );
2838   int hv = addPreference( tr( "VISU_HEIGHT" ), posVSizeGr, LightApp_Preferences::DblSpin, "VISU", "scalar_bar_vertical_height" );
2839   setPreferenceProperty( xv, "step", 0.1 );
2840   setPreferenceProperty( yv, "step", 0.1 );
2841   setPreferenceProperty( wv, "step", 0.1 );
2842   setPreferenceProperty( hv, "step", 0.1 );
2843   setPreferenceProperty( xv, "min", 0.0 );
2844   setPreferenceProperty( yv, "min", 0.0 );
2845   setPreferenceProperty( wv, "min", 0.0 );
2846   setPreferenceProperty( hv, "min", 0.0 );
2847   setPreferenceProperty( xv, "max", 1.0 );
2848   setPreferenceProperty( yv, "max", 1.0 );
2849   setPreferenceProperty( wv, "max", 1.0 );
2850   setPreferenceProperty( hv, "max", 1.0 );
2851
2852   int posHSizeGr = addPreference( tr( "VISU_ORIGIN_AND_SIZE" ) + " " + tr( "VISU_HORIZONTAL" ), sbarTab );
2853   int xh = addPreference( tr( "VISU_X" ), posHSizeGr, LightApp_Preferences::DblSpin, "VISU", "scalar_bar_horizontal_x" );
2854   int yh = addPreference( tr( "VISU_Y" ), posHSizeGr, LightApp_Preferences::DblSpin, "VISU", "scalar_bar_horizontal_y" );
2855   int wh = addPreference( tr( "VISU_WIDTH" ), posHSizeGr, LightApp_Preferences::DblSpin, "VISU", "scalar_bar_horizontal_width" );
2856   int hh = addPreference( tr( "VISU_HEIGHT" ), posHSizeGr, LightApp_Preferences::DblSpin, "VISU", "scalar_bar_horizontal_height" );
2857   setPreferenceProperty( xh, "step", 0.1 );
2858   setPreferenceProperty( yh, "step", 0.1 );
2859   setPreferenceProperty( wh, "step", 0.1 );
2860   setPreferenceProperty( hh, "step", 0.1 );
2861   setPreferenceProperty( xh, "min", 0.0 );
2862   setPreferenceProperty( yh, "min", 0.0 );
2863   setPreferenceProperty( wh, "min", 0.0 );
2864   setPreferenceProperty( hh, "min", 0.0 );
2865   setPreferenceProperty( xh, "max", 1.0 );
2866   setPreferenceProperty( yh, "max", 1.0 );
2867   setPreferenceProperty( wh, "max", 1.0 );
2868   setPreferenceProperty( hh, "max", 1.0 );
2869
2870   int srangeTab = addPreference( tr( "Scalar range, Sweep, MED import" ) );
2871
2872   int rangeGr = addPreference( tr( "VISU_SCALAR_RANGE" ), srangeTab );
2873   setPreferenceProperty( rangeGr, "columns", 1 );
2874
2875   int mode = addPreference( tr( "VISU_SCALAR_MODE" ), rangeGr, LightApp_Preferences::Selector, "VISU", "scalar_bar_mode" );
2876   QStringList modes;
2877   modes.append( tr( "VISU_MODULUS" ) );
2878   modes.append( tr( "VISU_COMPONENT" ) + tr("1") );
2879   modes.append( tr( "VISU_COMPONENT" ) + tr("2") );
2880   modes.append( tr( "VISU_COMPONENT" ) + tr("3") );
2881   indices.clear();
2882   indices.append( 0 );
2883   indices.append( 1 );
2884   indices.append( 2 );
2885   indices.append( 3 );
2886   setPreferenceProperty( mode, "strings", modes );
2887   setPreferenceProperty( mode, "indexes", indices );
2888
2889   addPreference( tr( "VISU_LOGARITHMIC_SCALING" ), rangeGr, LightApp_Preferences::Bool, "VISU", "scalar_bar_logarithmic" );
2890
2891   int rangetype = addPreference( tr( "VISU_RANGE_TO_USE" ), rangeGr, LightApp_Preferences::Selector, "VISU", "scalar_range_type" );
2892   QStringList types;
2893   types.append( tr( "VISU_FIELD_RANGE" ) );
2894   types.append( tr( "VISU_IMPOSED_RANGE" ) );
2895   indices.clear();
2896   indices.append( 0 );
2897   indices.append( 1 );
2898   setPreferenceProperty( rangetype, "strings", types );
2899   setPreferenceProperty( rangetype, "indexes", indices );
2900
2901   int imposedGr = addPreference( tr( "VISU_MINMAX_IMPOSED_RANGE" ), srangeTab );
2902
2903   int min = addPreference( tr( "VISU_MIN" ), imposedGr, LightApp_Preferences::DblSpin, "VISU", "scalar_range_min" );
2904   int max = addPreference( tr( "VISU_MAX" ), imposedGr, LightApp_Preferences::DblSpin, "VISU", "scalar_range_max" );
2905   setPreferenceProperty( min, "step", 0.1 );
2906   setPreferenceProperty( max, "step", 0.1 );
2907
2908   int sweepGr = addPreference( tr( "VISU_SWEEPING_PREF" ), srangeTab );
2909   setPreferenceProperty( sweepGr, "columns", 1 );
2910
2911   int timestep   = addPreference( tr( "VISU_TIME_STEP" ), sweepGr, LightApp_Preferences::DblSpin, "VISU", "sweeping_time_step" );
2912   int nbcycles   = addPreference( tr( "VISU_NB_CYCLES" ), sweepGr, LightApp_Preferences::IntSpin, "VISU", "sweeping_number_cycles" );
2913   int nbsteps    = addPreference( tr( "VISU_NB_STEPS" ),  sweepGr, LightApp_Preferences::IntSpin, "VISU", "sweeping_number_steps" );
2914   setPreferenceProperty( timestep, "min",  0.1 );
2915   setPreferenceProperty( timestep, "step", 0.1 );
2916   setPreferenceProperty( timestep, "max",  1000 );
2917   setPreferenceProperty( nbcycles, "max",  100  );
2918   setPreferenceProperty( nbsteps,  "max",  200  );
2919
2920   int importGr = addPreference( tr( "MED files import" ), srangeTab );
2921   addPreference( tr( "Full MED loading" ), importGr, LightApp_Preferences::Bool, "VISU", "full_med_loading" );
2922 }
2923
2924 void VisuGUI::preferencesChanged( const QString&, const QString& )
2925 {
2926 }
2927
2928 SUIT_ViewManager*
2929 VisuGUI
2930 ::getViewManager(const QString& theType,
2931                  const bool theIsCreate)
2932 {
2933   return getApp()->getViewManager(theType,theIsCreate);
2934 }
2935
2936 LightApp_Displayer* VisuGUI::displayer()
2937 {
2938   if( !myDisplayer )
2939     myDisplayer = new VisuGUI_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2940     
2941   return myDisplayer;
2942 }