Salome HOME
fix PAL8469. Updating the global mesh icon when local hypotheses are edited
[modules/smesh.git] / src / StdMeshersGUI / StdMeshersGUI.cxx
index e272665f8bd3d81953018cec3add3764d733dd03..36a65f6f07c182dc52cc9b0b2843929e75c24d4e 100644 (file)
 //  Module : SMESH
 //  $Header$
 
-using namespace std;
-
-#include <SALOMEconfig.h>
+#include "SALOMEconfig.h"
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 #include "SMESHGUI.h"
+#include "SMESHGUI_Utils.h"
 #include "SMESHGUI_Hypotheses.h"
+#include "SMESHGUI_HypothesesUtils.h"
 
-#include "StdMeshersGUI_LocalLengthDlg.h"
-#include "StdMeshersGUI_NbSegmentsDlg.h"
-#include "StdMeshersGUI_MaxElementAreaDlg.h"
-#include "StdMeshersGUI_MaxElementVolumeDlg.h"
+#include "SMESHGUI_aParameterDlg.h"
+#include "StdMeshersGUI_Parameters.h"
+#include "StdMeshersGUI_CreateStdHypothesisDlg.h"
 
 #include "QAD_Desktop.h"
 #include "QAD_ResourceMgr.h"
 
 #include <qobject.h>
 
