X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FStdMeshersGUI%2FStdMeshersGUI_NbSegmentsCreator.cxx;fp=src%2FStdMeshersGUI%2FStdMeshersGUI_NbSegmentsCreator.cxx;h=9e8e0bda842b80b5672c123d7dacee87a15723ca;hp=f5468b118c6d13995b8fde295f45d8d9f496f788;hb=0635c9fc80f67d1e5dc0e94ec85f487286a92070;hpb=79b1ac2b6df9117f16f11d444b1f165d477a1813 diff --git a/src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.cxx b/src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.cxx index f5468b118..9e8e0bda8 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.cxx +++ b/src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.cxx @@ -1,46 +1,59 @@ -// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE // -// 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-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// 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/ or email : webmaster.salome@opencascade.com +// 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 : StdMeshersGUI_NbSegmentsCreator.cxx +// Author : Open CASCADE S.A.S. +// SMESH includes // - #include "StdMeshersGUI_NbSegmentsCreator.h" #include "StdMeshersGUI_DistrTable.h" #include "StdMeshersGUI_DistrPreview.h" +#include #include #include +#include +// IDL includes #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) +// SALOME GUI includes #include - -#include +#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include +// Qt includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SPACING 6 +#define MARGIN 11 StdMeshersGUI_NbSegmentsCreator::StdMeshersGUI_NbSegmentsCreator() : StdMeshersGUI_StdHypothesisCreator( "NumberOfSegments" ), @@ -50,11 +63,11 @@ StdMeshersGUI_NbSegmentsCreator::StdMeshersGUI_NbSegmentsCreator() myTable( 0 ), myPreview( 0 ), myExpr( 0 ), + myConvBox( 0 ), myConv( 0 ), myLScale( 0 ), myLTable( 0 ), myLExpr( 0 ), - myLConv( 0 ), myInfo( 0 ), myGroupLayout( 0 ), myTableRow( 0 ), @@ -66,38 +79,40 @@ StdMeshersGUI_NbSegmentsCreator::~StdMeshersGUI_NbSegmentsCreator() { } -bool StdMeshersGUI_NbSegmentsCreator::checkParams() const +bool StdMeshersGUI_NbSegmentsCreator::checkParams( QString& msg ) const { + if( !SMESHGUI_GenericHypothesisCreator::checkParams( msg ) ) + return false; NbSegmentsHypothesisData data_old, data_new; readParamsFromHypo( data_old ); readParamsFromWidgets( data_new ); bool res = storeParamsToHypo( data_new ); storeParamsToHypo( data_old ); + res = myNbSeg->isValid( msg, true ) && res; + res = myScale->isValid( msg, true ) && res; return res; } QFrame* StdMeshersGUI_NbSegmentsCreator::buildFrame() { - QFrame* fr = new QFrame( 0, "myframe" ); - QVBoxLayout* lay = new QVBoxLayout( fr, 5, 0 ); + QFrame* fr = new QFrame(); - QGroupBox* GroupC1 = new QGroupBox( fr, "GroupC1" ); + QVBoxLayout* lay = new QVBoxLayout( fr ); + lay->setMargin( 0 ); + lay->setSpacing( 0 ); + + QGroupBox* GroupC1 = new QGroupBox( tr( "SMESH_ARGUMENTS" ), fr ); lay->addWidget( GroupC1 ); StdMeshers::StdMeshers_NumberOfSegments_var h = StdMeshers::StdMeshers_NumberOfSegments::_narrow( hypothesis() ); myPreview = new StdMeshersGUI_DistrPreview( GroupC1, h.in() ); - GroupC1->setTitle( tr( "SMESH_ARGUMENTS" ) ); - GroupC1->setColumnLayout(0, Qt::Vertical ); - GroupC1->layout()->setSpacing( 0 ); - GroupC1->layout()->setMargin( 0 ); - myGroupLayout = new QGridLayout( GroupC1->layout() ); - myGroupLayout->setAlignment( Qt::AlignTop ); - myGroupLayout->setSpacing( 6 ); - myGroupLayout->setMargin( 11 ); - myGroupLayout->setColStretch( 0, 0 ); - myGroupLayout->setColStretch( 1, 1 ); + myGroupLayout = new QGridLayout( GroupC1 ); + myGroupLayout->setSpacing( SPACING ); + myGroupLayout->setMargin( MARGIN ); + myGroupLayout->setColumnStretch( 0, 0 ); + myGroupLayout->setColumnStretch( 1, 1 ); int row = 0; // 0) name @@ -112,9 +127,9 @@ QFrame* StdMeshersGUI_NbSegmentsCreator::buildFrame() // 1) number of segments myGroupLayout->addWidget( new QLabel( tr( "SMESH_NB_SEGMENTS_PARAM" ), GroupC1 ), row, 0 ); - myNbSeg = new QtxIntSpinBox( GroupC1 ); - myNbSeg->setMinValue( 1 ); - myNbSeg->setMaxValue( 9999 ); + myNbSeg = new SalomeApp_IntSpinBox( GroupC1 ); + myNbSeg->setMinimum( 1 ); + myNbSeg->setMaximum( 9999 ); myGroupLayout->addWidget( myNbSeg, row, 1 ); row++; @@ -122,11 +137,11 @@ QFrame* StdMeshersGUI_NbSegmentsCreator::buildFrame() myGroupLayout->addWidget( new QLabel( tr( "SMESH_DISTR_TYPE" ), GroupC1 ), row, 0 ); myDistr = new QtxComboBox( GroupC1 ); QStringList types; - types.append( QObject::tr( "SMESH_DISTR_REGULAR" ) ); - types.append( QObject::tr( "SMESH_DISTR_SCALE" ) ); - types.append( QObject::tr( "SMESH_DISTR_TAB" ) ); - types.append( QObject::tr( "SMESH_DISTR_EXPR" ) ); - myDistr->insertStringList( types ); + types.append( tr( "SMESH_DISTR_REGULAR" ) ); + types.append( tr( "SMESH_DISTR_SCALE" ) ); + types.append( tr( "SMESH_DISTR_TAB" ) ); + types.append( tr( "SMESH_DISTR_EXPR" ) ); + myDistr->addItems( types ); myGroupLayout->addWidget( myDistr, row, 1 ); row++; @@ -138,7 +153,7 @@ QFrame* StdMeshersGUI_NbSegmentsCreator::buildFrame() row++; myInfo = new QLabel( tr( "SMESH_FUNC_DOMAIN" ), GroupC1 ); - myGroupLayout->addMultiCellWidget( myInfo, row, row, 0, 1 ); + myGroupLayout->addWidget( myInfo, row, 0, 1, 2 ); row++; // 4) table @@ -156,18 +171,26 @@ QFrame* StdMeshersGUI_NbSegmentsCreator::buildFrame() row++; // 6) conversion (radiogroup) - myGroupLayout->addWidget( myLConv = new QLabel( tr( "SMESH_CONV_MODE" ), GroupC1 ), row, 0 ); + myConvBox = new QGroupBox( tr( "SMESH_CONV_MODE" ), GroupC1 ); myConv = new QButtonGroup( GroupC1 ); - myConv->setExclusive( true ); - myConv->setColumnLayout( 0, Qt::Vertical ); - QGridLayout* convLay = new QGridLayout( myConv->layout() ); - convLay->addWidget( new QRadioButton( tr( "SMESH_EXP_MODE" ), myConv ), 0, 0 ); - convLay->addWidget( myCutNeg = new QRadioButton( tr( "SMESH_CUT_NEG_MODE" ), myConv ), 1, 0 ); - myGroupLayout->addWidget( myConv, row, 1 ); + + QHBoxLayout* convLay = new QHBoxLayout( myConvBox ); + convLay->setMargin( MARGIN ); + convLay->setSpacing( SPACING ); + + QRadioButton* rbExp = new QRadioButton( tr( "SMESH_EXP_MODE" ), myConvBox ); + QRadioButton* myCutNeg = new QRadioButton( tr( "SMESH_CUT_NEG_MODE" ), myConvBox ); + + convLay->addWidget( rbExp ); + convLay->addWidget( myCutNeg ); + myConv->addButton( rbExp, 0 ); + myConv->addButton( myCutNeg, 1 ); + + myGroupLayout->addWidget( myConvBox, row, 0, 1, 2 ); row++; // 7) distribution preview - myGroupLayout->addMultiCellWidget( myPreview, row, row, 0, 1 ); + myGroupLayout->addWidget( myPreview, row, 0, 1, 2 ); myGroupLayout->setRowStretch( row, 1 ); myPreviewRow = row; row++; @@ -176,7 +199,7 @@ QFrame* StdMeshersGUI_NbSegmentsCreator::buildFrame() connect( myDistr, SIGNAL( activated( int ) ), this, SLOT( onValueChanged() ) ); connect( myTable, SIGNAL( valueChanged( int, int ) ), this, SLOT( onValueChanged() ) ); connect( myExpr, SIGNAL( textChanged( const QString& ) ), this, SLOT( onValueChanged() ) ); - connect( myConv, SIGNAL( clicked( int ) ), this, SLOT( onValueChanged() ) ); + connect( myConv, SIGNAL( cuttonClicked( int ) ), this, SLOT( onValueChanged() ) ); return fr; } @@ -188,13 +211,23 @@ void StdMeshersGUI_NbSegmentsCreator::retrieveParams() const if( myName ) myName->setText( data.myName ); - myNbSeg->setValue( data.myNbSeg ); - myDistr->setCurrentItem( data.myDistrType ); - myScale->setValue( data.myScale ); - myConv->setButton( data.myConv ); - myTable->table()->funcValidator()->setBottom(myConv->id( myConv->selected() )==0 ? -1E20 : 0); - myTable->table()->setData( data.myTable ); + if(data.myNbSegVarName.isEmpty()) + myNbSeg->setValue( data.myNbSeg ); + else + myNbSeg->setText( data.myNbSegVarName ); + + myDistr->setCurrentIndex( data.myDistrType ); + if(data.myScaleVarName.isEmpty()) + myScale->setValue( data.myScale ); + else + myScale->setText( data.myScaleVarName ); + myConv->button( data.myConv )->setChecked( true ); + myTable->setFuncMinValue(myConv->checkedId()==0 ? -1E20 : 0); + myTable->setData( data.myTable ); myExpr->setText( data.myExpr ); + + if ( dlg() ) + dlg()->setMinimumSize( dlg()->minimumSizeHint().width(), dlg()->minimumSizeHint().height() ); } QString StdMeshersGUI_NbSegmentsCreator::storeParams() const @@ -202,7 +235,7 @@ QString StdMeshersGUI_NbSegmentsCreator::storeParams() const NbSegmentsHypothesisData data; readParamsFromWidgets( data ); storeParamsToHypo( data ); - + QString valStr = QString::number( data.myNbSeg ) += "; "; enum DistrType @@ -217,8 +250,8 @@ QString StdMeshersGUI_NbSegmentsCreator::storeParams() const case Regular : valStr += tr("SMESH_DISTR_REGULAR"); break; - case Scale : - valStr += tr("SMESH_NB_SEGMENTS_SCALE_PARAM") + " = " + QString::number( data.myScale ); + case Scale : + valStr += tr("SMESH_NB_SEGMENTS_SCALE_PARAM") + " = " + QString::number( data.myScale );\ break; case TabFunc : { //valStr += tr("SMESH_TAB_FUNC"); @@ -254,9 +287,21 @@ bool StdMeshersGUI_NbSegmentsCreator::readParamsFromHypo( NbSegmentsHypothesisDa h_data.myName = hypName(); h_data.myNbSeg = (int) h->GetNumberOfSegments(); + + SMESH::ListOfParameters_var aParameters = h->GetLastParameters(); + + h_data.myNbSegVarName = (aParameters->length() > 0) ? QString(aParameters[0].in()) : QString(""); + int distr = (int) h->GetDistrType(); h_data.myDistrType = distr; h_data.myScale = distr==1 ? h->GetScaleFactor() : 1.0; + + if(distr==1){ + h_data.myScaleVarName = (aParameters->length() > 1) ? QString(aParameters[1].in()) : QString(""); + } + else + h_data.myScaleVarName = QString(""); + if( distr==2 ) { SMESH::double_array* a = h->GetTableFunction(); @@ -287,15 +332,19 @@ bool StdMeshersGUI_NbSegmentsCreator::storeParamsToHypo( const NbSegmentsHypothe try { if( isCreation() ) - SMESH::SetName( SMESH::FindSObject( h ), h_data.myName.latin1() ); + SMESH::SetName( SMESH::FindSObject( h ), h_data.myName.toLatin1().data() ); + + QStringList aVariablesList; + aVariablesList.append(h_data.myNbSegVarName); h->SetNumberOfSegments( h_data.myNbSeg ); int distr = h_data.myDistrType; h->SetDistrType( distr ); - - if( distr==1 ) + + if( distr==1 ) { h->SetScaleFactor( h_data.myScale ); - + aVariablesList.append(h_data.myScaleVarName); + } if( distr==2 || distr==3 ) h->SetConversionMode( h_data.myConv ); @@ -303,10 +352,12 @@ bool StdMeshersGUI_NbSegmentsCreator::storeParamsToHypo( const NbSegmentsHypothe h->SetTableFunction( h_data.myTable ); if( distr==3 ) - h->SetExpressionFunction( h_data.myExpr.latin1() ); + h->SetExpressionFunction( h_data.myExpr.toLatin1().data() ); //setting of function must follow after setConversionMode, because otherwise //the function will be checked with old conversion mode, so that it may occurs //unexpected errors for user + + h->SetParameters(SMESHGUI::JoinObjectParameters(aVariablesList)); } catch(const SALOME::SALOME_Exception& ex) { @@ -320,17 +371,19 @@ bool StdMeshersGUI_NbSegmentsCreator::readParamsFromWidgets( NbSegmentsHypothesi { h_data.myName = myName ? myName->text() : ""; h_data.myNbSeg = myNbSeg->value(); - h_data.myDistrType = myDistr->currentItem(); - h_data.myConv = myConv->id( myConv->selected() ); + h_data.myNbSegVarName = myNbSeg->text(); + h_data.myScaleVarName = myScale->text(); + h_data.myDistrType = myDistr->currentIndex(); + h_data.myConv = myConv->checkedId(); h_data.myScale = myScale->value(); - myTable->table()->data( h_data.myTable ); + myTable->data( h_data.myTable ); h_data.myExpr = myExpr->text(); return true; } void StdMeshersGUI_NbSegmentsCreator::onValueChanged() { - int distr = myDistr->currentItem(); + int distr = myDistr->currentIndex(); /* if( distr==2 ) //table func myCutNeg->setText( tr( "SMESH_NO_CONV" ) ); @@ -339,10 +392,10 @@ void StdMeshersGUI_NbSegmentsCreator::onValueChanged() if( distr==2 && sender()==myConv ) //table func { - myTable->table()->funcValidator()->setBottom( myConv->id( myConv->selected() )==0 ? -1E20 : 0 ); + myTable->setFuncMinValue( myConv->checkedId()==0 ? -1E20 : 0 ); SMESH::double_array arr; - myTable->table()->data( arr ); - myTable->table()->setData( arr ); //update data in table + myTable->data( arr ); + myTable->setData( arr ); //update data in table } myScale->setShown( distr==1 ); @@ -352,8 +405,7 @@ void StdMeshersGUI_NbSegmentsCreator::onValueChanged() myPreview->setShown( isFunc ); myGroupLayout->setRowStretch( myPreviewRow, isFunc ? 1 : 0 ); - myConv->setShown( isFunc ); - myLConv->setShown( isFunc ); + myConvBox->setShown( isFunc ); if( distr==2 ) myTable->show(); @@ -371,12 +423,19 @@ void StdMeshersGUI_NbSegmentsCreator::onValueChanged() if( distr==2 ) //preview for table-described function { SMESH::double_array a; - myTable->table()->data( a ); + myTable->data( a ); myPreview->setParams( a, nbSeg, false ); } else if( distr==3 ) //preview for analytic-described function myPreview->setParams( myExpr->text(), nbSeg, 100, false ); if( isFunc ) - myPreview->setConversion( StdMeshersGUI_DistrPreview::Conversion( myConv->id( myConv->selected() ) ) ); + myPreview->setConversion( StdMeshersGUI_DistrPreview::Conversion( myConv->checkedId() ) ); + + if ( (QtxComboBox*)sender() == myDistr && dlg() ) { + QApplication::instance()->processEvents(); + dlg()->updateGeometry(); + dlg()->setMinimumSize( dlg()->minimumSizeHint().width(), dlg()->minimumSizeHint().height() ); + dlg()->resize( dlg()->minimumSize() ); + } }