X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_RemoveNodesDlg.cxx;h=adef42a6c3e28478a1ca72adecdb6be9e6e1235c;hp=373cfbc51d5a5e7d6804636603211a8650c4fb6b;hb=refs%2Ftags%2FV9_1_0;hpb=64ae2f71de80aad56ebd449db68b8d340bccd7bd diff --git a/src/SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx b/src/SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx index 373cfbc51..adef42a6c 100644 --- a/src/SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx @@ -1,154 +1,170 @@ -// SMESH SMESHGUI : GUI for SMESH component +// Copyright (C) 2007-2016 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_RemoveNodesDlg.cxx -// Author : Nicolas REJNERI -// Module : SMESH -// $Header$ -using namespace std; +// SMESH SMESHGUI : GUI for SMESH component +// File : SMESHGUI_RemoveNodesDlg.cxx +// Author : Nicolas REJNERI, Open CASCADE S.A.S. +// SMESH includes +// #include "SMESHGUI_RemoveNodesDlg.h" #include "SMESHGUI.h" -#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 "SMESHGUI_Utils.h" +#include "SMESHGUI_VTKUtils.h" +#include "SMESHGUI_MeshUtils.h" +#include "SMESHGUI_IdValidator.h" +#include "SMESHGUI_FilterDlg.h" + +#include +#include +#include + +// SALOME GUI includes +#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 + +// IDL includes +#include +#include CORBA_SERVER_HEADER(SMESH_MeshEditor) + +#define SPACING 6 +#define MARGIN 11 //================================================================================= // class : SMESHGUI_RemoveNodesDlg() -// purpose : +// purpose : //================================================================================= -SMESHGUI_RemoveNodesDlg::SMESHGUI_RemoveNodesDlg( QWidget* parent, const char* name, SALOME_Selection* Sel, - bool modal, WFlags fl ) - : QDialog( parent, name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ) +SMESHGUI_RemoveNodesDlg +::SMESHGUI_RemoveNodesDlg(SMESHGUI* theModule) + : QDialog(SMESH::GetDesktop(theModule)), + mySelectionMgr(SMESH::GetSelectionMgr(theModule)), + mySelector(SMESH::GetViewWindow(theModule)->GetSelector()), + mySMESHGUI(theModule), + myBusy(false), + myFilterDlg(0) { - QPixmap image0(QAD_Desktop::getResourceManager()->loadPixmap( "SMESH",tr("ICON_DLG_REM_NODE"))); - QPixmap image1(QAD_Desktop::getResourceManager()->loadPixmap( "SMESH",tr("ICON_SELECT"))); - - if ( !name ) - setName( "SMESHGUI_RemoveNodesDlg" ); - resize( 303, 185 ); - setCaption( tr( "SMESH_REMOVE_NODES_TITLE" ) ); - setSizeGripEnabled( TRUE ); - SMESHGUI_RemoveNodesDlgLayout = new QGridLayout( this ); - SMESHGUI_RemoveNodesDlgLayout->setSpacing( 6 ); - SMESHGUI_RemoveNodesDlgLayout->setMargin( 11 ); - - /***************************************************************/ - GroupConstructors = new QButtonGroup( this, "GroupConstructors" ); - GroupConstructors->setTitle( tr( "SMESH_NODES" ) ); - 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_RemoveNodesDlgLayout->addWidget( GroupConstructors, 0, 0 ); - - /***************************************************************/ - 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_RemoveNodesDlgLayout->addWidget( GroupButtons, 2, 0 ); - - /***************************************************************/ - GroupC1 = new QGroupBox( this, "GroupC1" ); - GroupC1->setTitle( tr( "SMESH_REMOVE" ) ); - GroupC1->setMinimumSize( QSize( 0, 0 ) ); - GroupC1->setFrameShape( QGroupBox::Box ); - GroupC1->setFrameShadow( QGroupBox::Sunken ); - GroupC1->setColumnLayout(0, Qt::Vertical ); - GroupC1->layout()->setSpacing( 0 ); - GroupC1->layout()->setMargin( 0 ); - GroupC1Layout = new QGridLayout( GroupC1->layout() ); - GroupC1Layout->setAlignment( Qt::AlignTop ); - GroupC1Layout->setSpacing( 6 ); - GroupC1Layout->setMargin( 11 ); - TextLabelC1A1 = new QLabel( GroupC1, "TextLabelC1A1" ); - TextLabelC1A1->setText( tr( "SMESH_ID_NODES" ) ); - TextLabelC1A1->setMinimumSize( QSize( 50, 0 ) ); - TextLabelC1A1->setFrameShape( QLabel::NoFrame ); - TextLabelC1A1->setFrameShadow( QLabel::Plain ); - GroupC1Layout->addWidget( TextLabelC1A1, 0, 0 ); - SelectButtonC1A1 = new QPushButton( GroupC1, "SelectButtonC1A1" ); - SelectButtonC1A1->setText( tr( "" ) ); - SelectButtonC1A1->setPixmap( image1 ); - SelectButtonC1A1->setToggleButton( FALSE ); - GroupC1Layout->addWidget( SelectButtonC1A1, 0, 1 ); - LineEditC1A1 = new QLineEdit( GroupC1, "LineEditC1A1" ); - GroupC1Layout->addWidget( LineEditC1A1, 0, 2 ); - SMESHGUI_RemoveNodesDlgLayout->addWidget( GroupC1, 1, 0 ); - - Init(Sel) ; /* Initialisations */ + setModal( false ); + setAttribute( Qt::WA_DeleteOnClose, true ); + setWindowTitle(tr("SMESH_REMOVE_NODES_TITLE")); + setSizeGripEnabled(true); + + QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_REM_NODE"))); + QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_SELECT"))); + + QVBoxLayout* SMESHGUI_RemoveNodesDlgLayout = new QVBoxLayout(this); + SMESHGUI_RemoveNodesDlgLayout->setSpacing(SPACING); + SMESHGUI_RemoveNodesDlgLayout->setMargin(MARGIN); + + /***************************************************************/ + GroupConstructors = new QGroupBox(tr("SMESH_NODES"), 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); + + /***************************************************************/ + GroupC1 = new QGroupBox(tr("SMESH_REMOVE"), this); + QHBoxLayout* GroupC1Layout = new QHBoxLayout(GroupC1); + GroupC1Layout->setSpacing(SPACING); + GroupC1Layout->setMargin(MARGIN); + + TextLabelC1A1 = new QLabel(tr("SMESH_ID_NODES"), GroupC1); + SelectButtonC1A1 = new QPushButton(GroupC1); + SelectButtonC1A1->setIcon(image1); + LineEditC1A1 = new QLineEdit(GroupC1); + LineEditC1A1->setValidator(new SMESHGUI_IdValidator(this)); + LineEditC1A1->setMaxLength(-1); + QPushButton* filterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupC1 ); + connect(filterBtn, SIGNAL(clicked()), this, SLOT(setFilters())); + + GroupC1Layout->addWidget(TextLabelC1A1); + GroupC1Layout->addWidget(SelectButtonC1A1); + GroupC1Layout->addWidget(LineEditC1A1); + GroupC1Layout->addWidget(filterBtn ); + + /***************************************************************/ + 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_RemoveNodesDlgLayout->addWidget(GroupConstructors); + SMESHGUI_RemoveNodesDlgLayout->addWidget(GroupC1); + SMESHGUI_RemoveNodesDlgLayout->addWidget(GroupButtons); + + myHelpFileName = "removing_nodes_and_elements.html#removing-nodes-anchor"; + + Init(); /* Initialisations */ } //================================================================================= @@ -157,79 +173,92 @@ SMESHGUI_RemoveNodesDlg::SMESHGUI_RemoveNodesDlg( QWidget* parent, const char* n //================================================================================= SMESHGUI_RemoveNodesDlg::~SMESHGUI_RemoveNodesDlg() { - // no need to delete child widgets, Qt does it all for us + if ( myFilterDlg ) { + myFilterDlg->setParent( 0 ); + delete myFilterDlg; + myFilterDlg = 0; + } } - //================================================================================= // function : Init() // purpose : //================================================================================= -void SMESHGUI_RemoveNodesDlg::Init( SALOME_Selection* Sel ) +void SMESHGUI_RemoveNodesDlg::Init() { + myConstructorId = 0; + Constructor1->setChecked(true); + myEditCurrentArgument = LineEditC1A1; - GroupC1->show(); - myConstructorId = 0 ; - Constructor1->setChecked( TRUE ); - myEditCurrentArgument = LineEditC1A1 ; - mySelection = Sel; - this->myOkNodes = false ; - mySMESHGUI = SMESHGUI::GetSMESHGUI() ; - mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ; + myNbOkNodes = 0; + mySMESHGUI->SetActiveDialogBox((QDialog*)this); + myActor = 0; + myBusy = false; /* 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( SelectButtonC1A1, SIGNAL (clicked() ), this, SLOT( SetEditCurrentArgument() ) ) ; - connect( mySMESHGUI, SIGNAL ( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog() ) ) ; - connect( mySelection, SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); + 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(SelectButtonC1A1, 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(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(reject())); + connect(mySMESHGUI, SIGNAL (SignalActivatedViewManager()), this, SLOT(onOpenView())); + connect(mySMESHGUI, SIGNAL (SignalCloseView()), this, SLOT(onCloseView())); + connect(myEditCurrentArgument, SIGNAL(textChanged(const QString&)), + this, SLOT (onTextChange(const QString&))); - /* 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 */ + SMESH::SetPointRepresentation(true); - SelectionIntoArgument(); - return ; -} + mySelectionMgr->clearFilters(); + mySelectionMgr->installFilter( new SMESH_TypeFilter( SMESH::IDSOURCE )); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(NodeSelection); -//================================================================================= -// function : ConstructorsClicked() -// purpose : Radio button management -//================================================================================= -void SMESHGUI_RemoveNodesDlg::ConstructorsClicked(int constructorId) -{ - return ; + //SelectionIntoArgument(); + mySelectionMgr->setSelectedObjects( SALOME_ListIO() ); } - //================================================================================= // function : ClickOnApply() // purpose : //================================================================================= void SMESHGUI_RemoveNodesDlg::ClickOnApply() { - switch(myConstructorId) - { - case 0 : - { - if(myOkNodes) { - mySMESHGUI->EraseSimulationActors(); - mySMESHGUI->RemoveNodes( myMesh, myMapIndex ) ; - mySMESHGUI->ViewNodes(); - mySelection->ClearIObjects(); - } - break ; - } + if (SMESHGUI::isStudyLocked()) + return; + + if (myNbOkNodes) { + QStringList aListId = myEditCurrentArgument->text().split(" ", QString::SkipEmptyParts); + SMESH::long_array_var anArrayOfIdeces = new SMESH::long_array; + anArrayOfIdeces->length(aListId.count()); + for (int i = 0; i < aListId.count(); i++) + anArrayOfIdeces[i] = aListId[ i ].toInt(); + + bool aResult = false; + try { + SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); + aResult = aMeshEditor->RemoveNodes(anArrayOfIdeces.in()); + } catch (const SALOME::SALOME_Exception& S_ex) { + SalomeApp_Tools::QtCatchCorbaException(S_ex); + myEditCurrentArgument->clear(); + } catch (...){ + myEditCurrentArgument->clear(); } - return ; + + if (aResult) { + myEditCurrentArgument->clear(); + mySelector->ClearIndex(); + SMESH::UpdateView(); + SMESHGUI::Modified(); + } + + SMESH::SetPointRepresentation(true); + } } //================================================================================= @@ -238,27 +267,114 @@ void SMESHGUI_RemoveNodesDlg::ClickOnApply() //================================================================================= void SMESHGUI_RemoveNodesDlg::ClickOnOk() { - this->ClickOnApply() ; - this->ClickOnCancel() ; + ClickOnApply(); + reject(); +} - return ; +//================================================================================= +// function : reject() +// purpose : +//================================================================================= +void SMESHGUI_RemoveNodesDlg::reject() +{ + //mySelectionMgr->clearSelected(); + if (SMESH::GetCurrentVtkView()) { + SMESH::RemoveFilters(); // PAL6938 -- clean all mesh entity filters + SMESH::SetPointRepresentation(false); + } + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(ActorSelection); + disconnect(mySelectionMgr, 0, this, 0); + mySelectionMgr->clearFilters(); + mySMESHGUI->ResetState(); + QDialog::reject(); } - + //================================================================================= -// function : ClickOnCancel() +// function : onOpenView() // purpose : //================================================================================= -void SMESHGUI_RemoveNodesDlg::ClickOnCancel() +void SMESHGUI_RemoveNodesDlg::onOpenView() { - QAD_Application::getDesktop()->SetSelectionMode( 4 ); - disconnect( mySelection, 0, this, 0 ); - mySMESHGUI->ResetState() ; - mySMESHGUI->EraseSimulationActors(); - reject() ; - return ; + if ( mySelector) { + SMESH::SetPointRepresentation(false); + } + else { + mySelector = SMESH::GetViewWindow( mySMESHGUI )->GetSelector(); + ActivateThisDialog(); + } } +//================================================================================= +// function : onCloseView() +// purpose : +//================================================================================= +void SMESHGUI_RemoveNodesDlg::onCloseView() +{ + DeactivateActiveDialog(); + mySelector = 0; +} + +//================================================================================= +// function : ClickOnHelp() +// purpose : +//================================================================================= +void SMESHGUI_RemoveNodesDlg::ClickOnHelp() +{ + 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 : +//======================================================================= +void SMESHGUI_RemoveNodesDlg::onTextChange(const QString& theNewText) +{ + if (myBusy) return; + myBusy = true; + + myNbOkNodes = 0; + + // highlight entered nodes + if(myActor){ + if(SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh()){ + Handle(SALOME_InteractiveObject) anIO = myActor->getIO(); + + TColStd_MapOfInteger newIndices; + + QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts); + for (int i = 0; i < aListId.count(); i++) { + if (const SMDS_MeshNode *aNode = aMesh->FindNode(aListId[i].toInt())) { + newIndices.Add(aNode->GetID()); + myNbOkNodes++; + } + } + + mySelector->AddOrRemoveIndex(anIO,newIndices,false); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->highlight(anIO,true,true); + } + } + + myBusy = false; + updateButtons(); +} //================================================================================= // function : SelectionIntoArgument() @@ -266,36 +382,52 @@ void SMESHGUI_RemoveNodesDlg::ClickOnCancel() //================================================================================= void SMESHGUI_RemoveNodesDlg::SelectionIntoArgument() { - myEditCurrentArgument->setText("") ; - myOkNodes = false; - QString aString = ""; + if (myBusy) return; // busy + if (myFilterDlg && myFilterDlg->isVisible()) return; // filter dlg active + if (!GroupButtons->isEnabled()) return; // inactive + + // clear - int nbSel = mySelection->IObjectCount(); - if(nbSel != 1) - return ; + myNbOkNodes = 0; + myActor = 0; - int nbNodes = mySMESHGUI->GetNameOfSelectedNodes(mySelection, aString) ; - if(nbNodes < 1) - return ; - - if ( mySelection->SelectionMode() != 1 ){ - QAD_MessageBox::warn1 ( QAD_Application::getDesktop(), tr ("SMESH_WRN_WARNING"), - tr ("SMESH_WRN_SELECTIONMODE_NODES"), tr ("SMESH_BUT_YES") ); - return; - } + myBusy = true; + myEditCurrentArgument->setText(""); + myBusy = false; - myEditCurrentArgument->setText(aString) ; - Standard_Boolean res; - myMesh = mySMESHGUI->ConvertIOinMesh( mySelection->firstIObject(), res ); - if (!res) - return ; + // get selected mesh + SALOME_ListIO aList; + mySelectionMgr->selectedObjects(aList); - mySelection->GetIndex( mySelection->firstIObject(), myMapIndex); + int nbSel = aList.Extent(); + if (nbSel == 1) { - myOkNodes = true ; - return ; -} + Handle(SALOME_InteractiveObject) anIO = aList.First(); + myMesh = SMESH::GetMeshByIO(anIO); + if (!myMesh->_is_nil()) { + + myActor = SMESH::FindActorByEntry(anIO->getEntry()); + if (myActor) { + + // get selected nodes + QString aString = ""; + int nbNodes = SMESH::GetNameOfSelectedNodes(mySelector,anIO,aString); + if (nbNodes > 0) { + myBusy = true; + myEditCurrentArgument->setText(aString); + myBusy = false; + + // OK + + myNbOkNodes = nbNodes; + } // if (nbNodes > 0) + } // if (myActor) + } // if (!myMesh->_is_nil()) + } // if (nbSel == 1) + + updateButtons(); +} //================================================================================= // function : SetEditCurrentArgument() @@ -304,19 +436,17 @@ void SMESHGUI_RemoveNodesDlg::SelectionIntoArgument() void SMESHGUI_RemoveNodesDlg::SetEditCurrentArgument() { QPushButton* send = (QPushButton*)sender(); - switch (myConstructorId) + switch (myConstructorId) { + case 0: /* default constructor */ { - case 0: /* default constructor */ - { - if(send == SelectButtonC1A1) { - LineEditC1A1->setFocus() ; - myEditCurrentArgument = LineEditC1A1; - } - SelectionIntoArgument() ; - break; + if(send == SelectButtonC1A1) { + LineEditC1A1->setFocus(); + myEditCurrentArgument = LineEditC1A1; } + SelectionIntoArgument(); + break; } - return ; + } } //================================================================================= @@ -325,18 +455,15 @@ void SMESHGUI_RemoveNodesDlg::SetEditCurrentArgument() //================================================================================= void SMESHGUI_RemoveNodesDlg::DeactivateActiveDialog() { - if ( GroupConstructors->isEnabled() ) { - GroupConstructors->setEnabled(false) ; - GroupC1->setEnabled(false) ; - GroupButtons->setEnabled(false) ; - mySMESHGUI->EraseSimulationActors() ; - mySMESHGUI->ResetState() ; - mySMESHGUI->SetActiveDialogBox(0) ; + if (GroupConstructors->isEnabled()) { + GroupConstructors->setEnabled(false); + GroupC1->setEnabled(false); + GroupButtons->setEnabled(false); + mySMESHGUI->ResetState(); // ?? + mySMESHGUI->SetActiveDialogBox(0); // ?? } - return ; } - //================================================================================= // function : ActivateThisDialog() // purpose : @@ -344,38 +471,83 @@ void SMESHGUI_RemoveNodesDlg::DeactivateActiveDialog() void SMESHGUI_RemoveNodesDlg::ActivateThisDialog() { /* Emit a signal to deactivate the active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog() ; - GroupConstructors->setEnabled(true) ; - GroupC1->setEnabled(true) ; - GroupButtons->setEnabled(true) ; - - mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ; - return ; -} + mySMESHGUI->EmitSignalDeactivateDialog(); + + GroupConstructors->setEnabled(true); + GroupC1->setEnabled(true); + GroupButtons->setEnabled(true); + mySMESHGUI->SetActiveDialogBox((QDialog*)this); // ?? + + mySelectionMgr->clearFilters(); + mySelectionMgr->installFilter( new SMESH_TypeFilter( SMESH::IDSOURCE )); + + SMESH::SetPointRepresentation(true); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(NodeSelection); + + SelectionIntoArgument(); // ?? +} //================================================================================= // function : enterEvent() // purpose : //================================================================================= -void SMESHGUI_RemoveNodesDlg::enterEvent(QEvent* e) +void SMESHGUI_RemoveNodesDlg::enterEvent(QEvent*) { - if ( GroupConstructors->isEnabled() ) - return ; - ActivateThisDialog() ; - return ; + if (!GroupConstructors->isEnabled()) { + SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ); + if ( aViewWindow && !mySelector) { + mySelector = aViewWindow->GetSelector(); + } + ActivateThisDialog(); + } } - //================================================================================= -// function : closeEvent() +// function : keyPressEvent() // purpose : //================================================================================= -void SMESHGUI_RemoveNodesDlg::closeEvent( QCloseEvent* e ) +void SMESHGUI_RemoveNodesDlg::keyPressEvent( QKeyEvent* e ) { - /* same than click on cancel button */ - this->ClickOnCancel() ; - return ; + QDialog::keyPressEvent( e ); + if ( e->isAccepted() ) + return; + + if ( e->key() == Qt::Key_F1 ) { + e->accept(); + ClickOnHelp(); + } } +//================================================================================= +// function : setFilters() +// purpose : SLOT. Called when "Filter" button pressed. +//================================================================================= +void SMESHGUI_RemoveNodesDlg::setFilters() +{ + if(myMesh->_is_nil()) { + SUIT_MessageBox::critical(this, + tr("SMESH_ERROR"), + tr("NO_MESH_SELECTED")); + return; + } + if ( !myFilterDlg ) + myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::NODE ); + + myFilterDlg->SetSelection(); + myFilterDlg->SetMesh( myMesh ); + myFilterDlg->SetSourceWg( LineEditC1A1 ); + + myFilterDlg->show(); +} +//================================================================================= +// function : updateButtons +// purpose : enable / disable control buttons +//================================================================================= +void SMESHGUI_RemoveNodesDlg::updateButtons() +{ + buttonOk->setEnabled(myNbOkNodes > 0); + buttonApply->setEnabled(myNbOkNodes > 0); +}