+#include "utilities.h"
+
+using namespace std;
+
 //=============================================================================
 /*! class HypothesisCreator
  *
@@ -79,7 +82,7 @@ void StdMeshersGUI_HypothesisCreator::CreateHypothesis
 
   // Get default name for hypothesis/algorithm creation
   char* sHypType = (char*)myHypType.latin1();
-  HypothesisData* aHypData = mySMESHGUI->GetHypothesisData(sHypType);
+  HypothesisData* aHypData = SMESH::GetHypothesisData(sHypType);
   QString aHypName;
   if (aHypData)
     aHypName = aHypData->Label;
@@ -89,24 +92,16 @@ void StdMeshersGUI_HypothesisCreator::CreateHypothesis
   // Create hypothesis/algorithm
   if (isAlgo)
   {
-    mySMESHGUI->CreateHypothesis(myHypType, aHypName, isAlgo);
+    SMESH::CreateHypothesis(myHypType, aHypName, isAlgo);
   }
   else
   {
+    if ( StdMeshersGUI_Parameters::HasParameters( myHypType ))
     // Show Dialog for hypothesis creation
-    if      (myHypType == "LocalLength")
-      StdMeshersGUI_LocalLengthDlg *aDlg = new StdMeshersGUI_LocalLengthDlg(myHypType, parent, "");
-    else if (myHypType == "NumberOfSegments")
-      StdMeshersGUI_NbSegmentsDlg *aDlg = new StdMeshersGUI_NbSegmentsDlg(myHypType, parent, "");
-    else if (myHypType == "MaxElementArea")
-      StdMeshersGUI_MaxElementAreaDlg *aDlg = new StdMeshersGUI_MaxElementAreaDlg(myHypType, parent, "");
-    else if (myHypType == "MaxElementVolume")
-      StdMeshersGUI_MaxElementVolumeDlg *aDlg = new StdMeshersGUI_MaxElementVolumeDlg(myHypType, parent, "");
-    else if (myHypType == "LengthFromEdges")
-      mySMESHGUI->CreateHypothesis(myHypType, aHypName, isAlgo); // without GUI
-    else if (myHypType == "NotConformAllowed")
-      mySMESHGUI->CreateHypothesis(myHypType, aHypName, isAlgo); // without GUI
-    else ;
+      StdMeshersGUI_CreateStdHypothesisDlg *aDlg =
+        new StdMeshersGUI_CreateStdHypothesisDlg(myHypType, parent, "");
+    else
+      SMESH::CreateHypothesis(myHypType, aHypName, isAlgo); // without GUI
   }
 }
 
@@ -120,93 +115,39 @@ void StdMeshersGUI_HypothesisCreator::EditHypothesis
 {
   MESSAGE("StdMeshersGUI_HypothesisCreator::EditHypothesis");
 
-  Standard_Boolean res = Standard_True;
   SALOMEDS::Study::ListOfSObject_var listSOmesh =
-    mySMESHGUI->GetMeshesUsingAlgoOrHypothesis(theHyp);
-  QString Name = theHyp->GetName();
-  if (Name.compare("LocalLength") == 0)
-  {
-    StdMeshers::StdMeshers_LocalLength_var LL =
-      StdMeshers::StdMeshers_LocalLength::_narrow(theHyp);
-    double beforeLength = LL->GetLength() ;
-    double Length = mySMESHGUI->Parameter(res, 
-                                          beforeLength,
-                                          QObject::tr("SMESH_LOCAL_LENGTH_HYPOTHESIS"), 
-                                          QObject::tr("SMESH_VALUE"), 
-                                          1.0E-5, 1E6, 6);
-    if (res && Length != beforeLength)
-    {
-      LL->SetLength(Length);
-      for (int i=0; i<listSOmesh->length(); i++)
-      {
-        mySMESHGUI->GetStudyAPI().ModifiedMesh(listSOmesh[i], false);
-      }
-    }
-  }
-  else if (Name.compare("NumberOfSegments") == 0)
-  {
-    StdMeshers::StdMeshers_NumberOfSegments_var NOS =
-      StdMeshers::StdMeshers_NumberOfSegments::_narrow(theHyp);
-    int beforeNbSeg = NOS->GetNumberOfSegments() ;
-    int NbSeg = mySMESHGUI->Parameter(res,
-                                      beforeNbSeg, 
-                                      QObject::tr("SMESH_NB_SEGMENTS_HYPOTHESIS"), 
-                                      QObject::tr("SMESH_VALUE"), 
-                                      1, 1000000);
-    if (res && NbSeg != beforeNbSeg)
-    {
-      NOS->SetNumberOfSegments(NbSeg);
-      for (int i=0; i<listSOmesh->length(); i++)
-      {
-        SALOMEDS::SObject_var SO = listSOmesh[i] ;
-        mySMESHGUI->GetStudyAPI().ModifiedMesh(listSOmesh[i], false);
-      }
-    }
-  }
-  else if (Name.compare("MaxElementArea") == 0)
-  {
-    StdMeshers::StdMeshers_MaxElementArea_var MEA =
-      StdMeshers::StdMeshers_MaxElementArea::_narrow(theHyp);
-    double beforeMaxArea = MEA->GetMaxElementArea();
-    double MaxArea = mySMESHGUI->Parameter(res,
-                                           beforeMaxArea,
-                                           QObject::tr("SMESH_MAX_ELEMENT_AREA_HYPOTHESIS"), 
-                                           QObject::tr("SMESH_VALUE"), 
-                                           1.0E-5, 1E6, 6);
-    if (res && MaxArea != beforeMaxArea)
-    {
-      MEA->SetMaxElementArea(MaxArea);
-      for (int i=0; i<listSOmesh->length(); i++)
-      {
-        mySMESHGUI->GetStudyAPI().ModifiedMesh(listSOmesh[i], false);
-      }
-    }
-  }
-  else if (Name.compare("MaxElementVolume") == 0)
-  {
-    StdMeshers::StdMeshers_MaxElementVolume_var MEV =
-      StdMeshers::StdMeshers_MaxElementVolume::_narrow(theHyp);
-    double beforeMaxVolume = MEV->GetMaxElementVolume() ;
-    double MaxVolume = mySMESHGUI->Parameter(res, 
-                                             beforeMaxVolume,
-                                             QObject::tr("SMESH_MAX_ELEMENT_VOLUME_HYPOTHESIS"), 
-                                             QObject::tr("SMESH_VALUE"), 
-                                             1.0E-5, 1E6, 6);
-    if (res && MaxVolume != beforeMaxVolume)
-    {
-      MEV->SetMaxElementVolume(MaxVolume);
-      for (int i=0; i<listSOmesh->length(); i++)
-      {
-        mySMESHGUI->GetStudyAPI().ModifiedMesh(listSOmesh[i], false);
-      }
+    SMESH::GetMeshesUsingAlgoOrHypothesis(theHyp);
+  
+  list<SMESHGUI_aParameterPtr> paramList;
+  StdMeshersGUI_Parameters::GetParameters( theHyp, paramList );
+
+  bool modified = false;
+  if ( SMESHGUI_aParameterDlg::Parameters( paramList, QObject::tr("SMESH_VALUE")) )
+    modified = StdMeshersGUI_Parameters::SetParameters( theHyp, paramList );
+
+  if ( modified ) {
+    //set new Attribute Comment for hypothesis which parameters were modified
+    QString aParams = "";
+    StdMeshersGUI_Parameters::GetParameters( theHyp, paramList, aParams );
+    SALOMEDS::SObject_var SHyp = SMESH::FindSObject(theHyp);
+    if (!SHyp->_is_nil()) 
+      if (!aParams.isEmpty()) {
+       SMESH::SetValue(SHyp, aParams);
+       //mySMESHGUI->GetActiveStudy()->updateObjBrowser(true);
+      }    
+       
+    if ( listSOmesh->length() > 0 ) {
+      SALOMEDS::SObject_var submSO = listSOmesh[0];
+      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();
+      SALOMEDS::SObject_var meshSO = SMESH::FindSObject( aMesh );
+      SMESH::ModifiedMesh( meshSO, false);
     }
   }
-//  else if (Name.compare("Regular_1D") == 0)
-//  {}
-//  else if (Name.compare("MEFISTO_2D") == 0)
-//  {}
-  else
-  {}
 }
 
 //=============================================================================