Salome HOME
Refactoring
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_Hypotheses.cxx
index fba6f5e4db9d8464ee267b6912fbfa7b4391a2fd..ae38ba269a66f85c1ba33d3a2b67237fadb09632 100644 (file)
 #include <SUIT_MessageBox.h>
 #include <SUIT_ResourceMgr.h>
 #include <LightApp_Application.h>
+#include <SalomeApp_Application.h>
 #include <SalomeApp_IntSpinBox.h>
+#include <SalomeApp_Notebook.h>
+//#include <SalomeApp_Study.h>
 
 // Qt includes
 #include <QFrame>
@@ -53,7 +56,8 @@
 #define MARGIN  11
 
 SMESHGUI_GenericHypothesisCreator::SMESHGUI_GenericHypothesisCreator( const QString& theHypType )
-  : myHypType( theHypType ), myIsCreate( false ), myDlg( 0 )
+  : SMESHGUI_Helper( SMESHGUI::GetSMESHGUI() ),
+    myHypType( theHypType ), myIsCreate( false ), myDlg( 0 )
 {
 }
 
@@ -68,7 +72,7 @@ void SMESHGUI_GenericHypothesisCreator::setInitParamsHypothesis(SMESH::SMESH_Hyp
 }
 
 void SMESHGUI_GenericHypothesisCreator::create( SMESH::SMESH_Hypothesis_ptr initParamsHyp,
-                                               const QString& theHypName,
+                                                const QString& theHypName,
                                                 QWidget* parent, QObject* obj, const QString& slot )
 {
   MESSAGE( "Creation of hypothesis with initial params" );
@@ -77,8 +81,8 @@ void SMESHGUI_GenericHypothesisCreator::create( SMESH::SMESH_Hypothesis_ptr init
 }
 
 void SMESHGUI_GenericHypothesisCreator::create( bool isAlgo,
-                                               const QString& theHypName,
-                                               QWidget* theParent, QObject* obj, const QString& slot )
+                                                const QString& theHypName,
+                                                QWidget* theParent, QObject* obj, const QString& slot )
 {
   MESSAGE( "Creation of hypothesis" );
 
@@ -97,8 +101,8 @@ void SMESHGUI_GenericHypothesisCreator::create( bool isAlgo,
 }
 
 void SMESHGUI_GenericHypothesisCreator::edit( SMESH::SMESH_Hypothesis_ptr theHypothesis,
-                                             const QString& theHypName,
-                                             QWidget* theParent, QObject* obj, const QString& slot )
+                                              const QString& theHypName,
+                                              QWidget* theParent, QObject* obj, const QString& slot )
 {
   if( CORBA::is_nil( theHypothesis ) )
     return;
@@ -111,8 +115,8 @@ void SMESHGUI_GenericHypothesisCreator::edit( SMESH::SMESH_Hypothesis_ptr theHyp
 }
 
 void SMESHGUI_GenericHypothesisCreator::editHypothesis( SMESH::SMESH_Hypothesis_ptr h, 
-                                                       const QString& theHypName,
-                                                       QWidget* theParent,
+                                                        const QString& theHypName,
+                                                        QWidget* theParent,
                                                         QObject* obj, const QString& slot )
 {
   myHypName = theHypName;
@@ -173,7 +177,7 @@ QFrame* SMESHGUI_GenericHypothesisCreator::buildStdFrame()
       case QVariant::Int:
         {
           SalomeApp_IntSpinBox* sb = new SalomeApp_IntSpinBox( GroupC1 );
-         sb->setObjectName( (*anIt).myName );
+          sb->setObjectName( (*anIt).myName );
           attuneStdWidget( sb, i );
           sb->setValue( (*anIt).myValue.toInt() );
           connect( sb, SIGNAL( valueChanged( int ) ), this, SLOT( onValueChanged() ) );
@@ -183,7 +187,7 @@ QFrame* SMESHGUI_GenericHypothesisCreator::buildStdFrame()
       case QVariant::Double:
         {
           SalomeApp_DoubleSpinBox* sb = new SMESHGUI_SpinBox( GroupC1 );
-         sb->setObjectName( (*anIt).myName );
+          sb->setObjectName( (*anIt).myName );
           attuneStdWidget( sb, i );
           sb->setValue( (*anIt).myValue.toDouble() );
           connect( sb, SIGNAL( valueChanged( double ) ), this, SLOT( onValueChanged() ) );
@@ -193,9 +197,9 @@ QFrame* SMESHGUI_GenericHypothesisCreator::buildStdFrame()
       case QVariant::String:
         {
           if((*anIt).isVariable) {
-            _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
             QString aVar = (*anIt).myValue.toString();
-            if(aStudy->IsInteger(aVar.toLatin1().constData())){
+            QVariant::Type aType = getNotebook()->getType( aVar );
+            if(aType == QVariant::Int) {
               SalomeApp_IntSpinBox* sb = new SalomeApp_IntSpinBox( GroupC1 );
               sb->setObjectName( (*anIt).myName );
               attuneStdWidget( sb, i );
@@ -203,7 +207,7 @@ QFrame* SMESHGUI_GenericHypothesisCreator::buildStdFrame()
               connect( sb, SIGNAL( valueChanged( int ) ), this, SLOT( onValueChanged() ) );
               w = sb;
             }
-            else if(aStudy->IsReal(aVar.toLatin1().constData())){
+            else if( aType == QVariant::Double ) {
               SalomeApp_DoubleSpinBox* sb = new SMESHGUI_SpinBox( GroupC1 );
               sb->setObjectName( (*anIt).myName );
               attuneStdWidget( sb, i );
@@ -275,13 +279,13 @@ void SMESHGUI_GenericHypothesisCreator::onDialogFinished( int result )
     if( listSOmesh.size() > 0 )
       for( int i = 0; i < listSOmesh.size(); i++ )
       {
-       _PTR(SObject) submSO = listSOmesh[i];
-       SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( submSO );
-       SMESH::SMESH_subMesh_var aSubMesh = SMESH::SObjectToInterface<SMESH::SMESH_subMesh>( submSO );
-       if( !aSubMesh->_is_nil() )
-         aMesh = aSubMesh->GetFather();
-       _PTR(SObject) meshSO = SMESH::FindSObject( aMesh );
-       SMESH::ModifiedMesh( meshSO, false, aMesh->NbNodes()==0);
+        _PTR(SObject) submSO = listSOmesh[i];
+        SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( submSO );
+        SMESH::SMESH_subMesh_var aSubMesh = SMESH::SObjectToInterface<SMESH::SMESH_subMesh>( submSO );
+        if( !aSubMesh->_is_nil() )
+          aMesh = aSubMesh->GetFather();
+        _PTR(SObject) meshSO = SMESH::FindSObject( aMesh );
+        SMESH::ModifiedMesh( meshSO, false, aMesh->NbNodes()==0);
       }
   }
   SMESHGUI::GetSMESHGUI()->updateObjBrowser( true, 0 );
@@ -476,7 +480,7 @@ bool SMESHGUI_GenericHypothesisCreator::getParamFromCustomWidget( StdParam&, QWi
   return false;
 }
 
-bool SMESHGUI_GenericHypothesisCreator::checkParams( QString& msg ) const
+bool SMESHGUI_GenericHypothesisCreator::checkParams( QString& msg, QStringList& absentParams ) const
 {
   bool ok = true;
   ListOfWidgets::const_iterator anIt = widgets().begin(), aLast = widgets().end();
@@ -485,12 +489,12 @@ bool SMESHGUI_GenericHypothesisCreator::checkParams( QString& msg ) const
     if( (*anIt)->inherits( "SalomeApp_IntSpinBox" ) )
     {
       SalomeApp_IntSpinBox* sb = ( SalomeApp_IntSpinBox* )( *anIt );
-      ok = sb->isValid( msg, true ) && ok;
+      ok = sb->isValid( msg, absentParams, true ) && ok;
     }
     else if( (*anIt)->inherits( "SalomeApp_DoubleSpinBox" ) )
     {
       SalomeApp_DoubleSpinBox* sb = ( SalomeApp_DoubleSpinBox* )( *anIt );
-      ok = sb->isValid( msg, true ) && ok;
+      ok = sb->isValid( msg, absentParams, true ) && ok;
     }
   }
   return ok;
@@ -532,11 +536,16 @@ QString SMESHGUI_GenericHypothesisCreator::helpPage() const
     aHelpFileName = "projection_algos_page.html";
   else if ( aHypType == "NumberOfLayers")
     aHelpFileName = "radial_prism_algo_page.html";
+  else if ( aHypType == "NumberOfLayers2D")
+    aHelpFileName = "radial_quadrangle_1D2D_algo_page.html";
   else if ( aHypType == "LayerDistribution")
     aHelpFileName = "radial_prism_algo_page.html";
+  else if ( aHypType == "LayerDistribution2D")
+    aHelpFileName = "radial_quadrangle_1D2D_algo_page.html";
   else if ( aHypType == "SegmentLengthAroundVertex")
     aHelpFileName = "segments_around_vertex_algo_page.html";
-    
+  else if ( aHypType == "QuadrangleParams")
+    aHelpFileName = "a2d_meshing_hypo_page.html#hypo_quad_params_anchor";
   return aHelpFileName;
 }
 
@@ -594,8 +603,17 @@ void SMESHGUI_HypothesisDlg::setCustomFrame( QFrame* f )
 void SMESHGUI_HypothesisDlg::accept()
 {
   QString msg;
-  if ( myCreator && !myCreator->checkParams( msg ) )
+  QStringList absentParams;
+  if ( myCreator && !myCreator->checkParams( msg, absentParams ) )
   {
+    if( !absentParams.isEmpty() )
+    {
+      SalomeApp_Application* app =
+        dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
+      if( app )
+        app->defineAbsentParameters( absentParams );
+      return;
+    }
     QString str( tr( "SMESH_INCORRECT_INPUT" ) );
     if ( !msg.isEmpty() )
       str += "\n" + msg;
@@ -626,10 +644,10 @@ void SMESHGUI_HypothesisDlg::onHelp()
     platform = "application";
 #endif
     SUIT_MessageBox::warning(this, tr("WRN_WARNING"),
-                            tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
-                            arg(app->resourceMgr()->stringValue("ExternalBrowser", 
-                                                                platform)).
-                            arg(myHelpFileName));
+                             tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
+                             arg(app->resourceMgr()->stringValue("ExternalBrowser", 
+                                                                 platform)).
+                             arg(myHelpFileName));
   }
 }
 
@@ -644,18 +662,18 @@ void SMESHGUI_HypothesisDlg::setType( const QString& t )
 }
 
 HypothesisData::HypothesisData( const QString& theTypeName,
-                               const QString& thePluginName,
-                               const QString& theServerLibName,
-                               const QString& theClientLibName,
-                               const QString& theLabel,
-                               const QString& theIconId,
-                               const QList<int>& theDim,
-                               const bool theIsAux,
-                               const QStringList& theNeededHypos,
-                               const QStringList& theOptionalHypos,
-                               const QStringList& theInputTypes,
-                               const QStringList& theOutputTypes,
-                               const bool theIsNeedGeometry,
+                                const QString& thePluginName,
+                                const QString& theServerLibName,
+                                const QString& theClientLibName,
+                                const QString& theLabel,
+                                const QString& theIconId,
+                                const QList<int>& theDim,
+                                const bool theIsAux,
+                                const QStringList& theNeededHypos,
+                                const QStringList& theOptionalHypos,
+                                const QStringList& theInputTypes,
+                                const QStringList& theOutputTypes,
+                                const bool theIsNeedGeometry,
                                 const bool supportSub)
   : TypeName( theTypeName ),
     PluginName( thePluginName ),
@@ -681,8 +699,8 @@ HypothesesSet::HypothesesSet( const QString& theSetName )
 }
 
 HypothesesSet::HypothesesSet( const QString&     theSetName,
-                             const QStringList& theHypoList,
-                             const QStringList& theAlgoList )
+                              const QStringList& theHypoList,
+                              const QStringList& theAlgoList )
   : myHypoSetName( theSetName ), 
     myHypoList( theHypoList ), 
     myAlgoList( theAlgoList ),