]> SALOME platform Git repositories - plugins/hybridplugin.git/blobdiff - src/GUI/HYBRIDPluginGUI_HypothesisCreator.cxx
Salome HOME
#17784 [EDF] MESH-GEMS-2.9.6 Meshers options
[plugins/hybridplugin.git] / src / GUI / HYBRIDPluginGUI_HypothesisCreator.cxx
index 7c0ea49df162ca131a03d4e86c9d2578a38f6b75..8d0a16383ca2094afca0a35b917ef1c302fd0cd8 100644 (file)
@@ -390,126 +390,12 @@ QFrame* HYBRIDPluginGUI_HypothesisCreator::buildFrame()
     aStdLayout->addWidget( myName, row++, 1, 1, 1 );
   }
 
-  myToMeshHolesCheck = new QCheckBox( tr( "HYBRID_TO_MESH_HOLES" ), myStdGroup );
-  //aStdLayout->addWidget( myToMeshHolesCheck, row, 0, 1, 1 ); #stay, not view, may be used tomorrow...
-  myToMeshHolesCheck->hide();
-  myToMakeGroupsOfDomains = new QCheckBox( tr( "HYBRID_TO_MAKE_DOMAIN_GROUPS" ), myStdGroup );
-  //aStdLayout->addWidget( myToMakeGroupsOfDomains, row++, 1, 1, 1 ); #stay, not view, may be used tomorrow...
-  myToMakeGroupsOfDomains->hide();
-  //aStdLayout->addWidget( new QLabel( tr( "HYBRID_OPTIMIZATIOL_LEVEL" ), myStdGroup ), row, 0, 1, 1 );
-  myOptimizationLevelCombo = new QComboBox( myStdGroup );
-  //aStdLayout->addWidget( myOptimizationLevelCombo, row++, 1, 1, 1 ); #stay, not view, may be used tomorrow...
-  myOptimizationLevelCombo->hide();
-
-  QStringList types;
-  types << tr( "LEVEL_NONE" ) << tr( "LEVEL_LIGHT" ) << tr( "LEVEL_MEDIUM" ) << tr( "LEVEL_STANDARDPLUS" ) << tr( "LEVEL_STRONG" );
-  myOptimizationLevelCombo->addItems( types );
-
-  QLabel* aLabel = new QLabel( tr( "HYBRID_BOUNDARY_LAYERS_GROWTH" ), myStdGroup );
-  aLabel->setToolTip(tr( "HYBRID_BOUNDARY_LAYERS_HELP" ));
-  aStdLayout->addWidget( aLabel, row, 0, 1, 1 );
-  myBoundaryLayersGrowthCombo = new QComboBox( myStdGroup );
-  myBoundaryLayersGrowthCombo->setToolTip(tr( "HYBRID_BOUNDARY_LAYERS_HELP" ));
-  
-  aStdLayout->addWidget( myBoundaryLayersGrowthCombo, row++, 1, 1, 1 );
-  
-  QStringList typesBoundaryLayersGrowth;
-  typesBoundaryLayersGrowth << tr( "HYBRID_LAYER_GROWTH_DOWNWARD" ) << tr( "HYBRID_LAYER_GROWTH_UPWARD" );
-  myBoundaryLayersGrowthCombo->addItems( typesBoundaryLayersGrowth );
-  
-  aStdLayout->addWidget( new QLabel( tr( "HYBRID_HeightFirstLayer" ), myStdGroup ), row, 0, 1, 1 );
-  myHeightFirstLayerSpin = new SMESHGUI_SpinBox( myStdGroup );
-  myHeightFirstLayerSpin->RangeStepAndValidator(0., COORD_MAX, .1, "length_precision");
-  aStdLayout->addWidget( myHeightFirstLayerSpin, row++, 1, 1, 1 );
-
-  aStdLayout->addWidget( new QLabel( tr( "HYBRID_NbOfBoundaryLayers" ), myStdGroup ), row, 0, 1, 1 );
-  myNbOfBoundaryLayersSpin = new QSpinBox( myStdGroup );
-  aStdLayout->addWidget( myNbOfBoundaryLayersSpin, row++, 1, 1, 1 );
-
-  aStdLayout->addWidget( new QLabel( tr( "HYBRID_BoundaryLayersProgression" ), myStdGroup ), row, 0, 1, 1 );
-  myBoundaryLayersProgressionSpin = new SMESHGUI_SpinBox( myStdGroup );
-  myBoundaryLayersProgressionSpin->RangeStepAndValidator(0., 10., .1, "length_precision");
-  aStdLayout->addWidget( myBoundaryLayersProgressionSpin, row++, 1, 1, 1 );
-
-  aStdLayout->addWidget( new QLabel( tr( "COLLISION_MODE" ), myStdGroup ), row, 0, 1, 1 );
-  myCollisionModeCombo = new QComboBox( myStdGroup );
-  aStdLayout->addWidget( myCollisionModeCombo, row++, 1, 1, 1 );
-  
-  QStringList typescoll;
-  typescoll << tr( "COLLISION_DECREASE" ) << tr( "COLLISION_STOP" );
-  myCollisionModeCombo->addItems( typescoll );
-
-  aStdLayout->addWidget( new QLabel( tr( "HYBRID_GENERATION_ELEMENT" ), myStdGroup ), row, 0, 1, 1 );
-  myElementGenerationCombo = new QComboBox( myStdGroup );
-  aStdLayout->addWidget( myElementGenerationCombo, row++, 1, 1, 1 );
-  
-  QStringList typesElementGeneration;
-  typesElementGeneration << tr( "HYBRID_GENERATION_TETRA_DOMINANT" ) << tr( "HYBRID_GENERATION_HEXA_DOMINANT" ) << tr( "HYBRID_GENERATION_CARTESIAN_CORE" );
-  myElementGenerationCombo->addItems( typesElementGeneration );
-  
-  aStdLayout->addWidget( new QLabel( tr( "HYBRID_CORE_SIZE" ), myStdGroup ), row, 0, 1, 1 );
-  myCoreSizeSpin = new SMESHGUI_SpinBox( myStdGroup );
-  myCoreSizeSpin->RangeStepAndValidator(0., COORD_MAX, 10., "length_precision");
-  aStdLayout->addWidget( myCoreSizeSpin, row++, 1, 1, 1 );
-
-  myAddMultinormalsCheck = new QCheckBox( tr( "HYBRID_ADD_MULTINORMALS" ), myStdGroup );
-  aStdLayout->addWidget( myAddMultinormalsCheck, row++, 0, 1, 1 );
-  
-  aStdLayout->addWidget( new QLabel( tr( "HYBRID_MULTINORMAL_ANGLE" ), myStdGroup ), row, 0, 1, 1 );
-  myMultinormalsAngleSpin = new SMESHGUI_SpinBox( myStdGroup );
-  myMultinormalsAngleSpin->RangeStepAndValidator(0., 90., 2., "threshold");
-  aStdLayout->addWidget( myMultinormalsAngleSpin, row++, 1, 1, 1 );
-
-  mySmoothNormalsCheck = new QCheckBox( tr( "HYBRID_SMOOTH_NORMALS" ), myStdGroup );
-  aStdLayout->addWidget( mySmoothNormalsCheck, row++, 0, 1, 1 );
-  aStdLayout->setRowStretch( row, 10 );
+  myStdWidget = new HYBRIDPluginGUI_StdWidget( myStdGroup );
+  myStdWidget->verticalLayout->setMargin( 0 );
+  aStdLayout->addWidget( myStdWidget, row++, 0, 1, 2 );
 
   // advanced parameters
