X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_Hypotheses.cxx;h=adadbfb76cbf39b359f5578ead48150ace5323d5;hb=56817348cf9a6730a8b2d8e299caf2613e049171;hp=a5da9b73a817b84201e88abe8ee2e6c77158f18d;hpb=57b43b4d010e2d0a1529d3c131bbb9d416e63258;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_Hypotheses.cxx b/src/SMESHGUI/SMESHGUI_Hypotheses.cxx index a5da9b73a..adadbfb76 100644 --- a/src/SMESHGUI/SMESHGUI_Hypotheses.cxx +++ b/src/SMESHGUI/SMESHGUI_Hypotheses.cxx @@ -1,51 +1,59 @@ -// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// SMESH SMESHGUI : GUI for SMESH component // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// Copyright (C) 2003 CEA // -// This library is distributed in the hope that it will be useful -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// See http://www.salome-platform.org/ +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// File : SMESHGUI_Hypotheses.cxx +// Author : Julia DOROVSKIKH, Open CASCADE S.A.S. // +// SMESH includes #include "SMESHGUI_Hypotheses.h" + #include "SMESHGUI.h" #include "SMESHGUI_HypothesesUtils.h" #include "SMESHGUI_Utils.h" #include "SMESHGUI_SpinBox.h" +// SALOME KERNEL includes #include #include -#include - +// SALOME GUI includes #include - #include #include - +#include #include -#include -#include -#include -#include -#include -#include +// Qt includes +#include +#include +#include +#include +#include +#include + +#define SPACING 6 +#define MARGIN 11 -SMESHGUI_GenericHypothesisCreator::SMESHGUI_GenericHypothesisCreator( const QString& aHypType ) -: myHypType( aHypType ), - myIsCreate( false ) +SMESHGUI_GenericHypothesisCreator::SMESHGUI_GenericHypothesisCreator( const QString& theHypType ) + : myHypType( theHypType ), myIsCreate( false ), myDlg( 0 ), myEventLoop( 0 ) { } @@ -54,63 +62,62 @@ SMESHGUI_GenericHypothesisCreator::~SMESHGUI_GenericHypothesisCreator() } void SMESHGUI_GenericHypothesisCreator::create( SMESH::SMESH_Hypothesis_ptr initParamsHyp, + const QString& theHypName, QWidget* parent) { MESSAGE( "Creation of hypothesis with initial params" ); if ( !CORBA::is_nil( initParamsHyp ) && hypType() == initParamsHyp->GetName() ) myInitParamsHypo = SMESH::SMESH_Hypothesis::_duplicate( initParamsHyp ); - create( false, parent ); + create( false, theHypName, parent ); } -void SMESHGUI_GenericHypothesisCreator::create( const bool isAlgo, QWidget* parent ) +void SMESHGUI_GenericHypothesisCreator::create( bool isAlgo, + const QString& theHypName, + QWidget* theParent ) { MESSAGE( "Creation of hypothesis" ); - // Get default name for hypothesis/algorithm creation - HypothesisData* aHypData = SMESH::GetHypothesisData( hypType().latin1() ); - QString aHypName = aHypData ? aHypData->Label : hypType(); - myIsCreate = true; // Create hypothesis/algorithm if (isAlgo) - SMESH::CreateHypothesis( hypType(), aHypName, isAlgo ); - + SMESH::CreateHypothesis( hypType(), theHypName, isAlgo ); else { - SMESH::SMESH_Hypothesis_var newHypo = SMESH::SMESH_Hypothesis::_narrow - ( SMESH::CreateHypothesis( hypType(), aHypName, false ) ); - - if( !editHypothesis( newHypo.in(), parent ) ) + SMESH::SMESH_Hypothesis_var aHypothesis = + SMESH::CreateHypothesis( hypType(), theHypName, false ); + if( !editHypothesis( aHypothesis.in(), theHypName, theParent ) ) { //remove just created hypothesis - _PTR(SObject) SHyp = SMESH::FindSObject( newHypo.in() ); + _PTR(SObject) aHypSObject = SMESH::FindSObject( aHypothesis.in() ); _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); if( aStudy && !aStudy->GetProperties()->IsLocked() ) { _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); - aBuilder->RemoveObjectWithChildren( SHyp ); + aBuilder->RemoveObjectWithChildren( aHypSObject ); } } } SMESHGUI::GetSMESHGUI()->updateObjBrowser( true, 0 ); } -void SMESHGUI_GenericHypothesisCreator::edit( SMESH::SMESH_Hypothesis_ptr h, QWidget* parent ) +void SMESHGUI_GenericHypothesisCreator::edit( SMESH::SMESH_Hypothesis_ptr theHypothesis, + const QString& theHypName, + QWidget* theParent ) { - if( CORBA::is_nil( h ) ) + if( CORBA::is_nil( theHypothesis ) ) return; MESSAGE("Edition of hypothesis"); myIsCreate = false; - if( !editHypothesis( h, parent ) ) + if( !editHypothesis( theHypothesis, theHypName, theParent ) ) return; - SMESH::SObjectList listSOmesh = SMESH::GetMeshesUsingAlgoOrHypothesis( h ); + SMESH::SObjectList listSOmesh = SMESH::GetMeshesUsingAlgoOrHypothesis( theHypothesis ); if( listSOmesh.size() > 0 ) - for( int i=0; i( submSO ); @@ -118,30 +125,40 @@ void SMESHGUI_GenericHypothesisCreator::edit( SMESH::SMESH_Hypothesis_ptr h, QWi if( !aSubMesh->_is_nil() ) aMesh = aSubMesh->GetFather(); _PTR(SObject) meshSO = SMESH::FindSObject( aMesh ); - SMESH::ModifiedMesh( meshSO, false); + SMESH::ModifiedMesh( meshSO, false, aMesh->NbNodes()==0); } SMESHGUI::GetSMESHGUI()->updateObjBrowser( true, 0 ); } -bool SMESHGUI_GenericHypothesisCreator::editHypothesis( SMESH::SMESH_Hypothesis_ptr h, QWidget* parent ) +bool SMESHGUI_GenericHypothesisCreator::editHypothesis( SMESH::SMESH_Hypothesis_ptr h, + const QString& theHypName, + QWidget* theParent ) { 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 ) ) ); + myDlg = Dlg; QFrame* fr = buildFrame(); if( fr ) { - SMESHGUI_HypothesisDlg* dlg = - new SMESHGUI_HypothesisDlg( const_cast( this ), parent ); - dlg->setCustomFrame( fr ); - dlg->setCaption( caption() ); - dlg->setHIcon( icon() ); - dlg->setType( type() ); + Dlg->setCustomFrame( fr ); + Dlg->setWindowTitle( caption() ); + Dlg->setObjectName( theHypName ); + Dlg->setHIcon( icon() ); + Dlg->setType( type() ); + Dlg->setMinimumSize( Dlg->minimumSizeHint().width(), Dlg->minimumSizeHint().height() ); retrieveParams(); - res = dlg->exec()==QDialog::Accepted; + Dlg->show(); + if ( !myEventLoop ) + myEventLoop = new QEventLoop( this ); + myEventLoop->exec(); // make myDlg not modal + res = myDlg->result(); if( res ) { QString paramValues = storeParams(); if ( !paramValues.isEmpty() ) { @@ -149,14 +166,14 @@ bool SMESHGUI_GenericHypothesisCreator::editHypothesis( SMESH::SMESH_Hypothesis_ SMESH::SetValue( SHyp, paramValues ); } } - delete dlg; } + delete Dlg; myDlg = 0; changeWidgets().clear(); myHypo = SMESH::SMESH_Hypothesis::_nil(); myInitParamsHypo = SMESH::SMESH_Hypothesis::_nil(); return res; } - + QFrame* SMESHGUI_GenericHypothesisCreator::buildStdFrame() { if( CORBA::is_nil( hypothesis() ) ) @@ -166,20 +183,17 @@ QFrame* SMESHGUI_GenericHypothesisCreator::buildStdFrame() if( !stdParams( params ) || params.isEmpty() ) return 0; - QFrame* fr = new QFrame( 0, "myframe" ); - QVBoxLayout* lay = new QVBoxLayout( fr, 5, 0 ); + QFrame* fr = new QFrame( 0 ); + QVBoxLayout* lay = new QVBoxLayout( fr ); + lay->setMargin( 5 ); + lay->setSpacing( 0 ); - QGroupBox* GroupC1 = new QGroupBox( fr, "GroupC1" ); + QGroupBox* GroupC1 = new QGroupBox( tr( "SMESH_ARGUMENTS" ), fr ); lay->addWidget( GroupC1 ); - GroupC1->setTitle( tr( "SMESH_ARGUMENTS" ) ); - GroupC1->setColumnLayout(0, Qt::Vertical ); - GroupC1->layout()->setSpacing( 0 ); - GroupC1->layout()->setMargin( 0 ); - QGridLayout* GroupC1Layout = new QGridLayout( GroupC1->layout() ); - GroupC1Layout->setAlignment( Qt::AlignTop ); - GroupC1Layout->setSpacing( 6 ); - GroupC1Layout->setMargin( 11 ); + QGridLayout* GroupC1Layout = new QGridLayout( GroupC1 ); + GroupC1Layout->setSpacing( SPACING ); + GroupC1Layout->setMargin( MARGIN ); ListOfStdParams::const_iterator anIt = params.begin(), aLast = params.end(); for( int i=0; anIt!=aLast; anIt++, i++ ) @@ -187,13 +201,14 @@ QFrame* SMESHGUI_GenericHypothesisCreator::buildStdFrame() QLabel* lab = new QLabel( (*anIt).myName, GroupC1 ); GroupC1Layout->addWidget( lab, i, 0 ); - QWidget* w = getCustomWidget( *anIt, GroupC1 ); + QWidget* w = getCustomWidget( *anIt, GroupC1, i ); if ( !w ) switch( (*anIt).myValue.type() ) { case QVariant::Int: { - QtxIntSpinBox* sb = new QtxIntSpinBox( GroupC1, (*anIt).myName.latin1() ); + QtxIntSpinBox* sb = new QtxIntSpinBox( GroupC1 ); + sb->setObjectName( (*anIt).myName ); attuneStdWidget( sb, i ); sb->setValue( (*anIt).myValue.toInt() ); connect( sb, SIGNAL( valueChanged( int ) ), this, SLOT( onValueChanged() ) ); @@ -202,7 +217,8 @@ QFrame* SMESHGUI_GenericHypothesisCreator::buildStdFrame() break; case QVariant::Double: { - QtxDblSpinBox* sb = new SMESHGUI_SpinBox( GroupC1, (*anIt).myName.latin1() ); + QtxDoubleSpinBox* sb = new SMESHGUI_SpinBox( GroupC1 ); + sb->setObjectName( (*anIt).myName ); attuneStdWidget( sb, i ); sb->setValue( (*anIt).myValue.toDouble() ); connect( sb, SIGNAL( valueChanged( double ) ), this, SLOT( onValueChanged() ) ); @@ -211,7 +227,8 @@ QFrame* SMESHGUI_GenericHypothesisCreator::buildStdFrame() break; case QVariant::String: { - QLineEdit* le = new QLineEdit( GroupC1, (*anIt).myName.latin1() ); + QLineEdit* le = new QLineEdit( GroupC1 ); + le->setObjectName( (*anIt).myName ); attuneStdWidget( le, i ); le->setText( (*anIt).myValue.toString() ); connect( le, SIGNAL( textChanged( const QString& ) ), this, SLOT( onValueChanged() ) ); @@ -234,6 +251,12 @@ void SMESHGUI_GenericHypothesisCreator::onValueChanged() { } +void SMESHGUI_GenericHypothesisCreator::onDialogFinished( int /*result*/ ) +{ + if ( myEventLoop ) + myEventLoop->exit(); +} + bool SMESHGUI_GenericHypothesisCreator::stdParams( ListOfStdParams& ) const { return false; @@ -246,7 +269,7 @@ bool SMESHGUI_GenericHypothesisCreator::getStdParamFromDlg( ListOfStdParams& par ListOfWidgets::const_iterator anIt = widgets().begin(), aLast = widgets().end(); for( ; anIt!=aLast; anIt++ ) { - item.myName = (*anIt)->name(); + item.myName = (*anIt)->objectName(); if( (*anIt)->inherits( "QtxIntSpinBox" ) ) { QtxIntSpinBox* sb = ( QtxIntSpinBox* )( *anIt ); @@ -254,9 +277,9 @@ bool SMESHGUI_GenericHypothesisCreator::getStdParamFromDlg( ListOfStdParams& par params.append( item ); } - else if( (*anIt)->inherits( "QtxDblSpinBox" ) ) + else if( (*anIt)->inherits( "QtxDoubleSpinBox" ) ) { - QtxDblSpinBox* sb = ( QtxDblSpinBox* )( *anIt ); + QtxDoubleSpinBox* sb = ( QtxDoubleSpinBox* )( *anIt ); item.myValue = sb->value(); params.append( item ); } @@ -283,10 +306,13 @@ QString SMESHGUI_GenericHypothesisCreator::stdParamValues( const ListOfStdParams { QString valueStr = ""; ListOfStdParams::const_iterator param = params.begin(), aLast = params.end(); + uint len0 = 0; for( int i=0; param!=aLast; param++, i++ ) { - if ( i > 0 ) + if ( valueStr.length() > len0 ) { valueStr += "; "; + len0 = valueStr.length(); + } switch( (*param).myValue.type() ) { case QVariant::Int: @@ -300,7 +326,7 @@ QString SMESHGUI_GenericHypothesisCreator::stdParamValues( const ListOfStdParams break; default: QVariant valCopy = (*param).myValue; - valueStr += valCopy.asString(); + valueStr += valCopy.toString(); } } return valueStr; @@ -323,6 +349,11 @@ QString SMESHGUI_GenericHypothesisCreator::hypType() const return myHypType; } +QString SMESHGUI_GenericHypothesisCreator::hypName() const +{ + return myHypName; +} + const SMESHGUI_GenericHypothesisCreator::ListOfWidgets& SMESHGUI_GenericHypothesisCreator::widgets() const { return myParamWidgets; @@ -333,6 +364,11 @@ SMESHGUI_GenericHypothesisCreator::ListOfWidgets& SMESHGUI_GenericHypothesisCrea return myParamWidgets; } +QtxDialog* SMESHGUI_GenericHypothesisCreator:: dlg() const +{ + return myDlg; +} + bool SMESHGUI_GenericHypothesisCreator::isCreation() const { return myIsCreate; @@ -357,28 +393,37 @@ QString SMESHGUI_GenericHypothesisCreator::type() const return QString(); } QWidget* SMESHGUI_GenericHypothesisCreator::getCustomWidget( const StdParam & /*param*/, - QWidget* /*parent*/) const + QWidget* /*parent*/, + const int /*index*/) const { return 0; } -bool SMESHGUI_GenericHypothesisCreator::getParamFromCustomWidget( StdParam& , QWidget* ) const +bool SMESHGUI_GenericHypothesisCreator::getParamFromCustomWidget( StdParam&, QWidget* ) const { return false; } +void SMESHGUI_GenericHypothesisCreator::onReject() +{ +} + SMESHGUI_HypothesisDlg::SMESHGUI_HypothesisDlg( SMESHGUI_GenericHypothesisCreator* creator, QWidget* parent ) -: QtxDialog( parent, "", true, true ), +: QtxDialog( parent, false, true ), myCreator( creator ) { setMinimumSize( 300, height() ); // setFixedSize( 300, height() ); - myLayout = new QVBoxLayout( mainFrame(), 0, 0 ); + QVBoxLayout* topLayout = new QVBoxLayout( mainFrame() ); + topLayout->setMargin( 0 ); + topLayout->setSpacing( 0 ); QFrame* titFrame = new QFrame( mainFrame() ); - QHBoxLayout* titLay = new QHBoxLayout( titFrame, 0, 5 ); + QHBoxLayout* titLay = new QHBoxLayout( titFrame ); + titLay->setMargin( 0 ); + titLay->setSpacing( SPACING ); myIconLabel = new QLabel( titFrame ); myIconLabel->setScaledContents( false ); @@ -391,30 +436,29 @@ SMESHGUI_HypothesisDlg::SMESHGUI_HypothesisDlg( SMESHGUI_GenericHypothesisCreato titLay->addWidget( myTypeLabel, 0 ); titLay->addStretch( 1 ); - myLayout->addWidget( titFrame, 0 ); + topLayout->addWidget( titFrame, 0 ); QString aHypType = creator->hypType(); if ( aHypType == "LocalLength" ) - myHelpFileName = "/files/arithmetic_1d.htm#Average_length"; + myHelpFileName = "a1d_meshing_hypo_page.html#average_length_anchor"; else if ( aHypType == "Arithmetic1D") - myHelpFileName = "/files/arithmetic_1d.htm#arithmetic_1D"; + myHelpFileName = "a1d_meshing_hypo_page.html#arithmetic_1d_anchor"; else if ( aHypType == "MaxElementArea") - myHelpFileName = "/files/max._element_area_hypothesis.htm"; + myHelpFileName = "a2d_meshing_hypo_page.html#max_element_area_anchor"; else if ( aHypType == "MaxElementVolume") - myHelpFileName = "/files/max._element_volume_hypothsis.htm"; + myHelpFileName = "max_element_volume_hypo_page.html"; else if ( aHypType == "StartEndLength") - myHelpFileName = "/files/arithmetic_1d.htm#start_and_end_length"; + myHelpFileName = "a1d_meshing_hypo_page.html#start_and_end_length_anchor"; else if ( aHypType == "Deflection1D") - myHelpFileName = "/files/arithmetic_1d.htm#deflection_1D"; + myHelpFileName = "a1d_meshing_hypo_page.html#deflection_1d_anchor"; else if ( aHypType == "AutomaticLength") - myHelpFileName = "/files/arithmetic_1d.htm#automatic_length"; + myHelpFileName = "a1d_meshing_hypo_page.html#automatic_length_anchor"; else if ( aHypType == "NumberOfSegments") - myHelpFileName = "/files/arithmetic_1d.htm#Number_of_elements"; + myHelpFileName = "a1d_meshing_hypo_page.html#number_of_segments_anchor"; else myHelpFileName = ""; connect( this, SIGNAL( dlgHelp() ), this, SLOT( onHelp() ) ); - } SMESHGUI_HypothesisDlg::~SMESHGUI_HypothesisDlg() @@ -425,15 +469,22 @@ void SMESHGUI_HypothesisDlg::setCustomFrame( QFrame* f ) { if( f ) { - f->reparent( mainFrame(), QPoint( 0, 0 ) ); - myLayout->insertWidget( 1, f, 1 ); + f->setParent( mainFrame() ); + qobject_cast( mainFrame()->layout() )->insertWidget( 1, f, 1 ); } } void SMESHGUI_HypothesisDlg::accept() { - if( !myCreator || myCreator->checkParams() ) - QtxDialog::accept(); + if ( myCreator && !myCreator->checkParams() ) + return; + QtxDialog::accept(); +} + +void SMESHGUI_HypothesisDlg::reject() +{ + if ( myCreator ) myCreator->onReject(); + QtxDialog::reject(); } void SMESHGUI_HypothesisDlg::onHelp() @@ -444,10 +495,17 @@ void SMESHGUI_HypothesisDlg::onHelp() app->onHelpContextModule(aSMESHGUI ? app->moduleName(aSMESHGUI->moduleName()) : QString(""), myHelpFileName); } else { - SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"), - QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). - arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName), - QObject::tr("BUT_OK")); + QString platform; +#ifdef WIN32 + platform = "winapplication"; +#else + platform = "application"; +#endif + SUIT_MessageBox::warning(this, tr("WRN_WARNING"), + tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). + arg(app->resourceMgr()->stringValue("ExternalBrowser", + platform)). + arg(myHelpFileName)); } } @@ -460,3 +518,46 @@ void SMESHGUI_HypothesisDlg::setType( const QString& t ) { myTypeLabel->setText( 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 ) + : TypeName( theTypeName ), + PluginName( thePluginName ), + ServerLibName( theServerLibName ), + ClientLibName( theClientLibName ), + Label( theLabel ), + IconId( theIconId ), + Dim( theDim ), + IsAux( theIsAux ), + NeededHypos( theNeededHypos ), + OptionalHypos( theOptionalHypos ), + InputTypes( theInputTypes ), + OutputTypes( theOutputTypes ), + IsNeedGeometry( theIsNeedGeometry ) +{ +} + +HypothesesSet::HypothesesSet( const QString& theSetName ) + : HypoSetName( theSetName ) +{ +} + +HypothesesSet::HypothesesSet( const QString& theSetName, + const QStringList& theHypoList, + const QStringList& theAlgoList ) + : HypoSetName( theSetName ), + HypoList( theHypoList ), + AlgoList( theAlgoList ) +{ +}