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