-  myAdvGroup = new QWidget();
-  QGridLayout* anAdvLayout = new QGridLayout( myAdvGroup );
-  anAdvLayout->setSpacing( 6 );
-  anAdvLayout->setMargin( 11 );
-  myAdvWidget = new HYBRIDPluginGUI_AdvWidget(myAdvGroup);
-  anAdvLayout->addWidget( myAdvWidget);
-
-  myAdvWidget->maxMemoryCheck->setText(tr( "MAX_MEMORY_SIZE" ));
-  myAdvWidget->initialMemoryCheck->setText(tr( "INIT_MEMORY_SIZE" ));
-
-  myAdvWidget->maxMemorySpin->RangeStepAndValidator(20.0, 1e6, 10.0);
-  myAdvWidget->maxMemorySpin->setValue( 128.0 );
-
-  myAdvWidget->initialMemorySpin->RangeStepAndValidator(0.0, 1e6, 10.0);
-  myAdvWidget->initialMemorySpin->setValue( 100.0 );
-
-  myAdvWidget->initialMemoryLabel            ->setText (tr( "MEGABYTE" ));
-  myAdvWidget->maxMemoryLabel                ->setText (tr( "MEGABYTE" ));
-    
-  myAdvWidget->workingDirectoryPushButton    ->setText (tr( "SELECT_DIR" ));
-  myAdvWidget->keepWorkingFilesCheck         ->setText (tr( "KEEP_WORKING_FILES" ));
-  myAdvWidget->verboseLevelLabel             ->setText (tr( "VERBOSE_LEVEL" ));
-  myAdvWidget->removeLogOnSuccessCheck       ->setText (tr( "REMOVE_LOG_ON_SUCCESS" ));
-  myAdvWidget->logInFileCheck                ->setText (tr( "LOG_IN_FILE" ));
-  
-  myAdvWidget->memoryGroupBox                ->setTitle(tr( "MEMORY_GROUP_TITLE" ));
-  myAdvWidget->logGroupBox                   ->setTitle(tr( "LOG_GROUP_TITLE" ));
-  myAdvWidget->advancedMeshingGroupBox       ->setTitle(tr( "ADVANCED_MESHING_GROUP_TITLE" ));
-  
-  myAdvWidget->memoryGroupBox->hide();
-
-  myAdvWidget->createNewNodesCheck->hide();
-  //myAdvWidget->createNewNodesLabel->hide();
-  myAdvWidget->removeInitialCentralPointCheck->hide();
-  myAdvWidget->boundaryRecoveryCheck->hide();
-  myAdvWidget->FEMCorrectionCheck->hide();
-  myAdvWidget->gradationLabel->hide();
-  myAdvWidget->gradationSpinBox->hide();
-
-  myAdvWidget->createNewNodesCheck           ->setText (tr( "TO_ADD_NODES" ));
-  myAdvWidget->removeInitialCentralPointCheck->setText (tr( "NO_INITIAL_CENTRAL_POINT" ));
-  myAdvWidget->boundaryRecoveryCheck         ->setText (tr( "RECOVERY_VERSION" ));
-  myAdvWidget->FEMCorrectionCheck            ->setText (tr( "FEM_CORRECTION" ));
-  myAdvWidget->gradationLabel                ->setText (tr( "HYBRID_GRADATION" ));
-  myAdvWidget->gradationSpinBox->RangeStepAndValidator(1.05, 5.0, 0.05, "length_precision");
+  myAdvWidget = new HYBRIDPluginGUI_AdvWidget( tab );
 
   // Enforced vertices parameters
   myEnfGroup = new QWidget();
@@ -684,9 +570,9 @@ QFrame* HYBRIDPluginGUI_HypothesisCreator::buildFrame()
   // selection of faces for layers
 
   QWidget* faceSelLayersGroup = new QWidget( dlg() );
-  myLayersOnAllWrapCheck = new QCheckBox( tr( "HYBRID_LAYERS_ON_ALL_WRAP" ), faceSelLayersGroup );
+  //myLayersOnAllWrapCheck = new QCheckBox( tr( "HYBRID_LAYERS_ON_ALL_WRAP" ), faceSelLayersGroup );
   QGridLayout* faceSelLayersLayout = new QGridLayout( faceSelLayersGroup );
