X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_Hypotheses.cxx;h=6f7237c9f198592560ae6c4d85eb3f393aee7d1a;hp=bc0002d3e09351d068d453db511fcf39818c5d36;hb=6650dea1f85dd5c640829d6e0391d703a304a152;hpb=3add66f2196c5b8e04e69d87c9f6a28e9a9a2eb2 diff --git a/src/SMESHGUI/SMESHGUI_Hypotheses.cxx b/src/SMESHGUI/SMESHGUI_Hypotheses.cxx index bc0002d3e..6f7237c9f 100644 --- a/src/SMESHGUI/SMESHGUI_Hypotheses.cxx +++ b/src/SMESHGUI/SMESHGUI_Hypotheses.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2010 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 @@ -19,6 +19,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // SMESH SMESHGUI : GUI for SMESH component // File : SMESHGUI_Hypotheses.cxx // Author : Julia DOROVSKIKH, Open CASCADE S.A.S. @@ -48,13 +49,12 @@ #include #include #include -#include #define SPACING 6 #define MARGIN 11 SMESHGUI_GenericHypothesisCreator::SMESHGUI_GenericHypothesisCreator( const QString& theHypType ) - : myHypType( theHypType ), myIsCreate( false ), myDlg( 0 ), myEventLoop( 0 ) + : myHypType( theHypType ), myIsCreate( false ), myDlg( 0 ) { } @@ -69,46 +69,37 @@ void SMESHGUI_GenericHypothesisCreator::setInitParamsHypothesis(SMESH::SMESH_Hyp } void SMESHGUI_GenericHypothesisCreator::create( SMESH::SMESH_Hypothesis_ptr initParamsHyp, - const QString& theHypName, - QWidget* parent) + const QString& theHypName, + QWidget* parent, QObject* obj, const QString& slot ) { MESSAGE( "Creation of hypothesis with initial params" ); setInitParamsHypothesis( initParamsHyp ); - create( false, theHypName, parent ); + create( false, theHypName, parent, obj, slot ); } void SMESHGUI_GenericHypothesisCreator::create( bool isAlgo, - const QString& theHypName, - QWidget* theParent ) + const QString& theHypName, + QWidget* theParent, QObject* obj, const QString& slot ) { MESSAGE( "Creation of hypothesis" ); myIsCreate = true; // Create hypothesis/algorithm - if (isAlgo) { + if (isAlgo) SMESH::CreateHypothesis( hypType(), theHypName, isAlgo ); - } - else { + + else + { SMESH::SMESH_Hypothesis_var aHypothesis = SMESH::CreateHypothesis( hypType(), theHypName, false ); - if( !editHypothesis( aHypothesis.in(), theHypName, theParent ) ) - { //remove just created hypothesis - _PTR(SObject) aHypSObject = SMESH::FindSObject( aHypothesis.in() ); - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); - if( aStudy && !aStudy->GetProperties()->IsLocked() ) - { - _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); - aBuilder->RemoveObjectWithChildren( aHypSObject ); - } - } + editHypothesis( aHypothesis.in(), theHypName, theParent, obj, slot ); } - SMESHGUI::GetSMESHGUI()->updateObjBrowser( true, 0 ); } void SMESHGUI_GenericHypothesisCreator::edit( SMESH::SMESH_Hypothesis_ptr theHypothesis, - const QString& theHypName, - QWidget* theParent ) + const QString& theHypName, + QWidget* theParent, QObject* obj, const QString& slot ) { if( CORBA::is_nil( theHypothesis ) ) return; @@ -117,37 +108,21 @@ void SMESHGUI_GenericHypothesisCreator::edit( SMESH::SMESH_Hypothesis_ptr theHyp myIsCreate = false; - if( !editHypothesis( theHypothesis, theHypName, theParent ) ) - return; - - SMESH::SObjectList listSOmesh = SMESH::GetMeshesUsingAlgoOrHypothesis( theHypothesis ); - if( listSOmesh.size() > 0 ) - for( int i = 0; i < listSOmesh.size(); i++ ) - { - _PTR(SObject) submSO = listSOmesh[i]; - SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface( submSO ); - SMESH::SMESH_subMesh_var aSubMesh = SMESH::SObjectToInterface( 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 ); + editHypothesis( theHypothesis, theHypName, theParent, obj, slot ); } -bool SMESHGUI_GenericHypothesisCreator::editHypothesis( SMESH::SMESH_Hypothesis_ptr h, - const QString& theHypName, - QWidget* theParent ) +void SMESHGUI_GenericHypothesisCreator::editHypothesis( SMESH::SMESH_Hypothesis_ptr h, + const QString& theHypName, + QWidget* theParent, + QObject* obj, const QString& slot ) { - if( CORBA::is_nil( h ) ) - return false; - - bool res = true; myHypName = theHypName; myHypo = SMESH::SMESH_Hypothesis::_duplicate( h ); SMESHGUI_HypothesisDlg* Dlg = new SMESHGUI_HypothesisDlg( this, theParent ); connect( Dlg, SIGNAL( finished( int ) ), this, SLOT( onDialogFinished( int ) ) ); + connect( this, SIGNAL( finished( int ) ), obj, slot.toLatin1().constData() ); + myDlg = Dlg; QFrame* fr = buildFrame(); if( fr ) @@ -160,24 +135,9 @@ bool SMESHGUI_GenericHypothesisCreator::editHypothesis( SMESH::SMESH_Hypothesis_ retrieveParams(); Dlg->show(); Dlg->resize( Dlg->minimumSizeHint() ); - if ( !myEventLoop ) - myEventLoop = new QEventLoop( this ); - myEventLoop->exec(); // make myDlg not modal - res = myDlg->result(); - if( res ) { - /*QString paramValues = */storeParams(); - // No longer needed since NoteBook appears and "Value" OB field shows names of variable -// if ( !paramValues.isEmpty() ) { -// if ( _PTR(SObject) SHyp = SMESH::FindSObject( myHypo )) -// SMESH::SetValue( SHyp, paramValues ); -// } - } } - delete Dlg; myDlg = 0; - changeWidgets().clear(); - myHypo = SMESH::SMESH_Hypothesis::_nil(); - myInitParamsHypo = SMESH::SMESH_Hypothesis::_nil(); - return res; + else + emit finished( QDialog::Accepted ); } QFrame* SMESHGUI_GenericHypothesisCreator::buildStdFrame() @@ -214,7 +174,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() ) ); @@ -224,7 +184,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() ) ); @@ -284,10 +244,56 @@ void SMESHGUI_GenericHypothesisCreator::valueChanged( QWidget* ) { } -void SMESHGUI_GenericHypothesisCreator::onDialogFinished( int /*result*/ ) +void SMESHGUI_GenericHypothesisCreator::onDialogFinished( int result ) { - if ( myEventLoop ) - myEventLoop->exit(); + bool res = result==QDialog::Accepted; + if( res ) + { + /*QString paramValues = */storeParams(); + // No longer needed since NoteBook appears and "Value" OB field shows names of variable +// if ( !paramValues.isEmpty() ) { +// if ( _PTR(SObject) SHyp = SMESH::FindSObject( myHypo )) +// SMESH::SetValue( SHyp, paramValues ); +// } + } + + changeWidgets().clear(); + + if( myIsCreate && !res ) + { + //remove just created hypothesis + _PTR(SObject) aHypSObject = SMESH::FindSObject( myHypo ); + _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + if( aStudy && !aStudy->GetProperties()->IsLocked() ) + { + _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); + aBuilder->RemoveObjectWithChildren( aHypSObject ); + } + } + else if( !myIsCreate && res ) + { + SMESH::SObjectList listSOmesh = SMESH::GetMeshesUsingAlgoOrHypothesis( myHypo ); + if( listSOmesh.size() > 0 ) + for( int i = 0; i < listSOmesh.size(); i++ ) + { + _PTR(SObject) submSO = listSOmesh[i]; + SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface( submSO ); + SMESH::SMESH_subMesh_var aSubMesh = SMESH::SObjectToInterface( 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 ); + myHypo = SMESH::SMESH_Hypothesis::_nil(); + myInitParamsHypo = SMESH::SMESH_Hypothesis::_nil(); + + disconnect( myDlg, SIGNAL( finished( int ) ), this, SLOT( onDialogFinished( int ) ) ); + myDlg->close(); + //delete myDlg; + myDlg = 0; + emit finished( result ); } bool SMESHGUI_GenericHypothesisCreator::stdParams( ListOfStdParams& ) const @@ -505,7 +511,7 @@ QString SMESHGUI_GenericHypothesisCreator::helpPage() const aHelpFileName = "a1d_meshing_hypo_page.html#max_length_anchor"; else if ( aHypType == "Arithmetic1D") aHelpFileName = "a1d_meshing_hypo_page.html#arithmetic_1d_anchor"; - else if ( aHypType == "FixedPointsc1D") + else if ( aHypType == "FixedPoints1D") aHelpFileName = "a1d_meshing_hypo_page.html#fixed_points_1d_anchor"; else if ( aHypType == "MaxElementArea") aHelpFileName = "a2d_meshing_hypo_page.html#max_element_area_anchor"; @@ -527,11 +533,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; } @@ -542,6 +553,7 @@ SMESHGUI_HypothesisDlg::SMESHGUI_HypothesisDlg( SMESHGUI_GenericHypothesisCreato : QtxDialog( parent, false, true ), myCreator( creator ) { + setAttribute(Qt::WA_DeleteOnClose, true); setMinimumSize( 300, height() ); // setFixedSize( 300, height() ); QVBoxLayout* topLayout = new QVBoxLayout( mainFrame() ); @@ -573,6 +585,7 @@ SMESHGUI_HypothesisDlg::SMESHGUI_HypothesisDlg( SMESHGUI_GenericHypothesisCreato SMESHGUI_HypothesisDlg::~SMESHGUI_HypothesisDlg() { + delete myCreator; } void SMESHGUI_HypothesisDlg::setCustomFrame( QFrame* f ) @@ -619,10 +632,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)); } } @@ -637,18 +650,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& 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& 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 ), @@ -668,15 +681,69 @@ HypothesisData::HypothesisData( const QString& theTypeName, } HypothesesSet::HypothesesSet( const QString& theSetName ) - : HypoSetName( theSetName ) + : myHypoSetName( theSetName ), + myIsAlgo( false ) { } HypothesesSet::HypothesesSet( const QString& theSetName, - const QStringList& theHypoList, - const QStringList& theAlgoList ) - : HypoSetName( theSetName ), - HypoList( theHypoList ), - AlgoList( theAlgoList ) + const QStringList& theHypoList, + const QStringList& theAlgoList ) + : myHypoSetName( theSetName ), + myHypoList( theHypoList ), + myAlgoList( theAlgoList ), + myIsAlgo( false ) { } + +QStringList* HypothesesSet::list(bool is_algo) const +{ + return const_cast( &( is_algo ? myAlgoList : myHypoList ) ); +} + +QStringList* HypothesesSet::list() const +{ + return list( myIsAlgo ); +} + +QString HypothesesSet::name() const +{ + return myHypoSetName; +} + +void HypothesesSet::set( bool isAlgo, const QStringList& lst ) +{ + *list(isAlgo) = lst; +} + +int HypothesesSet::count( bool isAlgo ) const +{ + return list(isAlgo)->count(); +} + +bool HypothesesSet::isAlgo() const +{ + return myIsAlgo; +} + +void HypothesesSet::init( bool isAlgo ) +{ + myIsAlgo = isAlgo; + myIndex = -1; +} + +bool HypothesesSet::more() const +{ + return myIndex < list()->count(); +} + +void HypothesesSet::next() +{ + myIndex++; +} + +QString HypothesesSet::current() const +{ + return list()->at(myIndex); +} +