Salome HOME
MeshFormatWriter and MeshFormaReader are in MEDCOUPLING namespace
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_MG_ADAPTDRIVER.cxx
1 // Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  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, or (at your option) any later version.
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.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 // File : SMESHGUI_MG_ADAPTDRIVER.cxx
23
24 #include "SMESHGUI_MG_ADAPTDRIVER.h"
25
26 #include "SUIT_Desktop.h"
27 #include "SUIT_Application.h"
28 #include "SUIT_Session.h"
29
30 #include "SalomeApp_Application.h"
31 #include "SalomeApp_Module.h"
32 #include "SalomeApp_Study.h"
33
34 #include "SMESH_Comment.hxx"
35 #include "SMESH_Actor.h"
36 #include "SMESHGUI.h"
37 #include "SMESHGUI_FilterDlg.h"
38 #include "SMESHGUI_Selection.h"
39 #include <SUIT_MessageBox.h>
40 #include "SMESHGUI_IdValidator.h"
41 #include "SMESHGUI_Utils.h"
42 #include "SMESHGUI_MeshEditPreview.h"
43 #include "SMESHGUI_VTKUtils.h"
44 #include <SMESH_TypeFilter.hxx>
45 #include <SMESH_MeshAlgos.hxx>
46 #include <SMESH_LogicalFilter.hxx>
47 #include <SMDS_Mesh.hxx>
48 #include <SMDS_MeshNode.hxx>
49 #include "SMESHGUI_SpinBox.h"
50
51 #include <LightApp_SelectionMgr.h>
52 #include <SUIT_OverrideCursor.h>
53 #include <SUIT_ResourceMgr.h>
54 #include <SVTK_ViewWindow.h>
55 #include <SALOME_ListIO.hxx>
56 #include <SUIT_FileDlg.h>
57 #include "SMESHGUI_MeshUtils.h"
58
59
60 #include <QApplication>
61 #include <QButtonGroup>
62 #include <QGridLayout>
63 #include <QGroupBox>
64 #include <QHBoxLayout>
65 #include <QKeyEvent>
66 #include <QLabel>
67 #include <QLineEdit>
68 #include <QCheckBox>
69 #include <QPushButton>
70 #include <QRadioButton>
71 #include <QTabWidget>
72 #include <QVBoxLayout>
73 #include <QDoubleSpinBox>
74 #include <QSpinBox>
75 #include <QTreeWidget>
76 #include <QTreeWidgetItem>
77 #include <QSpacerItem>
78 #include <QString>
79 #include <QHeaderView>
80 #include <QItemDelegate>
81 #include <QFileDialog>
82 #include <QMessageBox>
83 #include <QComboBox>
84
85 #include <vtkPoints.h>
86 #include <vtkUnstructuredGrid.h>
87 #include <vtkIdList.h>
88 #include <vtkCellArray.h>
89 #include <vtkUnsignedCharArray.h>
90 #include <vtkDataSetMapper.h>
91 #include <VTKViewer_CellLocationsArray.h>
92 #include <vtkProperty.h>
93
94 #include <ElCLib.hxx>
95 // SALOME KERNEL includes
96 #include <SALOMEDS_SComponent.hxx>
97 #include <SALOMEDS_SObject.hxx>
98 #include <SALOMEDS_Study.hxx>
99 #include <SALOMEDS_wrap.hxx>
100 #include "SalomeApp_Tools.h"
101 #include <SALOMEconfig.h>
102 #include <med.h>
103 #include <utilities.h>
104
105 #include <TCollection_AsciiString.hxx>
106
107 const int SPACING = 6;            // layout spacing
108 const int MARGIN  = 9;            // layout margin
109
110 SALOME_ListIO mySelected;
111
112
113 //================================================================
114 // Function : firstIObject
115 // Purpose  :  Return the first selected object in the selected object list
116 //================================================================
117 Handle(SALOME_InteractiveObject) firstIObject()
118 {
119     const SALOME_ListIO& aList = selectedIO();
120     return aList.Extent() > 0 ? aList.First() : Handle(SALOME_InteractiveObject)();
121 }
122 //================================================================
123 // Function : selectedIO
124 // Return the list of selected SALOME_InteractiveObject's
125 //================================================================
126 const SALOME_ListIO& selectedIO()
127 {
128     SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* > ( SUIT_Session::session()->activeApplication() );
129     LightApp_SelectionMgr* aSelectionMgr = app->selectionMgr();
130     if( aSelectionMgr )
131     {
132         aSelectionMgr->selectedObjects( mySelected );
133         for (SALOME_ListIteratorOfListIO it (mySelected); it.More(); it.Next())
134             SCRUTE(it.Value()->getEntry());
135     };
136     return mySelected;
137 }
138 //================================================================
139 // Function : getStudy
140 // Returne un pointeur sur l'etude active
141 //================================================================
142 _PTR(Study) getStudy()
143 {
144     static _PTR(Study) _study;
145     if(!_study)
146         _study = SalomeApp_Application::getStudy();
147     return _study;
148 }
149
150 bool createAndPublishMed(QString fileName)
151 {
152
153     SMESH::DriverMED_ReadStatus res;
154     SMESH::mesh_array_var aMeshes = new SMESH::mesh_array;
155     // SMESHGUI aGui;
156
157     aMeshes = SMESHGUI::GetSMESHGen()->CreateMeshesFromMED( fileName.toUtf8().constData(), res );
158     _PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshes[0] );
159     _PTR(Study) aStudy = SMESH::getStudy();
160     QStringList anEntryList;
161     // bool isEmpty;
162     if ( aMeshSO ) {
163         _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
164         _PTR(AttributePixMap) aPixmap = aBuilder->FindOrCreateAttribute( aMeshSO, "AttributePixMap" );
165         aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH_IMPORTED" );
166         anEntryList.append( aMeshSO->GetID().c_str() );
167     }
168     else {
169         // isEmpty = true;
170         return false;
171     }
172     SMESHGUI::GetSMESHGUI()->updateObjBrowser();
173
174     // browse to the published meshes
175     if( LightApp_Application* anApp =
176                 dynamic_cast<LightApp_Application*>( SUIT_Session::session()->activeApplication() ) )
177         anApp->browseObjects( anEntryList );
178     return true;
179 }
180 bool createMgAdaptObject(MgAdapt *myMgAdapt )
181 {
182     // SMESH::SMESH_Mesh_var newMesh = SMESHGUI::GetSMESHGen()->CreateEmptyMesh();
183
184     // _PTR(SObject) aHypothesis;
185     _PTR(Study) aStudy = SMESH::getStudy();
186     QStringList anEntryList;
187     _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
188     _PTR(SComponent) mgadapt = aStudy->FindComponent("MG-ADAPT");
189     _PTR(GenericAttribute) ga;
190     if (!aBuilder->FindAttribute(mgadapt, ga, "AttributeName") )
191     {
192         mgadapt = aBuilder->NewComponent("MG-ADAPT");
193         _PTR(AttributeName) Name = aBuilder->FindOrCreateAttribute(mgadapt, "AttributeName");
194         Name->SetValue("MG-ADAPT");
195         _PTR(AttributePixMap) myPixmap = aBuilder->FindOrCreateAttribute( mgadapt, "AttributePixMap" );
196         myPixmap->SetPixMap( "ICON_MG_ADAPT" );
197         anEntryList.append( mgadapt->GetID().c_str() );
198     }
199
200     _PTR(SObject) obj =  aBuilder->NewObject(mgadapt);
201     _PTR(AttributeName) myName = aBuilder->FindOrCreateAttribute(obj, "AttributeName");
202     myName->SetValue("hypo");
203     _PTR(AttributePixMap) aPixmap = aBuilder->FindOrCreateAttribute( obj, "AttributePixMap" );
204     aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
205     anEntryList.append( obj->GetID().c_str() );
206
207     SMESHGUI::GetSMESHGUI()->updateObjBrowser();
208
209     // // browse to the published meshes
210     if( LightApp_Application* anApp =
211                 dynamic_cast<LightApp_Application*>( SUIT_Session::session()->activeApplication() ) )
212         anApp->browseObjects( anEntryList );
213     return true;
214 }
215
216
217 // MG ADAPT UTILS
218 //================================================================
219 // Function : IObjectCount
220 // Return the number of selected objects
221 //================================================================
222 int IObjectCount()
223 {
224     SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
225     LightApp_SelectionMgr* aSelectionMgr = app->selectionMgr();
226     if( aSelectionMgr )
227     {
228         aSelectionMgr->selectedObjects( mySelected );
229         SCRUTE(mySelected.Extent());
230         return mySelected.Extent();
231     }
232     return 0;
233 }
234
235
236 SMESHGUI_MG_AdaptComputeDlg_QThread::SMESHGUI_MG_AdaptComputeDlg_QThread(MgAdapt* aModel)
237 {
238     model = aModel;
239     myResult = -1;
240 }
241
242 void SMESHGUI_MG_AdaptComputeDlg_QThread::run()
243 {
244
245     int err;
246     std::string errStr;
247     errStr = model->compute(errStr);
248     std::string msg = err == 0 ? " ok" : std::string("Not ok \n")+ errStr;
249     exec();
250 }
251
252 int SMESHGUI_MG_AdaptComputeDlg_QThread::result()
253 {
254     return myResult;
255 }
256
257 void SMESHGUI_MG_AdaptComputeDlg_QThread::cancel()
258 {
259     //~model->cancel();
260 }
261
262 SMESHGUI_MG_ADAPTDRIVER::SMESHGUI_MG_ADAPTDRIVER( SMESHGUI* theModule, MgAdapt* myModel, bool isCreation )
263     : mySMESHGUI( theModule ),
264       myFilterDlg(0),
265       myIsApplyAndClose( false ),
266       SMESHGUI_MgAdaptDlg((SalomeApp_Module*)theModule, myModel, SMESHGUI::desktop(), isCreation)
267 {
268
269     resMgr = resourceMgr();
270
271     selMgr = selectionMgr();
272
273     // connections
274     connect(myArgs, SIGNAL(updateSelection()), this, SLOT(updateSelection()));
275     connect(myArgs, SIGNAL(toExportMED(const char*)), this, SLOT(exportMED(const char*)));
276 }
277
278 SUIT_ResourceMgr* SMESHGUI_MG_ADAPTDRIVER::resourceMgr()
279 {
280     return dynamic_cast<SUIT_ResourceMgr*>( SUIT_Session::session()->resourceMgr() );
281 }
282
283 LightApp_SelectionMgr* SMESHGUI_MG_ADAPTDRIVER::selectionMgr()
284 {
285     SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
286     if( anApp )
287         return dynamic_cast<LightApp_SelectionMgr*>( anApp->selectionMgr() );
288     else
289         return 0;
290 }
291
292 void SMESHGUI_MG_ADAPTDRIVER::updateSelection()
293 {
294     disconnect( selMgr, 0, this, 0 );
295     selMgr->clearFilters();
296
297     SMESH::SetPointRepresentation( true );
298     if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() )
299         aViewWindow->SetSelectionMode( ActorSelection );
300     if (myArgs->aBrowser->isChecked())
301     {
302         connect( selMgr,  SIGNAL( currentSelectionChanged() ), this, SLOT( selectionChanged() ));
303         selectionChanged();
304     }
305
306 }
307 void SMESHGUI_MG_ADAPTDRIVER::selectionChanged()
308 {
309     //~ get selected mesh
310     SALOME_ListIO aList;
311     selMgr->selectedObjects(aList);
312     QString aString = "";
313     int nbSel = aList.Extent();
314     if (nbSel != 1)
315         return;
316
317     Handle(SALOME_InteractiveObject) IO = aList.First();
318     SMESH::SMESH_Mesh_var mesh = SMESH::GetMeshByIO(IO);
319     if ( !mesh->_is_nil() )
320     {
321         myMesh  = mesh;
322
323         mySelectedObject = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
324         if ( mySelectedObject->_is_nil() )
325             return;
326
327     }
328     else
329         return;
330
331     SMESH::GetNameOfSelectedIObjects( selMgr, aString );
332     if ( aString.isEmpty() ) aString = " ";
333     else                     aString = aString.trimmed();
334
335
336     bool ok = !aString.isEmpty();
337     if ( !mesh->_is_nil() )
338     {
339         myArgs->aBrowserObject->setText( aString );
340         myArgs->meshNameLineEdit->setText( aString );
341         myArgs->selectOutMedFileLineEdit->setText(aString+QString(".med"));
342         ADAPTATION_MODE aMode;
343         int nbVolumes = myMesh->NbVolumes();
344         int nbFaces = myMesh->NbFaces();
345         if(nbFaces > 0 && nbVolumes > 0) aMode = ADAPTATION_MODE::BOTH;
346         else if(nbFaces > 0) aMode = ADAPTATION_MODE::SURFACE;
347         else aMode = ADAPTATION_MODE::VOLUME;
348         emit myArgs->meshDimSignal(aMode);
349     }
350
351 }
352 void SMESHGUI_MG_ADAPTDRIVER::exportMED(const char* tmp_file)
353 {
354     bool toOverwrite  = true;
355     bool toFindOutDim = true;
356     myMesh->ExportMED(tmp_file, false, -1, toOverwrite, toFindOutDim);
357 }
358 void SMESHGUI_MG_ADAPTDRIVER::setMyMesh(SMESH::SMESH_Mesh_var mesh)
359 {
360     myMesh = mesh;
361 }
362 SMESH::SMESH_Mesh_var SMESHGUI_MG_ADAPTDRIVER::getMyMesh()
363 {
364     return myMesh;
365 }
366
367 //=================================================================================
368 // function : ClickOnOk()
369 // purpose  :
370 //=================================================================================
371 void SMESHGUI_MG_ADAPTDRIVER::clickOnOk()
372 {
373     setIsApplyAndClose( true );
374     clickOnApply();
375     reject();
376 }
377 bool SMESHGUI_MG_ADAPTDRIVER::clickOnApply()
378 {
379
380     if ( SMESHGUI::isStudyLocked() )
381         return false;
382     if( !isValid() )
383         return false;
384
385     SMESHGUI_MgAdaptDlg::clickOnApply();
386
387     bool ok = execute();
388     //~SMESHGUI_MG_AdaptComputeDlg_QThread atest(getModel());
389     //~atest.start();
390     //~atest.quit();
391     if (getModel()->getPublish()) this->createMeshInObjectBrowser();
392
393     return ok;
394 }
395
396 bool SMESHGUI_MG_ADAPTDRIVER::execute()
397 {
398
399     int err;
400     std::string errStr;
401     try
402     {
403         err = getModel()->compute(errStr);
404         std::string msg =  err == 0 ? " ok" : std::string("Not ok \n")+errStr ;
405     }
406     catch (const std::exception& e)
407     {
408         std::cerr<<e.what();
409     }
410     return err == 0? true: false;
411 }
412
413 //=================================================================================
414 // function : Init()
415 // purpose  :
416 //=================================================================================
417 void SMESHGUI_MG_ADAPTDRIVER::Init (bool ResetControls)
418 {
419     myBusy = false;
420
421     if ( ResetControls )
422     {
423         myLineEditElements->clear();
424         myNbOkElements = 0;
425
426         buttonOk->setEnabled(false);
427         buttonApply->setEnabled(false);
428
429         //~myActor = 0;
430         myMesh = SMESH::SMESH_Mesh::_nil();
431
432         myIdSourceCheck->setChecked(true);
433
434         onConstructor( 0 );
435     }
436
437 }
438
439 //=======================================================================
440 //function : onConstructor
441 //purpose  : switch operation mode
442 //=======================================================================
443
444 void SMESHGUI_MG_ADAPTDRIVER::onConstructor( int withGeom )
445 {
446
447     myGeomLabel        ->setVisible( withGeom );
448     myGeomNameEdit     ->setVisible( withGeom );
449     myReuseHypCheck    ->setVisible( withGeom );
450     myCopyElementsCheck->setVisible( withGeom );
451     myFilterBtn        ->setVisible( !withGeom );
452     myIdSourceCheck    ->setVisible( !withGeom );
453
454     if ( !withGeom )
455         myMeshNameEdit->setText( SMESH::UniqueMeshName("Mesh"));
456
457 }
458
459
460 //~void SMESHGUI_MG_ADAPTDRIVER::onSelectIdSource( bool )
461 //~{}
462
463
464 //=================================================================================
465 // function : enterEvent()
466 // purpose  :
467 //=================================================================================
468 void SMESHGUI_MG_ADAPTDRIVER::enterEvent (QEvent*)
469 {
470
471     // if ( !ConstructorsBox->isEnabled() ) {
472     //   SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI );
473     //   if ( aViewWindow && !mySelector ) {
474     //     mySelector = aViewWindow->GetSelector();
475     //   }
476     //   activateThisDialog();
477     // }
478
479 }
480
481 //=================================================================================
482 // function : keyPressEvent()
483 // purpose  :
484 //=================================================================================
485 void SMESHGUI_MG_ADAPTDRIVER::keyPressEvent( QKeyEvent* e )
486 {
487
488     QDialog::keyPressEvent( e );
489     if ( e->isAccepted() )
490         return;
491
492     if ( e->key() == Qt::Key_F1 ) {
493         e->accept();
494         clickOnHelp();
495     }
496
497 }
498
499 //=================================================================================
500 // function : clickOnHelp()
501 // purpose  :
502 //=================================================================================
503 void SMESHGUI_MG_ADAPTDRIVER::clickOnHelp()
504 {
505
506     LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
507     if (app)
508         app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
509     else {
510         QString platform;
511 #ifdef WIN32
512         platform = "winapplication";
513 #else
514         platform = "application";
515 #endif
516         SUIT_MessageBox::warning(this, tr("WRN_WARNING"),
517                                  tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
518                                  arg(app->resourceMgr()->stringValue("ExternalBrowser",
519                                          platform)).
520                                  arg(myHelpFileName));
521     }
522
523 }
524
525 //=======================================================================
526 //function : getErrorMsg
527 //purpose  : Return an error message and entries of invalid smesh object
528 //=======================================================================
529
530 QString SMESHGUI_MG_ADAPTDRIVER::getErrorMsg( SMESH::string_array_var theInvalidEntries,
531         QStringList &           theEntriesToBrowse )
532 {
533
534     if ( theInvalidEntries->length() == 0 )
535         return tr("OPERATION_FAILED");
536
537     // theInvalidEntries - SObject's that hold geometry objects whose
538     // counterparts are not found in the newGeometry, followed by SObject's
539     // holding mesh sub-objects that are invalid because they depend on a not found
540     // preceding sub-shape
541
542     QString msg = tr("SUBSHAPES_NOT_FOUND_MSG") + "\n";
543
544     QString objString;
545     for ( CORBA::ULong i = 0; i < theInvalidEntries->length(); ++i )
546     {
547         _PTR(SObject) so = SMESH::getStudy()->FindObjectID( theInvalidEntries[i].in() );
548
549         int objType = SMESHGUI_Selection::type( theInvalidEntries[i].in() );
550         if ( objType < 0 ) // geom object
551         {
552             objString += "\n";
553             if ( so )
554                 objString += so->GetName().c_str();
555             else
556                 objString += theInvalidEntries[i].in(); // it's something like "FACE #2"
557         }
558         else // smesh object
559         {
560             theEntriesToBrowse.push_back( theInvalidEntries[i].in() );
561
562             objString += "\n   ";
563             switch ( objType ) {
564             case SMESH::MESH:
565                 objString += tr("SMESH_MESH");
566                 break;
567             case SMESH::HYPOTHESIS:
568                 objString += tr("SMESH_HYPOTHESIS");
569                 break;
570             case SMESH::ALGORITHM:
571                 objString += tr("SMESH_ALGORITHM");
572                 break;
573             case SMESH::SUBMESH_VERTEX:
574             case SMESH::SUBMESH_EDGE:
575             case SMESH::SUBMESH_FACE:
576             case SMESH::SUBMESH_SOLID:
577             case SMESH::SUBMESH_COMPOUND:
578             case SMESH::SUBMESH:
579                 objString += tr("SMESH_SUBMESH");
580                 break;
581             case SMESH::GROUP:
582                 objString += tr("SMESH_GROUP");
583                 break;
584             default:
585                 ;
586             }
587             objString += " \"";
588             if ( so )
589                 objString += so->GetName().c_str();
590             objString += "\" (";
591             objString += theInvalidEntries[i].in();
592             objString += ")";
593         }
594     }
595     if ( !objString.isEmpty() )
596         msg += objString;
597
598     return msg;
599 }
600
601 //=================================================================================
602 // function : isValid
603 // purpose  :
604 //=================================================================================
605
606 bool SMESHGUI_MG_ADAPTDRIVER::isValid()
607 {
608     bool ok = true;
609     return ok;
610 }
611
612 bool SMESHGUI_MG_ADAPTDRIVER::createMeshInObjectBrowser()
613 {
614     QString filename(getModel()->getMedFileOut().c_str());
615     QStringList errors;
616     QStringList anEntryList;
617     bool isEmpty = false;
618     bool ok = false;
619     SMESH::SMESH_Gen_var SMESH_Gen_ptr = SMESHGUI::GetSMESHGen();
620     if (!SMESH_Gen_ptr) {
621         std::cerr << "Could not retrieve SMESH_Gen_ptr" << std::endl;
622         throw SALOME_Exception(LOCALIZED("Could not retrieve SMESH::GetSMESHGen()"));
623     }
624     SMESH::mesh_array_var aMeshes = new SMESH::mesh_array;
625     aMeshes->length( 1 ); // one mesh only
626     SMESH::DriverMED_ReadStatus res;
627     aMeshes = SMESH_Gen_ptr->CreateMeshesFromMED( filename.toUtf8().constData(), res );
628     if ( res != SMESH::DRS_OK ) {
629         errors.append( QString( "%1 :\n\t%2" ).arg( filename ).arg( QObject::tr( QString( "SMESH_DRS_%1" ).arg( res ).toLatin1().data() ) ) );
630     }
631     _PTR(Study) aStudy = SMESH::getStudy();
632     for ( int i = 0, iEnd = aMeshes->length(); i < iEnd; i++ )
633     {
634         _PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshes[i] );
635         if ( aMeshSO ) {
636             _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
637             _PTR(AttributePixMap) aPixmap = aBuilder->FindOrCreateAttribute( aMeshSO, "AttributePixMap" );
638             aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH_IMPORTED" ); // put REFINED mesh ico
639             anEntryList.append( aMeshSO->GetID().c_str() );
640         }
641         else {
642             isEmpty = true;
643         }
644     }
645     // update Object browser
646     SMESHGUI::GetSMESHGUI()->updateObjBrowser();
647     // browse to the published meshes
648     if( LightApp_Application* anApp =
649                 dynamic_cast<LightApp_Application*>( SUIT_Session::session()->activeApplication() ) )
650         anApp->browseObjects( anEntryList );
651
652     // show Error message box if there were errors
653     if ( errors.count() > 0 ) {
654         SUIT_MessageBox::critical( SMESHGUI::desktop(),
655                                    QObject::tr( "SMESH_ERROR" ),
656                                    QObject::tr( "SMESH_IMPORT_ERRORS" ) + "\n" + errors.join( "\n" ) );
657     }
658
659     // show warning message box, if some imported mesh is empty
660     if ( isEmpty ) {
661         SUIT_MessageBox::warning( SMESHGUI::desktop(),
662                                   QObject::tr( "SMESH_WRN_WARNING" ),
663                                   QObject::tr( "SMESH_DRS_SOME_EMPTY" ) );
664     }
665     return true;
666 }
667
668 //================================================================
669 // function : setIsApplyAndClose
670 // Purpose  : Set value of the flag indicating that the dialog is
671 //            accepted by Apply & Close button
672 //================================================================
673 void SMESHGUI_MG_ADAPTDRIVER::setIsApplyAndClose( const bool theFlag )
674 {
675     myIsApplyAndClose = theFlag;
676 }//================================================================
677 // function : isApplyAndClose
678 // Purpose  : Get value of the flag indicating that the dialog is
679 //            accepted by Apply & Close button
680 //================================================================
681 bool SMESHGUI_MG_ADAPTDRIVER::isApplyAndClose() const
682 {
683     return myIsApplyAndClose;
684 }
685
686 //=================================================================================
687 // function : DeactivateActiveDialog()
688 // purpose  :
689 //=================================================================================
690 void SMESHGUI_MG_ADAPTDRIVER::deactivateActiveDialog()
691 {
692
693     if (ConstructorsBox->isEnabled()) {
694         ConstructorsBox->setEnabled(false);
695         GroupArguments->setEnabled(false);
696         GroupButtons->setEnabled(false);
697         mySMESHGUI->ResetState();
698         mySMESHGUI->SetActiveDialogBox(0);
699         if ( selMgr )
700             selMgr->removeFilter( myIdSourceFilter );
701     }
702 }
703
704 //=================================================================================
705 // function : ActivateThisDialog()
706 // purpose  :
707 //=================================================================================
708 void SMESHGUI_MG_ADAPTDRIVER::activateThisDialog()
709 {
710
711     /* Emit a signal to deactivate the active dialog */
712     // mySMESHGUI->EmitSignalDeactivateDialog();
713     // ConstructorsBox->setEnabled(true);
714     // GroupArguments->setEnabled(true);
715     // GroupButtons->setEnabled(true);
716
717     // mySMESHGUI->SetActiveDialogBox((QDialog*)this);
718
719     // onSelectIdSource( myIdSourceCheck->isChecked() );
720
721     // SelectionIntoArgument();
722 }
723
724 //=================================================================================
725 // function : setFilters()
726 // purpose  : SLOT. Called when "Filter" button pressed.
727 //=================================================================================
728 void SMESHGUI_MG_ADAPTDRIVER::setFilters()
729 {
730     if(myMesh->_is_nil()) {
731         SUIT_MessageBox::critical(this,
732                                   tr("SMESH_ERROR"),
733                                   tr("NO_MESH_SELECTED"));
734         return;
735     }
736     if ( !myFilterDlg )
737         myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL );
738
739     QList<int> types;
740     if ( myMesh->NbEdges()     ) types << SMESH::EDGE;
741     if ( myMesh->NbFaces()     ) types << SMESH::FACE;
742     if ( myMesh->NbVolumes()   ) types << SMESH::VOLUME;
743     if ( myMesh->NbBalls()     ) types << SMESH::BALL;
744     if ( myMesh->Nb0DElements()) types << SMESH::ELEM0D;
745     if ( types.count() > 1 )     types << SMESH::ALL;
746
747     myFilterDlg->Init( types );
748     myFilterDlg->SetSelection();
749     myFilterDlg->SetMesh( myMesh );
750     myFilterDlg->SetSourceWg( myLineEditElements );
751
752     myFilterDlg->show();
753 }
754
755 //=================================================================================
756 // function : onOpenView()
757 // purpose  :
758 //=================================================================================
759 void SMESHGUI_MG_ADAPTDRIVER::onOpenView()
760 {
761     if ( mySelector ) {
762         SMESH::SetPointRepresentation(false);
763     }
764     else {
765         mySelector = SMESH::GetViewWindow( mySMESHGUI )->GetSelector();
766         activateThisDialog();
767     }
768 }
769
770 //=================================================================================
771 // function : onCloseView()
772 // purpose  :
773 //=================================================================================
774 void SMESHGUI_MG_ADAPTDRIVER::onCloseView()
775 {
776     deactivateActiveDialog();
777     mySelector = 0;
778 }