-  faceSelLayersLayout->addWidget(myLayersOnAllWrapCheck, 0, 0 );
+  //faceSelLayersLayout->addWidget(myLayersOnAllWrapCheck, 0, 0 );
 
   myFacesLbl = new QLabel( tr("HYBRID_FACE_IDS"), faceSelLayersGroup );
   faceSelLayersLayout->addWidget( myFacesLbl, 1, 0 );
@@ -726,7 +612,7 @@ QFrame* HYBRIDPluginGUI_HypothesisCreator::buildFrame()
 
   // add tabs
   tab->insertTab( STD_TAB, myStdGroup, tr( "SMESH_ARGUMENTS" ) );
-  tab->insertTab( ADV_TAB, myAdvGroup, tr( "HYBRID_ADV_ARGS" ) );
+  tab->insertTab( ADV_TAB, myAdvWidget, tr( "HYBRID_ADV_ARGS" ) );
   if ( aMainEntry.isEmpty() && aSubEntry.isEmpty() ) // mesh not based of geometry
     faceSelLayersGroup->hide();
   else {
@@ -739,18 +625,10 @@ QFrame* HYBRIDPluginGUI_HypothesisCreator::buildFrame()
 
   // connections
   connect( tab,              SIGNAL( currentChanged ( int )),       this,         SLOT( onTabChanged( int ) ) );
-  //connect( myLayersOnAllWrapCheck,      SIGNAL( toggled( bool ) ), this, SLOT( onLayersOnAllWrap(bool)));
-  connect( myLayersOnAllWrapCheck,      SIGNAL( toggled( bool ) ), this, SLOT( updateWidgets() ) );
-  //connect( myToMeshHolesCheck,      SIGNAL( toggled( bool ) ), this, SLOT( onToMeshHoles(bool)));
-  //connect( myAdvWidget->maxMemoryCheck,             SIGNAL( toggled( bool ) ), this, SLOT( updateWidgets() ) );
-  //connect( myAdvWidget->initialMemoryCheck,         SIGNAL( toggled( bool ) ), this, SLOT( updateWidgets() ) );
-  //connect( myAdvWidget->boundaryRecoveryCheck,      SIGNAL( toggled( bool ) ), this, SLOT( updateWidgets() ) );
-
-  //connect( myBoundaryLayersGrowthCombo,  SIGNAL( toggled( bool ) ), this, SLOT( updateWidgets() ) );
-  //connect( myElementGenerationCombo,     SIGNAL( toggled( bool ) ), this, SLOT( updateWidgets() ) );
-  connect( myAddMultinormalsCheck,       SIGNAL( toggled( bool ) ), this, SLOT( updateWidgets() ) );
-  connect( mySmoothNormalsCheck,         SIGNAL( toggled( bool ) ), this, SLOT( updateWidgets() ) );
-  
+  connect( myAdvWidget->addBtn, SIGNAL( clicked() ),           this, SLOT( onAddOption() ) );
+  connect( myStdWidget->myBoundaryLayersSizeMode, SIGNAL( currentIndexChanged(int)), SLOT( updateWidgets()));
+  connect( myStdWidget->myImprinting, SIGNAL( currentIndexChanged(int)), SLOT( updateWidgets()));
+  connect( myStdWidget->mySnapping,   SIGNAL( currentIndexChanged(int)), SLOT( updateWidgets()));
   connect( myAdvWidget->logInFileCheck,             SIGNAL( toggled( bool ) ), this, SLOT( updateWidgets() ) );
   connect( myAdvWidget->keepWorkingFilesCheck,      SIGNAL( toggled( bool ) ), this, SLOT( updateWidgets() ) );
   connect( myAdvWidget->workingDirectoryPushButton, SIGNAL( clicked() ),       this, SLOT( onDirBtnClicked() ) );
@@ -904,8 +782,8 @@ void HYBRIDPluginGUI_HypothesisCreator::onSelectEnforcedVertex() {
     myEnfVertex = myEnfVertexWdg->GetObject< GEOM::GEOM_Object >(nbSelEnfVertex-1);
     if (myEnfVertex == GEOM::GEOM_Object::_nil())
       return;
-    if (myEnfVertex->GetShapeType() == GEOM::VERTEX) {
-      HYBRIDPluginGUI_HypothesisCreator* that = (HYBRIDPluginGUI_HypothesisCreator*)this;
+    if (myEnfVertex->GetShapeType() == GEOM::VERTEX)
+    {
       GEOM::GEOM_IMeasureOperations_var measureOp = getGeomEngine()->GetIMeasureOperations();
       if (CORBA::is_nil(measureOp))
         return;
@@ -1452,20 +1330,6 @@ void HYBRIDPluginGUI_HypothesisCreator::onRemoveEnforcedVertex()
   myEnforcedTableWidget->selectionModel()->clearSelection();
 }
 
-void HYBRIDPluginGUI_HypothesisCreator::onLayersOnAllWrap(bool isOn)
-{
-   // myToMakeGroupsOfDomains->setEnabled( isOn );
-   // if ( !isOn )
-   //   myToMakeGroupsOfDomains->setChecked( false );
-}
-
-void HYBRIDPluginGUI_HypothesisCreator::onToMeshHoles(bool isOn)
-{
-  // myToMakeGroupsOfDomains->setEnabled( isOn );
-  // if ( !isOn )
-  //   myToMakeGroupsOfDomains->setChecked( false );
-}
-
 void HYBRIDPluginGUI_HypothesisCreator::onDirBtnClicked()
 {
   QString dir = SUIT_FileDlg::getExistingDirectory( dlg(), myAdvWidget->workingDirectoryLineEdit->text(), QString() );
@@ -1487,27 +1351,24 @@ void HYBRIDPluginGUI_HypothesisCreator::onTabChanged( int )
 
 void HYBRIDPluginGUI_HypothesisCreator::updateWidgets()
 {
-  //customs automatic set
-  //myToMakeGroupsOfDomains->setEnabled( myToMeshHolesCheck->isChecked() );
-  //myAdvWidget->maxMemorySpin->setEnabled( myAdvWidget->maxMemoryCheck->isChecked() );
-  //myAdvWidget->initialMemoryCheck->setEnabled( !myAdvWidget->boundaryRecoveryCheck->isChecked() );
-  //myAdvWidget->initialMemorySpin->setEnabled( myAdvWidget->initialMemoryCheck->isChecked() && !myAdvWidget->boundaryRecoveryCheck->isChecked() );
-  //myOptimizationLevelCombo->setEnabled( !myAdvWidget->boundaryRecoveryCheck->isChecked() );
-  myMultinormalsAngleSpin->setEnabled( myAddMultinormalsCheck->isChecked() );
   if ( sender() == myAdvWidget->logInFileCheck ||
        sender() == myAdvWidget->keepWorkingFilesCheck )
   {
-    bool logFileRemovable = myAdvWidget->logInFileCheck->isChecked() &&
-                            !myAdvWidget->keepWorkingFilesCheck->isChecked();
-
+    bool logFileRemovable = ( myAdvWidget->logInFileCheck->isChecked() &&
+                              !myAdvWidget->keepWorkingFilesCheck->isChecked() );
     myAdvWidget->removeLogOnSuccessCheck->setEnabled( logFileRemovable );
   }
-  bool enabled = !myLayersOnAllWrapCheck->isChecked();
-  myFacesLbl->setEnabled(enabled);
-  myFaceSelectorLayers->setEnabled(enabled);
-  if ( QTabWidget* tab = qobject_cast<QTabWidget*>( myStdGroup->parentWidget()->parentWidget() )) {
-    tab->setTabEnabled( FACE_SEL_IMPRINTING_TAB, enabled );
-    tab->setTabEnabled( FACE_SEL_SNAPPING_TAB, enabled );
+
+  myStdWidget->myCoreSize->setEnabled( myStdWidget->myCoreSizeEnabled->isChecked() );
+
+  if ( QTabWidget* tab = qobject_cast<QTabWidget*>( myStdGroup->parentWidget()->parentWidget() ))
+  {
+    bool isGlobal     = myStdWidget->GetLayersOnAllWrap();
+    bool isImprinting = myStdWidget->myImprinting->currentIndex();
+    bool isSnapping   = myStdWidget->mySnapping->currentIndex();
+    tab->setTabEnabled( FACE_SEL_LAYERS_TAB,     !isGlobal );
+    tab->setTabEnabled( FACE_SEL_IMPRINTING_TAB, isImprinting );
+    tab->setTabEnabled( FACE_SEL_SNAPPING_TAB,   isSnapping );
   }
 }
 
@@ -1521,7 +1382,43 @@ bool HYBRIDPluginGUI_HypothesisCreator::checkParams(QString& msg) const
     return false;
   }
 
-  return true;
+  HYBRIDPlugin::HYBRIDPlugin_Hypothesis_var h =
+    HYBRIDPlugin::HYBRIDPlugin_Hypothesis::_narrow( hypothesis() );
+
+  myAdvWidget->myOptionTable->setFocus();
+  QApplication::instance()->processEvents();
+
+  QString name, value;
+  bool isDefault, ok = true;
+  int iRow = 0, nbRows = myAdvWidget->myOptionTable->topLevelItemCount();
+  for ( ; iRow < nbRows; ++iRow )
+  {
+    QTreeWidgetItem* row = myAdvWidget->myOptionTable->topLevelItem( iRow );
+    myAdvWidget->GetOptionAndValue( row, name, value, isDefault );
+
+    if ( name.simplified().isEmpty() )
+      continue; // invalid custom option
+
+    if ( isDefault ) // not selected option
+      value.clear();
+
+    try {
+      h->SetOptionValue( name.toLatin1().constData(), value.toLatin1().constData() );
+    }
+    catch ( const SALOME::SALOME_Exception& ex )
+    {
+      msg = ex.details.text.in();
+      ok = false;
+      break;
+    }
+  }
+
+  if ( !ok )
+  {
+    h->SetOptionValues( myOptions ); // restore values
+  }
+
+  return ok;
 }
 
 void HYBRIDPluginGUI_HypothesisCreator::retrieveParams() const
@@ -1532,30 +1429,24 @@ void HYBRIDPluginGUI_HypothesisCreator::retrieveParams() const
 
   if ( myName )
     myName->setText( data.myName );
-  myLayersOnAllWrapCheck                      ->setChecked    ( data.myLayersOnAllWrap );
-  myToMeshHolesCheck                          ->setChecked    ( data.myToMeshHoles );
-  myToMakeGroupsOfDomains                     ->setChecked    ( data.myToMakeGroupsOfDomains );
-  myOptimizationLevelCombo                    ->setCurrentIndex( data.myOptimizationLevel );
-  myAdvWidget->maxMemoryCheck                 ->setChecked    ( data.myMaximumMemory > 0 );
-  myAdvWidget->maxMemorySpin                  ->setValue      ( qMax( data.myMaximumMemory,
-                                                                      myAdvWidget->maxMemorySpin->minimum() ));
-  myAdvWidget->initialMemoryCheck             ->setChecked    ( data.myInitialMemory > 0 );
-  myAdvWidget->initialMemorySpin              ->setValue      ( qMax( data.myInitialMemory,
-                                                                      myAdvWidget->initialMemorySpin->minimum() ));
-
-  myCollisionModeCombo            ->setCurrentIndex( data.myCollisionMode );
-  myBoundaryLayersGrowthCombo     ->setCurrentIndex( data.myBoundaryLayersGrowth );
-  myElementGenerationCombo        ->setCurrentIndex( data.myElementGeneration );
-  myAddMultinormalsCheck          -> setChecked ( data.myAddMultinormals );
-  mySmoothNormalsCheck            -> setChecked ( data.mySmoothNormals );
-  myHeightFirstLayerSpin          -> setValue( data.myHeightFirstLayer );
-  myNbOfBoundaryLayersSpin        -> setValue( data.myNbOfBoundaryLayers );
-  myBoundaryLayersProgressionSpin -> setValue( data.myBoundaryLayersProgression );
+  myStdWidget->SetLayersOnAllWrap( data.myLayersOnAllWrap );
+
+  myStdWidget->myNbOfBoundaryLayers        ->setValue( data.myNbOfBoundaryLayers );
+  myStdWidget                              ->SetLayersOnAllWrap( data.myLayersOnAllWrap );
+  myStdWidget->myHeightFirstLayer          ->setValue( data.myHeightFirstLayer );
+  myStdWidget->myHeightIsRelative          ->setCurrentIndex( data.myHeightIsRelative );
+  myStdWidget->myBoundaryLayersGrowth      ->setCurrentIndex( data.myBoundaryLayersGrowth );
+  myStdWidget->myBoundaryLayersMaxElemAngle->setValue( data.myBoundaryLayersMaxElemAngle );
+  myStdWidget->myBoundaryLayersProgression ->setValue( data.myBoundaryLayersProgression );
+  myStdWidget->myImprinting                ->setCurrentIndex( data.myImprinting );
+  myStdWidget->mySnapping                  ->setCurrentIndex( data.mySnapping );
+  myStdWidget->myElementGeneration         ->setCurrentIndex( data.myElementGeneration );
   if (data.myCoreSize <= 0)
-    myCoreSizeSpin->setText("");
+    myStdWidget->myCoreSize->setText("");
   else
-    myCoreSizeSpin                -> setValue( data.myCoreSize );
-  myMultinormalsAngleSpin         -> setValue( data.myMultinormalsAngle );
+    myStdWidget->myCoreSize->setValue( data.myCoreSize );
+  myStdWidget->myCoreSizeEnabled->setChecked( data.myCoreSize > 0 );
+
   myFaceSelectorLayers            ->SetListOfIDs( data.myFaceWLIds );
   myFaceSelectorImprinting        ->SetListOfIDs( data.myFaceWIIds );
   myFaceSelectorSnapping          ->SetListOfIDs( data.myFaceWSIds );
@@ -1563,15 +1454,19 @@ void HYBRIDPluginGUI_HypothesisCreator::retrieveParams() const
   myAdvWidget->workingDirectoryLineEdit       ->setText   ( data.myWorkingDir );
   myAdvWidget->keepWorkingFilesCheck          ->setChecked( data.myKeepFiles );
   myAdvWidget->verboseLevelSpin               ->setValue  ( data.myVerboseLevel );
-  myAdvWidget->createNewNodesCheck            ->setChecked( data.myToCreateNewNodes );
-  myAdvWidget->removeInitialCentralPointCheck ->setChecked( data.myRemoveInitialCentralPoint );
-  myAdvWidget->boundaryRecoveryCheck          ->setChecked( data.myBoundaryRecovery );
-  myAdvWidget->FEMCorrectionCheck             ->setChecked( data.myFEMCorrection );
-  myAdvWidget->gradationSpinBox               ->setValue  ( data.myGradation );
-  myAdvWidget->myAdvOptionsTable              ->SetCustomOptions( data.myTextOption );
   myAdvWidget->logInFileCheck                 ->setChecked( !data.myLogInStandardOutput );
   myAdvWidget->removeLogOnSuccessCheck        ->setChecked( data.myRemoveLogOnSuccess );
 
+  if ( myOptions.operator->() ) {
+    for ( int i = 0, nb = myOptions->length(); i < nb; ++i )
+      myAdvWidget->AddOption( that->myOptions[i].in() );
+  }
+  if ( myCustomOptions.operator->() ) {
+    for ( int i = 0, nb = myCustomOptions->length(); i < nb; ++i )
+      myAdvWidget->AddOption( that->myCustomOptions[i].in() );
+  }
+  myAdvWidget->myOptionTable->resizeColumnToContents( OPTION_NAME_COLUMN );
+
   TEnfVertexList::const_iterator it;
   int rowCount = 0;
   myEnforcedTableWidget->clearContents();
@@ -1708,65 +1603,6 @@ QString HYBRIDPluginGUI_HypothesisCreator::storeParams() const
   storeParamsToHypo( data );
 
   QString valStr = "";
-
-  if ( !data.myBoundaryRecovery )
-    valStr = "-c " + QString::number( !data.myToMeshHoles );
-
-  if ( data.myOptimizationLevel >= 0 && data.myOptimizationLevel < 5 && !data.myBoundaryRecovery) {
-    const char* level[] = { "none" , "light" , "standard" , "standard+" , "strong" };
-    valStr += " -o ";
-    valStr += level[ data.myOptimizationLevel ];
-  }
-  if ( data.myMaximumMemory > 0 ) {
-    valStr += " -m ";
-    valStr += QString::number( data.myMaximumMemory );
-  }
-  if ( data.myInitialMemory > 0 && !data.myBoundaryRecovery ) {
-    valStr += " -M ";
-    valStr += QString::number( data.myInitialMemory );
-  }
-  valStr += " -v ";
-  valStr += QString::number( data.myVerboseLevel );
-
-  if ( !data.myToCreateNewNodes )
-    valStr += " -p0";
-
-  if ( data.myRemoveInitialCentralPoint )
-    valStr += " -no_initial_central_point";
-
-  if ( data.myBoundaryRecovery )
-    valStr += " -C";
-
-  if ( data.myFEMCorrection )
-    valStr += " -FEM";
-
-  if ( data.myGradation != 1.05 ) {
-    valStr += " -Dcpropa=";
-    valStr += QString::number( data.myGradation );
-  }
-
-  valStr += " ";
-  valStr += data.myTextOption;
-
-  //     valStr += " #BEGIN ENFORCED VERTICES#";
-  //     // Add size map parameters storage
-  //     for (int i=0 ; i<mySmpModel->rowCount() ; i++) {
-  //         valStr += " (";
-  //         double x = mySmpModel->data(mySmpModel->index(i,ENF_VER_X_COLUMN)).toDouble();
-  //         double y = mySmpModel->data(mySmpModel->index(i,ENF_VER_Y_COLUMN)).toDouble();
-  //         double z = mySmpModel->data(mySmpModel->index(i,ENF_VER_Z_COLUMN)).toDouble();
-  //         double size = mySmpModel->data(mySmpModel->index(i,ENF_VER_SIZE_COLUMN)).toDouble();
-  //         valStr += QString::number( x );
-  //         valStr += ",";
-  //         valStr += QString::number( y );
-  //         valStr += ",";
-  //         valStr += QString::number( z );
-  //         valStr += ")=";
-  //         valStr += QString::number( size );
-  //         if (i!=mySmpModel->rowCount()-1)
-  //             valStr += ";";
-  //     }
-  //     valStr += " #END ENFORCED VERTICES#";
   return valStr;
 }
 
@@ -1778,40 +1614,36 @@ bool HYBRIDPluginGUI_HypothesisCreator::readParamsFromHypo( HYBRIDHypothesisData
   HypothesisData* data = SMESH::GetHypothesisData( hypType() );
   h_data.myName = isCreation() && data ? hypName() : "";
 
-  h_data.myCollisionMode              = h->GetCollisionMode();
-  h_data.myBoundaryLayersGrowth       = h->GetBoundaryLayersGrowth();
-  h_data.myElementGeneration          = h->GetElementGeneration();
-  h_data.myAddMultinormals            = h->GetAddMultinormals();
-  h_data.mySmoothNormals              = h->GetSmoothNormals();
+  h_data.myNbOfBoundaryLayers         = h->GetNbOfBoundaryLayers();
+  h_data.myLayersOnAllWrap            = h->GetLayersOnAllWrap();
   h_data.myHeightFirstLayer           = h->GetHeightFirstLayer();
+  h_data.myHeightIsRelative           = h->GetHeightIsRelative();
+  h_data.myBoundaryLayersGrowth       = h->GetBoundaryLayersGrowth();
+  h_data.myBoundaryLayersMaxElemAngle = h->GetBoundaryLayersMaxElemAngle();
   h_data.myBoundaryLayersProgression  = h->GetBoundaryLayersProgression();
+  h_data.myElementGeneration          = h->GetElementGeneration();
   h_data.myCoreSize                   = h->GetCoreSize();
-  h_data.myMultinormalsAngle          = h->GetMultinormalsAngle();
-  h_data.myNbOfBoundaryLayers         = h->GetNbOfBoundaryLayers();
+  
   h_data.myFaceWLIds                  = h->GetFacesWithLayers();
   h_data.myFaceWIIds                  = h->GetFacesWithImprinting();
   h_data.myFaceWSIds                  = h->GetFacesWithSnapping();
+  h_data.myImprinting                 = h_data.myFaceWIIds->length();//h->GetImprinting();
+  h_data.mySnapping                   = h_data.myFaceWSIds->length();//h->GetSnapping();
 
-  h_data.myLayersOnAllWrap            = h->GetLayersOnAllWrap();
-  h_data.myToMeshHoles                = h->GetToMeshHoles();
-  h_data.myToMakeGroupsOfDomains      = /*h->GetToMeshHoles() &&*/ h->GetToMakeGroupsOfDomains();
-  h_data.myMaximumMemory              = h->GetMaximumMemory();
-  h_data.myInitialMemory              = h->GetInitialMemory();
-  h_data.myInitialMemory              = h->GetInitialMemory();
+  h_data.myCollisionMode              = h->GetCollisionMode();
   h_data.myOptimizationLevel          = h->GetOptimizationLevel();
-  
+
   h_data.myKeepFiles                  = h->GetKeepFiles();
   h_data.myWorkingDir                 = h->GetWorkingDirectory();
   h_data.myVerboseLevel               = h->GetVerboseLevel();
-  h_data.myToCreateNewNodes           = h->GetToCreateNewNodes();
-  h_data.myRemoveInitialCentralPoint  = h->GetToRemoveCentralPoint();
-  h_data.myBoundaryRecovery           = h->GetToUseBoundaryRecoveryVersion();
-  h_data.myFEMCorrection              = h->GetFEMCorrection();
-  h_data.myGradation                  = h->GetGradation();
-  h_data.myTextOption                 = h->GetAdvancedOption();
   h_data.myLogInStandardOutput        = h->GetStandardOutputLog();
   h_data.myRemoveLogOnSuccess         = h->GetRemoveLogOnSuccess();
-  
+
+  HYBRIDPluginGUI_HypothesisCreator* that = (HYBRIDPluginGUI_HypothesisCreator*)this;
+  that->myOptions       = h->GetOptionValues();
+  that->myCustomOptions = h->GetAdvancedOptionValues();
+
+
   HYBRIDPlugin::HYBRIDEnforcedVertexList_var vertices = h->GetEnforcedVertices();
   h_data.myEnforcedVertices.clear();
   for (CORBA::ULong i=0 ; i<vertices->length() ; i++) {
@@ -1865,42 +1697,28 @@ bool HYBRIDPluginGUI_HypothesisCreator::storeParamsToHypo( const HYBRIDHypothesi
     if( isCreation() )
       SMESH::SetName( SMESH::FindSObject( h ), h_data.myName.toLatin1().constData() );
 
+    if ( h->GetNbOfBoundaryLayers() != h_data.myNbOfBoundaryLayers )
+      h->SetNbOfBoundaryLayers       ( h_data.myNbOfBoundaryLayers );
     if ( h->GetLayersOnAllWrap() != h_data.myLayersOnAllWrap ) // avoid duplication of DumpPython commands
       h->SetLayersOnAllWrap ( h_data.myLayersOnAllWrap );
-    if ( h->GetToMeshHoles() != h_data.myToMeshHoles ) // avoid duplication of DumpPython commands
-      h->SetToMeshHoles      ( h_data.myToMeshHoles );
-    if ( h->GetToMakeGroupsOfDomains() != h_data.myToMakeGroupsOfDomains )
-      h->SetToMakeGroupsOfDomains( h_data.myToMakeGroupsOfDomains );
-    if ( h->GetMaximumMemory() != h_data.myMaximumMemory )
-      h->SetMaximumMemory    ( h_data.myMaximumMemory );
-    if ( h->GetInitialMemory() != h_data.myInitialMemory )
-      h->SetInitialMemory    ( h_data.myInitialMemory );
-    if ( h->GetInitialMemory() != h_data.myInitialMemory )
-      h->SetInitialMemory    ( h_data.myInitialMemory );
-    if ( h->GetOptimizationLevel() != h_data.myOptimizationLevel )
-      h->SetOptimizationLevel( h_data.myOptimizationLevel );
-
-    if ( h->GetCollisionMode() != h_data.myCollisionMode )
-      h->SetCollisionMode(        h_data.myCollisionMode );
-    if ( h->GetBoundaryLayersGrowth() != h_data.myBoundaryLayersGrowth )
-      h->SetBoundaryLayersGrowth(        h_data.myBoundaryLayersGrowth );
-    if ( h->GetElementGeneration() != h_data.myElementGeneration )
-      h->SetElementGeneration(        h_data.myElementGeneration );
-
-    if ( h->GetAddMultinormals() != h_data.myAddMultinormals )
-      h->SetAddMultinormals       ( h_data.myAddMultinormals );
-    if ( h->GetSmoothNormals() != h_data.mySmoothNormals )
-      h->SetSmoothNormals       ( h_data.mySmoothNormals );
     if ( h->GetHeightFirstLayer() != h_data.myHeightFirstLayer )
       h->SetHeightFirstLayer       ( h_data.myHeightFirstLayer );
+    h->SetHeightIsRelative( h_data.myHeightIsRelative );
+    if ( h->GetBoundaryLayersGrowth() != h_data.myBoundaryLayersGrowth )
+      h->SetBoundaryLayersGrowth(        h_data.myBoundaryLayersGrowth );
+    h->SetBoundaryLayersMaxElemAngle( h_data.myBoundaryLayersMaxElemAngle );
     if ( h->GetBoundaryLayersProgression() != h_data.myBoundaryLayersProgression )
       h->SetBoundaryLayersProgression       ( h_data.myBoundaryLayersProgression );
+    if ( h->GetElementGeneration() != h_data.myElementGeneration )
+      h->SetElementGeneration(        h_data.myElementGeneration );
     if ( h->GetCoreSize() != h_data.myCoreSize )
       h->SetCoreSize       ( h_data.myCoreSize );
-    if ( h->GetMultinormalsAngle() != h_data.myMultinormalsAngle )
-      h->SetMultinormalsAngle       ( h_data.myMultinormalsAngle );
-    if ( h->GetNbOfBoundaryLayers() != h_data.myNbOfBoundaryLayers )
-      h->SetNbOfBoundaryLayers       ( h_data.myNbOfBoundaryLayers );
+
+    // if ( h->GetOptimizationLevel() != h_data.myOptimizationLevel )
+    //   h->SetOptimizationLevel( h_data.myOptimizationLevel );
+    // if ( h->GetCollisionMode() != h_data.myCollisionMode )
+    //   h->SetCollisionMode(        h_data.myCollisionMode );
+
     h->SetFacesWithLayers( h_data.myFaceWLIds );
     h->SetFacesWithImprinting( h_data.myFaceWIIds );
     h->SetFacesWithSnapping( h_data.myFaceWSIds );
@@ -1911,18 +1729,6 @@ bool HYBRIDPluginGUI_HypothesisCreator::storeParamsToHypo( const HYBRIDHypothesi
       h->SetWorkingDirectory       ( h_data.myWorkingDir.toLatin1().constData() );
     if ( h->GetVerboseLevel() != h_data.myVerboseLevel )
       h->SetVerboseLevel       ( h_data.myVerboseLevel );
-    if ( h->GetToCreateNewNodes() != h_data.myToCreateNewNodes )
-      h->SetToCreateNewNodes       ( h_data.myToCreateNewNodes );
-    if ( h->GetToRemoveCentralPoint() != h_data.myRemoveInitialCentralPoint )
-      h->SetToRemoveCentralPoint       ( h_data.myRemoveInitialCentralPoint );
-    if ( h->GetToUseBoundaryRecoveryVersion() != h_data.myBoundaryRecovery )
-      h->SetToUseBoundaryRecoveryVersion       ( h_data.myBoundaryRecovery );
-    if ( h->GetFEMCorrection() != h_data.myFEMCorrection )
-      h->SetFEMCorrection       ( h_data.myFEMCorrection );
-    if ( h->GetGradation() != h_data.myGradation )
-      h->SetGradation       ( h_data.myGradation );
-    if ( h->GetTextOption() != h_data.myTextOption )
-      h->SetAdvancedOption    ( h_data.myTextOption.toLatin1().constData() );
     if ( h->GetStandardOutputLog() != h_data.myLogInStandardOutput )
       h->SetStandardOutputLog       ( h_data.myLogInStandardOutput );
     if ( h->GetRemoveLogOnSuccess() != h_data.myRemoveLogOnSuccess )
@@ -1988,7 +1794,6 @@ bool HYBRIDPluginGUI_HypothesisCreator::storeParamsToHypo( const HYBRIDHypothesi
           break;
       }
     
-      std::cout << "h->p_SetEnforcedMesh(theSource, "<< elementType <<", \""<< enfMesh->name << "\", \"" << enfMesh->groupName.c_str() <<"\")"<<std::endl;
       ok = h->p_SetEnforcedMesh(theSource, elementType, enfMesh->name.c_str(), enfMesh->groupName.c_str());
     } // for
   } // try
@@ -2007,24 +1812,16 @@ bool HYBRIDPluginGUI_HypothesisCreator::storeParamsToHypo( const HYBRIDHypothesi
 bool HYBRIDPluginGUI_HypothesisCreator::readParamsFromWidgets( HYBRIDHypothesisData& h_data ) const
 {
   h_data.myName                       = myName ? myName->text() : "";
-  h_data.myLayersOnAllWrap            = myLayersOnAllWrapCheck->isChecked();
-  h_data.myToMeshHoles                = myToMeshHolesCheck->isChecked();
-  h_data.myToMakeGroupsOfDomains      = myToMakeGroupsOfDomains->isChecked();
-  h_data.myMaximumMemory              = myAdvWidget->maxMemoryCheck->isChecked() ? myAdvWidget->maxMemorySpin->value() : -1;
-  h_data.myInitialMemory              = myAdvWidget->initialMemoryCheck->isChecked() ? myAdvWidget->initialMemorySpin->value() : -1;
-  h_data.myOptimizationLevel          = myOptimizationLevelCombo->currentIndex();
-
-  h_data.myCollisionMode              = myCollisionModeCombo->currentIndex();
-  h_data.myBoundaryLayersGrowth       = myBoundaryLayersGrowthCombo->currentIndex();
-  h_data.myElementGeneration          = myElementGenerationCombo->currentIndex();
-  h_data.myAddMultinormals            = myAddMultinormalsCheck->isChecked();
-  h_data.mySmoothNormals              = mySmoothNormalsCheck->isChecked();
-
-  h_data.myHeightFirstLayer           = myHeightFirstLayerSpin -> value();
-  h_data.myNbOfBoundaryLayers         = myNbOfBoundaryLayersSpin -> value();
-  h_data.myBoundaryLayersProgression  = myBoundaryLayersProgressionSpin -> value();
-  h_data.myCoreSize                   = myCoreSizeSpin->text().isEmpty() ? 0.0 : myCoreSizeSpin -> value();
-  h_data.myMultinormalsAngle          = myMultinormalsAngleSpin -> value();
+  h_data.myNbOfBoundaryLayers         = myStdWidget->myNbOfBoundaryLayers -> value();
+  h_data.myLayersOnAllWrap            = myStdWidget->GetLayersOnAllWrap();
+  h_data.myHeightFirstLayer           = myStdWidget->myHeightFirstLayer -> value();
+  h_data.myHeightIsRelative           = myStdWidget->myHeightIsRelative->currentIndex();
+  h_data.myBoundaryLayersGrowth       = myStdWidget->myBoundaryLayersGrowth->currentIndex();
+  h_data.myBoundaryLayersMaxElemAngle = myStdWidget->myBoundaryLayersMaxElemAngle->value();
+  h_data.myBoundaryLayersProgression  = myStdWidget->myBoundaryLayersProgression -> value();
+  h_data.myElementGeneration          = myStdWidget->myElementGeneration->currentIndex();
+  h_data.myCoreSize                   = myStdWidget->myCoreSizeEnabled->isChecked() ? myStdWidget->myCoreSize -> value() : 0;
+
   h_data.myFaceWLIds                  = myFaceSelectorLayers->GetListOfIDs();
   h_data.myFaceWIIds                  = myFaceSelectorImprinting->GetListOfIDs();
   h_data.myFaceWSIds                  = myFaceSelectorSnapping->GetListOfIDs();
@@ -2032,12 +1829,6 @@ bool HYBRIDPluginGUI_HypothesisCreator::readParamsFromWidgets( HYBRIDHypothesisD
   h_data.myKeepFiles                  = myAdvWidget->keepWorkingFilesCheck->isChecked();
   h_data.myWorkingDir                 = myAdvWidget->workingDirectoryLineEdit->text().trimmed();
   h_data.myVerboseLevel               = myAdvWidget->verboseLevelSpin->value();
-  h_data.myToCreateNewNodes           = myAdvWidget->createNewNodesCheck->isChecked();
-  h_data.myRemoveInitialCentralPoint  = myAdvWidget->removeInitialCentralPointCheck->isChecked();
-  h_data.myBoundaryRecovery           = myAdvWidget->boundaryRecoveryCheck->isChecked();
-  h_data.myFEMCorrection              = myAdvWidget->FEMCorrectionCheck->isChecked();
-  h_data.myGradation                  = myAdvWidget->gradationSpinBox->value();
-  h_data.myTextOption                 = myAdvWidget->myAdvOptionsTable->GetCustomOptions();
   h_data.myLogInStandardOutput        = !myAdvWidget->logInFileCheck->isChecked();
   h_data.myRemoveLogOnSuccess         = myAdvWidget->removeLogOnSuccessCheck->isChecked();
 
@@ -2077,7 +1868,6 @@ bool HYBRIDPluginGUI_HypothesisCreator::readParamsFromWidgets( HYBRIDHypothesisD
     QComboBox* combo = qobject_cast<QComboBox*>(myEnforcedMeshTableWidget->cellWidget(row,ENF_MESH_CONSTRAINT_COLUMN));
     myEnfMesh->elementType = combo->currentIndex();
     h_data.myEnforcedMeshes.insert(myEnfMesh);
-    std::cout << "h_data.myEnforcedMeshes.size(): " << h_data.myEnforcedMeshes.size() << std::endl;
   }
 
   return true;
@@ -2102,3 +1892,8 @@ QString HYBRIDPluginGUI_HypothesisCreator::helpPage() const
 {
   return "hybrid_hypo_page.html";
 }
+
+void HYBRIDPluginGUI_HypothesisCreator::onAddOption()
+{
+  myAdvWidget->AddOption( NULL, true );
+}