X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_FilterLibraryDlg.cxx;h=c4b0465de691d71a1e70b2dec1ff5abfa3b64e97;hp=47c9e912cbe88bbf68f6cbd98438b73ae2d7c450;hb=5ac2bd91a85417fd289aea0907264cb2d155d76d;hpb=0635c9fc80f67d1e5dc0e94ec85f487286a92070 diff --git a/src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx b/src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx index 47c9e912c..c4b0465de 100644 --- a/src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx @@ -1,24 +1,25 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2015 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 +// 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. +// 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. +// 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 +// 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 +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // SMESH SMESHGUI : GUI for SMESH component // File : SMESHGUI_FilterLibraryDlg.cxx // Author : Sergey LITONIN, Open CASCADE S.A.S. @@ -29,6 +30,9 @@ #include "SMESHGUI.h" #include "SMESHGUI_FilterUtils.h" #include "SMESHGUI_FilterDlg.h" +#include "SMESHGUI_VTKUtils.h" + +#include // SALOME GUI includes #include @@ -36,8 +40,9 @@ #include #include #include - #include +#include +#include // Qt includes #include @@ -226,19 +231,22 @@ QWidget* SMESHGUI_FilterLibraryDlg::createMainFrame (QWidget* theParent) connect(myOpenBtn, SIGNAL(clicked()), this, SLOT(onBrowse())); connect(myListBox, SIGNAL(itemSelectionChanged()), - this, SLOT(onFilterChanged())); + this, SLOT(onFilterChanged())); connect(myAddBtn, SIGNAL(clicked()), this, SLOT(onAddBtnPressed())); connect(myDeleteBtn, SIGNAL(clicked()), this, SLOT(onDeleteBtnPressed())); connect(myName, SIGNAL(textChanged(const QString&)), - this, SLOT(onFilterNameChanged(const QString&))); + this, SLOT(onFilterNameChanged(const QString&))); connect(myTable, SIGNAL(EntityTypeChanged(const int)), - this, SLOT(onEntityTypeChanged(const int))); + this, SLOT(onEntityTypeChanged(const int))); connect(myTable, SIGNAL(NeedValidation()), this, SLOT(onNeedValidation())); + LightApp_SelectionMgr* selMgr = SMESH::GetSelectionMgr( mySMESHGUI ); + connect( selMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone())); + return aMainFrame; } @@ -256,7 +264,6 @@ QWidget* SMESHGUI_FilterLibraryDlg::createButtonFrame (QWidget* theParent) myButtons[ BTN_OK ] = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), aGrp); myButtons[ BTN_Apply ] = new QPushButton(tr("SMESH_BUT_APPLY"), aGrp); - myButtons[ BTN_Cancel ] = new QPushButton(tr("SMESH_BUT_CANCEL"), aGrp); myButtons[ BTN_Close ] = new QPushButton(tr("SMESH_BUT_CLOSE"), aGrp); myButtons[ BTN_Help ] = new QPushButton(tr("SMESH_BUT_HELP"), aGrp); @@ -265,13 +272,11 @@ QWidget* SMESHGUI_FilterLibraryDlg::createButtonFrame (QWidget* theParent) aLay->addWidget(myButtons[ BTN_Apply ]); aLay->addSpacing(10); aLay->addStretch(); - aLay->addWidget(myButtons[ BTN_Cancel ]); aLay->addWidget(myButtons[ BTN_Close ]); aLay->addWidget(myButtons[ BTN_Help ]); connect(myButtons[ BTN_OK ], SIGNAL(clicked()), SLOT(onOk())); - connect(myButtons[ BTN_Cancel ], SIGNAL(clicked()), SLOT(onClose())); - connect(myButtons[ BTN_Close ], SIGNAL(clicked()), SLOT(onClose())); + connect(myButtons[ BTN_Close ], SIGNAL(clicked()), SLOT(reject())); connect(myButtons[ BTN_Apply ], SIGNAL(clicked()), SLOT(onApply())); connect(myButtons[ BTN_Help ], SIGNAL(clicked()), SLOT(onHelp())); @@ -290,14 +295,11 @@ QWidget* SMESHGUI_FilterLibraryDlg::createButtonFrame (QWidget* theParent) //======================================================================= void SMESHGUI_FilterLibraryDlg::updateMainButtons() { + myButtons[ BTN_Close ]->show(); if (myTypes.count() == 1) { - myButtons[ BTN_Cancel ]->show(); myButtons[ BTN_Apply ]->hide(); - myButtons[ BTN_Close ]->hide(); } else { - myButtons[ BTN_Cancel ]->hide(); myButtons[ BTN_Apply ]->show(); - myButtons[ BTN_Close ]->show(); } } @@ -342,7 +344,7 @@ void SMESHGUI_FilterLibraryDlg::Init (const QList& theTypes, setEnabled(true); connect( mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate())); - connect( mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(onClose())); + connect( mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(reject())); if (myMode == ADD_TO) { @@ -423,7 +425,7 @@ bool SMESHGUI_FilterLibraryDlg::onApply() if (myLibrary->_is_nil()) { SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_WRN_WARNING"), - tr("LIBRARY_IS_NOT_LOADED")); + tr("LIBRARY_IS_NOT_LOADED")); return false; } @@ -437,11 +439,11 @@ bool SMESHGUI_FilterLibraryDlg::onApply() } else if (myMode == EDIT || myMode == ADD_TO) { SMESH::Filter_var aFilter = createFilter(); if (!myListBox->selectedItems().empty() && - !myLibrary->Replace(myCurrFilterName.toLatin1().constData(), - myName->text().toLatin1().constData(), - aFilter.in())) { + !myLibrary->Replace(myCurrFilterName.toLatin1().constData(), + myName->text().toLatin1().constData(), + aFilter.in())) { SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("ERROR_OF_EDITING")); + tr("ERROR_OF_EDITING")); aResult = false; } else @@ -457,7 +459,7 @@ bool SMESHGUI_FilterLibraryDlg::onApply() delete aFileName; } else if (myMode != COPY_FROM) { SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("ERROR_OF_SAVING")); + tr("ERROR_OF_SAVING")); } else { } @@ -471,8 +473,7 @@ bool SMESHGUI_FilterLibraryDlg::onApply() //======================================================================= void SMESHGUI_FilterLibraryDlg::onOk() { - if (onApply()) - { + if (onApply()) { disconnect( mySMESHGUI, 0, this, 0); mySMESHGUI->ResetState(); accept(); @@ -480,14 +481,14 @@ void SMESHGUI_FilterLibraryDlg::onOk() } //======================================================================= -// name : SMESHGUI_FilterLibraryDlg::onClose +// name : SMESHGUI_FilterLibraryDlg::reject // Purpose : SLOT called when "Close" button pressed. Close dialog //======================================================================= -void SMESHGUI_FilterLibraryDlg::onClose() +void SMESHGUI_FilterLibraryDlg::reject() { disconnect( mySMESHGUI, 0, this, 0); mySMESHGUI->ResetState(); - reject(); + QDialog::reject(); } //================================================================================= @@ -507,10 +508,10 @@ void SMESHGUI_FilterLibraryDlg::onHelp() platform = "application"; #endif SUIT_MessageBox::warning(this, tr("WRN_WARNING"), - tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). - arg(app->resourceMgr()->stringValue("ExternalBrowser", - platform)). - arg(myHelpFileName)); + tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). + arg(app->resourceMgr()->stringValue("ExternalBrowser", + platform)). + arg(myHelpFileName)); } } @@ -532,15 +533,6 @@ void SMESHGUI_FilterLibraryDlg::enterEvent(QEvent*) setEnabled(true); } -//================================================================================= -// function : closeEvent() -// purpose : Close dialog -//================================================================================= -void SMESHGUI_FilterLibraryDlg::closeEvent(QCloseEvent* e) -{ - onClose(); -} - //======================================================================= // name : SMESHGUI_FilterLibraryDlg::getFileName // Purpose : Get file name @@ -674,7 +666,7 @@ void SMESHGUI_FilterLibraryDlg::processNewLibrary() if (myLibrary->_is_nil()) { if (myMode == COPY_FROM) { SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("ERROR_LOAD")); + tr("ERROR_LOAD")); return; } else { myLibrary = aFilterMgr->CreateLibrary(); @@ -730,7 +722,7 @@ bool SMESHGUI_FilterLibraryDlg::isNameValid(const bool theMess) const if (aCurrName.isEmpty()) { if (theMess) SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), - tr("EMPTY_FILTER_NAME")); + tr("EMPTY_FILTER_NAME")); return false; } @@ -739,7 +731,7 @@ bool SMESHGUI_FilterLibraryDlg::isNameValid(const bool theMess) const if (aNames[ f ] == aCurrName && aNames[ f ] != myCurrFilterName) { if (theMess) SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), - tr("ERROR_FILTER_NAME")); + tr("ERROR_FILTER_NAME")); return false; } } @@ -787,7 +779,7 @@ bool SMESHGUI_FilterLibraryDlg::isPermissionValid(const bool theIsExistingOnly) if (!isWritable) { SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_WRN_WARNING"), - tr("NO_PERMISSION")); + tr("NO_PERMISSION")); return false; } @@ -831,8 +823,8 @@ void SMESHGUI_FilterLibraryDlg::onFilterChanged() SMESH::Filter_var aFilter = createFilter(); myLibrary->Replace(myCurrFilterName.toLatin1().constData(), - myName->text().toLatin1().constData(), - aFilter); + myName->text().toLatin1().constData(), + aFilter); } // Fill table with filter parameters @@ -938,8 +930,8 @@ void SMESHGUI_FilterLibraryDlg::onAddBtnPressed() SMESH::Filter_var aFilter = createFilter(); myLibrary->Replace(myCurrFilterName.toLatin1().constData(), - myName->text().toLatin1().constData(), - aFilter); + myName->text().toLatin1().constData(), + aFilter); } myTable->Clear(myTable->GetType()); @@ -955,7 +947,7 @@ void SMESHGUI_FilterLibraryDlg::addFilterToLib (const QString& theName) { if (myLibrary->_is_nil()) { SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_WRN_WARNING"), - tr("LIBRARY_IS_NOT_LOADED")); + tr("LIBRARY_IS_NOT_LOADED")); return; } @@ -979,7 +971,7 @@ void SMESHGUI_FilterLibraryDlg::addFilterToLib (const QString& theName) if (!aResult) { SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("ERROR_OF_ADDING")); + tr("ERROR_OF_ADDING")); } updateList(); @@ -989,7 +981,7 @@ void SMESHGUI_FilterLibraryDlg::addFilterToLib (const QString& theName) if (theName != aName) SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_WARNING"), - tr("ASSIGN_NEW_NAME").arg(theName).arg(aName)); + tr("ASSIGN_NEW_NAME").arg(theName).arg(aName)); } //======================================================================= @@ -1089,7 +1081,7 @@ void SMESHGUI_FilterLibraryDlg::onDeleteBtnPressed() { if (myLibrary->_is_nil()) { SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_WRN_WARNING"), - tr("LIBRARY_IS_NOT_LOADED")); + tr("LIBRARY_IS_NOT_LOADED")); return; } @@ -1097,7 +1089,7 @@ void SMESHGUI_FilterLibraryDlg::onDeleteBtnPressed() if (anIndex == -1 || !myLibrary->Delete(myCurrFilterName.toLatin1().constData())) { SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), - tr("ERROR_OF_DELETING")); + tr("ERROR_OF_DELETING")); } else { myCurrFilterName = ""; myCurrFilter = -1; @@ -1188,8 +1180,79 @@ void SMESHGUI_FilterLibraryDlg::onNeedValidation() { SMESH::Filter_var aFilter = createFilter(myTable->GetType()); myLibrary->Replace(myCurrFilterName.toLatin1().constData(), - myName->text().toLatin1().constData(), - aFilter); + myName->text().toLatin1().constData(), + aFilter); + } + } +} + + +//======================================================================= +// name : SMESHGUI_FilterLibraryDlg::onSelectionDone +// Purpose : SLOT called when selection changed. +// If current cell corresponds to the threshold value of +// BelongToGeom criterion name of selected object is set in this cell +//======================================================================= + +void SMESHGUI_FilterLibraryDlg::onSelectionDone() +{ + SALOME_ListIO aList; + if( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() ) + aSel->selectedObjects( aList ); + + int aRow, aCol; + if (aList.Extent() != 1 || !myTable->CurrentCell(aRow, aCol)) + return; + + const int type = myTable->GetCriterionType(aRow); + QList types; + types << SMESH::FT_BelongToGeom << SMESH::FT_BelongToPlane + << SMESH::FT_BelongToCylinder << SMESH::FT_BelongToGenSurface + << SMESH::FT_LyingOnGeom << SMESH::FT_CoplanarFaces + << SMESH::FT_ConnectedElements << SMESH::FT_BelongToMeshGroup; + if ( !types.contains( type )) + return; + + Handle(SALOME_InteractiveObject) anIO = aList.First(); + switch ( type ) + { + case SMESH::FT_CoplanarFaces: // get ID of a selected mesh face + { + QString aString; + int nbElems = SMESH::GetNameOfSelectedElements(SMESH::GetSelector(), anIO, aString); + if (nbElems == 1) + myTable->SetThreshold(aRow, aString); + break; + } + case SMESH::FT_ConnectedElements: // get either VERTEX or a node ID + { + GEOM::GEOM_Object_var anObj = SMESH::IObjectToInterface(anIO); + if (!anObj->_is_nil()) + { + myTable->SetThreshold(aRow, GEOMBase::GetName(anObj)); + myTable->SetID (aRow, anIO->getEntry()); + } + else + { + QString aString; + int nbElems = SMESH::GetNameOfSelectedElements(SMESH::GetSelector(), anIO, aString); + if (nbElems == 1) + myTable->SetThreshold(aRow, aString); + } + break; + } + case SMESH::FT_BelongToMeshGroup: // get a group name and IOR + { + myTable->SetThreshold(aRow, anIO->getName() ); + } + default: // get a GEOM object + { + GEOM::GEOM_Object_var anObj = SMESH::IObjectToInterface(anIO); + if (!anObj->_is_nil()) + { + myTable->SetThreshold(aRow, GEOMBase::GetName(anObj)); + myTable->SetID (aRow, anIO->getEntry()); + } } } }