Salome HOME
0022104: EDF 2550 SMESH: 2D viscous layer, allow specifying edges with viscous layer
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_Hypotheses.cxx
index 7b10c0ff54d7e2c27b6e53bca2f5bee714af5820..a6e19527bbb9695a2ca4d184186aae4cfa39760b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2013  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
 #define SPACING 6
 #define MARGIN  11
 
-//To disable automatic genericobj management, the following line should be commented.
-//Otherwise, it should be uncommented. Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx
-#define WITHGENERICOBJ
-
 SMESHGUI_GenericHypothesisCreator::SMESHGUI_GenericHypothesisCreator( const QString& theHypType )
-  : myHypType( theHypType ), myIsCreate( false ), myDlg( 0 )
+  : myToDeleteInitParamsHypo( false ),
+    myHypType( theHypType ),
+    myIsCreate( false ),
+    myDlg( 0 )
 {
 }
 
 SMESHGUI_GenericHypothesisCreator::~SMESHGUI_GenericHypothesisCreator()
 {
+  if ( myToDeleteInitParamsHypo && !myInitParamsHypo->_is_nil() )
+    myInitParamsHypo->UnRegister();
 }
 
 void SMESHGUI_GenericHypothesisCreator::setInitParamsHypothesis(SMESH::SMESH_Hypothesis_ptr hyp)
 {
-  if ( !CORBA::is_nil( hyp ) && hypType() == hyp->GetName() )
-    myInitParamsHypo = SMESH::SMESH_Hypothesis::_duplicate( hyp );
+  if ( !CORBA::is_nil( hyp ) ) {
+    if ( myToDeleteInitParamsHypo && !myInitParamsHypo->_is_nil() )
+      myInitParamsHypo->UnRegister();
+    CORBA::String_var hypName = hyp->GetName();
+    if ( hypType() == hypName.in() )
+    {
+      myInitParamsHypo         = SMESH::SMESH_Hypothesis::_duplicate( hyp );
+      myToDeleteInitParamsHypo = !SMESH::FindSObject( myInitParamsHypo );
+    }
+  }
 }
 
 void SMESHGUI_GenericHypothesisCreator::create( SMESH::SMESH_Hypothesis_ptr initParamsHyp,
@@ -91,19 +100,15 @@ void SMESHGUI_GenericHypothesisCreator::create( bool isAlgo,
   if (isAlgo) {
     SMESH::SMESH_Hypothesis_var anAlgo =
       SMESH::CreateHypothesis( hypType(), theHypName, isAlgo );
-#ifdef WITHGENERICOBJ
     if (!CORBA::is_nil(anAlgo))
       anAlgo->UnRegister();
-#endif
   }
   else {
     SMESH::SMESH_Hypothesis_var aHypothesis =
       SMESH::CreateHypothesis( hypType(), theHypName, false );
     editHypothesis( aHypothesis.in(), theHypName, theParent, obj, slot );
-#ifdef WITHGENERICOBJ
     if (!CORBA::is_nil(aHypothesis))
       aHypothesis->UnRegister();
-#endif
   }
 }
 
@@ -128,9 +133,7 @@ void SMESHGUI_GenericHypothesisCreator::editHypothesis( SMESH::SMESH_Hypothesis_
 {
   myHypName = theHypName;
   myHypo = SMESH::SMESH_Hypothesis::_duplicate( h );
-#ifdef WITHGENERICOBJ
   myHypo->Register();
-#endif
 
   SMESHGUI_HypothesisDlg* Dlg = new SMESHGUI_HypothesisDlg( this, theParent );
   connect( Dlg, SIGNAL( finished( int ) ), this, SLOT( onDialogFinished( int ) ) );
@@ -182,6 +185,7 @@ QFrame* SMESHGUI_GenericHypothesisCreator::buildStdFrame()
   {
     QLabel* lab = new QLabel( (*anIt).myName, GroupC1 );
     GroupC1Layout->addWidget( lab, i, 0 );
+    myParamLabels << lab;
 
     QWidget* w = getCustomWidget( *anIt, GroupC1, i );
     if ( !w )
@@ -302,9 +306,7 @@ void SMESHGUI_GenericHypothesisCreator::onDialogFinished( int result )
       }
   }
   SMESHGUI::GetSMESHGUI()->updateObjBrowser( true, 0 );
-#ifdef WITHGENERICOBJ
   myHypo->UnRegister();
-#endif
   myHypo = SMESH::SMESH_Hypothesis::_nil();
   myInitParamsHypo = SMESH::SMESH_Hypothesis::_nil();
 
@@ -465,6 +467,22 @@ SMESHGUI_GenericHypothesisCreator::ListOfWidgets& SMESHGUI_GenericHypothesisCrea
   return myParamWidgets;
 }
 
+//================================================================================
+/*!
+ * \brief Returns a QLabel of a spesified parameter.
+ * If isCreation(), the 1st label (supposed to be "Name") is not countered.
+ */
+//================================================================================
+
+QLabel* SMESHGUI_GenericHypothesisCreator::getLabel(int i) const
+{
+  if ( isCreation() )
+    i++;
+  if ( i < myParamLabels.size() )
+    return (QLabel*) myParamLabels.at(i);
+  return NULL;
+}
+
 QtxDialog* SMESHGUI_GenericHypothesisCreator:: dlg() const
 {
   return myDlg;