From: eap Date: Mon, 22 Mar 2021 14:12:09 +0000 (+0300) Subject: #24009 EDF 22760 - integration of dev in SMESH: minor problems X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=4e4927c285492915cb84347f8ba28ff9b78e8c5d;p=modules%2Fsmesh.git #24009 EDF 22760 - integration of dev in SMESH: minor problems Homogenize file name --- diff --git a/src/SMESHGUI/CMakeLists.txt b/src/SMESHGUI/CMakeLists.txt index f7746071b..3030b9c86 100644 --- a/src/SMESHGUI/CMakeLists.txt +++ b/src/SMESHGUI/CMakeLists.txt @@ -148,7 +148,7 @@ SET(_moc_HEADERS SMESHGUI_IdPreview.h SMESHGUI_PreVisualObj.h SMESHGUI_MG_ADAPTDRIVER.h - MG_ADAPTGUI.h + SMESHGUI_MgAdaptDlg.h ) # header files / no moc processing @@ -265,7 +265,7 @@ SET(_other_SOURCES SMESHGUI_PreVisualObj.cxx SMESHGUI_IdPreview.cxx SMESHGUI_MG_ADAPTDRIVER.cxx - MG_ADAPTGUI.cxx + SMESHGUI_MgAdaptDlg.cxx ) # sources / to compile diff --git a/src/SMESHGUI/MG_ADAPTGUI.cxx b/src/SMESHGUI/MG_ADAPTGUI.cxx deleted file mode 100644 index 599639b98..000000000 --- a/src/SMESHGUI/MG_ADAPTGUI.cxx +++ /dev/null @@ -1,1344 +0,0 @@ -// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// file : MG_ADAPTGUI.cxx - -#include "MG_ADAPTGUI.h" - -#include "MED_Factory.hxx" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//#include - -const int SPACING = 6; // layout spacing -const int MARGIN = 9; // layout margin - -namespace -{ - - // ====================================================== - QString lireNomDimMaillage(QString aFile, int& meshdim) - // ======================================================== - { - QString nomMaillage = QString::null ; - - try { - while ( true ) - { - - MED::PWrapper aMed = MED::CrWrapperR( aFile.toUtf8().data() ); - MED::TInt numberOfMeshes = aMed->GetNbMeshes(); - - if (numberOfMeshes == 0 ) - { - QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"), - QObject::tr("MG_ADAPT_MED_FILE_2") ); - break ; - } - if (numberOfMeshes > 1 ) - { - QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"), - QObject::tr("MG_ADAPT_MED_FILE_3") ); - break ; - } - - MED::PMeshInfo aMeshInfo = aMed->GetPMeshInfo( 1 ); - nomMaillage = aMeshInfo->GetName().c_str(); - meshdim = (int) aMeshInfo->GetDim(); - - break ; - } - } - catch ( const SALOME::SALOME_Exception & S_ex ) - { - SalomeApp_Tools::QtCatchCorbaException(S_ex); - } - - return nomMaillage; - } - - // ======================================================================= - std::map GetListeChamps(QString aFile, bool errorMessage=true) - // ======================================================================= - { - // Il faut voir si plusieurs maillages - - std::map ListeChamp ; - - try - { - while ( true ) - { - MED::PWrapper aMed = MED::CrWrapperR( aFile.toUtf8().data() ); - MED::TInt jaux = aMed->GetNbFields(); - if (jaux < 1 ) - { - if(errorMessage) - { - QMessageBox::critical( 0, QObject::tr("_ERROR"), - QObject::tr("HOM_MED_FILE_5") ); - } - break ; - } - // nbofcstp inutile pour le moment - MED::PMeshInfo aMeshInfo = aMed->GetPMeshInfo( 1 ); - int nbofcstp = 1; - for( MED::TInt j=0;jGetPFieldInfo( aMeshInfo, j + 1 ); - ListeChamp.insert({ QString( aFiledInfo->GetName().c_str()), nbofcstp }); - } - break ; - } - } - catch ( const SALOME::SALOME_Exception & S_ex ) - { - SalomeApp_Tools::QtCatchCorbaException(S_ex); - } - - return ListeChamp; - } - - // ======================================================================= - std::string remove_extension(const std::string& filename) - // ======================================================================= - { - size_t lastdot = filename.find_last_of("."); - if (lastdot == std::string::npos) return filename; - return filename.substr(0, lastdot); - } -} - -//================================================================================= -// function : SMESHGUI_MgAdaptDlg() -// purpose : -//================================================================================= -SMESHGUI_MgAdaptDlg::SMESHGUI_MgAdaptDlg( SalomeApp_Module* theModule, SMESH::MG_ADAPT_ptr myModel, QWidget* parent, bool isCreation ) - : QDialog(parent), mySMESHGUI( theModule ) -{ - //~model = new MgAdapt(*myModel); - model = SMESH::MG_ADAPT::_duplicate(myModel); - model->Register(); - myData = model->getData(); - buildDlg(); - if (!isCreation) readParamsFromHypo(); -} - -void SMESHGUI_MgAdaptDlg::buildDlg() -{ - setModal( false ); - setAttribute( Qt::WA_DeleteOnClose, true ); - setWindowTitle( tr( "ADAPT_PREF_MG_ADAPT" ) ); - setSizeGripEnabled( true ); - - myTabWidget = new QTabWidget( this ); - - // Arguments - - myArgs = new SMESHGUI_MgAdaptArguments( myTabWidget ); - SMESH::string_array_var str = model->getOptionValuesStrVec(); - SMESH::string_array_var str2 = model->getCustomOptionValuesStrVec(); - std::vector s; - for (CORBA::ULong i = 0; i< str->length(); i++) s.push_back( str[i].in()); - for (CORBA::ULong j = str->length(); j< str2->length(); j++) s.push_back(str[ j - str->length() ].in() ); - //~str.insert( str.end(), str2.begin(), str2.end() ); - - myAdvOpt = new MgAdaptAdvWidget(myTabWidget, &s); - - /*int argsTab =*/ myTabWidget->addTab( myArgs, tr( "Args" ) ); - /*int advTab =*/ myTabWidget->addTab( myAdvOpt, tr( "ADVOP" ) ); - - myAdvOpt->workingDirectoryLabel ->setText (tr( "WORKING_DIR" )); - myAdvOpt->workingDirectoryPushButton ->setText (tr( "SELECT_DIR" )); - myAdvOpt->keepWorkingFilesCheck ->setText (tr( "KEEP_WORKING_FILES" )); - myAdvOpt->verboseLevelLabel ->setText (tr( "VERBOSE_LEVEL" )); - myAdvOpt->removeLogOnSuccessCheck ->setText (tr( "REMOVE_LOG_ON_SUCCESS" )); - myAdvOpt->logInFileCheck ->setText (tr( "LOG_IN_FILE" )); - myAdvOpt->logGroupBox ->setTitle(tr( "LOG_GROUP_TITLE" )); - - // buttons - QPushButton* buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), this); - buttonOk->setAutoDefault(false); - QPushButton* buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), this); - buttonApply->setAutoDefault(false); - QPushButton* buttonCancel = new QPushButton( tr( "SMESH_BUT_CANCEL" ), this ); - buttonCancel->setAutoDefault( false ); - QPushButton* buttonHelp = new QPushButton( tr( "SMESH_BUT_HELP" ), this ); - buttonHelp->setAutoDefault( false ); - - QHBoxLayout* btnLayout = new QHBoxLayout; - btnLayout->setSpacing( SPACING ); - btnLayout->setMargin( 0 ); - btnLayout->addWidget( buttonOk ); - btnLayout->addStretch( 10 ); - btnLayout->addWidget( buttonApply ); - btnLayout->addStretch( 10 ); - btnLayout->addWidget( buttonCancel ); - btnLayout->addStretch( 10 ); - btnLayout->addWidget( buttonHelp ); - - QVBoxLayout* l = new QVBoxLayout ( this ); - l->setMargin( MARGIN ); - l->setSpacing( SPACING ); - l->addWidget( myTabWidget ); - l->addStretch(); - l->addLayout( btnLayout ); - - connect( buttonOk, SIGNAL(pressed()), this, SLOT(PushOnOK())); - connect( buttonApply, SIGNAL(pressed()), this, SLOT(PushOnApply())); - connect( buttonCancel, SIGNAL(pressed()), this, SLOT(close())); - connect( buttonHelp, SIGNAL(pressed()), this, SLOT(PushOnHelp())); - - connect( myArgs, SIGNAL(meshDimSignal(ADAPTATION_MODE)), myAdvOpt, SLOT( onMeshDimChanged(ADAPTATION_MODE)) ); -} - - -//================================================================================= -// function : ~SMESHGUI_MgAdaptDlg() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_MgAdaptDlg::~SMESHGUI_MgAdaptDlg() -{ - //~delete model; -} - -//~void SMESHGUI_MgAdaptDlg::setModel(MgAdapt* mg) -//~{ - //~model = mg; -//~} -SMESH::MG_ADAPT_ptr SMESHGUI_MgAdaptDlg::getModel() const -{ - return model; -} -/*! -\brief Perform clean-up actions on the dialog box closing. -*/ -bool SMESHGUI_MgAdaptDlg::PushOnApply() -{ - bool ret = readParamsFromWidgets(); - return ret; -} -void SMESHGUI_MgAdaptDlg::PushOnOK() -{ - bool ret = PushOnApply(); - if ( ret ) reject(); -} -void SMESHGUI_MgAdaptDlg::reject() -{ - QDialog::reject(); -} -bool SMESHGUI_MgAdaptDlg::readParamsFromHypo( ) const -{ - bool ret = true; - myArgs->aMedfile->setChecked(myData->fromMedFile) ; - if (myData->fromMedFile) - { - - myArgs->myFileInDir = myData->myFileInDir; - myArgs->selectMedFileLineEdit->setText(QString(myData->myMeshFileIn)) ; - // myData->myInMeshName = // TODO - - } - else - { - myArgs->aBrowserObject->setText(QString(myData->myInMeshName)); - //~ myArgs->myFileInDir =""; // TODO - //~ myArgs->selectMedFileLineEdit->setText(); // TODO - } - myArgs->meshNameLineEdit->setText(QString(myData->myOutMeshName)); - myArgs->medFileCheckBox->setChecked(myData->myMeshOutMed); - - if(myData->myMeshOutMed) - { - myArgs->myFileOutDir = QString(myData->myFileOutDir); - myArgs->selectOutMedFileLineEdit->setText(myData->myMeshFileOut.in()); - } - else - { - myArgs->myFileOutDir = ""; //TODO - } - - myArgs->publishOut->setChecked(myData->myPublish); - - myArgs->localButton->setChecked(myData->myUseLocalMap); - myArgs->backgroundButton->setChecked(myData->myUseBackgroundMap); - myArgs->constantButton->setChecked(myData->myUseConstantValue); - - if (myData->myUseConstantValue) - { - myArgs->dvalue->setValue(myData->myConstantValue); - } - else - { - myArgs->dvalue->setValue(0.0); - } - - if (myData->myUseBackgroundMap) - { - - myArgs->myFileSizeMapDir = QString(myData->myFileSizeMapDir) ; - myArgs->selectMedFileBackgroundLineEdit->setText(QString(myData->myMeshFileBackground)); - } - else - { - myArgs->myFileSizeMapDir = ""; //TODO - myArgs->selectMedFileBackgroundLineEdit->setText(""); //TODO - } - - myArgs->fieldNameCmb->setCurrentText(QString(myData->myFieldName)); - myArgs->noTimeStep->setChecked(myData->myUseNoTimeStep); - myArgs->lastTimeStep->setChecked( myData->myUseLastTimeStep); - myArgs->chosenTimeStep->setChecked(myData->myUseChosenTimeStep); - if (myData->myUseChosenTimeStep) - { - myArgs->rankSpinBox->setValue(myData->myRank); - myArgs->timeStep->setValue(myData->myTimeStep); - } - - myAdvOpt->workingDirectoryLineEdit->setText(QString(myData->myWorkingDir)); - myAdvOpt->logInFileCheck->setChecked(myData->myPrintLogInFile); - - myAdvOpt->verboseLevelSpin->setValue(myData->myVerboseLevel); - myAdvOpt->removeLogOnSuccessCheck->setChecked(myData->myRemoveLogOnSuccess); - myAdvOpt->keepWorkingFilesCheck->setChecked(myData->myKeepFiles); - - return ret; - -} - -bool SMESHGUI_MgAdaptDlg::readParamsFromWidgets() -{ - bool ret = true ; - SMESH::MgAdaptHypothesisData data, *aData = &data; - while ( ret ) - { - // 1. Fichier du maillage de départ - aData->fromMedFile = myArgs->aMedfile->isChecked(); - if (aData->fromMedFile) - { - aData->myFileInDir = CORBA::string_dup(myArgs->myFileInDir.toUtf8().data()); - aData->myMeshFileIn = CORBA::string_dup(myArgs->selectMedFileLineEdit->text().toUtf8().data()); - // aData->myInMeshName = // TODO - } - else // TODO browser - { - QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"), - QObject::tr("MG_ADAPT_MED_FILE_4") ); - ret = false ; - break ; - // aData->myInMeshName = CORBA::string_dup(myArgs->aBrowserObject->text().toStdString().c_str()); - // aData->myFileInDir = CORBA::string_dup(myAdvOpt->workingDirectoryLineEdit->text().toStdString().c_str()); - // - // TCollection_AsciiString aGenericName = (char*)aData->myFileInDir; - // TCollection_AsciiString aGenericName2 = "MgAdapt_"; - // aGenericName2 += getpid(); - // aGenericName2 += "_"; - // aGenericName2 += Abs((Standard_Integer)(long) aGenericName.ToCString()); - // aGenericName2 += ".med"; - // aGenericName+=aGenericName2; - // emit myArgs->toExportMED(aGenericName.ToCString()); - // aData->myMeshFileIn = aGenericName2.ToCString(); - } - // 2. Fichier du maillage de sortie - aData->myOutMeshName = CORBA::string_dup(myArgs->meshNameLineEdit->text().toStdString().c_str()); - aData->myMeshOutMed = myArgs->medFileCheckBox->isChecked(); - if(aData->myMeshOutMed) - { - aData->myFileOutDir = CORBA::string_dup(myArgs->myFileOutDir.toUtf8().data()); - aData->myMeshFileOut = CORBA::string_dup(myArgs->selectOutMedFileLineEdit->text().toUtf8().data()); - } - else - { - aData->myMeshFileOut = ""; - } - aData->myPublish = myArgs->publishOut->isChecked(); - - // 3. Type de carte de tailles - aData->myUseLocalMap = myArgs->localButton->isChecked(); - aData->myUseBackgroundMap = myArgs->backgroundButton->isChecked(); - aData->myUseConstantValue = myArgs->constantButton->isChecked(); - // 3.1. Constante - if (aData->myUseConstantValue) - { - aData->myConstantValue = myArgs->dvalue->value(); - } - else - { - aData->myConstantValue = 0.0; - } - // 3.2. Arrière-plan - if (aData->myUseBackgroundMap) - { - aData->myFileSizeMapDir = CORBA::string_dup(myArgs->myFileSizeMapDir.toUtf8().data()); - aData->myMeshFileBackground = CORBA::string_dup(myArgs->selectMedFileBackgroundLineEdit->text().toUtf8().data()); - } - else - { - aData->myMeshFileBackground = ""; - } - - // 4. Le champ - if ( ! aData->myUseConstantValue ) - { - if ( strlen(myArgs->fieldNameCmb->currentText().toStdString().c_str()) == 0 ) - { - QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"), - QObject::tr("MG_ADAPT_MED_FILE_5") ); - ret = false ; - break ; - } - { - aData->myFieldName = CORBA::string_dup(myArgs->fieldNameCmb->currentText().toStdString().c_str()); - aData->myUseNoTimeStep = myArgs->noTimeStep->isChecked(); - aData->myUseLastTimeStep = myArgs->lastTimeStep->isChecked(); - aData->myUseChosenTimeStep = myArgs->chosenTimeStep->isChecked(); - if (aData->myUseChosenTimeStep) - { - aData->myRank = myArgs->rankSpinBox->value(); - aData->myTimeStep = myArgs->timeStep->value(); - } - } - } - - // 5. Options avancées - aData->myWorkingDir = CORBA::string_dup(myAdvOpt->workingDirectoryLineEdit->text().toStdString().c_str()); - aData->myPrintLogInFile = myAdvOpt->logInFileCheck->isChecked(); - aData->myVerboseLevel = myAdvOpt->verboseLevelSpin->value(); - aData->myRemoveLogOnSuccess = myAdvOpt->removeLogOnSuccessCheck->isChecked(); - aData->myKeepFiles = myAdvOpt->keepWorkingFilesCheck->isChecked(); - model->setData(*aData); - - QString msg; - checkParams(msg); - break ; - } - - return ret; -} -bool SMESHGUI_MgAdaptDlg::storeParamsToHypo( const SMESH::MgAdaptHypothesisData& ) const -{ - return true; -} -/*! - \brief Show help page -*/ -void SMESHGUI_MgAdaptDlg::PushOnHelp() -{ -// QString aHelpFile; - // if ( myTabWidget->currentIndex() == MinDistance ) { - // aHelpFile = "measurements.html#min-distance-anchor"; - // } else if ( myTabWidget->currentIndex() == BoundingBox ) { - // aHelpFile = "measurements.html#bounding-box-anchor"; - // } else if ( myTabWidget->currentWidget() == myAngle ) { - // aHelpFile = "measurements.html#angle-anchor"; - // } else { - // aHelpFile = "measurements.html#basic-properties-anchor"; - // } - -// SMESH::ShowHelpFile( aHelpFile ); -} -bool SMESHGUI_MgAdaptDlg::checkParams(QString& msg) -{ - if ( !QFileInfo( myAdvOpt->workingDirectoryLineEdit->text().trimmed() ).isWritable() ) - { - SUIT_MessageBox::warning( this, - tr( "SMESH_WRN_WARNING" ), - tr( "NO_PERMISSION" ) ); - return false; - } - - - myAdvOpt->myOptionTable->setFocus(); - QApplication::instance()->processEvents(); - - QString name, value; - bool isDefault, ok = true; - int iRow = 0, nbRows = myAdvOpt->myOptionTable->topLevelItemCount(); - for ( ; iRow < nbRows; ++iRow ) - { - QTreeWidgetItem* row = myAdvOpt->myOptionTable->topLevelItem( iRow ); - myAdvOpt->GetOptionAndValue( row, name, value, isDefault ); - - if ( name.simplified().isEmpty() ) - continue; // invalid custom option - - if ( isDefault ) // not selected option - value.clear(); - - try - { - model->setOptionValue( name.toLatin1().constData(), value.toLatin1().constData() ); - } - catch ( const SALOME::SALOME_Exception& ex ) - { - msg = ex.details.text.in(); - ok = false; - break; - } - } - - return ok; -} - -//================================================================================= -// function : SMESHGUI_MgAdaptArguments() -// purpose : -//================================================================================= -SMESHGUI_MgAdaptArguments::SMESHGUI_MgAdaptArguments( QWidget* parent ) - :QWidget(parent) -{ - - if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() ) - { - myFileInDir = QDir::currentPath(); - myFileOutDir = QDir::currentPath(); - myFileSizeMapDir = QDir::currentPath(); - } - else - { - myFileInDir = SUIT_FileDlg::getLastVisitedPath(); - myFileOutDir = SUIT_FileDlg::getLastVisitedPath(); - myFileSizeMapDir = SUIT_FileDlg::getLastVisitedPath(); - } - - meshDim = 0; - meshDimBG = 0; - // Mesh in - aMeshIn = new QGroupBox( tr( "MeshIn" ), this ); - aMedfile = new QRadioButton( tr( "MEDFile" ), aMeshIn ); - aBrowser = new QRadioButton( tr( "Browser" ), aMeshIn ); - aBrowserObject = new QLineEdit( aMeshIn ); - selectMedFilebutton = new QPushButton("...", aMeshIn); - selectMedFileLineEdit = new QLineEdit( aMeshIn ); - - meshIn = new QGridLayout( aMeshIn ); - - meshIn->setMargin( MARGIN ); - meshIn->setSpacing( SPACING ); - meshIn->addWidget( aMedfile, 0, 0, 1,1 ); - meshIn->addWidget( aBrowser, 0, 1,1,1); - meshIn->addWidget( aBrowserObject, 0, 2, 1, 1 ); - meshIn->addWidget( selectMedFilebutton, 1, 0,1, 1); - meshIn->addWidget( selectMedFileLineEdit, 1, 1, 1, 1 ); - hspacer = new QSpacerItem(188, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - - meshInGroup = new QButtonGroup( this ); - meshInGroup->addButton( aMedfile, 0 ); - meshInGroup->addButton( aBrowser, 1 ); - - //Mesh out - - aMeshOut = new QGroupBox( tr( "MeshOut" ), this ); - meshName = new QLabel(tr("MeshName"), aMeshOut); - secondHspacer = new QSpacerItem(100, 30); - meshNameLineEdit = new QLineEdit(aMeshOut) ; - medFileCheckBox = new QCheckBox(tr("MEDFile"), aMeshOut); - selectOutMedFilebutton = new QPushButton("...", aMeshOut); - thirdHspacer = new QSpacerItem(188, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - selectOutMedFileLineEdit = new QLineEdit(aMeshOut) ; - publishOut = new QCheckBox(tr("Publish_MG_ADAPT"), aMeshOut); - - meshOut = new QGridLayout( aMeshOut ); - - meshOut->setMargin( MARGIN ); - meshOut->setSpacing( SPACING ); - meshOut->addWidget( meshName, 0, 0, 1,1 ); - meshOut->addItem( secondHspacer, 0, 1, 1, 1 ); - meshOut->addWidget( meshNameLineEdit, 0, 2,1,1); - meshOut->addWidget( medFileCheckBox, 1, 0,1,1 ); - meshOut->addWidget( selectOutMedFilebutton, 1, 1,1,1 ); - meshOut->addWidget( selectOutMedFileLineEdit, 1, 2,1,1); - meshOut->addWidget( publishOut, 2, 0,1,1 ); - - //size map definition - - sizeMapDefinition = new QGroupBox(tr("SIZE_MAP_DEF"), this); - localButton = new QRadioButton(tr("LOCAL_MG_ADAPT"), sizeMapDefinition); - backgroundButton = new QRadioButton(tr("BACKGRND_MG_ADAPT"), sizeMapDefinition); - constantButton = new QRadioButton(tr("CNST_MG_ADAPT"), sizeMapDefinition); - medFileBackground = new QLabel(tr("MED_FILE_BCKG"), sizeMapDefinition); - selectMedFileBackgroundbutton = new QPushButton("...", sizeMapDefinition); - selectMedFileBackgroundLineEdit = new QLineEdit(sizeMapDefinition); - valueLabel = new QLabel(tr("VALUE_MG_ADAPT"), sizeMapDefinition); - dvalue = new QDoubleSpinBox(sizeMapDefinition); - sizeMapDefGroup = new QButtonGroup( this ); - sizeMapDefGroup->addButton( localButton, 0 ); - sizeMapDefGroup->addButton( backgroundButton, 1 ); - sizeMapDefGroup->addButton( constantButton, 2 ); - - sizeMapDefGroupLayout = new QGridLayout(sizeMapDefinition); - sizeMapDefGroupLayout->addWidget(localButton, 0,0); - sizeMapDefGroupLayout->addWidget(backgroundButton, 0,1); - sizeMapDefGroupLayout->addWidget(constantButton, 0,2); - sizeMapDefGroupLayout->addWidget(medFileBackground, 1,0); - sizeMapDefGroupLayout->addWidget(selectMedFileBackgroundbutton, 1,1); - sizeMapDefGroupLayout->addWidget(selectMedFileBackgroundLineEdit, 1,2); - sizeMapDefGroupLayout->addWidget(valueLabel, 2,0); - sizeMapDefGroupLayout->addWidget(dvalue, 2,1); - - // size Map field - sizeMapField = new QGroupBox(tr("SIZE_MAP_FIELD"), this); - fieldName = new QLabel(tr("MG_ADAPT_FIELD_NAME"), sizeMapField); - fieldNameCmb = new QComboBox(sizeMapField); - noTimeStep = new QRadioButton(tr("MG_ADAPT_NO_T_ST"), sizeMapField); - lastTimeStep = new QRadioButton(tr("MG_ADAPT_L_ST"), sizeMapField); - chosenTimeStep = new QRadioButton(tr("MG_ADAPT_CH_ST"), sizeMapField); - timeStepLabel = new QLabel(tr("MG_ADAPT_TSTP"), sizeMapField); - timeStep = new QSpinBox(sizeMapField); - timeStep->setMinimum(-1); - rankLabel = new QLabel(tr("MG_ADAPT_RANK"), sizeMapField); - rankSpinBox = new QSpinBox(sizeMapField); - rankSpinBox->setMinimum(-1); - - timeStepGroup = new QButtonGroup(this); - timeStepGroup->addButton(noTimeStep, 0); - timeStepGroup->addButton(lastTimeStep, 1); - timeStepGroup->addButton(chosenTimeStep, 2); - - sizeMapFieldGroupLayout = new QGridLayout(sizeMapField); - - sizeMapFieldGroupLayout->addWidget(fieldName, 0,0); - sizeMapFieldGroupLayout->addWidget(fieldNameCmb, 0,1); - sizeMapFieldGroupLayout->addWidget(noTimeStep, 1,0); - sizeMapFieldGroupLayout->addWidget(lastTimeStep, 1,1); - sizeMapFieldGroupLayout->addWidget(chosenTimeStep, 1,2); - sizeMapFieldGroupLayout->addWidget(timeStepLabel, 2,0); - sizeMapFieldGroupLayout->addWidget(timeStep, 2,1); - sizeMapFieldGroupLayout->addWidget(rankLabel, 2,2); - sizeMapFieldGroupLayout->addWidget(rankSpinBox, 2,3); - - QGridLayout* argumentsLayout = new QGridLayout( this ); - argumentsLayout->setMargin( MARGIN ); - argumentsLayout->setSpacing( SPACING ); - - argumentsLayout->addWidget( aMeshIn, 0, 0, 1, 3 ); - argumentsLayout->addWidget( aMeshOut, 1, 0, 1, 3 ); - argumentsLayout->addWidget( sizeMapDefinition, 2, 0, 1, 3 ); - argumentsLayout->addWidget( sizeMapField, 3, 0, 1, 3 ); - argumentsLayout->setColumnStretch( 1, 5 ); - argumentsLayout->setRowStretch( 4, 5 ); - - // Initial state - setMode( Mesh, Local); - medFileCheckBox->setChecked(true); - visibleTimeStepRankLabel (false); - - // Connections - connect( meshInGroup, SIGNAL( buttonClicked( int ) ), this, SLOT( modeChanged( int ) ) ); - connect( sizeMapDefGroup, SIGNAL( buttonClicked( int ) ), this, SLOT( sizeMapDefChanged( int ) ) ); - connect( selectMedFilebutton, SIGNAL( pressed( ) ), this, SLOT( onSelectMedFilebuttonClicked( ) ) ); - connect( medFileCheckBox, SIGNAL (stateChanged(int)), this, SLOT(onMedFileCheckBox(int) ) ); - connect( publishOut, SIGNAL (stateChanged(int)), this, SLOT(onPublishOut(int) ) ); - connect( selectOutMedFilebutton, SIGNAL( pressed()), this, SLOT(onSelectOutMedFilebutton())); - connect( selectMedFileBackgroundbutton, SIGNAL(pressed()), this, SLOT(onSelectMedFileBackgroundbutton()) ); - connect( timeStepGroup, SIGNAL( buttonClicked( int ) ), this, SLOT( timeStepGroupChanged( int ) ) ); - emit updateSelection(); -} - -//================================================================================= -// function : ~SMESHGUI_MgAdaptArguments() -// purpose : Destroys the object and frees any allocated resources -//================================================================================= -SMESHGUI_MgAdaptArguments::~SMESHGUI_MgAdaptArguments() -{ -} - -void SMESHGUI_MgAdaptArguments::onNoTimeStep(bool disableOther) -{ - noTimeStep->setChecked(true); - - visibleTimeStepRankLabel (false); - rankSpinBox->setValue(-2); - timeStep->setValue(-2); - - lastTimeStep->setDisabled(disableOther); - chosenTimeStep->setDisabled(disableOther); -} -void SMESHGUI_MgAdaptArguments::onLastTimeStep(bool disableOther) -{ - lastTimeStep->setChecked(true); - - visibleTimeStepRankLabel (false); - rankSpinBox->setValue(-1); - timeStep->setValue(-1); - noTimeStep->setDisabled(disableOther); -} -void SMESHGUI_MgAdaptArguments::onChosenTimeStep(bool /*disableOther*/, int vmax) -{ - chosenTimeStep->setChecked(true); - - visibleTimeStepRankLabel (true); - rankSpinBox->setValue(-1); - timeStep->setValue(-1); - if (vmax) timeStep->setMaximum(vmax); -} - -void SMESHGUI_MgAdaptArguments::visibleTimeStepRankLabel(bool visible) -{ - rankLabel->setVisible(visible); - rankSpinBox->setVisible(visible); - - timeStepLabel->setVisible(visible); - timeStep->setVisible(visible); -} - -void SMESHGUI_MgAdaptArguments::onSelectOutMedFilebutton() -{ - - QString filtre = QString("Med") ; - filtre += QString(" files (*.") + QString("med") + QString(");;"); - QString fileName = QFileDialog::getSaveFileName(this, tr("SAVE_MED"), QString(""), filtre); - QFileInfo myFileInfo(fileName); - selectOutMedFileLineEdit->setText(myFileInfo.fileName()); - myFileOutDir = myFileInfo.path(); - -} -void SMESHGUI_MgAdaptArguments::onSelectMedFileBackgroundbutton() -{ - QString fileName0 = selectMedFileBackgroundbutton->text().trimmed(); - - QString fileName = getMedFileName(false); - if (fileName != QString::null) - { - myFieldList = GetListeChamps(fileName); - if (myFieldList.empty()) - { - fileName = fileName0; - fieldNameCmb->clear(); - } - else - { - // fill field name Combobox - fieldNameCmb->clear(); - std::map::const_iterator it; - for ( it=myFieldList.begin() ; it != myFieldList.end(); it++) - { - fieldNameCmb->insertItem(0,QString(it->first)); - int typeStepInField = it->second > 2 ? 2 : it->second ; - timeStepGroupChanged(typeStepInField, false); - } - // Dimension du maillage de fonds - lireNomDimMaillage( fileName, meshDimBG ); - valueAdaptation (); - } - } - else - { - fileName = fileName0; - fieldNameCmb->clear(); - } - - QFileInfo myFileInfo(fileName); - myFileSizeMapDir = myFileInfo.path(); - selectMedFileBackgroundLineEdit->setText(myFileInfo.fileName()); - -} -void SMESHGUI_MgAdaptArguments::onMedFileCheckBox(int state) -{ - if (state == Qt::Checked) - { - selectOutMedFilebutton->show(); - selectOutMedFileLineEdit->show(); - selectOutMedFilebutton->setEnabled(true); - selectOutMedFileLineEdit->setEnabled(true); - } - else - { - selectOutMedFilebutton->setEnabled(false); - selectOutMedFileLineEdit->setEnabled(false); - publishOut->setChecked(true); - } -} -void SMESHGUI_MgAdaptArguments::onPublishOut(int state) -{ - if (state == Qt::Unchecked) - { - medFileCheckBox->setChecked(true); - } -} - -void SMESHGUI_MgAdaptArguments::onSelectMedFilebuttonClicked() -{ - // bool keep = false; - QString fileName0 = selectMedFileLineEdit->text().trimmed(); - - QString fileName = getMedFileName(false); - if(fileName != QString::null) - { - QString aMeshName = lireNomDimMaillage(fileName.trimmed(), meshDim); - if (aMeshName.isEmpty() ) - { - QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"), - QObject::tr("MG_ADAPT_MED_FILE_2") ); - fileName = fileName0; - } - else - { - meshNameLineEdit->setText(aMeshName); - valueAdaptation (); -// ADAPTATION_MODE aMode = meshDim == 3 ? ADAPTATION_MODE::BOTH : ADAPTATION_MODE::SURFACE; // and when dimesh 3 without 2D mesh? -// emit meshDimSignal(aMode); - } - } - else - { - return; - } - - QFileInfo myFileInfo(fileName); - myFileInDir = myFileInfo.path(); - myFileOutDir = myFileInfo.path(); - selectMedFileLineEdit->setText(myFileInfo.fileName()); - QString outF = fileName == QString::null ? myFileInfo.fileName() : - QString( remove_extension(myFileInfo.fileName().toStdString() ).c_str() )+ QString(".adapt.med"); - selectOutMedFileLineEdit->setText(outF); - onLocalSelected(myFileInfo.filePath()); - -} - -void SMESHGUI_MgAdaptArguments::valueAdaptation() -{ - ADAPTATION_MODE aMode ; - if ( meshDimBG < 3 ) - { - aMode = meshDim == 3 ? ADAPTATION_MODE::BOTH : ADAPTATION_MODE::SURFACE; - } - else - { - aMode = ADAPTATION_MODE::BOTH; - } - emit meshDimSignal(aMode); -} - -void SMESHGUI_MgAdaptArguments::onLocalSelected(QString filePath) -{ - myFieldList = GetListeChamps(filePath, false); - if (myFieldList.empty()) - { - if (localButton->isChecked()) - { - fieldNameCmb->clear(); - } - } - else - { - // fill field name Combobox - fieldNameCmb->clear(); - std::map::const_iterator it; - for ( it = myFieldList.begin() ; it != myFieldList.end(); it++) - { - fieldNameCmb->insertItem(0,QString(it->first)); - // Je ne comprends pas le rapport entre pas de temps et apparition d'un nouveau champ... GN - int typeStepInField = it->second > 2 ? 2 : it->second ; -// std::cout << "SMESHGUI_MgAdaptArguments::onLocalSelected typeStepInField : " << typeStepInField << std::endl; - timeStepGroupChanged(typeStepInField, false); - } - } -} -// ======================================================================= -// Gestion les boutons qui permettent de -// 1) retourne le nom d'un fichier par une fenetre de dialogue si aucun -// objet est selectionne dans l arbre d etude -// 2) retourne le nom du fichier asocie a l objet -// selectionne dans l arbre d etude -// ======================================================================= -QString SMESHGUI_MgAdaptArguments::getMedFileName(bool /*avertir*/) -{ - - QString aFile = QString::null; - QString filtre = QString("Med") ; - filtre += QString(" files (*.") + QString("med") + QString(");;"); - aFile = SUIT_FileDlg::getOpenFileName(0, QObject::tr("MG_ADAPT_SELECT_FILE_0"), QString(""), filtre ); - - return aFile; - -} -void SMESHGUI_MgAdaptArguments::setMode(const Mode theMode, const SIZEMAP theSizeMap ) -{ - QRadioButton* aButton = qobject_cast( meshInGroup->button( theMode ) ); - QRadioButton* bButton = qobject_cast( sizeMapDefGroup->button( theSizeMap ) ); - if ( aButton ) - { - aButton->setChecked( true ); - modeChanged( theMode ); - } - if ( bButton ) - { - bButton->setChecked( true ); - sizeMapDefChanged( theSizeMap ); - } -} - -void SMESHGUI_MgAdaptArguments::modeChanged( int theMode ) -{ - clear(); - if(theMode == Mesh) - { - aBrowserObject->hide(); - selectMedFileLineEdit->show(); - selectMedFilebutton->show(); - localButton->setEnabled(true); - } - else - { - selectMedFileLineEdit->hide(); - selectMedFilebutton->hide(); - localButton->setEnabled(false); - aBrowserObject->show(); - sizeMapDefChanged(Background); - emit updateSelection(); - } -} - -void SMESHGUI_MgAdaptArguments::sizeMapDefChanged( int theSizeMap ) -{ - fieldNameCmb->clear(); - if(theSizeMap == Local) - { - localButton->setEnabled(true); - localButton->setChecked(true); - medFileBackground->hide(); - selectMedFileBackgroundbutton->hide(); - selectMedFileBackgroundLineEdit->hide(); - selectMedFileBackgroundLineEdit->clear(); - valueLabel->hide(); - dvalue->hide(); - - sizeMapField->setEnabled(true); - if (!selectMedFileLineEdit->text().isEmpty()) - { - QFileInfo myFileInfo(QDir(myFileInDir), selectMedFileLineEdit->text()); - onLocalSelected(myFileInfo.filePath()); - } - } - else if (theSizeMap == Background) - { - medFileBackground->show(); - backgroundButton->setChecked(true); - selectMedFileBackgroundbutton->show(); - selectMedFileBackgroundLineEdit->show(); - valueLabel->hide(); - dvalue->hide(); - sizeMapField->setEnabled(true); - } - else - { - medFileBackground->hide(); - constantButton->setChecked(true); - selectMedFileBackgroundbutton->hide(); - selectMedFileBackgroundLineEdit->clear(); - selectMedFileBackgroundLineEdit->hide(); - valueLabel->show(); - dvalue->show(); - sizeMapField->setEnabled(false); - } - meshDimBG = 0; - valueAdaptation(); -} -void SMESHGUI_MgAdaptArguments::timeStepGroupChanged(int timeStepType, bool disableOther, int vmax) -{ - switch (timeStepType) - { - case 0 : - onNoTimeStep(disableOther); - break; - case 1 : - onLastTimeStep(disableOther); - break; - case 2 : - onChosenTimeStep(disableOther, vmax); - default: - break; - } -} - -void SMESHGUI_MgAdaptArguments::clear() -{ - selectMedFileLineEdit->clear(); - aBrowserObject->clear(); - - meshNameLineEdit->clear(); - selectOutMedFileLineEdit->clear(); -} -// med_int SMESHGUI_MgAdaptArguments::getMeshDim() const -// { -// return meshDim; -// } -QWidget* ItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &o, const QModelIndex &index) const -{ - bool editable = index.data( EDITABLE_ROLE ).toInt(); - return editable ? QItemDelegate::createEditor( parent, o, index ) : 0; -} - -////////////////////////////////////////// -// MgAdaptAdvWidget -////////////////////////////////////////// - -MgAdaptAdvWidget::MgAdaptAdvWidget( QWidget* parent, std::vector * options, Qt::WindowFlags f ) - : QWidget( parent, f ), myOptions(options) -{ - setupWidget(); - myOptionTable->header()->setSectionResizeMode( QHeaderView::ResizeToContents ); - myOptionTable->setItemDelegate( new ItemDelegate( myOptionTable ) ); - - for ( size_t i = 0, nb = myOptions->size(); i < nb; ++i ) - { - AddOption( (*myOptions)[i].c_str() ); - } - - connect( myOptionTable, SIGNAL( itemChanged(QTreeWidgetItem *, int)), SLOT( itemChanged(QTreeWidgetItem *, int ))); - connect( addBtn, SIGNAL(clicked()), this, SLOT( onAddOption() ) ); - connect(workingDirectoryPushButton, SIGNAL(pressed()), this, SLOT(_onWorkingDirectoryPushButton())); -} - -MgAdaptAdvWidget::~MgAdaptAdvWidget() -{ -} - -void MgAdaptAdvWidget::AddOption( const char* option, bool isCustom ) -{ - QString name, value; - bool isDefault = false; - if ( option ) - { - QStringList name_value_type = QString(option).split( ":", QString::KeepEmptyParts ); - if ( name_value_type.size() > 0 ) - name = name_value_type[0]; - if ( name_value_type.size() > 1 ) - value = name_value_type[1]; - if ( name_value_type.size() > 2 ) - isDefault = !name_value_type[2].toInt(); - } - QTreeWidget* table = myOptionTable; - //table->setExpanded( true ); - - QTreeWidgetItem* row; - if (optionTreeWidgetItem.size()) - { - std::map::iterator it = optionTreeWidgetItem.find(name); - if(it != optionTreeWidgetItem.end()) return; // option exist - else - { - row = getNewQTreeWidgetItem(table, option, name, isCustom); - } - } - else - { - row = getNewQTreeWidgetItem(table, option, name, isCustom); - } - row->setText( 0, tr( name.toLatin1().constData() )); - row->setText( 1, tr( value.toLatin1().constData() )); - row->setCheckState( 0, isDefault ? Qt::Unchecked : Qt::Checked); - row->setData( NAME_COL, PARAM_NAME, name ); - - if ( isCustom ) - { - myOptionTable->scrollToItem( row ); - myOptionTable->setCurrentItem( row ); - myOptionTable->editItem( row, NAME_COL ); - } -} - -QTreeWidgetItem* MgAdaptAdvWidget::getNewQTreeWidgetItem(QTreeWidget* table, const char* option, QString& name, bool isCustom) -{ - QTreeWidgetItem* row = new QTreeWidgetItem( table ); - row->setData( NAME_COL, EDITABLE_ROLE, int( isCustom && !option )); - row->setFlags( row->flags() | Qt::ItemIsEditable ); - optionTreeWidgetItem.insert(std::pair (name, row)); - - return row; -} - -void MgAdaptAdvWidget::onAddOption() -{ - AddOption( NULL, true ); -} -void MgAdaptAdvWidget::GetOptionAndValue( QTreeWidgetItem * tblRow, - QString& option, - QString& value, - bool& isDefault) -{ - option = tblRow->data( NAME_COL, PARAM_NAME ).toString(); - value = tblRow->text( VALUE_COL ); - isDefault = ! tblRow->checkState( NAME_COL ); - -} - -void MgAdaptAdvWidget::itemChanged(QTreeWidgetItem* tblRow, int column) -{ - if ( tblRow ) - { - myOptionTable->blockSignals( true ); - - tblRow->setData( VALUE_COL, EDITABLE_ROLE, int( tblRow->checkState( NAME_COL ))); - - int c = tblRow->checkState( NAME_COL ) ? 0 : 150; - tblRow->setForeground( VALUE_COL, QBrush( QColor( c, c, c ))); - - if ( column == NAME_COL && tblRow->data( NAME_COL, EDITABLE_ROLE ).toInt() ) // custom table - { - tblRow->setData( NAME_COL, PARAM_NAME, tblRow->text( NAME_COL )); - } - - myOptionTable->blockSignals( false ); - } -} -void MgAdaptAdvWidget::setupWidget() -{ - if (this->objectName().isEmpty()) - this->setObjectName(QString(tr("MG-ADAPT-ADV"))); - this->resize(337, 369); - gridLayout_4 = new QGridLayout(this); - gridLayout_4->setObjectName(QString("gridLayout_4")); - myOptionTable = new MgAdaptAdvWidgetTreeWidget(this); - QFont font; - font.setBold(false); - font.setWeight(50); - QTreeWidgetItem *__qtreewidgetitem = new QTreeWidgetItem(); - __qtreewidgetitem->setFont(1, font); - __qtreewidgetitem->setFont(0, font); - __qtreewidgetitem->setText(1, tr("OPTION_VALUE_COLUMN")); - __qtreewidgetitem->setText(0, tr("OPTION_NAME_COLUMN")); - myOptionTable->setHeaderItem(__qtreewidgetitem); - myOptionTable->setObjectName(QString("myOptionTable")); - myOptionTable->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed); - myOptionTable->setTabKeyNavigation(true); - - gridLayout_4->addWidget(myOptionTable, 0, 0, 1, 2); - - addBtn = new QPushButton(this); - addBtn->setText(QApplication::translate("SMESH_AdvOptionsWdg", "ADD_OPTION_BTN", Q_NULLPTR)); - addBtn->setObjectName(QString("addBtn")); - - gridLayout_4->addWidget(addBtn, 1, 0, 1, 1); - - horizontalSpacer = new QSpacerItem(188, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - - gridLayout_4->addItem(horizontalSpacer, 1, 1, 1, 1); - - logGroupBox = new QGroupBox(this); - logGroupBox->setObjectName(QString("logGroupBox")); - gridLayout_2 = new QGridLayout(logGroupBox); - gridLayout_2->setObjectName(QString("gridLayout_2")); - gridLayout = new QGridLayout(); - gridLayout->setObjectName(QString("gridLayout")); - workingDirectoryLabel = new QLabel(logGroupBox); - workingDirectoryLabel->setObjectName(QString("workingDirectoryLabel")); - - gridLayout->addWidget(workingDirectoryLabel, 0, 0, 1, 1); - - workingDirectoryLineEdit = new QLineEdit(logGroupBox); - workingDirectoryLineEdit->setObjectName(QString("workingDirectoryLineEdit")); - - gridLayout->addWidget(workingDirectoryLineEdit, 0, 1, 1, 1); - - workingDirectoryPushButton = new QPushButton(logGroupBox); - workingDirectoryPushButton->setObjectName(QString("workingDirectoryPushButton")); - - gridLayout->addWidget(workingDirectoryPushButton, 0, 2, 1, 1); - - verboseLevelLabel = new QLabel(logGroupBox); - verboseLevelLabel->setObjectName(QString("verboseLevelLabel")); - - gridLayout->addWidget(verboseLevelLabel, 1, 0, 1, 1); - - verboseLevelSpin = new QSpinBox(logGroupBox); - verboseLevelSpin->setObjectName(QString("verboseLevelSpin")); - - gridLayout->addWidget(verboseLevelSpin, 1, 1, 1, 1); - - - gridLayout_2->addLayout(gridLayout, 0, 0, 1, 1); - - horizontalLayout = new QHBoxLayout(); - horizontalLayout->setObjectName(QString("horizontalLayout")); - logInFileCheck = new QCheckBox(logGroupBox); - logInFileCheck->setObjectName(QString("logInFileCheck")); - logInFileCheck->setChecked(true); - - horizontalLayout->addWidget(logInFileCheck); - - removeLogOnSuccessCheck = new QCheckBox(logGroupBox); - removeLogOnSuccessCheck->setObjectName(QString("removeLogOnSuccessCheck")); - removeLogOnSuccessCheck->setChecked(true); - - horizontalLayout->addWidget(removeLogOnSuccessCheck); - - - gridLayout_2->addLayout(horizontalLayout, 1, 0, 1, 1); - - keepWorkingFilesCheck = new QCheckBox(logGroupBox); - keepWorkingFilesCheck->setObjectName(QString("keepWorkingFilesCheck")); - keepWorkingFilesCheck->setAutoExclusive(false); - - gridLayout_2->addWidget(keepWorkingFilesCheck, 2, 0, 1, 1); - - - gridLayout_4->addWidget(logGroupBox, 3, 0, 1, 2); - -} -void MgAdaptAdvWidget::_onWorkingDirectoryPushButton() -{ - QString aDirName=QFileDialog::getExistingDirectory (); - if (!(aDirName.isEmpty()))workingDirectoryLineEdit->setText(aDirName); -} -void MgAdaptAdvWidget::onMeshDimChanged(ADAPTATION_MODE aMode) -{ -/* default adaptation mode - * assume that if meshDim == 2 and no 3D backgrounmesh-->adaptation surface - * if meshDim == 3 and if there is not 2D mesh -->VOLUME - * else BOTH - */ - - QString adaptation("adaptation"), value; - switch(aMode) - { - case ADAPTATION_MODE::SURFACE: - { - value ="surface"; - setOptionValue(adaptation, value); - break; - } - case ADAPTATION_MODE::BOTH : - { - value = "both"; - setOptionValue(adaptation, value); - break; - } - case ADAPTATION_MODE::VOLUME : - { - value = "volume"; - setOptionValue(adaptation, value); - break; - } - } -} -void MgAdaptAdvWidget::setOptionValue(QString& option, QString& value) -{ - std::map::iterator it = optionTreeWidgetItem.find(option); - if (it != optionTreeWidgetItem.end()) - { - it->second->setText( 0, tr( option.toLatin1().constData() )); - it->second->setText( 1, tr( value.toLatin1().constData() )); - it->second->setCheckState( 0, Qt::Checked ); - it->second->setData( NAME_COL, PARAM_NAME, option ); - myOptionTable->editItem( it->second, NAME_COL ); - } -} -namespace -{ -bool isEditable( const QModelIndex& index ) -{ - return index.isValid() && - index.flags() & Qt::ItemIsEditable && - index.flags() & Qt::ItemIsEnabled && - ( !index.data( Qt::UserRole + 1 ).isValid() || index.data( Qt::UserRole + 1 ).toInt() != 0 ); -} -} - -MgAdaptAdvWidgetTreeWidget::MgAdaptAdvWidgetTreeWidget( QWidget* parent ) - : QTreeWidget( parent ) -{ -} - -QModelIndex MgAdaptAdvWidgetTreeWidget::moveCursor( CursorAction action, Qt::KeyboardModifiers modifiers ) -{ - QModelIndex current = currentIndex(); - int column = current.column(); - if ( action == MoveNext ) - { - if ( column < columnCount()-1 ) - { - QModelIndex next = current.sibling( current.row(), column+1 ); - if ( isEditable( next ) ) return next; - } - else - { - QModelIndex next = current.sibling( current.row()+1, 0 ); - if ( isEditable( next ) ) return next; - } - } - else if ( action == MovePrevious ) - { - if ( column == 0 ) { - QModelIndex next = current.sibling( current.row()-1, columnCount()-1 ); - if ( isEditable( next ) ) return next; - } - else { - QModelIndex next = current.sibling( current.row(), column-1 ); - if ( isEditable( next ) ) return next; - } - } - return QTreeWidget::moveCursor( action, modifiers ); -} - -void MgAdaptAdvWidgetTreeWidget::keyPressEvent( QKeyEvent* e ) -{ - switch ( e->key() ) - { - case Qt::Key_F2: - { - QModelIndex index = currentIndex(); - if ( !isEditable( index ) ) { - for ( int i = 0; i < columnCount(); i++ ) { - QModelIndex sibling = index.sibling( index.row(), i ); - if ( isEditable( sibling ) ) { - if ( !edit( sibling, EditKeyPressed, e ) ) e->ignore(); - } - } - } - } - break; - default: - break; - } - QTreeWidget::keyPressEvent( e ); -} diff --git a/src/SMESHGUI/SMESHGUI_MG_ADAPTDRIVER.h b/src/SMESHGUI/SMESHGUI_MG_ADAPTDRIVER.h index eb653df01..582865cc9 100644 --- a/src/SMESHGUI/SMESHGUI_MG_ADAPTDRIVER.h +++ b/src/SMESHGUI/SMESHGUI_MG_ADAPTDRIVER.h @@ -26,7 +26,7 @@ #include "SMESH_SMESHGUI.hxx" // model -#include "MG_ADAPTGUI.h" +#include "SMESHGUI_MgAdaptDlg.h" // IDL includes #include diff --git a/src/SMESHGUI/SMESHGUI_MgAdaptDlg.cxx b/src/SMESHGUI/SMESHGUI_MgAdaptDlg.cxx new file mode 100644 index 000000000..7a76ea883 --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_MgAdaptDlg.cxx @@ -0,0 +1,1342 @@ +// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// file : MG_ADAPTGUI.cxx + +#include "SMESHGUI_MgAdaptDlg.h" + +#include "MED_Factory.hxx" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const int SPACING = 6; // layout spacing +const int MARGIN = 9; // layout margin + +namespace +{ + + // ====================================================== + QString lireNomDimMaillage(QString aFile, int& meshdim) + // ======================================================== + { + QString nomMaillage = QString::null ; + + try { + while ( true ) + { + + MED::PWrapper aMed = MED::CrWrapperR( aFile.toUtf8().data() ); + MED::TInt numberOfMeshes = aMed->GetNbMeshes(); + + if (numberOfMeshes == 0 ) + { + QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"), + QObject::tr("MG_ADAPT_MED_FILE_2") ); + break ; + } + if (numberOfMeshes > 1 ) + { + QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"), + QObject::tr("MG_ADAPT_MED_FILE_3") ); + break ; + } + + MED::PMeshInfo aMeshInfo = aMed->GetPMeshInfo( 1 ); + nomMaillage = aMeshInfo->GetName().c_str(); + meshdim = (int) aMeshInfo->GetDim(); + + break ; + } + } + catch ( const SALOME::SALOME_Exception & S_ex ) + { + SalomeApp_Tools::QtCatchCorbaException(S_ex); + } + + return nomMaillage; + } + + // ======================================================================= + std::map GetListeChamps(QString aFile, bool errorMessage=true) + // ======================================================================= + { + // Il faut voir si plusieurs maillages + + std::map ListeChamp ; + + try + { + while ( true ) + { + MED::PWrapper aMed = MED::CrWrapperR( aFile.toUtf8().data() ); + MED::TInt jaux = aMed->GetNbFields(); + if (jaux < 1 ) + { + if(errorMessage) + { + QMessageBox::critical( 0, QObject::tr("_ERROR"), + QObject::tr("HOM_MED_FILE_5") ); + } + break ; + } + // nbofcstp inutile pour le moment + MED::PMeshInfo aMeshInfo = aMed->GetPMeshInfo( 1 ); + int nbofcstp = 1; + for( MED::TInt j=0;jGetPFieldInfo( aMeshInfo, j + 1 ); + ListeChamp.insert({ QString( aFiledInfo->GetName().c_str()), nbofcstp }); + } + break ; + } + } + catch ( const SALOME::SALOME_Exception & S_ex ) + { + SalomeApp_Tools::QtCatchCorbaException(S_ex); + } + + return ListeChamp; + } + + // ======================================================================= + std::string remove_extension(const std::string& filename) + // ======================================================================= + { + size_t lastdot = filename.find_last_of("."); + if (lastdot == std::string::npos) return filename; + return filename.substr(0, lastdot); + } +} + +//================================================================================= +// function : SMESHGUI_MgAdaptDlg() +// purpose : +//================================================================================= +SMESHGUI_MgAdaptDlg::SMESHGUI_MgAdaptDlg( SalomeApp_Module* theModule, SMESH::MG_ADAPT_ptr myModel, QWidget* parent, bool isCreation ) + : QDialog(parent), mySMESHGUI( theModule ) +{ + //~model = new MgAdapt(*myModel); + model = SMESH::MG_ADAPT::_duplicate(myModel); + model->Register(); + myData = model->getData(); + buildDlg(); + if (!isCreation) readParamsFromHypo(); +} + +void SMESHGUI_MgAdaptDlg::buildDlg() +{ + setModal( false ); + setAttribute( Qt::WA_DeleteOnClose, true ); + setWindowTitle( tr( "ADAPT_PREF_MG_ADAPT" ) ); + setSizeGripEnabled( true ); + + myTabWidget = new QTabWidget( this ); + + // Arguments + + myArgs = new SMESHGUI_MgAdaptArguments( myTabWidget ); + SMESH::string_array_var str = model->getOptionValuesStrVec(); + SMESH::string_array_var str2 = model->getCustomOptionValuesStrVec(); + std::vector s; + for (CORBA::ULong i = 0; i< str->length(); i++) s.push_back( str[i].in()); + for (CORBA::ULong j = str->length(); j< str2->length(); j++) s.push_back(str[ j - str->length() ].in() ); + //~str.insert( str.end(), str2.begin(), str2.end() ); + + myAdvOpt = new MgAdaptAdvWidget(myTabWidget, &s); + + /*int argsTab =*/ myTabWidget->addTab( myArgs, tr( "Args" ) ); + /*int advTab =*/ myTabWidget->addTab( myAdvOpt, tr( "ADVOP" ) ); + + myAdvOpt->workingDirectoryLabel ->setText (tr( "WORKING_DIR" )); + myAdvOpt->workingDirectoryPushButton ->setText (tr( "SELECT_DIR" )); + myAdvOpt->keepWorkingFilesCheck ->setText (tr( "KEEP_WORKING_FILES" )); + myAdvOpt->verboseLevelLabel ->setText (tr( "VERBOSE_LEVEL" )); + myAdvOpt->removeLogOnSuccessCheck ->setText (tr( "REMOVE_LOG_ON_SUCCESS" )); + myAdvOpt->logInFileCheck ->setText (tr( "LOG_IN_FILE" )); + myAdvOpt->logGroupBox ->setTitle(tr( "LOG_GROUP_TITLE" )); + + // buttons + QPushButton* buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), this); + buttonOk->setAutoDefault(false); + QPushButton* buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), this); + buttonApply->setAutoDefault(false); + QPushButton* buttonCancel = new QPushButton( tr( "SMESH_BUT_CANCEL" ), this ); + buttonCancel->setAutoDefault( false ); + QPushButton* buttonHelp = new QPushButton( tr( "SMESH_BUT_HELP" ), this ); + buttonHelp->setAutoDefault( false ); + + QHBoxLayout* btnLayout = new QHBoxLayout; + btnLayout->setSpacing( SPACING ); + btnLayout->setMargin( 0 ); + btnLayout->addWidget( buttonOk ); + btnLayout->addStretch( 10 ); + btnLayout->addWidget( buttonApply ); + btnLayout->addStretch( 10 ); + btnLayout->addWidget( buttonCancel ); + btnLayout->addStretch( 10 ); + btnLayout->addWidget( buttonHelp ); + + QVBoxLayout* l = new QVBoxLayout ( this ); + l->setMargin( MARGIN ); + l->setSpacing( SPACING ); + l->addWidget( myTabWidget ); + l->addStretch(); + l->addLayout( btnLayout ); + + connect( buttonOk, SIGNAL(pressed()), this, SLOT(PushOnOK())); + connect( buttonApply, SIGNAL(pressed()), this, SLOT(PushOnApply())); + connect( buttonCancel, SIGNAL(pressed()), this, SLOT(close())); + connect( buttonHelp, SIGNAL(pressed()), this, SLOT(PushOnHelp())); + + connect( myArgs, SIGNAL(meshDimSignal(ADAPTATION_MODE)), myAdvOpt, SLOT( onMeshDimChanged(ADAPTATION_MODE)) ); +} + + +//================================================================================= +// function : ~SMESHGUI_MgAdaptDlg() +// purpose : Destroys the object and frees any allocated resources +//================================================================================= +SMESHGUI_MgAdaptDlg::~SMESHGUI_MgAdaptDlg() +{ + //~delete model; +} + +//~void SMESHGUI_MgAdaptDlg::setModel(MgAdapt* mg) +//~{ + //~model = mg; +//~} +SMESH::MG_ADAPT_ptr SMESHGUI_MgAdaptDlg::getModel() const +{ + return model; +} +/*! +\brief Perform clean-up actions on the dialog box closing. +*/ +bool SMESHGUI_MgAdaptDlg::PushOnApply() +{ + bool ret = readParamsFromWidgets(); + return ret; +} +void SMESHGUI_MgAdaptDlg::PushOnOK() +{ + bool ret = PushOnApply(); + if ( ret ) reject(); +} +void SMESHGUI_MgAdaptDlg::reject() +{ + QDialog::reject(); +} +bool SMESHGUI_MgAdaptDlg::readParamsFromHypo( ) const +{ + bool ret = true; + myArgs->aMedfile->setChecked(myData->fromMedFile) ; + if (myData->fromMedFile) + { + + myArgs->myFileInDir = myData->myFileInDir; + myArgs->selectMedFileLineEdit->setText(QString(myData->myMeshFileIn)) ; + // myData->myInMeshName = // TODO + + } + else + { + myArgs->aBrowserObject->setText(QString(myData->myInMeshName)); + //~ myArgs->myFileInDir =""; // TODO + //~ myArgs->selectMedFileLineEdit->setText(); // TODO + } + myArgs->meshNameLineEdit->setText(QString(myData->myOutMeshName)); + myArgs->medFileCheckBox->setChecked(myData->myMeshOutMed); + + if(myData->myMeshOutMed) + { + myArgs->myFileOutDir = QString(myData->myFileOutDir); + myArgs->selectOutMedFileLineEdit->setText(myData->myMeshFileOut.in()); + } + else + { + myArgs->myFileOutDir = ""; //TODO + } + + myArgs->publishOut->setChecked(myData->myPublish); + + myArgs->localButton->setChecked(myData->myUseLocalMap); + myArgs->backgroundButton->setChecked(myData->myUseBackgroundMap); + myArgs->constantButton->setChecked(myData->myUseConstantValue); + + if (myData->myUseConstantValue) + { + myArgs->dvalue->setValue(myData->myConstantValue); + } + else + { + myArgs->dvalue->setValue(0.0); + } + + if (myData->myUseBackgroundMap) + { + + myArgs->myFileSizeMapDir = QString(myData->myFileSizeMapDir) ; + myArgs->selectMedFileBackgroundLineEdit->setText(QString(myData->myMeshFileBackground)); + } + else + { + myArgs->myFileSizeMapDir = ""; //TODO + myArgs->selectMedFileBackgroundLineEdit->setText(""); //TODO + } + + myArgs->fieldNameCmb->setCurrentText(QString(myData->myFieldName)); + myArgs->noTimeStep->setChecked(myData->myUseNoTimeStep); + myArgs->lastTimeStep->setChecked( myData->myUseLastTimeStep); + myArgs->chosenTimeStep->setChecked(myData->myUseChosenTimeStep); + if (myData->myUseChosenTimeStep) + { + myArgs->rankSpinBox->setValue(myData->myRank); + myArgs->timeStep->setValue(myData->myTimeStep); + } + + myAdvOpt->workingDirectoryLineEdit->setText(QString(myData->myWorkingDir)); + myAdvOpt->logInFileCheck->setChecked(myData->myPrintLogInFile); + + myAdvOpt->verboseLevelSpin->setValue(myData->myVerboseLevel); + myAdvOpt->removeLogOnSuccessCheck->setChecked(myData->myRemoveLogOnSuccess); + myAdvOpt->keepWorkingFilesCheck->setChecked(myData->myKeepFiles); + + return ret; + +} + +bool SMESHGUI_MgAdaptDlg::readParamsFromWidgets() +{ + bool ret = true ; + SMESH::MgAdaptHypothesisData data, *aData = &data; + while ( ret ) + { + // 1. Fichier du maillage de départ + aData->fromMedFile = myArgs->aMedfile->isChecked(); + if (aData->fromMedFile) + { + aData->myFileInDir = CORBA::string_dup(myArgs->myFileInDir.toUtf8().data()); + aData->myMeshFileIn = CORBA::string_dup(myArgs->selectMedFileLineEdit->text().toUtf8().data()); + // aData->myInMeshName = // TODO + } + else // TODO browser + { + QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"), + QObject::tr("MG_ADAPT_MED_FILE_4") ); + ret = false ; + break ; + // aData->myInMeshName = CORBA::string_dup(myArgs->aBrowserObject->text().toStdString().c_str()); + // aData->myFileInDir = CORBA::string_dup(myAdvOpt->workingDirectoryLineEdit->text().toStdString().c_str()); + // + // TCollection_AsciiString aGenericName = (char*)aData->myFileInDir; + // TCollection_AsciiString aGenericName2 = "MgAdapt_"; + // aGenericName2 += getpid(); + // aGenericName2 += "_"; + // aGenericName2 += Abs((Standard_Integer)(long) aGenericName.ToCString()); + // aGenericName2 += ".med"; + // aGenericName+=aGenericName2; + // emit myArgs->toExportMED(aGenericName.ToCString()); + // aData->myMeshFileIn = aGenericName2.ToCString(); + } + // 2. Fichier du maillage de sortie + aData->myOutMeshName = CORBA::string_dup(myArgs->meshNameLineEdit->text().toStdString().c_str()); + aData->myMeshOutMed = myArgs->medFileCheckBox->isChecked(); + if(aData->myMeshOutMed) + { + aData->myFileOutDir = CORBA::string_dup(myArgs->myFileOutDir.toUtf8().data()); + aData->myMeshFileOut = CORBA::string_dup(myArgs->selectOutMedFileLineEdit->text().toUtf8().data()); + } + else + { + aData->myMeshFileOut = ""; + } + aData->myPublish = myArgs->publishOut->isChecked(); + + // 3. Type de carte de tailles + aData->myUseLocalMap = myArgs->localButton->isChecked(); + aData->myUseBackgroundMap = myArgs->backgroundButton->isChecked(); + aData->myUseConstantValue = myArgs->constantButton->isChecked(); + // 3.1. Constante + if (aData->myUseConstantValue) + { + aData->myConstantValue = myArgs->dvalue->value(); + } + else + { + aData->myConstantValue = 0.0; + } + // 3.2. Arrière-plan + if (aData->myUseBackgroundMap) + { + aData->myFileSizeMapDir = CORBA::string_dup(myArgs->myFileSizeMapDir.toUtf8().data()); + aData->myMeshFileBackground = CORBA::string_dup(myArgs->selectMedFileBackgroundLineEdit->text().toUtf8().data()); + } + else + { + aData->myMeshFileBackground = ""; + } + + // 4. Le champ + if ( ! aData->myUseConstantValue ) + { + if ( strlen(myArgs->fieldNameCmb->currentText().toStdString().c_str()) == 0 ) + { + QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"), + QObject::tr("MG_ADAPT_MED_FILE_5") ); + ret = false ; + break ; + } + { + aData->myFieldName = CORBA::string_dup(myArgs->fieldNameCmb->currentText().toStdString().c_str()); + aData->myUseNoTimeStep = myArgs->noTimeStep->isChecked(); + aData->myUseLastTimeStep = myArgs->lastTimeStep->isChecked(); + aData->myUseChosenTimeStep = myArgs->chosenTimeStep->isChecked(); + if (aData->myUseChosenTimeStep) + { + aData->myRank = myArgs->rankSpinBox->value(); + aData->myTimeStep = myArgs->timeStep->value(); + } + } + } + + // 5. Options avancées + aData->myWorkingDir = CORBA::string_dup(myAdvOpt->workingDirectoryLineEdit->text().toStdString().c_str()); + aData->myPrintLogInFile = myAdvOpt->logInFileCheck->isChecked(); + aData->myVerboseLevel = myAdvOpt->verboseLevelSpin->value(); + aData->myRemoveLogOnSuccess = myAdvOpt->removeLogOnSuccessCheck->isChecked(); + aData->myKeepFiles = myAdvOpt->keepWorkingFilesCheck->isChecked(); + model->setData(*aData); + + QString msg; + checkParams(msg); + break ; + } + + return ret; +} +bool SMESHGUI_MgAdaptDlg::storeParamsToHypo( const SMESH::MgAdaptHypothesisData& ) const +{ + return true; +} +/*! + \brief Show help page +*/ +void SMESHGUI_MgAdaptDlg::PushOnHelp() +{ +// QString aHelpFile; + // if ( myTabWidget->currentIndex() == MinDistance ) { + // aHelpFile = "measurements.html#min-distance-anchor"; + // } else if ( myTabWidget->currentIndex() == BoundingBox ) { + // aHelpFile = "measurements.html#bounding-box-anchor"; + // } else if ( myTabWidget->currentWidget() == myAngle ) { + // aHelpFile = "measurements.html#angle-anchor"; + // } else { + // aHelpFile = "measurements.html#basic-properties-anchor"; + // } + +// SMESH::ShowHelpFile( aHelpFile ); +} +bool SMESHGUI_MgAdaptDlg::checkParams(QString& msg) +{ + if ( !QFileInfo( myAdvOpt->workingDirectoryLineEdit->text().trimmed() ).isWritable() ) + { + SUIT_MessageBox::warning( this, + tr( "SMESH_WRN_WARNING" ), + tr( "NO_PERMISSION" ) ); + return false; + } + + + myAdvOpt->myOptionTable->setFocus(); + QApplication::instance()->processEvents(); + + QString name, value; + bool isDefault, ok = true; + int iRow = 0, nbRows = myAdvOpt->myOptionTable->topLevelItemCount(); + for ( ; iRow < nbRows; ++iRow ) + { + QTreeWidgetItem* row = myAdvOpt->myOptionTable->topLevelItem( iRow ); + myAdvOpt->GetOptionAndValue( row, name, value, isDefault ); + + if ( name.simplified().isEmpty() ) + continue; // invalid custom option + + if ( isDefault ) // not selected option + value.clear(); + + try + { + model->setOptionValue( name.toLatin1().constData(), value.toLatin1().constData() ); + } + catch ( const SALOME::SALOME_Exception& ex ) + { + msg = ex.details.text.in(); + ok = false; + break; + } + } + + return ok; +} + +//================================================================================= +// function : SMESHGUI_MgAdaptArguments() +// purpose : +//================================================================================= +SMESHGUI_MgAdaptArguments::SMESHGUI_MgAdaptArguments( QWidget* parent ) + :QWidget(parent) +{ + + if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() ) + { + myFileInDir = QDir::currentPath(); + myFileOutDir = QDir::currentPath(); + myFileSizeMapDir = QDir::currentPath(); + } + else + { + myFileInDir = SUIT_FileDlg::getLastVisitedPath(); + myFileOutDir = SUIT_FileDlg::getLastVisitedPath(); + myFileSizeMapDir = SUIT_FileDlg::getLastVisitedPath(); + } + + meshDim = 0; + meshDimBG = 0; + // Mesh in + aMeshIn = new QGroupBox( tr( "MeshIn" ), this ); + aMedfile = new QRadioButton( tr( "MEDFile" ), aMeshIn ); + aBrowser = new QRadioButton( tr( "Browser" ), aMeshIn ); + aBrowserObject = new QLineEdit( aMeshIn ); + selectMedFilebutton = new QPushButton("...", aMeshIn); + selectMedFileLineEdit = new QLineEdit( aMeshIn ); + + meshIn = new QGridLayout( aMeshIn ); + + meshIn->setMargin( MARGIN ); + meshIn->setSpacing( SPACING ); + meshIn->addWidget( aMedfile, 0, 0, 1,1 ); + meshIn->addWidget( aBrowser, 0, 1,1,1); + meshIn->addWidget( aBrowserObject, 0, 2, 1, 1 ); + meshIn->addWidget( selectMedFilebutton, 1, 0,1, 1); + meshIn->addWidget( selectMedFileLineEdit, 1, 1, 1, 1 ); + hspacer = new QSpacerItem(188, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + meshInGroup = new QButtonGroup( this ); + meshInGroup->addButton( aMedfile, 0 ); + meshInGroup->addButton( aBrowser, 1 ); + + //Mesh out + + aMeshOut = new QGroupBox( tr( "MeshOut" ), this ); + meshName = new QLabel(tr("MeshName"), aMeshOut); + secondHspacer = new QSpacerItem(100, 30); + meshNameLineEdit = new QLineEdit(aMeshOut) ; + medFileCheckBox = new QCheckBox(tr("MEDFile"), aMeshOut); + selectOutMedFilebutton = new QPushButton("...", aMeshOut); + thirdHspacer = new QSpacerItem(188, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + selectOutMedFileLineEdit = new QLineEdit(aMeshOut) ; + publishOut = new QCheckBox(tr("Publish_MG_ADAPT"), aMeshOut); + + meshOut = new QGridLayout( aMeshOut ); + + meshOut->setMargin( MARGIN ); + meshOut->setSpacing( SPACING ); + meshOut->addWidget( meshName, 0, 0, 1,1 ); + meshOut->addItem( secondHspacer, 0, 1, 1, 1 ); + meshOut->addWidget( meshNameLineEdit, 0, 2,1,1); + meshOut->addWidget( medFileCheckBox, 1, 0,1,1 ); + meshOut->addWidget( selectOutMedFilebutton, 1, 1,1,1 ); + meshOut->addWidget( selectOutMedFileLineEdit, 1, 2,1,1); + meshOut->addWidget( publishOut, 2, 0,1,1 ); + + //size map definition + + sizeMapDefinition = new QGroupBox(tr("SIZE_MAP_DEF"), this); + localButton = new QRadioButton(tr("LOCAL_MG_ADAPT"), sizeMapDefinition); + backgroundButton = new QRadioButton(tr("BACKGRND_MG_ADAPT"), sizeMapDefinition); + constantButton = new QRadioButton(tr("CNST_MG_ADAPT"), sizeMapDefinition); + medFileBackground = new QLabel(tr("MED_FILE_BCKG"), sizeMapDefinition); + selectMedFileBackgroundbutton = new QPushButton("...", sizeMapDefinition); + selectMedFileBackgroundLineEdit = new QLineEdit(sizeMapDefinition); + valueLabel = new QLabel(tr("VALUE_MG_ADAPT"), sizeMapDefinition); + dvalue = new QDoubleSpinBox(sizeMapDefinition); + sizeMapDefGroup = new QButtonGroup( this ); + sizeMapDefGroup->addButton( localButton, 0 ); + sizeMapDefGroup->addButton( backgroundButton, 1 ); + sizeMapDefGroup->addButton( constantButton, 2 ); + + sizeMapDefGroupLayout = new QGridLayout(sizeMapDefinition); + sizeMapDefGroupLayout->addWidget(localButton, 0,0); + sizeMapDefGroupLayout->addWidget(backgroundButton, 0,1); + sizeMapDefGroupLayout->addWidget(constantButton, 0,2); + sizeMapDefGroupLayout->addWidget(medFileBackground, 1,0); + sizeMapDefGroupLayout->addWidget(selectMedFileBackgroundbutton, 1,1); + sizeMapDefGroupLayout->addWidget(selectMedFileBackgroundLineEdit, 1,2); + sizeMapDefGroupLayout->addWidget(valueLabel, 2,0); + sizeMapDefGroupLayout->addWidget(dvalue, 2,1); + + // size Map field + sizeMapField = new QGroupBox(tr("SIZE_MAP_FIELD"), this); + fieldName = new QLabel(tr("MG_ADAPT_FIELD_NAME"), sizeMapField); + fieldNameCmb = new QComboBox(sizeMapField); + noTimeStep = new QRadioButton(tr("MG_ADAPT_NO_T_ST"), sizeMapField); + lastTimeStep = new QRadioButton(tr("MG_ADAPT_L_ST"), sizeMapField); + chosenTimeStep = new QRadioButton(tr("MG_ADAPT_CH_ST"), sizeMapField); + timeStepLabel = new QLabel(tr("MG_ADAPT_TSTP"), sizeMapField); + timeStep = new QSpinBox(sizeMapField); + timeStep->setMinimum(-1); + rankLabel = new QLabel(tr("MG_ADAPT_RANK"), sizeMapField); + rankSpinBox = new QSpinBox(sizeMapField); + rankSpinBox->setMinimum(-1); + + timeStepGroup = new QButtonGroup(this); + timeStepGroup->addButton(noTimeStep, 0); + timeStepGroup->addButton(lastTimeStep, 1); + timeStepGroup->addButton(chosenTimeStep, 2); + + sizeMapFieldGroupLayout = new QGridLayout(sizeMapField); + + sizeMapFieldGroupLayout->addWidget(fieldName, 0,0); + sizeMapFieldGroupLayout->addWidget(fieldNameCmb, 0,1); + sizeMapFieldGroupLayout->addWidget(noTimeStep, 1,0); + sizeMapFieldGroupLayout->addWidget(lastTimeStep, 1,1); + sizeMapFieldGroupLayout->addWidget(chosenTimeStep, 1,2); + sizeMapFieldGroupLayout->addWidget(timeStepLabel, 2,0); + sizeMapFieldGroupLayout->addWidget(timeStep, 2,1); + sizeMapFieldGroupLayout->addWidget(rankLabel, 2,2); + sizeMapFieldGroupLayout->addWidget(rankSpinBox, 2,3); + + QGridLayout* argumentsLayout = new QGridLayout( this ); + argumentsLayout->setMargin( MARGIN ); + argumentsLayout->setSpacing( SPACING ); + + argumentsLayout->addWidget( aMeshIn, 0, 0, 1, 3 ); + argumentsLayout->addWidget( aMeshOut, 1, 0, 1, 3 ); + argumentsLayout->addWidget( sizeMapDefinition, 2, 0, 1, 3 ); + argumentsLayout->addWidget( sizeMapField, 3, 0, 1, 3 ); + argumentsLayout->setColumnStretch( 1, 5 ); + argumentsLayout->setRowStretch( 4, 5 ); + + // Initial state + setMode( Mesh, Local); + medFileCheckBox->setChecked(true); + visibleTimeStepRankLabel (false); + + // Connections + connect( meshInGroup, SIGNAL( buttonClicked( int ) ), this, SLOT( modeChanged( int ) ) ); + connect( sizeMapDefGroup, SIGNAL( buttonClicked( int ) ), this, SLOT( sizeMapDefChanged( int ) ) ); + connect( selectMedFilebutton, SIGNAL( pressed( ) ), this, SLOT( onSelectMedFilebuttonClicked( ) ) ); + connect( medFileCheckBox, SIGNAL (stateChanged(int)), this, SLOT(onMedFileCheckBox(int) ) ); + connect( publishOut, SIGNAL (stateChanged(int)), this, SLOT(onPublishOut(int) ) ); + connect( selectOutMedFilebutton, SIGNAL( pressed()), this, SLOT(onSelectOutMedFilebutton())); + connect( selectMedFileBackgroundbutton, SIGNAL(pressed()), this, SLOT(onSelectMedFileBackgroundbutton()) ); + connect( timeStepGroup, SIGNAL( buttonClicked( int ) ), this, SLOT( timeStepGroupChanged( int ) ) ); + emit updateSelection(); +} + +//================================================================================= +// function : ~SMESHGUI_MgAdaptArguments() +// purpose : Destroys the object and frees any allocated resources +//================================================================================= +SMESHGUI_MgAdaptArguments::~SMESHGUI_MgAdaptArguments() +{ +} + +void SMESHGUI_MgAdaptArguments::onNoTimeStep(bool disableOther) +{ + noTimeStep->setChecked(true); + + visibleTimeStepRankLabel (false); + rankSpinBox->setValue(-2); + timeStep->setValue(-2); + + lastTimeStep->setDisabled(disableOther); + chosenTimeStep->setDisabled(disableOther); +} +void SMESHGUI_MgAdaptArguments::onLastTimeStep(bool disableOther) +{ + lastTimeStep->setChecked(true); + + visibleTimeStepRankLabel (false); + rankSpinBox->setValue(-1); + timeStep->setValue(-1); + noTimeStep->setDisabled(disableOther); +} +void SMESHGUI_MgAdaptArguments::onChosenTimeStep(bool /*disableOther*/, int vmax) +{ + chosenTimeStep->setChecked(true); + + visibleTimeStepRankLabel (true); + rankSpinBox->setValue(-1); + timeStep->setValue(-1); + if (vmax) timeStep->setMaximum(vmax); +} + +void SMESHGUI_MgAdaptArguments::visibleTimeStepRankLabel(bool visible) +{ + rankLabel->setVisible(visible); + rankSpinBox->setVisible(visible); + + timeStepLabel->setVisible(visible); + timeStep->setVisible(visible); +} + +void SMESHGUI_MgAdaptArguments::onSelectOutMedFilebutton() +{ + + QString filtre = QString("Med") ; + filtre += QString(" files (*.") + QString("med") + QString(");;"); + QString fileName = QFileDialog::getSaveFileName(this, tr("SAVE_MED"), QString(""), filtre); + QFileInfo myFileInfo(fileName); + selectOutMedFileLineEdit->setText(myFileInfo.fileName()); + myFileOutDir = myFileInfo.path(); + +} +void SMESHGUI_MgAdaptArguments::onSelectMedFileBackgroundbutton() +{ + QString fileName0 = selectMedFileBackgroundbutton->text().trimmed(); + + QString fileName = getMedFileName(false); + if (fileName != QString::null) + { + myFieldList = GetListeChamps(fileName); + if (myFieldList.empty()) + { + fileName = fileName0; + fieldNameCmb->clear(); + } + else + { + // fill field name Combobox + fieldNameCmb->clear(); + std::map::const_iterator it; + for ( it=myFieldList.begin() ; it != myFieldList.end(); it++) + { + fieldNameCmb->insertItem(0,QString(it->first)); + int typeStepInField = it->second > 2 ? 2 : it->second ; + timeStepGroupChanged(typeStepInField, false); + } + // Dimension du maillage de fonds + lireNomDimMaillage( fileName, meshDimBG ); + valueAdaptation (); + } + } + else + { + fileName = fileName0; + fieldNameCmb->clear(); + } + + QFileInfo myFileInfo(fileName); + myFileSizeMapDir = myFileInfo.path(); + selectMedFileBackgroundLineEdit->setText(myFileInfo.fileName()); + +} +void SMESHGUI_MgAdaptArguments::onMedFileCheckBox(int state) +{ + if (state == Qt::Checked) + { + selectOutMedFilebutton->show(); + selectOutMedFileLineEdit->show(); + selectOutMedFilebutton->setEnabled(true); + selectOutMedFileLineEdit->setEnabled(true); + } + else + { + selectOutMedFilebutton->setEnabled(false); + selectOutMedFileLineEdit->setEnabled(false); + publishOut->setChecked(true); + } +} +void SMESHGUI_MgAdaptArguments::onPublishOut(int state) +{ + if (state == Qt::Unchecked) + { + medFileCheckBox->setChecked(true); + } +} + +void SMESHGUI_MgAdaptArguments::onSelectMedFilebuttonClicked() +{ + // bool keep = false; + QString fileName0 = selectMedFileLineEdit->text().trimmed(); + + QString fileName = getMedFileName(false); + if(fileName != QString::null) + { + QString aMeshName = lireNomDimMaillage(fileName.trimmed(), meshDim); + if (aMeshName.isEmpty() ) + { + QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"), + QObject::tr("MG_ADAPT_MED_FILE_2") ); + fileName = fileName0; + } + else + { + meshNameLineEdit->setText(aMeshName); + valueAdaptation (); +// ADAPTATION_MODE aMode = meshDim == 3 ? ADAPTATION_MODE::BOTH : ADAPTATION_MODE::SURFACE; // and when dimesh 3 without 2D mesh? +// emit meshDimSignal(aMode); + } + } + else + { + return; + } + + QFileInfo myFileInfo(fileName); + myFileInDir = myFileInfo.path(); + myFileOutDir = myFileInfo.path(); + selectMedFileLineEdit->setText(myFileInfo.fileName()); + QString outF = fileName == QString::null ? myFileInfo.fileName() : + QString( remove_extension(myFileInfo.fileName().toStdString() ).c_str() )+ QString(".adapt.med"); + selectOutMedFileLineEdit->setText(outF); + onLocalSelected(myFileInfo.filePath()); + +} + +void SMESHGUI_MgAdaptArguments::valueAdaptation() +{ + ADAPTATION_MODE aMode ; + if ( meshDimBG < 3 ) + { + aMode = meshDim == 3 ? ADAPTATION_MODE::BOTH : ADAPTATION_MODE::SURFACE; + } + else + { + aMode = ADAPTATION_MODE::BOTH; + } + emit meshDimSignal(aMode); +} + +void SMESHGUI_MgAdaptArguments::onLocalSelected(QString filePath) +{ + myFieldList = GetListeChamps(filePath, false); + if (myFieldList.empty()) + { + if (localButton->isChecked()) + { + fieldNameCmb->clear(); + } + } + else + { + // fill field name Combobox + fieldNameCmb->clear(); + std::map::const_iterator it; + for ( it = myFieldList.begin() ; it != myFieldList.end(); it++) + { + fieldNameCmb->insertItem(0,QString(it->first)); + // Je ne comprends pas le rapport entre pas de temps et apparition d'un nouveau champ... GN + int typeStepInField = it->second > 2 ? 2 : it->second ; +// std::cout << "SMESHGUI_MgAdaptArguments::onLocalSelected typeStepInField : " << typeStepInField << std::endl; + timeStepGroupChanged(typeStepInField, false); + } + } +} +// ======================================================================= +// Gestion les boutons qui permettent de +// 1) retourne le nom d'un fichier par une fenetre de dialogue si aucun +// objet est selectionne dans l arbre d etude +// 2) retourne le nom du fichier asocie a l objet +// selectionne dans l arbre d etude +// ======================================================================= +QString SMESHGUI_MgAdaptArguments::getMedFileName(bool /*avertir*/) +{ + + QString aFile = QString::null; + QString filtre = QString("Med") ; + filtre += QString(" files (*.") + QString("med") + QString(");;"); + aFile = SUIT_FileDlg::getOpenFileName(0, QObject::tr("MG_ADAPT_SELECT_FILE_0"), QString(""), filtre ); + + return aFile; + +} +void SMESHGUI_MgAdaptArguments::setMode(const Mode theMode, const SIZEMAP theSizeMap ) +{ + QRadioButton* aButton = qobject_cast( meshInGroup->button( theMode ) ); + QRadioButton* bButton = qobject_cast( sizeMapDefGroup->button( theSizeMap ) ); + if ( aButton ) + { + aButton->setChecked( true ); + modeChanged( theMode ); + } + if ( bButton ) + { + bButton->setChecked( true ); + sizeMapDefChanged( theSizeMap ); + } +} + +void SMESHGUI_MgAdaptArguments::modeChanged( int theMode ) +{ + clear(); + if(theMode == Mesh) + { + aBrowserObject->hide(); + selectMedFileLineEdit->show(); + selectMedFilebutton->show(); + localButton->setEnabled(true); + } + else + { + selectMedFileLineEdit->hide(); + selectMedFilebutton->hide(); + localButton->setEnabled(false); + aBrowserObject->show(); + sizeMapDefChanged(Background); + emit updateSelection(); + } +} + +void SMESHGUI_MgAdaptArguments::sizeMapDefChanged( int theSizeMap ) +{ + fieldNameCmb->clear(); + if(theSizeMap == Local) + { + localButton->setEnabled(true); + localButton->setChecked(true); + medFileBackground->hide(); + selectMedFileBackgroundbutton->hide(); + selectMedFileBackgroundLineEdit->hide(); + selectMedFileBackgroundLineEdit->clear(); + valueLabel->hide(); + dvalue->hide(); + + sizeMapField->setEnabled(true); + if (!selectMedFileLineEdit->text().isEmpty()) + { + QFileInfo myFileInfo(QDir(myFileInDir), selectMedFileLineEdit->text()); + onLocalSelected(myFileInfo.filePath()); + } + } + else if (theSizeMap == Background) + { + medFileBackground->show(); + backgroundButton->setChecked(true); + selectMedFileBackgroundbutton->show(); + selectMedFileBackgroundLineEdit->show(); + valueLabel->hide(); + dvalue->hide(); + sizeMapField->setEnabled(true); + } + else + { + medFileBackground->hide(); + constantButton->setChecked(true); + selectMedFileBackgroundbutton->hide(); + selectMedFileBackgroundLineEdit->clear(); + selectMedFileBackgroundLineEdit->hide(); + valueLabel->show(); + dvalue->show(); + sizeMapField->setEnabled(false); + } + meshDimBG = 0; + valueAdaptation(); +} +void SMESHGUI_MgAdaptArguments::timeStepGroupChanged(int timeStepType, bool disableOther, int vmax) +{ + switch (timeStepType) + { + case 0 : + onNoTimeStep(disableOther); + break; + case 1 : + onLastTimeStep(disableOther); + break; + case 2 : + onChosenTimeStep(disableOther, vmax); + default: + break; + } +} + +void SMESHGUI_MgAdaptArguments::clear() +{ + selectMedFileLineEdit->clear(); + aBrowserObject->clear(); + + meshNameLineEdit->clear(); + selectOutMedFileLineEdit->clear(); +} +// med_int SMESHGUI_MgAdaptArguments::getMeshDim() const +// { +// return meshDim; +// } +QWidget* ItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &o, const QModelIndex &index) const +{ + bool editable = index.data( EDITABLE_ROLE ).toInt(); + return editable ? QItemDelegate::createEditor( parent, o, index ) : 0; +} + +////////////////////////////////////////// +// MgAdaptAdvWidget +////////////////////////////////////////// + +MgAdaptAdvWidget::MgAdaptAdvWidget( QWidget* parent, std::vector * options, Qt::WindowFlags f ) + : QWidget( parent, f ), myOptions(options) +{ + setupWidget(); + myOptionTable->header()->setSectionResizeMode( QHeaderView::ResizeToContents ); + myOptionTable->setItemDelegate( new ItemDelegate( myOptionTable ) ); + + for ( size_t i = 0, nb = myOptions->size(); i < nb; ++i ) + { + AddOption( (*myOptions)[i].c_str() ); + } + + connect( myOptionTable, SIGNAL( itemChanged(QTreeWidgetItem *, int)), SLOT( itemChanged(QTreeWidgetItem *, int ))); + connect( addBtn, SIGNAL(clicked()), this, SLOT( onAddOption() ) ); + connect(workingDirectoryPushButton, SIGNAL(pressed()), this, SLOT(_onWorkingDirectoryPushButton())); +} + +MgAdaptAdvWidget::~MgAdaptAdvWidget() +{ +} + +void MgAdaptAdvWidget::AddOption( const char* option, bool isCustom ) +{ + QString name, value; + bool isDefault = false; + if ( option ) + { + QStringList name_value_type = QString(option).split( ":", QString::KeepEmptyParts ); + if ( name_value_type.size() > 0 ) + name = name_value_type[0]; + if ( name_value_type.size() > 1 ) + value = name_value_type[1]; + if ( name_value_type.size() > 2 ) + isDefault = !name_value_type[2].toInt(); + } + QTreeWidget* table = myOptionTable; + //table->setExpanded( true ); + + QTreeWidgetItem* row; + if (optionTreeWidgetItem.size()) + { + std::map::iterator it = optionTreeWidgetItem.find(name); + if(it != optionTreeWidgetItem.end()) return; // option exist + else + { + row = getNewQTreeWidgetItem(table, option, name, isCustom); + } + } + else + { + row = getNewQTreeWidgetItem(table, option, name, isCustom); + } + row->setText( 0, tr( name.toLatin1().constData() )); + row->setText( 1, tr( value.toLatin1().constData() )); + row->setCheckState( 0, isDefault ? Qt::Unchecked : Qt::Checked); + row->setData( NAME_COL, PARAM_NAME, name ); + + if ( isCustom ) + { + myOptionTable->scrollToItem( row ); + myOptionTable->setCurrentItem( row ); + myOptionTable->editItem( row, NAME_COL ); + } +} + +QTreeWidgetItem* MgAdaptAdvWidget::getNewQTreeWidgetItem(QTreeWidget* table, const char* option, QString& name, bool isCustom) +{ + QTreeWidgetItem* row = new QTreeWidgetItem( table ); + row->setData( NAME_COL, EDITABLE_ROLE, int( isCustom && !option )); + row->setFlags( row->flags() | Qt::ItemIsEditable ); + optionTreeWidgetItem.insert(std::pair (name, row)); + + return row; +} + +void MgAdaptAdvWidget::onAddOption() +{ + AddOption( NULL, true ); +} +void MgAdaptAdvWidget::GetOptionAndValue( QTreeWidgetItem * tblRow, + QString& option, + QString& value, + bool& isDefault) +{ + option = tblRow->data( NAME_COL, PARAM_NAME ).toString(); + value = tblRow->text( VALUE_COL ); + isDefault = ! tblRow->checkState( NAME_COL ); + +} + +void MgAdaptAdvWidget::itemChanged(QTreeWidgetItem* tblRow, int column) +{ + if ( tblRow ) + { + myOptionTable->blockSignals( true ); + + tblRow->setData( VALUE_COL, EDITABLE_ROLE, int( tblRow->checkState( NAME_COL ))); + + int c = tblRow->checkState( NAME_COL ) ? 0 : 150; + tblRow->setForeground( VALUE_COL, QBrush( QColor( c, c, c ))); + + if ( column == NAME_COL && tblRow->data( NAME_COL, EDITABLE_ROLE ).toInt() ) // custom table + { + tblRow->setData( NAME_COL, PARAM_NAME, tblRow->text( NAME_COL )); + } + + myOptionTable->blockSignals( false ); + } +} +void MgAdaptAdvWidget::setupWidget() +{ + if (this->objectName().isEmpty()) + this->setObjectName(QString(tr("MG-ADAPT-ADV"))); + this->resize(337, 369); + gridLayout_4 = new QGridLayout(this); + gridLayout_4->setObjectName(QString("gridLayout_4")); + myOptionTable = new MgAdaptAdvWidgetTreeWidget(this); + QFont font; + font.setBold(false); + font.setWeight(50); + QTreeWidgetItem *__qtreewidgetitem = new QTreeWidgetItem(); + __qtreewidgetitem->setFont(1, font); + __qtreewidgetitem->setFont(0, font); + __qtreewidgetitem->setText(1, tr("OPTION_VALUE_COLUMN")); + __qtreewidgetitem->setText(0, tr("OPTION_NAME_COLUMN")); + myOptionTable->setHeaderItem(__qtreewidgetitem); + myOptionTable->setObjectName(QString("myOptionTable")); + myOptionTable->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed); + myOptionTable->setTabKeyNavigation(true); + + gridLayout_4->addWidget(myOptionTable, 0, 0, 1, 2); + + addBtn = new QPushButton(this); + addBtn->setText(QApplication::translate("SMESH_AdvOptionsWdg", "ADD_OPTION_BTN", Q_NULLPTR)); + addBtn->setObjectName(QString("addBtn")); + + gridLayout_4->addWidget(addBtn, 1, 0, 1, 1); + + horizontalSpacer = new QSpacerItem(188, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + gridLayout_4->addItem(horizontalSpacer, 1, 1, 1, 1); + + logGroupBox = new QGroupBox(this); + logGroupBox->setObjectName(QString("logGroupBox")); + gridLayout_2 = new QGridLayout(logGroupBox); + gridLayout_2->setObjectName(QString("gridLayout_2")); + gridLayout = new QGridLayout(); + gridLayout->setObjectName(QString("gridLayout")); + workingDirectoryLabel = new QLabel(logGroupBox); + workingDirectoryLabel->setObjectName(QString("workingDirectoryLabel")); + + gridLayout->addWidget(workingDirectoryLabel, 0, 0, 1, 1); + + workingDirectoryLineEdit = new QLineEdit(logGroupBox); + workingDirectoryLineEdit->setObjectName(QString("workingDirectoryLineEdit")); + + gridLayout->addWidget(workingDirectoryLineEdit, 0, 1, 1, 1); + + workingDirectoryPushButton = new QPushButton(logGroupBox); + workingDirectoryPushButton->setObjectName(QString("workingDirectoryPushButton")); + + gridLayout->addWidget(workingDirectoryPushButton, 0, 2, 1, 1); + + verboseLevelLabel = new QLabel(logGroupBox); + verboseLevelLabel->setObjectName(QString("verboseLevelLabel")); + + gridLayout->addWidget(verboseLevelLabel, 1, 0, 1, 1); + + verboseLevelSpin = new QSpinBox(logGroupBox); + verboseLevelSpin->setObjectName(QString("verboseLevelSpin")); + + gridLayout->addWidget(verboseLevelSpin, 1, 1, 1, 1); + + + gridLayout_2->addLayout(gridLayout, 0, 0, 1, 1); + + horizontalLayout = new QHBoxLayout(); + horizontalLayout->setObjectName(QString("horizontalLayout")); + logInFileCheck = new QCheckBox(logGroupBox); + logInFileCheck->setObjectName(QString("logInFileCheck")); + logInFileCheck->setChecked(true); + + horizontalLayout->addWidget(logInFileCheck); + + removeLogOnSuccessCheck = new QCheckBox(logGroupBox); + removeLogOnSuccessCheck->setObjectName(QString("removeLogOnSuccessCheck")); + removeLogOnSuccessCheck->setChecked(true); + + horizontalLayout->addWidget(removeLogOnSuccessCheck); + + + gridLayout_2->addLayout(horizontalLayout, 1, 0, 1, 1); + + keepWorkingFilesCheck = new QCheckBox(logGroupBox); + keepWorkingFilesCheck->setObjectName(QString("keepWorkingFilesCheck")); + keepWorkingFilesCheck->setAutoExclusive(false); + + gridLayout_2->addWidget(keepWorkingFilesCheck, 2, 0, 1, 1); + + + gridLayout_4->addWidget(logGroupBox, 3, 0, 1, 2); + +} +void MgAdaptAdvWidget::_onWorkingDirectoryPushButton() +{ + QString aDirName=QFileDialog::getExistingDirectory (); + if (!(aDirName.isEmpty()))workingDirectoryLineEdit->setText(aDirName); +} +void MgAdaptAdvWidget::onMeshDimChanged(ADAPTATION_MODE aMode) +{ +/* default adaptation mode + * assume that if meshDim == 2 and no 3D backgrounmesh-->adaptation surface + * if meshDim == 3 and if there is not 2D mesh -->VOLUME + * else BOTH + */ + + QString adaptation("adaptation"), value; + switch(aMode) + { + case ADAPTATION_MODE::SURFACE: + { + value ="surface"; + setOptionValue(adaptation, value); + break; + } + case ADAPTATION_MODE::BOTH : + { + value = "both"; + setOptionValue(adaptation, value); + break; + } + case ADAPTATION_MODE::VOLUME : + { + value = "volume"; + setOptionValue(adaptation, value); + break; + } + } +} +void MgAdaptAdvWidget::setOptionValue(QString& option, QString& value) +{ + std::map::iterator it = optionTreeWidgetItem.find(option); + if (it != optionTreeWidgetItem.end()) + { + it->second->setText( 0, tr( option.toLatin1().constData() )); + it->second->setText( 1, tr( value.toLatin1().constData() )); + it->second->setCheckState( 0, Qt::Checked ); + it->second->setData( NAME_COL, PARAM_NAME, option ); + myOptionTable->editItem( it->second, NAME_COL ); + } +} +namespace +{ +bool isEditable( const QModelIndex& index ) +{ + return index.isValid() && + index.flags() & Qt::ItemIsEditable && + index.flags() & Qt::ItemIsEnabled && + ( !index.data( Qt::UserRole + 1 ).isValid() || index.data( Qt::UserRole + 1 ).toInt() != 0 ); +} +} + +MgAdaptAdvWidgetTreeWidget::MgAdaptAdvWidgetTreeWidget( QWidget* parent ) + : QTreeWidget( parent ) +{ +} + +QModelIndex MgAdaptAdvWidgetTreeWidget::moveCursor( CursorAction action, Qt::KeyboardModifiers modifiers ) +{ + QModelIndex current = currentIndex(); + int column = current.column(); + if ( action == MoveNext ) + { + if ( column < columnCount()-1 ) + { + QModelIndex next = current.sibling( current.row(), column+1 ); + if ( isEditable( next ) ) return next; + } + else + { + QModelIndex next = current.sibling( current.row()+1, 0 ); + if ( isEditable( next ) ) return next; + } + } + else if ( action == MovePrevious ) + { + if ( column == 0 ) { + QModelIndex next = current.sibling( current.row()-1, columnCount()-1 ); + if ( isEditable( next ) ) return next; + } + else { + QModelIndex next = current.sibling( current.row(), column-1 ); + if ( isEditable( next ) ) return next; + } + } + return QTreeWidget::moveCursor( action, modifiers ); +} + +void MgAdaptAdvWidgetTreeWidget::keyPressEvent( QKeyEvent* e ) +{ + switch ( e->key() ) + { + case Qt::Key_F2: + { + QModelIndex index = currentIndex(); + if ( !isEditable( index ) ) { + for ( int i = 0; i < columnCount(); i++ ) { + QModelIndex sibling = index.sibling( index.row(), i ); + if ( isEditable( sibling ) ) { + if ( !edit( sibling, EditKeyPressed, e ) ) e->ignore(); + } + } + } + } + break; + default: + break; + } + QTreeWidget::keyPressEvent( e ); +} diff --git a/src/SMESHGUI/SMESHGUI_MgAdaptDlg.h b/src/SMESHGUI/SMESHGUI_MgAdaptDlg.h new file mode 100644 index 000000000..89902e670 --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_MgAdaptDlg.h @@ -0,0 +1,284 @@ +// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// SMESH SMESHGUI : GUI for the adaptation in the SMESH component +// File : MG_ADAPTGUI.hxx +// +#ifndef MG_ADAPTGUI_HXX +#define MG_ADAPTGUI_HXX + +// Qt includes +#include +#include +#include + +#include + +#include +#include CORBA_SERVER_HEADER(MG_ADAPT) +#include + +class SalomeApp_Module; + +class QButtonGroup; +class QLineEdit; +class QGroupBox; +class QRadioButton; +class QLabel; +class QCheckBox; +class QGridLayout; +class QTabWidget; +class QDoubleSpinBox; +class QSpacerItem; +class QSpinBox; +class QTreeWidgetItem; +class QHBoxLayout; +class QComboBox; + +class SMESHGUI_MgAdaptArguments; +class MgAdaptAdvWidgetTreeWidget; +class MgAdaptAdvWidget; + +enum ADAPTATION_MODE{ + SURFACE, + VOLUME, + BOTH +}; + +//================================================================================= +// class : SMESHGUI_MgAdaptDlg +// purpose : +//================================================================================= +class SMESHGUI_MgAdaptDlg : public QDialog +{ + Q_OBJECT +public: + //! Property type + enum Mode { Arguments, AdvancedOptions}; + SMESHGUI_MgAdaptDlg( SalomeApp_Module*, SMESH::MG_ADAPT_ptr, QWidget* parent= 0,bool isCreation = true ); + ~SMESHGUI_MgAdaptDlg(); + + void buildDlg(); + void reject(); + bool checkParams(QString& msg) ; + //~void setModel(MgAdapt*); + SMESH::MG_ADAPT_ptr getModel() const; + +public slots: + +protected slots: + virtual bool PushOnApply(); + +private slots: + virtual void PushOnHelp(); + virtual void PushOnOK(); + +protected : + + SMESHGUI_MgAdaptArguments* myArgs; + MgAdaptAdvWidget* myAdvOpt; + + bool readParamsFromHypo( ) const ; + bool readParamsFromWidgets( ) ; + bool storeParamsToHypo( const SMESH::MgAdaptHypothesisData & ) const; + +private: + + SalomeApp_Module* mySMESHGUI; + QTabWidget* myTabWidget; + + SMESH::MgAdaptHypothesisData_var myData; + SALOME::GenericObj_wrap< SMESH::MG_ADAPT > model; + +}; + +class SMESHGUI_MgAdaptArguments : public QWidget +{ + Q_OBJECT +public: + //! Property type + enum Mode { Mesh, Browser}; + enum SIZEMAP { Local, Background, Constant}; + SMESHGUI_MgAdaptArguments( QWidget* parent); + ~SMESHGUI_MgAdaptArguments(); + void setMode( const Mode, const SIZEMAP ); + + QString myFileInDir; + QString myFileOutDir; + QString myFileSizeMapDir; + QGroupBox* aMeshIn ; + QRadioButton* aMedfile; + QRadioButton* aBrowser ; + QLineEdit* aBrowserObject; + QPushButton* selectMedFilebutton ; + QSpacerItem* hspacer; + QLineEdit* selectMedFileLineEdit ; + QButtonGroup* meshInGroup ; + QGridLayout* meshIn ; + + QGroupBox* aMeshOut ; + QLabel* meshName; + QLineEdit* meshNameLineEdit; + QSpacerItem* secondHspacer; + QCheckBox* medFileCheckBox; + QPushButton* selectOutMedFilebutton; + QLineEdit* selectOutMedFileLineEdit; + QSpacerItem* thirdHspacer; + QCheckBox* publishOut; + QGridLayout* meshOut ; + + QGroupBox* sizeMapDefinition ; + QRadioButton* localButton; + QRadioButton* backgroundButton ; + QRadioButton* constantButton ; + QLabel* medFileBackground; + QPushButton* selectMedFileBackgroundbutton; + QLineEdit* selectMedFileBackgroundLineEdit; + QLabel* valueLabel; + QDoubleSpinBox* dvalue; + QButtonGroup* sizeMapDefGroup ; + QGridLayout* sizeMapDefGroupLayout; + + + QGroupBox* sizeMapField; + QLabel* fieldName; + QComboBox* fieldNameCmb; + QRadioButton* noTimeStep; + QRadioButton* lastTimeStep ; + QRadioButton* chosenTimeStep; + QLabel* timeStepLabel; + QSpinBox* timeStep; + QLabel* rankLabel; + QSpinBox* rankSpinBox; + QButtonGroup* timeStepGroup; + QGridLayout* sizeMapFieldGroupLayout; + +signals: + void updateSelection(); + void toExportMED(const char *); + void meshDimSignal(ADAPTATION_MODE aMode); +public slots: + +protected slots: + +private slots: + void modeChanged( int); + void sizeMapDefChanged(int); + void timeStepGroupChanged(int timeStepType, bool disableOther = false, int vmax = 0); + void onSelectMedFilebuttonClicked(); + void clear(); + void onMedFileCheckBox(int); + void onPublishOut(int); + void onSelectOutMedFilebutton(); + void onSelectMedFileBackgroundbutton(); + void onLocalSelected(QString); + void onNoTimeStep(bool disableOther = false); + void onLastTimeStep(bool disableOther = false); + void onChosenTimeStep(bool disableOther = false, int vmax = 0); + void visibleTimeStepRankLabel(bool visible); + void valueAdaptation (); + +private: + + QString getMedFileName(bool avertir); + int meshDim; + int meshDimBG; + std::map myFieldList; + +}; +enum { + OPTION_ID_COLUMN = 0, + OPTION_TYPE_COLUMN, + OPTION_NAME_COLUMN = 0, + OPTION_VALUE_COLUMN, + NB_COLUMNS, +}; + +////////////////////////////////////////// +// MgAdaptAdvWidget +////////////////////////////////////////// +class MgAdaptAdvWidget : public QWidget +{ + Q_OBJECT + +public: + MgAdaptAdvWidget( QWidget* = 0, std::vector * = nullptr, Qt::WindowFlags = 0 ); + ~MgAdaptAdvWidget(); + std::vector < std::string > *myOptions; + QGridLayout *gridLayout_4; + MgAdaptAdvWidgetTreeWidget *myOptionTable; + QPushButton *addBtn; + QSpacerItem *horizontalSpacer; + QGroupBox *logGroupBox; + QGridLayout *gridLayout_2; + QGridLayout *gridLayout; + QLabel *workingDirectoryLabel; + QLineEdit *workingDirectoryLineEdit; + QPushButton *workingDirectoryPushButton; + QLabel *verboseLevelLabel; + QSpinBox *verboseLevelSpin; + QHBoxLayout *horizontalLayout; + QCheckBox *logInFileCheck; + QCheckBox *removeLogOnSuccessCheck; + QCheckBox *keepWorkingFilesCheck; + + void AddOption( const char* name_value_type, bool isCustom = false ); + void GetOptionAndValue( QTreeWidgetItem * tblRow, QString& option, QString& value, bool& dflt ); + void setupWidget(); + +public slots: + void onAddOption(); + void itemChanged(QTreeWidgetItem * tblRow, int column); + void onMeshDimChanged(ADAPTATION_MODE aMode); +private slots: + void _onWorkingDirectoryPushButton(); +private: + void setOptionValue(QString& option, QString& value); + std::map optionTreeWidgetItem; + + QTreeWidgetItem* getNewQTreeWidgetItem(QTreeWidget* table, const char* option, QString& name, bool isCustom); + +}; + +enum { EDITABLE_ROLE = Qt::UserRole + 1, PARAM_NAME, + NAME_COL = 0, VALUE_COL + }; + +class ItemDelegate: public QItemDelegate +{ +public: + + ItemDelegate(QObject* parent=0): QItemDelegate(parent) {} + QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &o, const QModelIndex &index) const; +}; + +class MgAdaptAdvWidgetTreeWidget : public QTreeWidget +{ + Q_OBJECT +public: + MgAdaptAdvWidgetTreeWidget( QWidget* ); + +protected: + QModelIndex moveCursor( CursorAction, Qt::KeyboardModifiers ); + void keyPressEvent( QKeyEvent* ); +}; + +#endif // MG_ADAPTGUI_HXX