X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_SmoothingDlg.cxx;h=7e1d8d0518e25e811f203d7e1b94cb8f7d709b85;hp=dbbdfd30b0477ecf08d0d38c7adc6be24a9301d9;hb=4c65637b3ba0be986e1ce6e952689b2686475b2f;hpb=e4737e85f0da6d3f90fd08f6be1c2825195fe16f diff --git a/src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx b/src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx index dbbdfd30b..7e1d8d051 100644 --- a/src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx @@ -1,457 +1,534 @@ -// SMESH SMESHGUI : GUI for SMESH component +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// 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. -// -// 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. -// -// 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // +// 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, or (at your option) any later version. // +// 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. +// +// 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_SmoothingDlg.cxx -// Author : Michael ZORIN -// Module : SMESH -// $Header: +// SMESH SMESHGUI : GUI for SMESH component +// File : SMESHGUI_SmoothingDlg.cxx +// Author : Michael ZORIN, Open CASCADE S.A.S. +// SMESH includes +// #include "SMESHGUI_SmoothingDlg.h" #include "SMESHGUI.h" -#include "SMESHGUI_SpinBox.h" #include "SMESHGUI_Utils.h" #include "SMESHGUI_VTKUtils.h" #include "SMESHGUI_MeshUtils.h" +#include "SMESHGUI_SpinBox.h" #include "SMESHGUI_IdValidator.h" -#include "SMESH_Actor.h" -#include "SMESH_TypeFilter.hxx" -#include "SMDS_Mesh.hxx" - -#include "QAD_Application.h" -#include "QAD_Desktop.h" -#include "QAD_MessageBox.h" -#include "utilities.h" - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -//================================================================================= -// class : SMESHGUI_SmoothingDlg() -// purpose : -//================================================================================= -SMESHGUI_SmoothingDlg::SMESHGUI_SmoothingDlg( QWidget* parent, const char* name, SALOME_Selection* Sel, - bool modal, WFlags fl ) - : QDialog( parent, name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | - Qt::WDestructiveClose) +#include "SMESHGUI_FilterDlg.h" + +#include +#include +#include + +#include + +// SALOME GUI includes +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include +#include +#include + +// OCCT includes +#include + +// Qt includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// IDL includes +#include +#include CORBA_SERVER_HEADER(SMESH_Group) +#include CORBA_SERVER_HEADER(SMESH_MeshEditor) + +#define SPACING 6 +#define MARGIN 11 + +/*! + \class BusyLocker + \brief Simple 'busy state' flag locker. + \internal +*/ + +class BusyLocker { - QPixmap image0(QAD_Desktop::getResourceManager()->loadPixmap( "SMESH",tr("ICON_DLG_SMOOTHING"))); - QPixmap image1(QAD_Desktop::getResourceManager()->loadPixmap( "SMESH",tr("ICON_SELECT"))); - - if ( !name ) - setName( "SMESHGUI_SmoothingDlg" ); - resize( 303, 185 ); - setCaption( tr( "SMESH_SMOOTHING" ) ); - setSizeGripEnabled( TRUE ); - SMESHGUI_SmoothingDlgLayout = new QGridLayout( this ); - SMESHGUI_SmoothingDlgLayout->setSpacing( 6 ); - SMESHGUI_SmoothingDlgLayout->setMargin( 11 ); +public: + //! Constructor. Sets passed boolean flag to \c true. + BusyLocker( bool& busy ) : myBusy( busy ) { myBusy = true; } + //! Destructor. Clear external boolean flag passed as parameter to the constructor to \c false. + ~BusyLocker() { myBusy = false; } +private: + bool& myBusy; //! External 'busy state' boolean flag +}; + + +//================================================================================= +// function : SMESHGUI_SmoothingDlg() +// purpose : constructor +//================================================================================= +SMESHGUI_SmoothingDlg::SMESHGUI_SmoothingDlg( SMESHGUI* theModule ) + : QDialog( SMESH::GetDesktop( theModule ) ), + mySMESHGUI( theModule ), + mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ), + myFilterDlg(0), + mySelectedObject(SMESH::SMESH_IDSource::_nil()) +{ + QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_SMOOTHING"))); + QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); + + setModal(false); + setAttribute(Qt::WA_DeleteOnClose, true); + setWindowTitle(tr("SMESH_SMOOTHING")); + setSizeGripEnabled(true); /***************************************************************/ - GroupConstructors = new QButtonGroup( this, "GroupConstructors" ); - GroupConstructors->setTitle( tr( "SMESH_SMOOTHING" ) ); - GroupConstructors->setExclusive( TRUE ); - GroupConstructors->setColumnLayout(0, Qt::Vertical ); - GroupConstructors->layout()->setSpacing( 0 ); - GroupConstructors->layout()->setMargin( 0 ); - GroupConstructorsLayout = new QGridLayout( GroupConstructors->layout() ); - GroupConstructorsLayout->setAlignment( Qt::AlignTop ); - GroupConstructorsLayout->setSpacing( 6 ); - GroupConstructorsLayout->setMargin( 11 ); - Constructor1 = new QRadioButton( GroupConstructors, "Constructor1" ); - Constructor1->setText( tr( "" ) ); - Constructor1->setPixmap( image0 ); - Constructor1->setChecked( TRUE ); - Constructor1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, Constructor1->sizePolicy().hasHeightForWidth() ) ); - Constructor1->setMinimumSize( QSize( 50, 0 ) ); - GroupConstructorsLayout->addWidget( Constructor1, 0, 0 ); - QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); - GroupConstructorsLayout->addItem( spacer, 0, 1 ); - SMESHGUI_SmoothingDlgLayout->addWidget( GroupConstructors, 0, 0 ); - + QVBoxLayout* SMESHGUI_SmoothingDlgLayout = new QVBoxLayout(this); + SMESHGUI_SmoothingDlgLayout->setSpacing(SPACING); + SMESHGUI_SmoothingDlgLayout->setMargin(MARGIN); + /***************************************************************/ - GroupButtons = new QGroupBox( this, "GroupButtons" ); - GroupButtons->setGeometry( QRect( 10, 10, 281, 48 ) ); - GroupButtons->setTitle( tr( "" ) ); - GroupButtons->setColumnLayout(0, Qt::Vertical ); - GroupButtons->layout()->setSpacing( 0 ); - GroupButtons->layout()->setMargin( 0 ); - GroupButtonsLayout = new QGridLayout( GroupButtons->layout() ); - GroupButtonsLayout->setAlignment( Qt::AlignTop ); - GroupButtonsLayout->setSpacing( 6 ); - GroupButtonsLayout->setMargin( 11 ); - buttonCancel = new QPushButton( GroupButtons, "buttonCancel" ); - buttonCancel->setText( tr( "SMESH_BUT_CLOSE" ) ); - buttonCancel->setAutoDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonCancel, 0, 3 ); - buttonApply = new QPushButton( GroupButtons, "buttonApply" ); - buttonApply->setText( tr( "SMESH_BUT_APPLY" ) ); - buttonApply->setAutoDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonApply, 0, 1 ); - QSpacerItem* spacer_9 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); - GroupButtonsLayout->addItem( spacer_9, 0, 2 ); - buttonOk = new QPushButton( GroupButtons, "buttonOk" ); - buttonOk->setText( tr( "SMESH_BUT_OK" ) ); - buttonOk->setAutoDefault( TRUE ); - buttonOk->setDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonOk, 0, 0 ); - SMESHGUI_SmoothingDlgLayout->addWidget( GroupButtons, 2, 0 ); + GroupConstructors = new QGroupBox(tr("SMESH_SMOOTHING"), this); + QButtonGroup* ButtonGroup = new QButtonGroup(this); + QHBoxLayout* GroupConstructorsLayout = new QHBoxLayout(GroupConstructors); + GroupConstructorsLayout->setSpacing(SPACING); + GroupConstructorsLayout->setMargin(MARGIN); + + Constructor1 = new QRadioButton(GroupConstructors); + Constructor1->setIcon(image0); + Constructor1->setChecked(true); + GroupConstructorsLayout->addWidget(Constructor1); + ButtonGroup->addButton(Constructor1, 0); /***************************************************************/ - GroupArguments = new QGroupBox( this, "GroupArguments" ); - GroupArguments->setTitle( tr( "SMESH_ARGUMENTS" ) ); - GroupArguments->setColumnLayout(0, Qt::Vertical ); - GroupArguments->layout()->setSpacing( 0 ); - GroupArguments->layout()->setMargin( 0 ); - GroupArgumentsLayout = new QGridLayout( GroupArguments->layout() ); - GroupArgumentsLayout->setAlignment( Qt::AlignTop ); - GroupArgumentsLayout->setSpacing( 6 ); - GroupArgumentsLayout->setMargin( 11 ); + GroupArguments = new QGroupBox(tr("SMESH_ARGUMENTS"), this); + QGridLayout* GroupArgumentsLayout = new QGridLayout(GroupArguments); + GroupArgumentsLayout->setSpacing(SPACING); + GroupArgumentsLayout->setMargin(MARGIN); + + myIdValidator = new SMESHGUI_IdValidator(this); // Controls for elements selection - TextLabelElements = new QLabel( GroupArguments, "TextLabelElements" ); - TextLabelElements->setText( tr( "SMESH_ID_ELEMENTS" ) ); - GroupArgumentsLayout->addWidget( TextLabelElements, 0, 0 ); + TextLabelElements = new QLabel(tr("SMESH_ID_ELEMENTS"), GroupArguments); - SelectElementsButton = new QPushButton( GroupArguments, "SelectElementsButton" ); - SelectElementsButton->setText( tr( "" ) ); - SelectElementsButton->setPixmap( image1 ); - SelectElementsButton->setToggleButton( FALSE ); - GroupArgumentsLayout->addWidget( SelectElementsButton, 0, 1 ); + SelectElementsButton = new QPushButton(GroupArguments); + SelectElementsButton->setIcon(image1); - LineEditElements = new QLineEdit( GroupArguments, "LineEditElements" ); - LineEditElements->setValidator( new SMESHGUI_IdValidator( this, "validator" )); - GroupArgumentsLayout->addWidget( LineEditElements, 0, 2 ); + LineEditElements = new QLineEdit(GroupArguments); + LineEditElements->setValidator(myIdValidator); + LineEditElements->setMaxLength(-1); + myElemFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments ); + connect(myElemFilterBtn, SIGNAL(clicked()), this, SLOT(setElemFilters())); // Control for the whole mesh selection - CheckBoxMesh = new QCheckBox( GroupArguments, "CheckBoxMesh" ); - CheckBoxMesh->setText( tr( "SMESH_SELECT_WHOLE_MESH" ) ); - GroupArgumentsLayout->addMultiCellWidget( CheckBoxMesh, 1, 1, 0, 2 ); + CheckBoxMesh = new QCheckBox(tr("SMESH_SELECT_WHOLE_MESH"), GroupArguments); // Controls for nodes selection - TextLabelNodes = new QLabel( GroupArguments, "TextLabelNodes" ); - TextLabelNodes->setText( tr( "FIXED_NODES_IDS" ) ); - GroupArgumentsLayout->addWidget( TextLabelNodes, 2, 0 ); + TextLabelNodes = new QLabel(tr("FIXED_NODES_IDS"), GroupArguments); - SelectNodesButton = new QPushButton( GroupArguments, "SelectNodesButton" ); - SelectNodesButton->setText( tr( "" ) ); - SelectNodesButton->setPixmap( image1 ); - SelectNodesButton->setToggleButton( FALSE ); - GroupArgumentsLayout->addWidget( SelectNodesButton, 2, 1 ); + SelectNodesButton = new QPushButton(GroupArguments); + SelectNodesButton->setIcon(image1); - LineEditNodes = new QLineEdit( GroupArguments, "LineEditNodes" ); - LineEditNodes->setValidator( new SMESHGUI_IdValidator( this, "validator" )); - GroupArgumentsLayout->addWidget( LineEditNodes, 2, 2 ); + LineEditNodes = new QLineEdit(GroupArguments); + LineEditNodes->setValidator(myIdValidator); + LineEditNodes->setMaxLength(-1); + QPushButton* filterNodeBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments ); + connect(filterNodeBtn, SIGNAL(clicked()), this, SLOT(setNodeFilters())); // Controls for method selection - TextLabelMethod = new QLabel( GroupArguments, "TextLabelMethod" ); - TextLabelMethod->setText( tr( "METHOD" ) ); - GroupArgumentsLayout->addMultiCellWidget( TextLabelMethod, 3, 3, 0, 1 ); + TextLabelMethod = new QLabel(tr("METHOD"), GroupArguments); - ComboBoxMethod = new QComboBox( GroupArguments, "ComboBoxMethod" ); - GroupArgumentsLayout->addWidget( ComboBoxMethod, 3, 2 ); + ComboBoxMethod = new QComboBox(GroupArguments); // Controls for iteration limit defining - TextLabelLimit = new QLabel( GroupArguments, "TextLabelLimit" ); - TextLabelLimit->setText( tr( "ITERATION_LIMIT" ) ); - GroupArgumentsLayout->addMultiCellWidget( TextLabelLimit, 4, 4, 0, 1 ); + TextLabelLimit = new QLabel(tr("ITERATION_LIMIT"), GroupArguments); - SpinBox_IterationLimit = new QSpinBox(GroupArguments, "SpinBox_IterationLimit"); - GroupArgumentsLayout->addWidget( SpinBox_IterationLimit, 4, 2 ); + SpinBox_IterationLimit = new SalomeApp_IntSpinBox(GroupArguments); // Controls for max. aspect ratio defining - TextLabelAspectRatio = new QLabel( GroupArguments, "TextLabelAspectRatio" ); - TextLabelAspectRatio->setText( tr( "MAX_ASPECT_RATIO" ) ); - GroupArgumentsLayout->addMultiCellWidget( TextLabelAspectRatio, 5, 5, 0, 1 ); + TextLabelAspectRatio = new QLabel(tr("MAX_ASPECT_RATIO"), GroupArguments); + + SpinBox_AspectRatio = new SMESHGUI_SpinBox(GroupArguments); + + // Check box "Is Parametric" + CheckBoxParametric = new QCheckBox( tr("IS_PARAMETRIC"), GroupArguments ); + + GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0); + GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1); + GroupArgumentsLayout->addWidget(LineEditElements, 0, 2); + GroupArgumentsLayout->addWidget(myElemFilterBtn, 0, 3); + GroupArgumentsLayout->addWidget(CheckBoxMesh, 1, 0, 1, 4); + GroupArgumentsLayout->addWidget(TextLabelNodes, 2, 0); + GroupArgumentsLayout->addWidget(SelectNodesButton, 2, 1); + GroupArgumentsLayout->addWidget(LineEditNodes, 2, 2); + GroupArgumentsLayout->addWidget(filterNodeBtn, 2, 3); + GroupArgumentsLayout->addWidget(TextLabelMethod, 3, 0); + GroupArgumentsLayout->addWidget(ComboBoxMethod, 3, 2, 1, 2); + GroupArgumentsLayout->addWidget(TextLabelLimit, 4, 0); + GroupArgumentsLayout->addWidget(SpinBox_IterationLimit, 4, 2, 1, 2); + GroupArgumentsLayout->addWidget(TextLabelAspectRatio, 5, 0); + GroupArgumentsLayout->addWidget(SpinBox_AspectRatio, 5, 2, 1, 2); + GroupArgumentsLayout->addWidget(CheckBoxParametric, 6, 0, 1, 4); - SpinBox_AspectRatio = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_AspectRatio"); - GroupArgumentsLayout->addWidget( SpinBox_AspectRatio, 5, 2 ); + /***************************************************************/ + GroupButtons = new QGroupBox(this); + QHBoxLayout* GroupButtonsLayout = new QHBoxLayout(GroupButtons); + GroupButtonsLayout->setSpacing(SPACING); + GroupButtonsLayout->setMargin(MARGIN); + + buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), GroupButtons); + buttonOk->setAutoDefault(true); + buttonOk->setDefault(true); + buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons); + buttonApply->setAutoDefault(true); + buttonCancel = new QPushButton(tr("SMESH_BUT_CLOSE"), GroupButtons); + buttonCancel->setAutoDefault(true); + buttonHelp = new QPushButton(tr("SMESH_BUT_HELP"), GroupButtons); + buttonHelp->setAutoDefault(true); + + GroupButtonsLayout->addWidget(buttonOk); + GroupButtonsLayout->addSpacing(10); + GroupButtonsLayout->addWidget(buttonApply); + GroupButtonsLayout->addSpacing(10); + GroupButtonsLayout->addStretch(); + GroupButtonsLayout->addWidget(buttonCancel); + GroupButtonsLayout->addWidget(buttonHelp); + /***************************************************************/ + SMESHGUI_SmoothingDlgLayout->addWidget(GroupConstructors); + SMESHGUI_SmoothingDlgLayout->addWidget(GroupArguments); + SMESHGUI_SmoothingDlgLayout->addWidget(GroupButtons); - SMESHGUI_SmoothingDlgLayout->addWidget( GroupArguments, 1, 0 ); - + /***************************************************************/ /* Initialisations */ - ComboBoxMethod->insertItem(tr("LAPLACIAN")); - ComboBoxMethod->insertItem(tr("CENTROIDAL")); - - QIntValidator* anIntValidator = new QIntValidator(SpinBox_IterationLimit); - SpinBox_IterationLimit->setValidator(anIntValidator); - SpinBox_IterationLimit->setRange( 1, 999999 ); - SpinBox_AspectRatio->RangeStepAndValidator( 0.0, +999999.999, 0.1, 3 ); + ComboBoxMethod->addItem(tr("LAPLACIAN")); + ComboBoxMethod->addItem(tr("CENTROIDAL")); - GroupArguments->show(); - myConstructorId = 0 ; - Constructor1->setChecked( TRUE ); - mySelection = Sel; + ComboBoxMethod->setCurrentIndex(0); - mySMESHGUI = SMESHGUI::GetSMESHGUI() ; - mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ; + CheckBoxParametric->setChecked( true ); - // Costruction of the logical filter - SMESH_ListOfFilter aListOfFilters; - Handle(SMESH_TypeFilter) aMeshOrSubMeshFilter = new SMESH_TypeFilter( MESHorSUBMESH ); - if ( !aMeshOrSubMeshFilter.IsNull() ) - aListOfFilters.Append( aMeshOrSubMeshFilter ); - Handle(SMESH_TypeFilter) aSmeshGroupFilter = new SMESH_TypeFilter( GROUP ); - if ( !aSmeshGroupFilter.IsNull() ) - aListOfFilters.Append( aSmeshGroupFilter ); + SpinBox_IterationLimit->setRange(1, 999999); + SpinBox_IterationLimit->setValue(20); + SpinBox_AspectRatio->RangeStepAndValidator(0.0, +999999.999, 0.1, "parametric_precision"); + SpinBox_AspectRatio->SetValue(1.1); + + GroupArguments->show(); + myConstructorId = 0; + Constructor1->setChecked(true); - myMeshOrSubMeshOrGroupFilter = new SMESH_LogicalFilter( aListOfFilters, SMESH_LogicalFilter::LO_OR ); + mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); + + mySMESHGUI->SetActiveDialogBox(this); + + // Costruction of the logical filter for the elements: mesh/sub-mesh/group + QList aListOfFilters; + aListOfFilters << new SMESH_TypeFilter(SMESH::MESHorSUBMESH) << new SMESH_TypeFilter(SMESH::GROUP); + + myMeshOrSubMeshOrGroupFilter = + new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR); + + myHelpFileName = "smoothing_page.html"; Init(); - /* signals and slots connections */ - connect( buttonOk, SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); - connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( ClickOnCancel() ) ) ; - connect( buttonApply, SIGNAL( clicked() ), this, SLOT(ClickOnApply() ) ); - connect( GroupConstructors, SIGNAL(clicked(int) ), SLOT( ConstructorsClicked(int) ) ); - - connect( SelectElementsButton, SIGNAL (clicked() ), this, SLOT( SetEditCurrentArgument() ) ) ; - connect( SelectNodesButton, SIGNAL (clicked() ), this, SLOT( SetEditCurrentArgument() ) ) ; - connect( mySMESHGUI, SIGNAL ( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog() ) ) ; - connect( mySelection, SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); + + /***************************************************************/ + // signals and slots connections + connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); + connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); + connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); + connect(buttonHelp, SIGNAL(clicked()), this, SLOT(ClickOnHelp())); + + connect(SelectElementsButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); + connect(SelectNodesButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); + connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); + connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); /* to close dialog if study change */ - connect( mySMESHGUI, SIGNAL ( SignalCloseAllDialogs() ), this, SLOT( ClickOnCancel() ) ) ; - connect( LineEditElements, SIGNAL( textChanged( const QString& )), - SLOT( onTextChange( const QString& ))); - connect( LineEditNodes, SIGNAL( textChanged( const QString& )), - SLOT( onTextChange( const QString& ))); - connect( CheckBoxMesh, SIGNAL( toggled( bool )), - SLOT( onSelectMesh( bool ))); - - /* Move widget on the botton right corner of main widget */ - int x, y ; - mySMESHGUI->DefineDlgPosition( this, x, y ) ; - this->move( x, y ) ; - this->show() ; /* displays Dialog */ + connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(reject())); + connect(LineEditElements, SIGNAL(textChanged(const QString&)), + SLOT(onTextChange(const QString&))); + connect(LineEditNodes, SIGNAL(textChanged(const QString&)), + SLOT(onTextChange(const QString&))); + connect(CheckBoxMesh, SIGNAL(toggled(bool)), + SLOT(onSelectMesh(bool))); } //================================================================================= // function : ~SMESHGUI_SmoothingDlg() -// purpose : Destroys the object and frees any allocated resources +// purpose : destructor //================================================================================= SMESHGUI_SmoothingDlg::~SMESHGUI_SmoothingDlg() { // no need to delete child widgets, Qt does it all for us + if ( myFilterDlg != 0 ) { + myFilterDlg->setParent( 0 ); + delete myFilterDlg; + } } - //================================================================================= // function : Init() -// purpose : +// purpose : initialization //================================================================================= void SMESHGUI_SmoothingDlg::Init() { - myBusy = false; - - ComboBoxMethod->setCurrentItem(0); - - SpinBox_IterationLimit->setValue(20); - SpinBox_AspectRatio->SetValue(1.1); - + myBusy = false; + +// ComboBoxMethod->setCurrentItem(0); + +// SpinBox_IterationLimit->setValue(20); +// SpinBox_AspectRatio->SetValue(1.1); + myEditCurrentArgument = LineEditElements; LineEditElements->setFocus(); - myElementsId = ""; - myNbOkElements = 0 ; - myNbOkNodes = 0 ; + LineEditElements->clear(); + LineEditNodes->clear(); + myNbOkElements = 0; + myNbOkNodes = 0; myActor = 0; + myIO.Nullify(); myMesh = SMESH::SMESH_Mesh::_nil(); - + CheckBoxMesh->setChecked(false); - onSelectMesh( false ); + onSelectMesh(false); } - //================================================================================= -// function : ConstructorsClicked() -// purpose : Radio button management +// function : ClickOnApply() +// purpose : Called when user presses button //================================================================================= -void SMESHGUI_SmoothingDlg::ConstructorsClicked(int constructorId) +bool SMESHGUI_SmoothingDlg::ClickOnApply() { - return ; -} + if (mySMESHGUI->isActiveStudyLocked()) + return false; + if (!isValid()) + return false; -//================================================================================= -// function : ClickOnApply() -// purpose : -//================================================================================= -void SMESHGUI_SmoothingDlg::ClickOnApply() -{ - if (mySMESHGUI->ActiveStudyLocked()) - return; - - if ( myNbOkElements && (myNbOkNodes || LineEditNodes->text().stripWhiteSpace().isEmpty())) - { - QStringList aListElementsId = QStringList::split( " ", myElementsId, false); - QStringList aListNodesId = QStringList::split( " ", LineEditNodes->text(), false); + if (myNbOkElements && (myNbOkNodes || LineEditNodes->text().trimmed().isEmpty())) { + QStringList aListElementsId = LineEditElements->text().split(" ", QString::SkipEmptyParts); + QStringList aListNodesId = LineEditNodes->text().split(" ", QString::SkipEmptyParts); - SMESH::long_array_var anElementsId = new SMESH::long_array; - SMESH::long_array_var aNodesId = new SMESH::long_array; + SMESH::long_array_var anElementsId = new SMESH::long_array; + SMESH::long_array_var aNodesId = new SMESH::long_array; - anElementsId->length( aListElementsId.count() ); - for ( int i = 0; i < aListElementsId.count(); i++ ) - anElementsId[i] = aListElementsId[i].toInt(); - - if (myNbOkNodes) - { - aNodesId->length( aListNodesId.count() ); - for ( int i = 0; i < aListNodesId.count(); i++ ) - aNodesId[i] = aListNodesId[i].toInt(); - } - else - anElementsId->length(0); - - long anIterationLimit = (long)SpinBox_IterationLimit->value(); - double aMaxAspectRatio = SpinBox_AspectRatio->GetValue(); + anElementsId->length(aListElementsId.count()); + for (int i = 0; i < aListElementsId.count(); i++) + anElementsId[i] = aListElementsId[i].toInt(); - SMESH::SMESH_MeshEditor::Smooth_Method aMethod = SMESH::SMESH_MeshEditor::LAPLACIAN_SMOOTH; - if (ComboBoxMethod->currentItem() > 0) - aMethod = SMESH::SMESH_MeshEditor::CENTROIDAL_SMOOTH; - - bool aResult = false; - try - { - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - QApplication::setOverrideCursor(Qt::waitCursor); - aResult = aMeshEditor->Smooth(anElementsId.inout(), aNodesId.inout(), anIterationLimit, aMaxAspectRatio, aMethod); - QApplication::restoreOverrideCursor(); - } - catch( ... ) - { - } - - if ( aResult ) - { - Handle(SALOME_InteractiveObject) anIO = myActor->getIO(); - mySelection->ClearIObjects(); - SMESH::UpdateView(); - mySelection->AddIObject( anIO, false ); - Init(); - } + if ( myNbOkNodes && aListNodesId.count() > 0 ) { + aNodesId->length(aListNodesId.count()); + for (int i = 0; i < aListNodesId.count(); i++) + aNodesId[i] = aListNodesId[i].toInt(); + } else { + aNodesId->length(0); } - + + long anIterationLimit = (long)SpinBox_IterationLimit->value(); + double aMaxAspectRatio = SpinBox_AspectRatio->GetValue(); + + QStringList aParameters; + aParameters << SpinBox_IterationLimit->text(); + aParameters << SpinBox_AspectRatio->text(); + + SMESH::SMESH_MeshEditor::Smooth_Method aMethod = SMESH::SMESH_MeshEditor::LAPLACIAN_SMOOTH; + if (ComboBoxMethod->currentIndex() > 0) + aMethod = SMESH::SMESH_MeshEditor::CENTROIDAL_SMOOTH; + + bool aResult = false; + try { + SUIT_OverrideCursor aWaitCursor; + SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); + + myMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + + if ( CheckBoxParametric->isChecked() ) { + if(CheckBoxMesh->isChecked()) + aResult = aMeshEditor->SmoothParametricObject(mySelectedObject, aNodesId.inout(), + anIterationLimit, aMaxAspectRatio, aMethod); + else + aResult = aMeshEditor->SmoothParametric(anElementsId.inout(), aNodesId.inout(), + anIterationLimit, aMaxAspectRatio, aMethod); + } + else { + if(CheckBoxMesh->isChecked()) + aResult = aMeshEditor->SmoothObject(mySelectedObject, aNodesId.inout(), + anIterationLimit, aMaxAspectRatio, aMethod); + else + aResult = aMeshEditor->Smooth(anElementsId.inout(), aNodesId.inout(), + anIterationLimit, aMaxAspectRatio, aMethod); + } + + } catch (...) { + } + + if (aResult) { + SMESH::Update(myIO, SMESH::eDisplay); + SMESHGUI::Modified(); + Init(); + + mySelectedObject = SMESH::SMESH_IDSource::_nil(); + } + } + + return true; } //================================================================================= // function : ClickOnOk() -// purpose : +// purpose : Called when user presses button //================================================================================= void SMESHGUI_SmoothingDlg::ClickOnOk() { - ClickOnApply() ; - ClickOnCancel() ; + if( ClickOnApply() ) + reject(); +} + +//================================================================================= +// function : reject() +// purpose : Called when dialog box is closed +//================================================================================= +void SMESHGUI_SmoothingDlg::reject() +{ + disconnect(mySelectionMgr, 0, this, 0); + mySelectionMgr->clearFilters(); + //mySelectionMgr->clearSelected(); + if (SMESH::GetCurrentVtkView()) { + SMESH::RemoveFilters(); // PAL6938 -- clean all mesh entity filters + SMESH::SetPointRepresentation(false); + SMESH::SetPickable(); + } + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(ActorSelection); + mySMESHGUI->ResetState(); + QDialog::reject(); } - //================================================================================= -// function : ClickOnCancel() +// function : ClickOnHelp() // purpose : //================================================================================= -void SMESHGUI_SmoothingDlg::ClickOnCancel() +void SMESHGUI_SmoothingDlg::ClickOnHelp() { - mySelection->ClearFilters(); - mySelection->ClearIObjects(); - SMESH::SetPointRepresentation(false); - QAD_Application::getDesktop()->SetSelectionMode( ActorSelection ); - disconnect( mySelection, 0, this, 0 ); - mySMESHGUI->ResetState() ; - reject() ; + LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication()); + if (app) + app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName); + else { + 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)); + } } //======================================================================= -//function : onTextChange -//purpose : +// function : onTextChange() +// purpose : //======================================================================= - -void SMESHGUI_SmoothingDlg::onTextChange(const QString& theNewText) +void SMESHGUI_SmoothingDlg::onTextChange (const QString& theNewText) { QLineEdit* send = (QLineEdit*)sender(); - if ( myBusy ) return; - myBusy = true; - + // return if busy + if (myBusy || myIO.IsNull()) return; + + // set busy flag + BusyLocker lock( myBusy ); + if (send == LineEditElements) myNbOkElements = 0; else if (send == LineEditNodes) myNbOkNodes = 0; - - buttonOk->setEnabled( false ); - buttonApply->setEnabled( false ); - + + buttonOk->setEnabled(false); + buttonApply->setEnabled(false); + // hilight entered elements/nodes - SMDS_Mesh* aMesh = 0; - if ( myActor ) - aMesh = myActor->GetObject()->GetMesh(); - - if ( aMesh ) { - mySelection->ClearIObjects(); - mySelection->AddIObject( myActor->getIO() ); - - QStringList aListId = QStringList::split( " ", theNewText, false); - - if (send == LineEditElements) { - for ( int i = 0; i < aListId.count(); i++ ) { - const SMDS_MeshElement * e = aMesh->FindElement( aListId[ i ].toInt() ); - if ( e ) { - if ( !mySelection->IsIndexSelected( myActor->getIO(), e->GetID() )) - mySelection->AddOrRemoveIndex (myActor->getIO(), e->GetID(), true); - myNbOkElements++; - } + SMDS_Mesh* aMesh = myActor ? myActor->GetObject()->GetMesh() : 0; + QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts); + + if (send == LineEditElements) { + TColStd_MapOfInteger newIndices; + for (int i = 0; i < aListId.count(); i++) { + int id = aListId[ i ].toInt(); + if ( id > 0 ) { + bool validId = aMesh ? ( aMesh->FindElement( id ) != 0 ) : ( myMesh->GetElementType( id, true ) != SMESH::EDGE ); + if ( validId ) + newIndices.Add( id ); } - myElementsId = theNewText; + myNbOkElements = newIndices.Extent(); + mySelector->AddOrRemoveIndex(myIO, newIndices, false); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->highlight( myIO, true, true ); } - else if (send == LineEditNodes) { - for ( int i = 0; i < aListId.count(); i++ ) { - const SMDS_MeshNode * n = aMesh->FindNode( aListId[ i ].toInt() ); - if ( n ) { - if ( !mySelection->IsIndexSelected( myActor->getIO(), n->GetID() )) - mySelection->AddOrRemoveIndex (myActor->getIO(), n->GetID(), true); - myNbOkNodes++; - } + } + else if (send == LineEditNodes) { + TColStd_MapOfInteger newIndices; + for (int i = 0; i < aListId.count(); i++) { + int id = aListId[ i ].toInt(); + if ( id > 0 ) { + bool validId = aMesh ? ( aMesh->FindNode( id ) != 0 ) : ( myMesh->GetElementType( id, false ) != SMESH::EDGE ); + if ( validId ) + newIndices.Add( id ); } + myNbOkNodes = newIndices.Extent(); + mySelector->AddOrRemoveIndex(myIO, newIndices, false); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->highlight( myIO, true, true ); } } - - if ( myNbOkElements && (myNbOkNodes || LineEditNodes->text().stripWhiteSpace().isEmpty()) ) { - buttonOk->setEnabled( true ); - buttonApply->setEnabled( true ); + + if (myNbOkElements && (myNbOkNodes || LineEditNodes->text().trimmed().isEmpty())) { + buttonOk->setEnabled(true); + buttonApply->setEnabled(true); } - - myBusy = false; } //================================================================================= @@ -460,125 +537,85 @@ void SMESHGUI_SmoothingDlg::onTextChange(const QString& theNewText) //================================================================================= void SMESHGUI_SmoothingDlg::SelectionIntoArgument() { - if ( myBusy ) return; + if (myBusy) return; // clear - myActor = 0; QString aString = ""; - myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) - { - LineEditElements->setText( aString ); + // set busy flag + BusyLocker lock( myBusy ); + + if (myEditCurrentArgument == LineEditElements || + myEditCurrentArgument == LineEditNodes) { + myEditCurrentArgument->setText(aString); + if (myEditCurrentArgument == LineEditElements) { myNbOkElements = 0; - buttonOk->setEnabled( false ); - buttonApply->setEnabled( false ); + myActor = 0; + myIO.Nullify(); } - myBusy = false; + else { + myNbOkNodes = 0; + } + buttonOk->setEnabled(false); + buttonApply->setEnabled(false); + } - if ( !GroupButtons->isEnabled() ) // inactive + if (!GroupButtons->isEnabled()) // inactive return; - + // get selected mesh - - int nbSel = mySelection->IObjectCount(); - if(nbSel != 1) - return; - - Handle(SALOME_InteractiveObject) IO = mySelection->firstIObject(); - myMesh = SMESH::GetMeshByIO(IO); - if(myMesh->_is_nil()) + SALOME_ListIO aList; + mySelectionMgr->selectedObjects(aList); + int nbSel = aList.Extent(); + if (nbSel != 1) return; - myActor = SMESH::FindActorByObject(myMesh); - if (!myActor) - return; - - int aNbUnits = 0; - - if (myEditCurrentArgument == LineEditElements) - { - myElementsId = ""; - - if (CheckBoxMesh->isChecked()) - { - SMESH::GetNameOfSelectedIObjects(mySelection, aString); - - if(!SMESH::IObjectToInterface(IO)->_is_nil()) //MESH - { - // get IDs from mesh - SMDS_Mesh* aSMDSMesh = myActor->GetObject()->GetMesh(); - if (!aSMDSMesh) - return; - - for (int i = aSMDSMesh->MinElementID(); i <= aSMDSMesh->MaxElementID(); i++ ) - { - const SMDS_MeshElement * e = aSMDSMesh->FindElement( i ); - if ( e ) { - myElementsId += QString(" %1").arg(i); - aNbUnits++; - } - } - } - else if (!SMESH::IObjectToInterface(IO)->_is_nil()) //SUBMESH - { - // get submesh - SMESH::SMESH_subMesh_var aSubMesh = SMESH::IObjectToInterface(IO) ; - - // get IDs from submesh - SMESH::long_array_var anElementsIds = new SMESH::long_array; - anElementsIds = aSubMesh->GetElementsId(); - for ( int i = 0; i < anElementsIds->length(); i++ ) - myElementsId += QString(" %1").arg(anElementsIds[i]); - aNbUnits = anElementsIds->length(); - } - else // GROUP - { - // get smesh group - SMESH::SMESH_GroupBase_var aGroup - = SMESH::IObjectToInterface(IO); - if (aGroup->_is_nil()) - return; - - // get IDs from smesh group - SMESH::long_array_var anElementsIds = new SMESH::long_array; - anElementsIds = aGroup->GetListOfID(); - for ( int i = 0; i < anElementsIds->length(); i++ ) - myElementsId += QString(" %1").arg(anElementsIds[i]); - aNbUnits = anElementsIds->length(); - } - } + + Handle(SALOME_InteractiveObject) IO = aList.First(); + + if (myEditCurrentArgument == LineEditElements) { + myMesh = SMESH::GetMeshByIO(IO); + if (myMesh->_is_nil()) + return; + myIO = IO; + myActor = SMESH::FindActorByObject(myMesh); + + if (CheckBoxMesh->isChecked()) { + SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); + + SMESH::SMESH_IDSource_var obj = SMESH::IObjectToInterface( myIO ); + if ( !CORBA::is_nil( obj ) ) + mySelectedObject = obj; else - { - aNbUnits = SMESH::GetNameOfSelectedElements(mySelection, aString) ; - myElementsId = aString; - } - } - else if (myEditCurrentArgument == LineEditNodes && !myMesh->_is_nil() && myActor) - { - myNbOkNodes = 0; - aNbUnits = SMESH::GetNameOfSelectedNodes(mySelection, aString) ; + return; + myNbOkElements = true; + } else { + // get indices of selected elements + TColStd_IndexedMapOfInteger aMapIndex; + mySelector->GetIndex(IO,aMapIndex); + myNbOkElements = aMapIndex.Extent(); + + if (myNbOkElements < 1) + return; + + QStringList elements; + for ( int i = 0; i < myNbOkElements; ++i ) + elements << QString::number( aMapIndex( i+1 ) ); + aString = elements.join(" "); } - - if(aNbUnits < 1) - return ; + } else if (myEditCurrentArgument == LineEditNodes && !myMesh->_is_nil() && myIO == IO ) { + myNbOkNodes = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString); + } - myBusy = true; - myEditCurrentArgument->setText( aString ); - myBusy = false; - - // OK - if (myEditCurrentArgument == LineEditElements) - myNbOkElements = true; - else if (myEditCurrentArgument == LineEditNodes) - myNbOkNodes = true; - - if (myNbOkElements) - { - buttonOk->setEnabled( true ); - buttonApply->setEnabled( true ); - } -} + myEditCurrentArgument->setText(aString); + myEditCurrentArgument->repaint(); + myEditCurrentArgument->setEnabled(false); // to update lineedit IPAL 19809 + myEditCurrentArgument->setEnabled(true); + if (myNbOkElements && (myNbOkNodes || LineEditNodes->text().trimmed().isEmpty())) { + buttonOk->setEnabled(true); + buttonApply->setEnabled(true); + } +} //================================================================================= // function : SetEditCurrentArgument() @@ -587,143 +624,206 @@ void SMESHGUI_SmoothingDlg::SelectionIntoArgument() void SMESHGUI_SmoothingDlg::SetEditCurrentArgument() { QPushButton* send = (QPushButton*)sender(); - - switch (myConstructorId) + + switch (myConstructorId) { + case 0: /* default constructor */ { - case 0: /* default constructor */ - { - disconnect( mySelection, 0, this, 0 ); - mySelection->ClearIObjects(); - mySelection->ClearFilters(); - - if(send == SelectElementsButton) { - myEditCurrentArgument = LineEditElements; - SMESH::SetPointRepresentation(false); - if (CheckBoxMesh->isChecked()) - { - QAD_Application::getDesktop()->SetSelectionMode( ActorSelection ); - mySelection->AddFilter(myMeshOrSubMeshOrGroupFilter); - } - else - QAD_Application::getDesktop()->SetSelectionMode( CellSelection, true ); - } - else if (send == SelectNodesButton) - { - myEditCurrentArgument = LineEditNodes; - SMESH::SetPointRepresentation(true); - QAD_Application::getDesktop()->SetSelectionMode( NodeSelection, true ); - } - - myEditCurrentArgument->setFocus(); - connect( mySelection, SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); - SelectionIntoArgument() ; - break; + disconnect(mySelectionMgr, 0, this, 0); + mySelectionMgr->clearSelected(); + mySelectionMgr->clearFilters(); + + if (send == SelectElementsButton) { + myEditCurrentArgument = LineEditElements; + SMESH::SetPointRepresentation(false); + if (CheckBoxMesh->isChecked()) { + // mySelectionMgr->setSelectionModes(ActorSelection); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(ActorSelection); + mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); + } else { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(FaceSelection); + } + } else if (send == SelectNodesButton) { + LineEditNodes->clear(); + myEditCurrentArgument = LineEditNodes; + SMESH::SetPointRepresentation(true); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) { + aViewWindow->SetSelectionMode(NodeSelection); + } } + + myEditCurrentArgument->setFocus(); + connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + SelectionIntoArgument(); + break; } + } } //================================================================================= // function : DeactivateActiveDialog() -// purpose : +// purpose : Deactivates this dialog //================================================================================= void SMESHGUI_SmoothingDlg::DeactivateActiveDialog() { - if ( GroupConstructors->isEnabled() ) { - GroupConstructors->setEnabled(false) ; - GroupArguments->setEnabled(false) ; - GroupButtons->setEnabled(false) ; - mySMESHGUI->ResetState() ; - mySMESHGUI->SetActiveDialogBox(0) ; + if (GroupConstructors->isEnabled()) { + GroupConstructors->setEnabled(false); + GroupArguments->setEnabled(false); + GroupButtons->setEnabled(false); + mySMESHGUI->ResetState(); + mySMESHGUI->SetActiveDialogBox(0); } } - //================================================================================= // function : ActivateThisDialog() -// purpose : +// purpose : Activates this dialog //================================================================================= void SMESHGUI_SmoothingDlg::ActivateThisDialog() { - /* Emit a signal to deactivate the active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog() ; - GroupConstructors->setEnabled(true) ; - GroupArguments->setEnabled(true) ; - GroupButtons->setEnabled(true) ; - - mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ; - - QAD_Application::getDesktop()->SetSelectionMode( CellSelection, true ); + // Emit a signal to deactivate the active dialog + mySMESHGUI->EmitSignalDeactivateDialog(); + GroupConstructors->setEnabled(true); + GroupArguments->setEnabled(true); + GroupButtons->setEnabled(true); + + mySMESHGUI->SetActiveDialogBox(this); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(FaceSelection); SelectionIntoArgument(); } - //================================================================================= // function : enterEvent() -// purpose : +// purpose : Mouse enter event //================================================================================= -void SMESHGUI_SmoothingDlg::enterEvent(QEvent* e) +void SMESHGUI_SmoothingDlg::enterEvent (QEvent*) { - if ( GroupConstructors->isEnabled() ) - return ; - ActivateThisDialog() ; + if (!GroupConstructors->isEnabled()) + ActivateThisDialog(); } +//======================================================================= +// function : onSelectMesh() +// purpose : +//======================================================================= +void SMESHGUI_SmoothingDlg::onSelectMesh (bool toSelectMesh) +{ + if (toSelectMesh) + TextLabelElements->setText(tr("SMESH_NAME")); + else + TextLabelElements->setText(tr("SMESH_ID_ELEMENTS")); + myElemFilterBtn->setEnabled(!toSelectMesh); + + if (myEditCurrentArgument != LineEditElements && + myEditCurrentArgument != LineEditNodes) { + LineEditElements->clear(); + LineEditNodes->clear(); + return; + } + + mySelectionMgr->clearFilters(); + SMESH::SetPointRepresentation(false); + + if (toSelectMesh) { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(ActorSelection); + // mySelectionMgr->setSelectionModes(ActorSelection); + mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); + myEditCurrentArgument->setReadOnly(true); + myEditCurrentArgument->setValidator(0); + } else { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(myEditCurrentArgument == LineEditElements ? FaceSelection + : NodeSelection ); + myEditCurrentArgument->setReadOnly(false); + LineEditElements->setValidator(myIdValidator); + onTextChange(myEditCurrentArgument->text()); + } + + SelectionIntoArgument(); +} //================================================================================= -// function : closeEvent() +// function : keyPressEvent() // purpose : //================================================================================= -void SMESHGUI_SmoothingDlg::closeEvent( QCloseEvent* e ) +void SMESHGUI_SmoothingDlg::keyPressEvent( QKeyEvent* e ) { - /* same than click on cancel button */ - this->ClickOnCancel() ; + QDialog::keyPressEvent( e ); + if ( e->isAccepted() ) + return; + + if ( e->key() == Qt::Key_F1 ) { + e->accept(); + ClickOnHelp(); + } } +//================================================================================= +// function : setFilters() +// purpose : activate filter dialog +//================================================================================= +void SMESHGUI_SmoothingDlg::setFilters( const bool theIsElem ) +{ + if(myMesh->_is_nil()) { + SUIT_MessageBox::critical(this, + tr("SMESH_ERROR"), + tr("NO_MESH_SELECTED")); + return; + } + if ( !myFilterDlg ) + { + QList types; + types.append( SMESH::NODE ); + types.append( SMESH::ALL ); + myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, types ); + } + myFilterDlg->Init( theIsElem ? SMESH::ALL : SMESH::NODE ); -//======================================================================= -//function : hideEvent -//purpose : caused by ESC key -//======================================================================= + myFilterDlg->SetSelection(); + myFilterDlg->SetMesh( myMesh ); + myFilterDlg->SetSourceWg( theIsElem ? LineEditElements : LineEditNodes ); -void SMESHGUI_SmoothingDlg::hideEvent ( QHideEvent * e ) + myFilterDlg->show(); +} + +//================================================================================= +// function : setElemFilters() +// purpose : SLOT. Called when element "Filter" button pressed. +//================================================================================= +void SMESHGUI_SmoothingDlg::setElemFilters() { - if ( !isMinimized() ) - ClickOnCancel(); + setFilters( true ); } +//================================================================================= +// function : setNodeFilters() +// purpose : SLOT. Called when node "Filter" button pressed. +//================================================================================= +void SMESHGUI_SmoothingDlg::setNodeFilters() +{ + setFilters( false ); +} -//======================================================================= -//function : onSelectMesh -//purpose : -//======================================================================= -void SMESHGUI_SmoothingDlg::onSelectMesh ( bool toSelectMesh ) +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool SMESHGUI_SmoothingDlg::isValid() { - if (toSelectMesh) - TextLabelElements->setText( tr( "SMESH_NAME" ) ); - else - TextLabelElements->setText( tr( "SMESH_ID_ELEMENTS" ) ); - - if (myEditCurrentArgument != LineEditElements) - { - LineEditElements->clear(); - return; - } - - mySelection->ClearFilters() ; - SMESH::SetPointRepresentation(false); - - if (toSelectMesh) - { - QAD_Application::getDesktop()->SetSelectionMode( ActorSelection ); - mySelection->AddFilter(myMeshOrSubMeshOrGroupFilter); - LineEditElements->setReadOnly(true); - } - else - { - QAD_Application::getDesktop()->SetSelectionMode( CellSelection, true ); - LineEditElements->setReadOnly(false); - onTextChange(LineEditElements->text()); - } - - SelectionIntoArgument(); + QString msg; + bool ok = true; + ok = SpinBox_IterationLimit->isValid( msg, true ) && ok; + ok = SpinBox_AspectRatio->isValid( msg, true ) && ok; + + if( !ok ) { + QString str( tr( "SMESH_INCORRECT_INPUT" ) ); + if ( !msg.isEmpty() ) + str += "\n" + msg; + SUIT_MessageBox::critical( this, tr( "SMESH_ERROR" ), str ); + return false; + } + return true; }