X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_Add0DElemsOnAllNodesDlg.cxx;h=30a8fc92d6f29faa74f8de50050ceb17dc7454d5;hp=10dbf474ef741f9a199bf35b2de6e2b77e298b26;hb=20d9e162bd67182cbfa841bbfc9319919f4703e3;hpb=5c95ba9078f96d3e32b6d0dc4f09da6eb6dd38e3 diff --git a/src/SMESHGUI/SMESHGUI_Add0DElemsOnAllNodesDlg.cxx b/src/SMESHGUI/SMESHGUI_Add0DElemsOnAllNodesDlg.cxx index 10dbf474e..30a8fc92d 100644 --- a/src/SMESHGUI/SMESHGUI_Add0DElemsOnAllNodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_Add0DElemsOnAllNodesDlg.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // 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. +// 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 @@ -104,6 +104,8 @@ SMESHGUI_Add0DElemsOnAllNodesDlg::SMESHGUI_Add0DElemsOnAllNodesDlg() myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), mainFrame() ); + myDuplicateElemsChkBox = new QCheckBox( tr( "SMESH_DUPLICATE_0D" ), mainFrame() ); + // List of groups myGroupBox = new QGroupBox( tr( "SMESH_ADD_TO_GROUP" ), mainFrame() ); @@ -132,8 +134,9 @@ SMESHGUI_Add0DElemsOnAllNodesDlg::SMESHGUI_Add0DElemsOnAllNodesDlg() aLay->addWidget( objectWg( 0, Btn ), 1, 1 ); aLay->addWidget( objectWg( 0, Control), 1, 2, 1, 2 ); aLay->addWidget( myFilterBtn, 1, 4 ); + aLay->addWidget( myDuplicateElemsChkBox,2, 0 ); // - aLay->addWidget( myGroupBox, 2, 0, 1, 5 ); + aLay->addWidget( myGroupBox, 3, 0, 1, 5 ); // Signals @@ -223,6 +226,7 @@ SMESHGUI_Add0DElemsOnAllNodesOp::SMESHGUI_Add0DElemsOnAllNodesOp() connect( myDlg, SIGNAL( selTypeChanged(int) ), SLOT( onSelTypeChange(int))); connect( myDlg->myFilterBtn, SIGNAL( clicked()), SLOT( onSetFilter() )); + connect( myDlg->myGroupBox, SIGNAL( clicked(bool)), SLOT( updateButtons() )); } //================================================================================ @@ -269,15 +273,17 @@ void SMESHGUI_Add0DElemsOnAllNodesOp::selectionDone() if (!myDlg->myGroupBox->isEnabled()) return; // inactive myIO.Nullify(); - myDlg->setObjectText( 0, ""); + updateButtons(); SALOME_ListIO aList; selectionMgr()->selectedObjects( aList ); - if ( aList.Extent() == 1 ) + if ( aList.Extent() == 1 ) { myIO = aList.First(); - else + } + else { + myDlg->setObjectText( 0, ""); // it clears the selection return; - + } QString ids; switch ( myDlg->getSelectionType() ) { case SEL_OBJECT: @@ -297,12 +303,14 @@ void SMESHGUI_Add0DElemsOnAllNodesOp::selectionDone() // fill the list of existing groups myDlg->myGroupListCmBox->clear(); myDlg->myGroupListCmBox->addItem( QString() ); - if ( !myIO.IsNull() && myIO->hasEntry()) { - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); - _PTR(SObject) meshSO = aStudy->FindObjectID( myIO->getEntry() ); + if ( !myIO.IsNull() && myIO->hasEntry()) + { + SMESH::SMESH_Mesh_var mesh = SMESH::GetMeshByIO( myIO ); + _PTR(SObject) meshSO = SMESH::ObjectToSObject( mesh ); _PTR(SObject) group0DRoot; - if ( meshSO->FindSubObject( SMESH::Tag_0DElementsGroups, group0DRoot )) + if ( meshSO && meshSO->FindSubObject( SMESH::Tag_0DElementsGroups, group0DRoot )) { + _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); _PTR(ChildIterator) group0DIter = aStudy->NewChildIterator( group0DRoot ); for ( ; group0DIter->More(); group0DIter->Next() ) { @@ -312,9 +320,44 @@ void SMESHGUI_Add0DElemsOnAllNodesOp::selectionDone() myDlg->myGroupListCmBox->addItem( groupName.c_str() ); } } + // enable buttons + updateButtons(); } } +//======================================================================= +//function : updateButtons +//purpose : enable [Apply] +//======================================================================= + +void SMESHGUI_Add0DElemsOnAllNodesOp::updateButtons() +{ + bool ok = false; + + if (( !myIO.IsNull() && myIO->hasEntry() && !myDlg->objectText( 0 ).isEmpty() ) && + ( !myDlg->myGroupBox->isChecked() || !myDlg->myGroupListCmBox->currentText().isEmpty() )) + { + SMESH::SMESH_Mesh_var mesh = SMESH::GetMeshByIO( myIO ); + if ( !mesh->_is_nil() ) + { + if ( myDlg->getSelectionType() == SEL_OBJECT ) + ok = true; + else + { + QString ids = myDlg->objectText( 0 ); + QStringList idList = ids.split( " ", QString::SkipEmptyParts ); + const bool isElem = ( myDlg->getSelectionType() == SEL_ELEMENTS ); + QStringList::iterator idIt = idList.begin(); + for ( ; idIt != idList.end() && !ok; ++idIt ) + ok = ( mesh->GetElementType( idIt->toLong(), isElem ) != SMESH::ALL ); + } + } + } + + myDlg->button( QtxDialog::Apply )->setEnabled( ok ); + myDlg->button( QtxDialog::OK )->setEnabled( ok ); +} + //================================================================================ /*! * \brief Return a filter of objects @@ -353,7 +396,7 @@ bool SMESHGUI_Add0DElemsOnAllNodesOp::onApply() return false; // get a mesh - SMESH::SMESH_IDSource_wrap meshObject; + SMESH::IDSource_wrap meshObject; SMESH::SMESH_Mesh_var mesh; if ( !myIO.IsNull() ) { @@ -400,7 +443,8 @@ bool SMESHGUI_Add0DElemsOnAllNodesOp::onApply() QString groupName = myDlg->myGroupListCmBox->currentText(); SMESH::SMESH_IDSource_var newObj = - editor->Create0DElementsOnAllNodes( meshObject, groupName.toLatin1().data() ); + editor->Create0DElementsOnAllNodes( meshObject, groupName.toLatin1().data(), + myDlg->myDuplicateElemsChkBox->isChecked() ); int newNb0D = mesh->Nb0DElements() - prevNb0D; SUIT_MessageBox::information( myDlg, tr( "SMESH_INFORMATION" ), @@ -458,14 +502,15 @@ void SMESHGUI_Add0DElemsOnAllNodesOp::onSelTypeChange(int selType) disconnect( myDlg, SIGNAL( objectChanged( int, const QStringList& )), this, SLOT ( onTextChanged( int, const QStringList& ))); + connect( myDlg->myGroupListCmBox, SIGNAL( editTextChanged(const QString & )), + this, SLOT( updateButtons() )); + selectionDone(); } //================================================================================ /*! - * \brief Install - * - * + * \brief Install filters */ //================================================================================ @@ -497,3 +542,14 @@ void SMESHGUI_Add0DElemsOnAllNodesOp::onSetFilter() myFilterDlg->show(); } + +//======================================================================= +//function : onTextChanged +//purpose : SLOT called when the user types IDs +//======================================================================= + +void SMESHGUI_Add0DElemsOnAllNodesOp::onTextChanged( int obj, const QStringList& text ) +{ + SMESHGUI_SelectionOp::onTextChanged( obj, text ); + updateButtons(); +}