Salome HOME
27674b9880672b40e00ee2be9beb19859fe32368
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_HomardAdaptDlg.cxx
1 // Copyright (C) 2011-2021  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #include "SMESHGUI_HomardAdaptDlg.h"
21
22 #include "SMESHGUI.h"
23 #include "SMESHGUI_HomardBoundaryDlg.h"
24 #include "SMESHGUI_HomardUtils.h"
25 #include "SMESHGUI_Utils.h"
26 #include "SMESHGUI_VTKUtils.h"
27 #include "SMESHGUI_MeshUtils.h"
28 #include "SMESH_TryCatch.hxx"
29
30 #include <SalomeApp_Tools.h>
31 #include <SalomeApp_Module.h>
32 #include <SalomeApp_Application.h>
33 #include <LightApp_SelectionMgr.h>
34 #include <SUIT_MessageBox.h>
35 #include <SUIT_OverrideCursor.h>
36 #include <SUIT_FileDlg.h>
37 #include <SUIT_Desktop.h>
38 #include <SUIT_Session.h>
39 #include <SVTK_ViewWindow.h>
40
41 #include <QFileDialog>
42 #include <QMessageBox>
43 #include <QButtonGroup>
44
45 #include <utilities.h>
46
47 #ifdef WIN32
48 #include <direct.h>
49 #endif
50
51 using namespace std;
52
53 // La gestion des repertoires
54 #ifndef CHDIR
55   #ifdef WIN32
56     #define CHDIR _chdir
57   #else
58     #define CHDIR chdir
59   #endif
60 #endif
61
62 const int SPACING = 6;            // layout spacing
63 const int MARGIN  = 9;            // layout margin
64
65 //================================================================================
66 /*!
67  * \brief Constructor
68  */
69 //================================================================================
70 SMESHGUI_HomardAdaptDlg::SMESHGUI_HomardAdaptDlg(SMESHHOMARD::HOMARD_Gen_ptr myHomardGen0)
71   : QDialog(SMESHGUI::desktop())
72 {
73   MESSAGE("Debut du constructeur de SMESHGUI_HomardAdaptDlg");
74   myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
75   myHomardGen->Register();
76
77   setModal(false);
78   setAttribute( Qt::WA_DeleteOnClose, true );
79   setWindowTitle( tr( "ADAPT_WITH_HOMARD" ) );
80   setSizeGripEnabled( true );
81
82   QTabWidget* myTabWidget = new QTabWidget( this );
83
84   // Arguments
85   myArgs = new SMESHGUI_HomardAdaptArguments(myTabWidget);
86
87   // Advanced options
88   myAdvOpt = new SMESHGUI_HomardAdaptAdvanced(myTabWidget);
89
90   myTabWidget->addTab( myArgs, tr( "Args" ) );
91   //myTabWidget->addTab( myAdvOpt, tr( "ADVOP" ) );
92   myTabWidget->addTab( myAdvOpt, tr( "LOG_GROUP_TITLE" ) );
93
94   //myAdvOpt->logGroupBox               ->setTitle(tr( "LOG_GROUP_TITLE" ));
95   myAdvOpt->workingDirectoryLabel     ->setText (tr( "WORKING_DIR" ));
96   myAdvOpt->workingDirectoryPushButton->setText (tr( "SELECT_DIR" ));
97   myAdvOpt->verboseLevelLabel         ->setText (tr( "VERBOSE_LEVEL" ));
98   myAdvOpt->logInFileCheck            ->setText (tr( "LOG_IN_FILE" ));
99   myAdvOpt->removeLogOnSuccessCheck   ->setText (tr( "REMOVE_LOG_ON_SUCCESS" ));
100   myAdvOpt->keepWorkingFilesCheck     ->setText (tr( "KEEP_WORKING_FILES" ));
101
102   // disable // TODO???
103   myAdvOpt->logInFileCheck->setChecked(true);
104   myAdvOpt->removeLogOnSuccessCheck->setChecked(false);
105
106   // Working directory
107   QString aWorkingDir = QDir::tempPath();
108   char *aTmp_dir = getenv("SALOME_TMP_DIR");
109   if (aTmp_dir != NULL) {
110     QDir aTmpDir (aTmp_dir);
111     if (aTmpDir.exists()) {
112       aWorkingDir = aTmpDir.absolutePath();
113     }
114   }
115   myAdvOpt->workingDirectoryLineEdit->setText(aWorkingDir);
116
117   // Out med file and/or mesh publication
118   myArgs->myOutMedFileChk->setChecked(true);
119   myArgs->myOutPublishChk->setChecked(true);
120
121   // buttons
122   QHBoxLayout* btnLayout = new QHBoxLayout;
123   btnLayout->setSpacing( 6 );
124   btnLayout->setMargin( 0 );
125
126   buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), this);
127   buttonOk->setAutoDefault(false);
128   btnLayout->addWidget(buttonOk);
129   btnLayout->addStretch( 10 );
130
131   buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), this);
132   buttonApply->setAutoDefault(false);
133   btnLayout->addWidget(buttonApply);
134   btnLayout->addStretch( 10 );
135
136   buttonCancel = new QPushButton(tr( "SMESH_BUT_CANCEL" ), this);
137   buttonCancel->setAutoDefault(false);
138   btnLayout->addWidget(buttonCancel);
139   btnLayout->addStretch( 10 );
140
141   buttonHelp = new QPushButton(tr( "SMESH_BUT_HELP" ), this);
142   buttonHelp->setAutoDefault(false);
143   btnLayout->addWidget(buttonHelp);
144
145   // dialog layout
146   QVBoxLayout* l = new QVBoxLayout ( this );
147   l->setMargin( 9 );
148   l->setSpacing( 6 );
149   l->addWidget( myTabWidget );
150   l->addStretch();
151   l->addLayout( btnLayout );
152
153   // dialog name and size
154   /*
155   resize(600, 1150);
156   QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
157   sizePolicy.setHorizontalStretch(0);
158   sizePolicy.setVerticalStretch(0);
159   sizePolicy.setHeightForWidth(this->sizePolicy().hasHeightForWidth());
160   setSizePolicy(sizePolicy);
161   setMinimumSize(QSize(600, 320));
162   setSizeIncrement(QSize(1, 1));
163   setBaseSize(QSize(600, 320));
164   setAutoFillBackground(true);
165   */
166
167   SetBoundaryNo();
168   InitConnect();
169
170   myArgs->GBBoundaryC->setVisible(0);
171   myArgs->GBBoundaryN->setVisible(0);
172   myArgs->GBBoundaryA->setVisible(0);
173   myArgs->GBBoundaryD->setVisible(0);
174
175   adjustSize();
176
177   //MESSAGE("Fin du constructeur de SMESHGUI_HomardAdaptDlg");
178 }
179
180 //=================================================================================
181 // function : ~SMESHGUI_HomardAdaptDlg()
182 // purpose  : Destroys the object and frees any allocated resources
183 //=================================================================================
184 SMESHGUI_HomardAdaptDlg::~SMESHGUI_HomardAdaptDlg()
185 {
186   // no need to delete child widgets, Qt does it all for us
187 }
188
189 //=================================================================================
190 // function : InitConnect
191 // purpose  : 
192 //=================================================================================
193 void SMESHGUI_HomardAdaptDlg::InitConnect()
194 {
195   connect( myArgs->mySelectInMedFileButton, SIGNAL(pressed()), this, SLOT(SetFileName()));
196
197   connect( myArgs->RBBoundaryNo,      SIGNAL(clicked()), this, SLOT(SetBoundaryNo()));
198   connect( myArgs->RBBoundaryCAO,     SIGNAL(clicked()), this, SLOT(SetBoundaryCAO()));
199   connect( myArgs->RBBoundaryNonCAO,  SIGNAL(clicked()), this, SLOT(SetBoundaryNonCAO()));
200
201   connect( myArgs->PBBoundaryCAONew,  SIGNAL(pressed()), this, SLOT(PushBoundaryCAONew()));
202   connect( myArgs->PBBoundaryCAOEdit, SIGNAL(pressed()), this, SLOT(PushBoundaryCAOEdit()) );
203   connect( myArgs->PBBoundaryCAOHelp, SIGNAL(pressed()), this, SLOT(PushBoundaryCAOHelp()) );
204   connect( myArgs->CBBoundaryD,       SIGNAL(stateChanged(int)), this, SLOT(SetBoundaryD()));
205   connect( myArgs->PBBoundaryDiNew,   SIGNAL(pressed()), this, SLOT(PushBoundaryDiNew()));
206   connect( myArgs->PBBoundaryDiEdit,  SIGNAL(pressed()), this, SLOT(PushBoundaryDiEdit()) );
207   connect( myArgs->PBBoundaryDiHelp,  SIGNAL(pressed()), this, SLOT(PushBoundaryDiHelp()) );
208   connect( myArgs->CBBoundaryA,       SIGNAL(stateChanged(int)), this, SLOT(SetBoundaryA()));
209   connect( myArgs->PBBoundaryAnNew,   SIGNAL(pressed()), this, SLOT(PushBoundaryAnNew()));
210   connect( myArgs->PBBoundaryAnEdit,  SIGNAL(pressed()), this, SLOT(PushBoundaryAnEdit()) );
211   connect( myArgs->PBBoundaryAnHelp,  SIGNAL(pressed()), this, SLOT(PushBoundaryAnHelp()) );
212
213   connect( buttonOk,       SIGNAL(pressed()), this, SLOT(PushOnOK()));
214   connect( buttonApply,    SIGNAL(pressed()), this, SLOT(PushOnApply()));
215   connect( buttonCancel,   SIGNAL(pressed()), this, SLOT(close()));
216   connect( buttonHelp,     SIGNAL(pressed()), this, SLOT(PushOnHelp()));
217
218   connect(myArgs, SIGNAL(updateSelection()), this, SLOT(updateSelection()));
219   connect(myArgs, SIGNAL(toExportMED(const char*)), this, SLOT(exportMED(const char*)));
220 }
221
222 //=================================================================================
223 // function : InitBoundarys
224 // purpose  : Initialisation des menus avec les frontieres deja enregistrees
225 //=================================================================================
226 void SMESHGUI_HomardAdaptDlg::InitBoundarys()
227 {
228   MESSAGE("InitBoundarys");
229   //myArgs->TWBoundary->clearContents();
230   //myArgs->TWBoundary->clear();
231   // Pour les frontieres analytiques : la colonne des groupes
232   SMESHHOMARD::ListGroupType_var _listeGroupesCas = myCase->GetGroups();
233   QTableWidgetItem *__colItem = new QTableWidgetItem();
234   __colItem->setText(QApplication::translate("CreateCase", "", 0));
235   myArgs->TWBoundary->setHorizontalHeaderItem(0, __colItem);
236   for ( int i = 0; i < (int)_listeGroupesCas->length(); i++ ) {
237     myArgs->TWBoundary->insertRow(i);
238     myArgs->TWBoundary->setItem( i, 0, new QTableWidgetItem(QString((_listeGroupesCas)[i]).trimmed()));
239     myArgs->TWBoundary->item( i, 0 )->setFlags(Qt::ItemIsEnabled |Qt::ItemIsSelectable );
240   }
241   // Pour les frontieres CAO : la liste a saisir
242   // Pour les frontieres discretes : la liste a saisir
243   // Pour les frontieres analytiques : les colonnes de chaque frontiere
244   SMESHHOMARD::HOMARD_Boundary_var myBoundary ;
245   SMESHHOMARD::listeBoundarys_var  mesBoundarys = myHomardGen->GetAllBoundarysName();
246   //MESSAGE("Nombre de frontieres enregistrees : "<<mesBoundarys->length());
247   for (int i=0; i < (int)mesBoundarys->length(); i++) {
248     myBoundary = myHomardGen->GetBoundary(mesBoundarys[i]);
249     int type_obj = myBoundary->GetType() ;
250     if ( type_obj==-1 )     { myArgs->CBBoundaryCAO->addItem(QString(mesBoundarys[i])); }
251     else if ( type_obj==0 ) { myArgs->CBBoundaryDi->addItem(QString(mesBoundarys[i])); }
252     else                    { AddBoundaryAn(QString(mesBoundarys[i])); }
253   }
254   // Ajustement
255   myArgs->TWBoundary->resizeColumnsToContents();
256   myArgs->TWBoundary->resizeRowsToContents();
257   myArgs->TWBoundary->clearSelection();
258 }
259
260 //=================================================================================
261 // function : CheckCase
262 // purpose  : 
263 //=================================================================================
264 bool SMESHGUI_HomardAdaptDlg::CheckCase(bool fixCase)
265 {
266   MESSAGE("CheckCase");
267
268   QString aWorkingDir = myAdvOpt->workingDirectoryLineEdit->text().trimmed();
269   if (aWorkingDir == QString("")) {
270     QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
271                               QObject::tr("HOM_CASE_DIRECTORY_1") );
272     return false;
273   }
274
275   if (CHDIR(aWorkingDir.toStdString().c_str()) != 0) {
276     QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
277                               QObject::tr("HOM_CASE_DIRECTORY_3") );
278     return false;
279   }
280
281   QString aMeshName, aFileName;
282   if (myArgs->myInMedFileRadio->isChecked()) {
283     aFileName = myArgs->mySelectInMedFileLineEdit->text().trimmed();
284     if (aFileName == QString("")) {
285       QMessageBox::critical(0, QObject::tr("HOM_ERROR"), QObject::tr("HOM_CASE_MESH"));
286       return false;
287     }
288
289     // In mesh name
290     aMeshName = SMESH_HOMARD_QT_COMMUN::LireNomMaillage(aFileName);
291     if (aMeshName == "") {
292       QMessageBox::critical(0, QObject::tr("HOM_ERROR"), QObject::tr("HOM_MED_FILE_2"));
293       return false;
294     }
295   }
296   else {
297     aMeshName = myArgs->myInBrowserObject->text();
298     if (aMeshName == "" || myMesh->_is_nil()) {
299       QMessageBox::critical(0, QObject::tr("HOM_ERROR"),
300                             QObject::tr("Mesh object is not selected"));
301       return false;
302     }
303   }
304
305   // On verifie qu'un groupe n'est pas associe a deux frontieres differentes
306   if (myArgs->CBBoundaryA->isChecked()) {
307     QStringList ListeGroup;
308     QString NomGroup;
309     int nbcol = myArgs->TWBoundary->columnCount();
310     int nbrow = myArgs->TWBoundary->rowCount();
311     for ( int col=1; col< nbcol; col++) {
312       for ( int row=0; row< nbrow; row++) {
313         if ( myArgs->TWBoundary->item( row, col )->checkState() ==  Qt::Checked ) {
314           // Group name
315           NomGroup = QString(myArgs->TWBoundary->item(row, 0)->text()) ;
316           for ( int nugr = 0 ; nugr < ListeGroup.size(); nugr++) {
317             if ( NomGroup == ListeGroup[nugr] ) {
318               QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
319                                         QObject::tr("HOM_CASE_GROUP").arg(NomGroup) );
320               return false;
321             }
322           }
323           ListeGroup.insert(0, NomGroup );
324         }
325       }
326     }
327   }
328
329   if (!fixCase) return true;
330
331   // Creation du cas
332   if (myCase->_is_nil()) {
333     try {
334       if (myArgs->myInMedFileRadio->isChecked()) {
335         // create case from MED file
336         myCase = myHomardGen->CreateCase
337           (CORBA::string_dup(aMeshName.toStdString().c_str()),
338            CORBA::string_dup(aFileName.toStdString().c_str()),
339            aWorkingDir.toStdString().c_str());
340       }
341       else {
342         // create case from SMESH_Mesh
343         myCase = myHomardGen->CreateCaseOnMesh
344           (CORBA::string_dup(aMeshName.toStdString().c_str()),
345            myMesh,
346            aWorkingDir.toStdString().c_str());
347       }
348     }
349     catch( SALOME::SALOME_Exception& S_ex ) {
350       QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
351                              QObject::tr(CORBA::string_dup(S_ex.details.text)) );
352       return false;
353     }
354     // Prevent changing case data
355     myArgs->myInMedFileRadio->setEnabled(false);
356     myArgs->myInBrowserRadio->setEnabled(false);
357     myArgs->mySelectInMedFileLineEdit->setReadOnly(true);
358     myArgs->mySelectInMedFileButton->setEnabled(false);
359     myArgs->myInBrowserObject->setReadOnly(true);
360     myAdvOpt->workingDirectoryLineEdit->setReadOnly(true);
361     myAdvOpt->workingDirectoryPushButton->setEnabled(false);
362     InitBoundarys();
363   }
364
365   // Repertoire et type
366   myCase->SetConfType(myArgs->RBConforme->isChecked() ? 0 : 1);
367
368   // Menage des eventuelles frontieres deja enregistrees
369   myCase->SupprBoundaryGroup();
370
371   return true;
372 }
373
374 //=================================================================================
375 // function : PushOnApply
376 // purpose  : 
377 //=================================================================================
378 bool SMESHGUI_HomardAdaptDlg::PushOnApply()
379 {
380   MESSAGE("PushOnApply");
381
382   // Check data, create Case if not yet
383   if (!CheckCase(true))
384     return false;
385
386   MESSAGE("PushOnApply: *** aaajfa *** 12");
387
388   // Create boundaries
389   if (myArgs->RBBoundaryCAO->isChecked()) {
390     QString monBoundaryCAOName = myArgs->CBBoundaryCAO->currentText();
391     if (monBoundaryCAOName != "" ) {
392       myCase->AddBoundary(monBoundaryCAOName.toStdString().c_str());
393     }
394   }
395   if (myArgs->CBBoundaryD->isChecked()) {
396     QString monBoundaryDiName = myArgs->CBBoundaryDi->currentText();
397     if (monBoundaryDiName != "" ) {
398       myCase->AddBoundary(monBoundaryDiName.toStdString().c_str());
399     }
400   }
401   if (myArgs->CBBoundaryA->isChecked()) {
402     QString NomGroup;
403     int nbcol = myArgs->TWBoundary->columnCount();
404     int nbrow = myArgs->TWBoundary->rowCount();
405     for ( int col = 1; col < nbcol; col++) {
406       for ( int row = 0; row < nbrow; row++) {
407         if ( myArgs->TWBoundary->item( row, col )->checkState() == Qt::Checked ) {
408           // Nom du groupe
409           NomGroup = QString(myArgs->TWBoundary->item(row, 0)->text()) ;
410           // Nom de la frontiere
411           QTableWidgetItem *__colItem = myArgs->TWBoundary->horizontalHeaderItem(col);
412           myCase->AddBoundaryGroup(QString(__colItem->text()).toStdString().c_str(),
413                                    NomGroup.toStdString().c_str());
414         }
415       }
416     }
417   }
418   MESSAGE("PushOnApply: *** aaajfa *** 13");
419
420   // Output MED and MESH parameters
421   myHomardGen->SetKeepMedOUT(myArgs->myOutMedFileChk->isChecked());
422   myHomardGen->SetPublishMeshOUT(myArgs->myOutPublishChk->isChecked());
423   QString anOutMeshName = myArgs->myOutMeshNameLineEdit->text();
424   if (anOutMeshName.isEmpty()) anOutMeshName = "DEFAULT_MESH_NAME";
425   myHomardGen->SetMeshNameOUT(anOutMeshName.toStdString().c_str());
426
427   std::string aMeshFileOUT;
428   if (myArgs->myOutMedFileChk->isChecked()) {
429     QString anOutMed = myArgs->mySelectOutMedFileLineEdit->text();
430     if (anOutMed.isEmpty()) {
431       // store in working directory and with default name
432       QString aWorkingDir = myAdvOpt->workingDirectoryLineEdit->text().trimmed();
433       QFileInfo aFileInfo (QDir(aWorkingDir), "Uniform_01_R.med");
434       anOutMed = aFileInfo.absoluteFilePath();
435       // show it
436       myArgs->mySelectOutMedFileLineEdit->setText(anOutMed);
437     }
438     else {
439       QFileInfo aFileInfo (anOutMed);
440       anOutMed = aFileInfo.absoluteFilePath();
441     }
442     aMeshFileOUT = anOutMed.toStdString();
443   }
444   else {
445     // Set file name without path for it to be created in current directory
446     // (it will be iteration's dir, and it will be destroyed after)
447     aMeshFileOUT = "Uniform_01_R.med";
448   }
449   myHomardGen->SetMeshFileOUT(aMeshFileOUT.c_str());
450
451   // Advanced options
452   myHomardGen->SetVerboseLevel(myAdvOpt->verboseLevelSpin->value());
453   myHomardGen->SetKeepWorkingFiles(myAdvOpt->keepWorkingFilesCheck->isChecked());
454   myHomardGen->SetLogInFile(myAdvOpt->logInFileCheck->isChecked());
455   myHomardGen->SetRemoveLogOnSuccess(myAdvOpt->removeLogOnSuccessCheck->isChecked());
456
457   // Log file
458   if (myAdvOpt->logInFileCheck->isChecked()) {
459     // Write log file in the working dir
460     QString aLogBaseName;
461     if (myArgs->myInMedFileRadio->isChecked()) {
462       // Name of log file will be "<name_of_input_med_file>_Uniform_R.log"
463       QString aMedFileIn = myArgs->mySelectInMedFileLineEdit->text().trimmed();
464       QFileInfo aFileInfoIn (aMedFileIn);
465       aLogBaseName = aFileInfoIn.fileName();
466     }
467     else {
468       // Name of log file will be "SMESH_Mesh_<name_of_input_mesh>_Uniform_R.log"
469       aLogBaseName = "SMESH_Mesh_";
470       aLogBaseName += myArgs->myInBrowserObject->text();
471     }
472     QString aWorkingDir = myAdvOpt->workingDirectoryLineEdit->text().trimmed();
473     QFileInfo aFileInfo (QDir(aWorkingDir), aLogBaseName + "_Uniform_R.log");
474     QString anOutLog = aFileInfo.absoluteFilePath();
475     MESSAGE("myHomardGen->SetLogFile(" << anOutLog.toStdString().c_str() << ")");
476     myHomardGen->SetLogFile(anOutLog.toStdString().c_str());
477   }
478   MESSAGE("PushOnApply: *** aaajfa *** 14");
479
480   // Compute and publish
481   bool isSuccess = true;
482   try {
483     isSuccess = myHomardGen->Compute() == 0;
484   }
485   catch( SALOME::SALOME_Exception& S_ex ) {
486     QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
487                            QObject::tr(CORBA::string_dup(S_ex.details.text)) );
488     isSuccess = false;
489   }
490   MESSAGE("PushOnApply: *** aaajfa *** 15");
491
492   // Update Object Browser
493   if (isSuccess) {
494     SMESHGUI::GetSMESHGUI()->updateObjBrowser();
495
496     // Clean case, as it is deleted after successful Compute
497     myCase = SMESHHOMARD::HOMARD_Cas::_nil();
498   }
499
500   // Enable new case data selection
501   myArgs->myInMedFileRadio->setEnabled(true);
502   myArgs->myInBrowserRadio->setEnabled(true);
503   myArgs->mySelectInMedFileLineEdit->setReadOnly(false);
504   //myArgs->mySelectInMedFileButton->hide();
505   myArgs->mySelectInMedFileButton->setEnabled(true);
506   myArgs->myInBrowserObject->setReadOnly(false);
507   myAdvOpt->workingDirectoryLineEdit->setReadOnly(false);
508   myAdvOpt->workingDirectoryPushButton->setEnabled(true);
509
510   MESSAGE("PushOnApply: *** aaajfa *** THE END");
511   return isSuccess;
512 }
513
514 //=================================================================================
515 // function : PushOnOK
516 // purpose  : 
517 //=================================================================================
518 void SMESHGUI_HomardAdaptDlg::PushOnOK()
519 {
520   bool bOK = PushOnApply();
521   if ( bOK ) this->close();
522 }
523
524 void SMESHGUI_HomardAdaptDlg::PushOnHelp()
525 {
526   //SMESH::ShowHelpFile(QString("gui_create_case.html"));
527   SMESH::ShowHelpFile("adaptation.html#_homard_adapt_anchor");
528 }
529
530 void SMESHGUI_HomardAdaptDlg::updateSelection()
531 {
532   LightApp_SelectionMgr *selMgr = SMESHGUI::selectionMgr();
533   disconnect(selMgr, 0, this, 0);
534   selMgr->clearFilters();
535
536   if (!myArgs->myInBrowserRadio->isChecked())
537     return;
538
539   SMESH::SetPointRepresentation(false);
540   if (SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow())
541     aViewWindow->SetSelectionMode(ActorSelection);
542   if (myArgs->myInBrowserRadio->isChecked()) {
543     connect(selMgr, SIGNAL(currentSelectionChanged()), this, SLOT(selectionChanged()));
544     selectionChanged();
545   }
546 }
547
548 void SMESHGUI_HomardAdaptDlg::selectionChanged()
549 {
550   if (!myArgs->myInBrowserRadio->isChecked())
551     return;
552
553   LightApp_SelectionMgr *selMgr = SMESHGUI::selectionMgr();
554
555   // get selected mesh
556   SALOME_ListIO aList;
557   selMgr->selectedObjects(aList);
558   QString aMeshName = "";
559
560   if (aList.Extent() == 1) {
561     Handle(SALOME_InteractiveObject) IO = aList.First();
562     myMesh = SMESH::GetMeshByIO(IO);
563     SMESH::GetNameOfSelectedIObjects(selMgr, aMeshName);
564     if (aMeshName.isEmpty()) aMeshName = " ";
565     else                     aMeshName = aMeshName.trimmed();
566   }
567   else {
568     myMesh = SMESH::SMESH_Mesh::_nil();
569   }
570
571   myArgs->myInBrowserObject->setText(aMeshName);
572
573   // Out mesh name default value
574   // TODO: add some suffix? "_R" or "_UnifRefin", or "_Uniform_01_R"
575   myArgs->myOutMeshNameLineEdit->setText(aMeshName);
576
577   // Output med file default value
578   // Construct it from Input mesh name and working directory
579   //if (myArgs->myOutMedFileChk->isChecked()) {
580   if (aMeshName.isEmpty()) {
581     myArgs->mySelectOutMedFileLineEdit->setText("");
582   }
583   else {
584     QString aWorkingDir = myAdvOpt->workingDirectoryLineEdit->text().trimmed();
585     QFileInfo aFileInfo (QDir(aWorkingDir), aMeshName + QString("_Uniform_01_R.med"));
586     for (int ii = 1; aFileInfo.exists(); ii++) {
587       QString anUniqueName = QString("%1_Uniform_01_R_%2.med").arg(aMeshName).arg(ii);
588       aFileInfo.setFile(QDir(aWorkingDir), anUniqueName);
589     }
590     myArgs->mySelectOutMedFileLineEdit->setText(aFileInfo.absoluteFilePath());
591   }
592   //}
593 }
594
595 void SMESHGUI_HomardAdaptDlg::SetFileName()
596 {
597   // Input med file
598   QString fileName0 = myArgs->mySelectInMedFileLineEdit->text().trimmed();
599   QString fileName = SMESH_HOMARD_QT_COMMUN::PushNomFichier(false, QString("med"));
600   if (fileName.isEmpty()) {
601     fileName = fileName0;
602     if (fileName.isEmpty()) return;
603   }
604   QFileInfo aFileInInfo (fileName);
605   fileName = aFileInInfo.absoluteFilePath();
606   myArgs->mySelectInMedFileLineEdit->setText(fileName);
607
608   // Out mesh name default value
609   // TODO: add some suffix? "_R" or "_UnifRefin", or "_Uniform_01_R"
610   QString aMeshName = SMESH_HOMARD_QT_COMMUN::LireNomMaillage(fileName);
611   myArgs->myOutMeshNameLineEdit->setText(aMeshName);
612
613   // Output med file default value
614   // Construct it from Input med file name and path
615   //if (myArgs->myOutMedFileChk->isChecked()) {
616   std::string fname = fileName.toStdString();
617   size_t lastdot = fname.find_last_of(".");
618   if (lastdot != std::string::npos)
619     fname = fname.substr(0, lastdot);
620   QString fileNameOut = fname.c_str();
621   QFileInfo aFileInfo (fileNameOut + QString("_Uniform_01_R.med"));
622   for (int ii = 1; aFileInfo.exists(); ii++) {
623     QString anUniqueName = QString("%1_Uniform_01_R_%2.med").arg(fileNameOut).arg(ii);
624     aFileInfo.setFile(anUniqueName);
625   }
626   myArgs->mySelectOutMedFileLineEdit->setText(aFileInfo.absoluteFilePath());
627   //}
628
629   // Check data
630   CheckCase(false);
631 }
632
633 // ------------------------------------------------------------------------
634 void SMESHGUI_HomardAdaptDlg::SetBoundaryNo()
635 {
636   myArgs->GBBoundaryC->setVisible(0);
637   myArgs->GBBoundaryN->setVisible(0);
638   adjustSize();
639 }
640
641 // ------------------------------------------------------------------------
642 void SMESHGUI_HomardAdaptDlg::SetBoundaryCAO()
643 {
644   myArgs->GBBoundaryC->setVisible(1);
645   myArgs->GBBoundaryN->setVisible(0);
646   adjustSize();
647 }
648 // ------------------------------------------------------------------------
649 void SMESHGUI_HomardAdaptDlg::SetBoundaryNonCAO()
650 {
651   myArgs->GBBoundaryC->setVisible(0);
652   myArgs->GBBoundaryN->setVisible(1);
653   adjustSize();
654 }
655 // ------------------------------------------------------------------------
656 void SMESHGUI_HomardAdaptDlg::AddBoundaryCAO(QString newBoundary)
657 // ------------------------------------------------------------------------
658 {
659   myArgs->CBBoundaryCAO->insertItem(0,newBoundary);
660   myArgs->CBBoundaryCAO->setCurrentIndex(0);
661 }
662 // ------------------------------------------------------------------------
663 void SMESHGUI_HomardAdaptDlg::PushBoundaryCAONew()
664 // ------------------------------------------------------------------------
665 {
666    SMESH_CreateBoundaryCAO *BoundaryDlg = new SMESH_CreateBoundaryCAO
667      (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), "Case_1", "");
668    BoundaryDlg->show();
669 }
670 // ------------------------------------------------------------------------
671 void SMESHGUI_HomardAdaptDlg::PushBoundaryCAOEdit()
672 // ------------------------------------------------------------------------
673 {
674   if (myArgs->CBBoundaryCAO->currentText() == QString(""))  return;
675   SMESH_EditBoundaryCAO *BoundaryDlg = new SMESH_EditBoundaryCAO
676     (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen),
677      "Case_1", myArgs->CBBoundaryCAO->currentText());
678   BoundaryDlg->show();
679 }
680
681 // ------------------------------------------------------------------------
682 void SMESHGUI_HomardAdaptDlg::PushBoundaryCAOHelp()
683 {
684   SMESH::ShowHelpFile(QString("gui_create_boundary.html"));
685 }
686
687 // ------------------------------------------------------------------------
688 void SMESHGUI_HomardAdaptDlg::SetBoundaryD()
689 {
690   MESSAGE("Debut de SetBoundaryD ");
691   if (myArgs->CBBoundaryD->isChecked()) {
692     bool bOK = CheckCase(true);
693     if (bOK) {
694       myArgs->GBBoundaryD->setVisible(1);
695     }
696     else {
697       myArgs->GBBoundaryD->setVisible(0);
698       myArgs->CBBoundaryD->setChecked(0);
699       myArgs->CBBoundaryD->setCheckState(Qt::Unchecked);
700     }
701   }
702   else {
703     myArgs->GBBoundaryD->setVisible(0);
704   }
705
706   //myArgs->mySelectInMedFileLineEdit->setReadOnly(true);
707   //myArgs->mySelectInMedFileButton->hide();
708
709   adjustSize();
710 }
711 // ------------------------------------------------------------------------
712 void SMESHGUI_HomardAdaptDlg::AddBoundaryDi(QString newBoundary)
713 // ------------------------------------------------------------------------
714 {
715   myArgs->CBBoundaryDi->insertItem(0,newBoundary);
716   myArgs->CBBoundaryDi->setCurrentIndex(0);
717 }
718 // ------------------------------------------------------------------------
719 void SMESHGUI_HomardAdaptDlg::PushBoundaryDiNew()
720 // ------------------------------------------------------------------------
721 {
722    SMESH_CreateBoundaryDi *BoundaryDlg = new SMESH_CreateBoundaryDi(this, true,
723                 SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), "Case_1", "");
724    BoundaryDlg->show();
725 }
726 // ------------------------------------------------------------------------
727 void SMESHGUI_HomardAdaptDlg::PushBoundaryDiEdit()
728 // ------------------------------------------------------------------------
729 {
730   if (myArgs->CBBoundaryDi->currentText() == QString(""))  return;
731   SMESH_EditBoundaryDi *BoundaryDlg = new SMESH_EditBoundaryDi
732     (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen),
733      "Case_1", myArgs->CBBoundaryDi->currentText());
734   BoundaryDlg->show();
735 }
736
737 // ------------------------------------------------------------------------
738 void SMESHGUI_HomardAdaptDlg::PushBoundaryDiHelp()
739 {
740   SMESH::ShowHelpFile(QString("gui_create_boundary.html"));
741   //std::string LanguageShort = myHomardGen->GetLanguageShort();
742   //HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html"), QString("frontiere-discrete"), QString(LanguageShort.c_str()));
743 }
744
745 // ------------------------------------------------------------------------
746 void SMESHGUI_HomardAdaptDlg::SetBoundaryA()
747 {
748   MESSAGE("Debut de SetBoundaryA ");
749   if (myArgs->CBBoundaryA->isChecked()) {
750     bool bOK = CheckCase(true);
751     if (bOK) {
752       myArgs->GBBoundaryA->setVisible(1);
753     }
754     else {
755       myArgs->GBBoundaryA->setVisible(0);
756       myArgs->CBBoundaryA->setChecked(0);
757       myArgs->CBBoundaryA->setCheckState(Qt::Unchecked);
758     }
759   }
760   else {
761     myArgs->GBBoundaryA->setVisible(0);
762   }
763
764   //myArgs->mySelectInMedFileLineEdit->setReadOnly(true);
765   //myArgs->mySelectInMedFileButton->hide();
766
767   adjustSize();
768 }
769 // ------------------------------------------------------------------------
770 void SMESHGUI_HomardAdaptDlg::AddBoundaryAn(QString newBoundary)
771 // ------------------------------------------------------------------------
772 {
773   MESSAGE("Debut de AddBoundaryAn ");
774 // Ajout d'une nouvelle colonne
775   int nbcol = myArgs->TWBoundary->columnCount();
776 //   MESSAGE("nbcol " <<  nbcol);
777   nbcol += 1 ;
778   myArgs->TWBoundary->setColumnCount ( nbcol ) ;
779   QTableWidgetItem *__colItem = new QTableWidgetItem();
780   __colItem->setText(QApplication::translate("CreateCase", newBoundary.toStdString().c_str(), 0));
781   myArgs->TWBoundary->setHorizontalHeaderItem(nbcol-1, __colItem);
782 /*  TWBoundary->horizontalHeaderItem(nbcol-1)->setFlags( Qt::ItemIsSelectable|Qt::ItemIsEnabled );*/
783 // Chaque case est a cocher
784   int nbrow = myArgs->TWBoundary->rowCount();
785 //   MESSAGE("nbrow " <<  nbrow);
786   for ( int i = 0; i < nbrow; i++ )
787   {
788     myArgs->TWBoundary->setItem( i, nbcol-1, new QTableWidgetItem( QString ("") ) );
789     myArgs->TWBoundary->item( i, nbcol-1 )->setFlags( 0 );
790     myArgs->TWBoundary->item( i, nbcol-1 )->setFlags( Qt::ItemIsUserCheckable|Qt::ItemIsEnabled  );
791     myArgs->TWBoundary->item( i, nbcol-1 )->setCheckState( Qt::Unchecked );
792   }
793   myArgs->TWBoundary->resizeColumnToContents(nbcol-1);
794 //   TWBoundary->resizeRowsToContents();
795 //   MESSAGE("Fin de AddBoundaryAn ");
796 }
797 // ------------------------------------------------------------------------
798 void SMESHGUI_HomardAdaptDlg::PushBoundaryAnNew()
799 // ------------------------------------------------------------------------
800 {
801    SMESH_CreateBoundaryAn *BoundaryDlg = new SMESH_CreateBoundaryAn
802      (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), "Case_1");
803    BoundaryDlg->show();
804 }
805 // ------------------------------------------------------------------------
806 void SMESHGUI_HomardAdaptDlg::PushBoundaryAnEdit()
807 // ------------------------------------------------------------------------
808 {
809   QString nom="";
810   int nbcol = myArgs->TWBoundary->columnCount();
811   for ( int i = 1; i < nbcol; i++ ) {
812     QTableWidgetItem *__colItem = new QTableWidgetItem();
813     __colItem = myArgs->TWBoundary->horizontalHeaderItem(i);
814     nom = QString(__colItem->text()) ;
815     MESSAGE("nom "<<nom.toStdString().c_str());
816     if (nom != QString("")) {
817       SMESH_EditBoundaryAn *BoundaryDlg = new SMESH_EditBoundaryAn
818         (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), "Case_1", nom);
819       BoundaryDlg->show();
820     }
821   }
822 }
823 // ------------------------------------------------------------------------
824 void SMESHGUI_HomardAdaptDlg::PushBoundaryAnHelp()
825 // ------------------------------------------------------------------------
826 {
827   SMESH::ShowHelpFile(QString("gui_create_boundary.html"));
828   //std::string LanguageShort = myHomardGen->GetLanguageShort();
829   //HOMARD_UTILS::PushOnHelp(QString("gui_create_boundary.html"), QString("frontiere-analytique"), QString(LanguageShort.c_str()));
830 }
831
832 //=================================================================================
833 // function : SMESHGUI_HomardAdaptArguments()
834 // purpose  :
835 //=================================================================================
836 SMESHGUI_HomardAdaptArguments::SMESHGUI_HomardAdaptArguments(QWidget* parent)
837   : QWidget(parent)
838 {
839   setupUi(this);
840 }
841
842 SMESHGUI_HomardAdaptArguments::~SMESHGUI_HomardAdaptArguments()
843 {
844 }
845
846 void SMESHGUI_HomardAdaptArguments::setupUi(QWidget *CreateCase)
847 {
848   // Mesh in
849   QGroupBox* aMeshIn    = new QGroupBox( tr( "MeshIn" ), this );
850   myInMedFileRadio      = new QRadioButton( tr( "MEDFile" ), aMeshIn );
851   myInBrowserRadio      = new QRadioButton( tr( "Browser" ), aMeshIn );
852   myInBrowserObject     = new QLineEdit( aMeshIn );
853   mySelectInMedFileButton   = new QPushButton("...", aMeshIn);
854   mySelectInMedFileLineEdit = new QLineEdit( aMeshIn );
855
856   QGridLayout* meshIn = new QGridLayout( aMeshIn );
857
858   meshIn->setMargin( 9 );
859   meshIn->setSpacing( 6 );
860   meshIn->addWidget( myInMedFileRadio,          0, 0, 1, 1 );
861   meshIn->addWidget( myInBrowserRadio,          0, 1, 1, 1 );
862   meshIn->addWidget( mySelectInMedFileButton,   1, 0, 1, 1 );
863   meshIn->addWidget( mySelectInMedFileLineEdit, 1, 1, 1, 2 );
864   meshIn->addWidget( myInBrowserObject,         0, 2, 1, 1 );
865
866   myInMeshGroup = new QButtonGroup( this );
867   myInMeshGroup->addButton( myInMedFileRadio, 0 );
868   myInMeshGroup->addButton( myInBrowserRadio, 1 );
869
870   // Mesh out
871   QGroupBox* aMeshOut = new QGroupBox( tr( "MeshOut" ), this );
872   QLabel* meshName = new QLabel(tr("MeshName"), aMeshOut);
873   QSpacerItem* secondHspacer = new QSpacerItem(100, 30);
874   myOutMeshNameLineEdit = new QLineEdit(aMeshOut);
875   myOutMedFileChk = new QCheckBox(tr("MEDFile"), aMeshOut);
876   mySelectOutMedFileButton = new QPushButton("...", aMeshOut);
877   mySelectOutMedFileLineEdit = new QLineEdit(aMeshOut);
878   myOutPublishChk = new QCheckBox(tr("Publish_MG_ADAPT"), aMeshOut);
879
880   QGridLayout* meshOut = new QGridLayout( aMeshOut );
881
882   meshOut->setMargin( 9 );
883   meshOut->setSpacing( 6 );
884   meshOut->addWidget( meshName,  0, 0, 1,1 );
885   meshOut->addItem( secondHspacer,  0, 1, 1, 1 );
886   meshOut->addWidget( myOutMeshNameLineEdit, 0, 2,1,1);
887   meshOut->addWidget( myOutMedFileChk,  1, 0,1,1 );
888   meshOut->addWidget( mySelectOutMedFileButton,  1, 1,1,1 );
889   meshOut->addWidget( mySelectOutMedFileLineEdit,  1, 2,1,1);
890   meshOut->addWidget( myOutPublishChk,  2, 0,1,1 );
891
892   // Conformity type
893   QGroupBox *GBTypeConf = new QGroupBox(tr("Conformity type"), CreateCase);
894   RBConforme = new QRadioButton(tr("Conformal"), GBTypeConf);
895   RBNonConforme = new QRadioButton(tr("Non conformal"), GBTypeConf);
896   RBConforme->setChecked(true);
897
898   QHBoxLayout *hboxLayout2 = new QHBoxLayout(GBTypeConf);
899   hboxLayout2->setSpacing(6);
900   hboxLayout2->setContentsMargins(9, 9, 9, 9);
901   hboxLayout2->addWidget(RBConforme);
902   hboxLayout2->addWidget(RBNonConforme);
903
904   // Boundary type
905   GBTypeBoun = new QGroupBox(tr("Boundary type"), CreateCase);
906
907   RBBoundaryNo     = new QRadioButton(tr("No boundary"), GBTypeBoun);
908   RBBoundaryCAO    = new QRadioButton(tr("CAO"), GBTypeBoun);
909   RBBoundaryNonCAO = new QRadioButton(tr("Non CAO"), GBTypeBoun);
910   RBBoundaryNo->setChecked(true);
911
912   //     CAO
913   GBBoundaryC = new QGroupBox(tr("CAO"), GBTypeBoun);
914   QSizePolicy sizePolicy1(QSizePolicy::Fixed, QSizePolicy::Fixed);
915   sizePolicy1.setHorizontalStretch(0);
916   sizePolicy1.setVerticalStretch(0);
917   sizePolicy1.setHeightForWidth(GBBoundaryC->sizePolicy().hasHeightForWidth());
918   GBBoundaryC->setSizePolicy(sizePolicy1);
919
920   CBBoundaryCAO = new QComboBox(GBBoundaryC);
921   CBBoundaryCAO->setSizeAdjustPolicy(QComboBox::AdjustToContents);
922
923   PBBoundaryCAONew = new QPushButton(tr("CAO_NEW_BTN"), GBBoundaryC);
924   PBBoundaryCAOEdit = new QPushButton(tr("CAO_EDIT_BTN"), GBBoundaryC);
925   PBBoundaryCAOHelp = new QPushButton(tr("CAO_HELP_BTN"), GBBoundaryC);
926
927   PBBoundaryCAONew->setAutoDefault(false);
928   PBBoundaryCAOEdit->setAutoDefault(false);
929   PBBoundaryCAOHelp->setAutoDefault(false);
930
931   _2 = new QGridLayout(GBBoundaryC);
932   _2->setSpacing(6);
933   _2->setContentsMargins(9, 9, 9, 9);
934   _2->addWidget(CBBoundaryCAO, 0, 0, 1, 1);
935   QSpacerItem* spacerItem3 = new QSpacerItem(40, 13, QSizePolicy::Fixed, QSizePolicy::Minimum);
936   _2->addItem(spacerItem3, 0, 1, 1, 1);
937   _2->addWidget(PBBoundaryCAONew, 0, 2, 1, 1);
938   _2->addWidget(PBBoundaryCAOEdit, 0, 3, 1, 1);
939   _2->addWidget(PBBoundaryCAOHelp, 0, 4, 1, 1);
940
941   //     Non CAO (discrete / analytical)
942   GBBoundaryN = new QGroupBox(GBTypeBoun);
943   CBBoundaryD = new QCheckBox(tr("BOUNDARY_DISCRETE"), GBBoundaryN);
944   CBBoundaryA = new QCheckBox(tr("BOUNDARY_ANALYTICAL"), GBBoundaryN);
945
946   //hboxLayout3 = new QHBoxLayout(GBBoundaryN);
947   //hboxLayout3->setSpacing(6);
948   //hboxLayout3->setContentsMargins(0, 0, 0, 0);
949   //hboxLayout3->addWidget(CBBoundaryD);
950   //hboxLayout3->addWidget(CBBoundaryA);
951
952   //          discrete
953   GBBoundaryD = new QGroupBox(tr("Discrete boundary"), GBBoundaryN);
954   sizePolicy1.setHeightForWidth(GBBoundaryD->sizePolicy().hasHeightForWidth());
955   GBBoundaryD->setSizePolicy(sizePolicy1);
956   gridLayout = new QGridLayout(GBBoundaryD);
957   gridLayout->setSpacing(6);
958   gridLayout->setContentsMargins(9, 9, 9, 9);
959   gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
960   CBBoundaryDi = new QComboBox(GBBoundaryD);
961   CBBoundaryDi->setObjectName(QString::fromUtf8("CBBoundaryDi"));
962   CBBoundaryDi->setSizeAdjustPolicy(QComboBox::AdjustToContents);
963
964   gridLayout->addWidget(CBBoundaryDi, 0, 0, 1, 1);
965
966   QSpacerItem* spacerItem5 = new QSpacerItem(40, 13, QSizePolicy::Fixed, QSizePolicy::Minimum);
967   gridLayout->addItem(spacerItem5, 0, 1, 1, 1);
968
969   PBBoundaryDiEdit = new QPushButton(GBBoundaryD);
970   PBBoundaryDiEdit->setObjectName(QString::fromUtf8("PBBoundaryDiEdit"));
971   PBBoundaryDiEdit->setAutoDefault(false);
972
973   gridLayout->addWidget(PBBoundaryDiEdit, 0, 3, 1, 1);
974
975   PBBoundaryDiHelp = new QPushButton(GBBoundaryD);
976   PBBoundaryDiHelp->setObjectName(QString::fromUtf8("PBBoundaryDiHelp"));
977   PBBoundaryDiHelp->setAutoDefault(false);
978
979   gridLayout->addWidget(PBBoundaryDiHelp, 0, 4, 1, 1);
980
981   PBBoundaryDiNew = new QPushButton(GBBoundaryD);
982   PBBoundaryDiNew->setAutoDefault(false);
983
984   gridLayout->addWidget(PBBoundaryDiNew, 0, 2, 1, 1);
985
986   //          analytical
987   GBBoundaryA = new QGroupBox(tr("Analytical boundary"), GBBoundaryN);
988   GBBoundaryA->setMinimumSize(QSize(548, 200));
989   formLayout = new QFormLayout(GBBoundaryA);
990   formLayout->setObjectName(QString::fromUtf8("formLayout"));
991   TWBoundary = new QTableWidget(GBBoundaryA);
992   if (TWBoundary->columnCount() < 1)
993     TWBoundary->setColumnCount(1);
994   QTableWidgetItem *__qtablewidgetitem = new QTableWidgetItem();
995   TWBoundary->setHorizontalHeaderItem(0, __qtablewidgetitem);
996   TWBoundary->setObjectName(QString::fromUtf8("TWBoundary"));
997   TWBoundary->setEditTriggers(QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked);
998   TWBoundary->setShowGrid(true);
999   TWBoundary->setRowCount(0);
1000   TWBoundary->setColumnCount(1);
1001
1002   formLayout->setWidget(0, QFormLayout::LabelRole, TWBoundary);
1003
1004   gridLayout1 = new QGridLayout();
1005   gridLayout1->setSpacing(6);
1006   gridLayout1->setContentsMargins(0, 0, 0, 0);
1007   gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
1008   PBBoundaryAnEdit = new QPushButton(GBBoundaryA);
1009   PBBoundaryAnEdit->setObjectName(QString::fromUtf8("PBBoundaryAnEdit"));
1010   PBBoundaryAnEdit->setAutoDefault(false);
1011
1012   gridLayout1->addWidget(PBBoundaryAnEdit, 1, 0, 1, 1);
1013
1014   PBBoundaryAnNew = new QPushButton(GBBoundaryA);
1015   PBBoundaryAnNew->setObjectName(QString::fromUtf8("PBBoundaryAnNew"));
1016   PBBoundaryAnNew->setAutoDefault(false);
1017
1018   gridLayout1->addWidget(PBBoundaryAnNew, 0, 0, 1, 1);
1019
1020   PBBoundaryAnHelp = new QPushButton(GBBoundaryA);
1021   PBBoundaryAnHelp->setObjectName(QString::fromUtf8("PBBoundaryAnHelp"));
1022   PBBoundaryAnHelp->setAutoDefault(false);
1023
1024   gridLayout1->addWidget(PBBoundaryAnHelp, 2, 0, 1, 1);
1025
1026   formLayout->setLayout(0, QFormLayout::FieldRole, gridLayout1);
1027
1028   // Boundary No Layout
1029   QGridLayout* aBoundaryNoLayout = new QGridLayout(GBBoundaryN);
1030   //aBoundaryNoLayout->addLayout(hboxLayout3, 0, 0);
1031   aBoundaryNoLayout->addWidget(CBBoundaryD, 0, 0);
1032   aBoundaryNoLayout->addWidget(CBBoundaryA, 0, 1);
1033   aBoundaryNoLayout->addWidget(GBBoundaryD, 1, 0, 1, 2);
1034   aBoundaryNoLayout->addWidget(GBBoundaryA, 2, 0, 1, 2);
1035
1036   // Boundary type Layout
1037   QGridLayout* aBoundTypeLayout = new QGridLayout(GBTypeBoun);
1038   aBoundTypeLayout->addWidget(RBBoundaryNo,     0, 0);
1039   aBoundTypeLayout->addWidget(RBBoundaryCAO,    0, 1);
1040   aBoundTypeLayout->addWidget(RBBoundaryNonCAO, 0, 2);
1041
1042   aBoundTypeLayout->addWidget(GBBoundaryC, 1, 0, 1, 3);
1043   aBoundTypeLayout->addWidget(GBBoundaryN, 2, 0, 1, 3);
1044
1045   // Arguments layout
1046   QGridLayout *argumentsLayout = new QGridLayout(CreateCase);
1047   argumentsLayout->addWidget(aMeshIn,     0, 0, 1, 3);
1048   argumentsLayout->addWidget(aMeshOut,    1, 0, 1, 3);
1049   argumentsLayout->addWidget(GBTypeConf,  2, 0, 1, 3);
1050   argumentsLayout->addWidget(GBTypeBoun,  3, 0, 1, 3);
1051   argumentsLayout->setColumnStretch( 1, 5 );
1052   argumentsLayout->setRowStretch( 4, 5 );
1053
1054   mySelectInMedFileButton->setText(QString());
1055   CBBoundaryD->setText(QApplication::translate("CreateCase", "Discrete boundary", nullptr));
1056   CBBoundaryA->setText(QApplication::translate("CreateCase", "Analytical boundary", nullptr));
1057   PBBoundaryCAOEdit->setText(QApplication::translate("CreateCase", "Edit", nullptr));
1058   PBBoundaryCAOHelp->setText(QApplication::translate("CreateCase", "Help", nullptr));
1059   PBBoundaryCAONew->setText(QApplication::translate("CreateCase", "New", nullptr));
1060   PBBoundaryDiEdit->setText(QApplication::translate("CreateCase", "Edit", nullptr));
1061   PBBoundaryDiHelp->setText(QApplication::translate("CreateCase", "Help", nullptr));
1062   PBBoundaryDiNew->setText(QApplication::translate("CreateCase", "New", nullptr));
1063   QTableWidgetItem *___qtablewidgetitem = TWBoundary->horizontalHeaderItem(0);
1064   ___qtablewidgetitem->setText(QApplication::translate("CreateCase", "a_virer", nullptr));
1065   PBBoundaryAnEdit->setText(QApplication::translate("CreateCase", "Edit", nullptr));
1066   PBBoundaryAnNew->setText(QApplication::translate("CreateCase", "New", nullptr));
1067   PBBoundaryAnHelp->setText(QApplication::translate("CreateCase", "Help", nullptr));
1068
1069   // Initial state
1070   myInMedFileRadio->setChecked( true );
1071   modeInChanged( MedFile );
1072   RBBoundaryNo->setChecked( true );
1073   //SetBoundaryNo();
1074
1075   myOutMedFileChk->setChecked(true);
1076   CBBoundaryCAO->setCurrentIndex(-1);
1077   CBBoundaryDi->setCurrentIndex(-1);
1078
1079   // Connections
1080   QMetaObject::connectSlotsByName(CreateCase);
1081   connect(myInMeshGroup,            SIGNAL(buttonClicked(int)), this, SLOT(modeInChanged(int)));
1082   connect(myOutMedFileChk,          SIGNAL(stateChanged(int)),  this, SLOT(onOutMedFileChk(int)));
1083   connect(myOutPublishChk,          SIGNAL(stateChanged(int)),  this, SLOT(onOutPublishChk(int)));
1084   connect(mySelectOutMedFileButton, SIGNAL(pressed()),          this, SLOT(onSelectOutMedFileButton()));
1085   emit updateSelection();
1086 }
1087
1088 void SMESHGUI_HomardAdaptArguments::modeInChanged( int theMode )
1089 {
1090   clear();
1091   if (theMode == MedFile) {
1092     mySelectInMedFileLineEdit->show();
1093     mySelectInMedFileButton->show();
1094     myInBrowserObject->hide();
1095   }
1096   else {
1097     mySelectInMedFileLineEdit->hide();
1098     mySelectInMedFileButton->hide();
1099     myInBrowserObject->show();
1100     emit updateSelection();
1101   }
1102 }
1103
1104 void SMESHGUI_HomardAdaptArguments::onSelectOutMedFileButton()
1105 {
1106   // Current value
1107   QString fileName0 = mySelectOutMedFileLineEdit->text().trimmed();
1108
1109   // Ask user for the new value
1110   QString filtre = QString("Med");
1111   filtre += QString(" files (*.") + QString("med") + QString(");;");
1112   QString fileName = QFileDialog::getSaveFileName(this, tr("SAVE_MED"), QString(""), filtre);
1113
1114   // Check the new value
1115   if (fileName.isEmpty()) fileName = fileName0;
1116
1117   QFileInfo aFileInfo (fileName);
1118   mySelectOutMedFileLineEdit->setText(aFileInfo.absoluteFilePath());
1119 }
1120
1121 void SMESHGUI_HomardAdaptArguments::clear()
1122 {
1123   mySelectInMedFileLineEdit->clear();
1124   myInBrowserObject->clear();
1125
1126   myOutMeshNameLineEdit->clear();
1127   mySelectOutMedFileLineEdit->clear();
1128 }
1129
1130 void SMESHGUI_HomardAdaptArguments::onOutMedFileChk(int state)
1131 {
1132   if (state == Qt::Checked) {
1133     mySelectOutMedFileButton->show();
1134     mySelectOutMedFileLineEdit->show();
1135     mySelectOutMedFileButton->setEnabled(true);
1136     mySelectOutMedFileLineEdit->setEnabled(true);
1137   }
1138   else {
1139     mySelectOutMedFileButton->setEnabled(false);
1140     mySelectOutMedFileLineEdit->setEnabled(false);
1141     myOutPublishChk->setChecked(true);
1142   }
1143 }
1144
1145 void SMESHGUI_HomardAdaptArguments::onOutPublishChk(int state)
1146 {
1147   if (state == Qt::Unchecked) {
1148     myOutMedFileChk->setChecked(true);
1149   }
1150 }
1151
1152 //////////////////////////////////////////
1153 // SMESHGUI_HomardAdaptAdvanced
1154 //////////////////////////////////////////
1155
1156 SMESHGUI_HomardAdaptAdvanced::SMESHGUI_HomardAdaptAdvanced( QWidget* parent, Qt::WindowFlags f )
1157   : QWidget( parent, f )
1158 {
1159   setupWidget();
1160   connect(workingDirectoryPushButton, SIGNAL(pressed()), this, SLOT(onWorkingDirectoryPushButton()));
1161 }
1162
1163 SMESHGUI_HomardAdaptAdvanced::~SMESHGUI_HomardAdaptAdvanced()
1164 {
1165 }
1166
1167 void SMESHGUI_HomardAdaptAdvanced::setupWidget()
1168 {
1169   if (this->objectName().isEmpty())
1170     this->setObjectName(QString(tr("MG-ADAPT-ADV")));
1171   this->resize(337, 369);
1172
1173   // Logs and debug
1174   logGroupBox = new QGroupBox(this);
1175   logGroupBox->setObjectName(QString("logGroupBox"));
1176
1177   QGridLayout* logsLayout = new QGridLayout(logGroupBox);
1178   logsLayout->setObjectName(QString("logsLayout"));
1179
1180   // Working directory + Verbose level layout
1181   QGridLayout* gridLayout = new QGridLayout();
1182   gridLayout->setObjectName(QString("gridLayout"));
1183
1184   // Working directory
1185   workingDirectoryLabel = new QLabel(logGroupBox);
1186   workingDirectoryLabel->setObjectName(QString("workingDirectoryLabel"));
1187
1188   gridLayout->addWidget(workingDirectoryLabel, 0, 0, 1, 1);
1189
1190   workingDirectoryLineEdit = new QLineEdit(logGroupBox);
1191   workingDirectoryLineEdit->setObjectName(QString("workingDirectoryLineEdit"));
1192
1193   gridLayout->addWidget(workingDirectoryLineEdit, 0, 1, 1, 1);
1194
1195   workingDirectoryPushButton = new QPushButton(logGroupBox);
1196   workingDirectoryPushButton->setObjectName(QString("workingDirectoryPushButton"));
1197
1198   gridLayout->addWidget(workingDirectoryPushButton, 0, 2, 1, 1);
1199
1200   // Verbose level
1201   verboseLevelLabel = new QLabel(logGroupBox);
1202   verboseLevelLabel->setObjectName(QString("verboseLevelLabel"));
1203
1204   gridLayout->addWidget(verboseLevelLabel, 1, 0, 1, 1);
1205
1206   verboseLevelSpin = new QSpinBox(logGroupBox);
1207   verboseLevelSpin->setObjectName(QString("verboseLevelSpin"));
1208
1209   gridLayout->addWidget(verboseLevelSpin, 1, 1, 1, 1);
1210
1211   logsLayout->addLayout(gridLayout, 0, 0, 1, 1);
1212
1213   // logInFileCheck + removeLogOnSuccessCheck
1214   QHBoxLayout* horizontalLayout = new QHBoxLayout();
1215   horizontalLayout->setObjectName(QString("horizontalLayout"));
1216
1217   // Log In File Check
1218   logInFileCheck = new QCheckBox(logGroupBox);
1219   logInFileCheck->setObjectName(QString("logInFileCheck"));
1220   logInFileCheck->setChecked(true);
1221
1222   horizontalLayout->addWidget(logInFileCheck);
1223
1224   // Remove Log On Success Check
1225   removeLogOnSuccessCheck = new QCheckBox(logGroupBox);
1226   removeLogOnSuccessCheck->setObjectName(QString("removeLogOnSuccessCheck"));
1227   removeLogOnSuccessCheck->setChecked(true);
1228
1229   horizontalLayout->addWidget(removeLogOnSuccessCheck);
1230
1231   logsLayout->addLayout(horizontalLayout, 1, 0, 1, 1);
1232
1233   // Keep Working Files Check
1234   keepWorkingFilesCheck = new QCheckBox(logGroupBox);
1235   keepWorkingFilesCheck->setObjectName(QString("keepWorkingFilesCheck"));
1236   keepWorkingFilesCheck->setAutoExclusive(false);
1237   keepWorkingFilesCheck->setChecked(false);
1238
1239   logsLayout->addWidget(keepWorkingFilesCheck, 2, 0, 1, 1);
1240 }
1241
1242 void SMESHGUI_HomardAdaptAdvanced::onWorkingDirectoryPushButton()
1243 {
1244   QString aWorkingDir = QFileDialog::getExistingDirectory();
1245   if (!(aWorkingDir.isEmpty())) workingDirectoryLineEdit->setText(aWorkingDir);
1246 }