X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_FilterDlg.cxx;h=95f8ed3039d5e3e72b2157a38ba6a641790c1e4f;hp=62a04bb7424aad3b706bf6de6f0d12296dea87fd;hb=81f4aba6d730b754eeac248a753c33ba673beaa1;hpb=6fae6dddb4668825724fe4f126b48e352df0c18d diff --git a/src/SMESHGUI/SMESHGUI_FilterDlg.cxx b/src/SMESHGUI/SMESHGUI_FilterDlg.cxx index 62a04bb74..95f8ed303 100755 --- a/src/SMESHGUI/SMESHGUI_FilterDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_FilterDlg.cxx @@ -1,22 +1,22 @@ // SMESH SMESHGUI : GUI for SMESH component // // 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 -// +// 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 // // @@ -30,35 +30,47 @@ #include "SMESHGUI.h" #include "SMESHGUI_Utils.h" #include "SMESHGUI_VTKUtils.h" +#include "SMESHGUI_Filter.h" #include "SMESHGUI_FilterUtils.h" +#include "SMESHGUI_FilterLibraryDlg.h" -#include "SMESHGUI_Filter.h" #include "SMESH_Actor.h" -#include "VTKViewer_ViewFrame.h" -#include "QAD_Desktop.h" -#include "QAD_MessageBox.h" -#include "QAD_RightFrame.h" -#include "QAD_Config.h" +#include "SMESH_NumberFilter.hxx" +#include "SMESH_TypeFilter.hxx" + +#include "GEOMBase.h" +#include "GEOM_FaceFilter.h" +#include "GEOM_TypeFilter.h" + +#include "SUIT_Desktop.h" +#include "SUIT_ResourceMgr.h" + +#include "SalomeApp_Application.h" +#include "SalomeApp_Tools.h" +#include "SalomeApp_Study.h" + +#include "SALOME_ListIO.hxx" #include "SALOME_ListIteratorOfListIO.hxx" #include "SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx" -#include "SALOMEGUI_QtCatchCorbaException.hxx" -#include "SMESHGUI_FilterLibraryDlg.h" -#include "SALOME_TypeFilter.hxx" +#include "SALOMEDSClient_Study.hxx" -#include "GEOMBase.h" -#include "GEOM_FaceFilter.hxx" +#include "SVTK_ViewWindow.h" +#include "SVTK_Selector.h" -#include -#include -#include -#include +// OCCT Includes +#include #include -#include #include #include +#include #include #include +#include +#include +#include +#include +// QT Includes #include #include #include @@ -85,23 +97,23 @@ #include "SALOMEconfig.h" #include CORBA_SERVER_HEADER(SMESH_Group) -#define SPACING 5 +#define SPACING 5 #define MARGIN 10 using namespace SMESH; -static int maxLength( const QMap theMap, const QFontMetrics& theMetrics ) +static int maxLength (const QMap theMap, const QFontMetrics& theMetrics) { int aRes = 0; QMap::const_iterator anIter; - for ( anIter = theMap.begin(); anIter != theMap.end(); ++anIter ) - aRes = Max( aRes, theMetrics.width( anIter.data() ) ); - return aRes; + for (anIter = theMap.begin(); anIter != theMap.end(); ++anIter) + aRes = Max(aRes, theMetrics.width(anIter.data())); + return aRes; } -static int getFilterId( SMESH::ElementType theType ) +static int getFilterId (SMESH::ElementType theType) { - switch ( theType ) + switch (theType) { case SMESH::NODE : return SMESHGUI_NodeFilter; case SMESH::EDGE : return SMESHGUI_EdgeFilter; @@ -121,127 +133,126 @@ class SMESHGUI_FilterTable::AdditionalWidget : public QFrame { public: enum { Tolerance }; - + public: - AdditionalWidget( QWidget* theParent ); + AdditionalWidget(QWidget* theParent); virtual ~AdditionalWidget(); - virtual void GetParameters( QValueList& ) const; - virtual bool IsValid( const bool theMsg = true ) const; - virtual double GetDouble( const int theId ) const; - virtual int GetInteger( const int theId ) const; - virtual QString GetString( const int theId ) const; - virtual void SetDouble( const int theId, const double theVal ); - virtual void SetInteger( const int theId, const int theVal ); - virtual void SetString( const int theId, const QString& theVal ); - void SetEditable( const int theId, const bool isEditable ); - void SetEditable( const bool isEditable ); + virtual void GetParameters(QValueList&) const; + virtual bool IsValid(const bool theMsg = true) const; + virtual double GetDouble(const int theId) const; + virtual int GetInteger(const int theId) const; + virtual QString GetString(const int theId) const; + virtual void SetDouble(const int theId, const double theVal); + virtual void SetInteger(const int theId, const int theVal); + virtual void SetString(const int theId, const QString& theVal); + void SetEditable(const int theId, const bool isEditable); + void SetEditable(const bool isEditable); private: QMap< int, QLineEdit* > myLineEdits; }; -SMESHGUI_FilterTable::AdditionalWidget::AdditionalWidget( QWidget* theParent ) -: QFrame( theParent ) +SMESHGUI_FilterTable::AdditionalWidget::AdditionalWidget (QWidget* theParent) + : QFrame(theParent) { - QLabel* aLabel = new QLabel( tr( "SMESH_TOLERANCE" ), this ); - myLineEdits[ Tolerance ] = new QLineEdit( this ); - QDoubleValidator* aValidator = new QDoubleValidator( myLineEdits[ Tolerance ] ); - aValidator->setBottom( 0 ); - myLineEdits[ Tolerance ]->setValidator( aValidator ); + QLabel* aLabel = new QLabel(tr("SMESH_TOLERANCE"), this); + myLineEdits[ Tolerance ] = new QLineEdit(this); + QDoubleValidator* aValidator = new QDoubleValidator(myLineEdits[ Tolerance ]); + aValidator->setBottom(0); + myLineEdits[ Tolerance ]->setValidator(aValidator); - QHBoxLayout* aLay = new QHBoxLayout( this, 0, SPACING ); - aLay->addWidget( aLabel ); - aLay->addWidget( myLineEdits[ Tolerance ] ); - - QSpacerItem* aSpacer = new QSpacerItem( 0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum ); - aLay->addItem( aSpacer ); + QHBoxLayout* aLay = new QHBoxLayout(this, 0, SPACING); + aLay->addWidget(aLabel); + aLay->addWidget(myLineEdits[ Tolerance ]); - QString aText = QString( "%1" ).arg( Precision::Confusion() ); - myLineEdits[ Tolerance ]->setText( aText ); + QSpacerItem* aSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); + aLay->addItem(aSpacer); + + QString aText = QString("%1").arg(Precision::Confusion()); + myLineEdits[ Tolerance ]->setText(aText); } -SMESHGUI_FilterTable::AdditionalWidget::~AdditionalWidget() + + SMESHGUI_FilterTable::AdditionalWidget::~AdditionalWidget() { } -void SMESHGUI_FilterTable::AdditionalWidget::GetParameters( QValueList& theList ) const +void SMESHGUI_FilterTable::AdditionalWidget::GetParameters (QValueList& theList) const { theList.clear(); - theList.append( Tolerance ); + theList.append(Tolerance); } -bool SMESHGUI_FilterTable::AdditionalWidget::IsValid( const bool theMsg ) const +bool SMESHGUI_FilterTable::AdditionalWidget::IsValid (const bool theMsg) const { - if ( !isEnabled() ) + if (!isEnabled()) return true; QValueList aParams; - GetParameters( aParams ); + GetParameters(aParams); QValueList::const_iterator anIter; - for ( anIter = aParams.begin(); anIter != aParams.end(); ++anIter ) - { + for (anIter = aParams.begin(); anIter != aParams.end(); ++anIter) { const QLineEdit* aWg = myLineEdits[ *anIter ]; int p = 0; QString aText = aWg->text(); - if ( aWg->isEnabled() && aWg->validator()->validate( aText, p ) != QValidator::Acceptable ) - { - if ( theMsg ) - QMessageBox::information( SMESHGUI::GetSMESHGUI()->GetDesktop(), - tr( "SMESH_INSUFFICIENT_DATA" ), tr( "SMESHGUI_INVALID_PARAMETERS" ), QMessageBox::Ok ); - return false; + if (aWg->isEnabled() && aWg->validator()->validate(aText, p) != QValidator::Acceptable) { + if (theMsg) + QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), + tr("SMESHGUI_INVALID_PARAMETERS"), QMessageBox::Ok); + return false; } } return true; } -double SMESHGUI_FilterTable::AdditionalWidget::GetDouble( const int theId ) const +double SMESHGUI_FilterTable::AdditionalWidget::GetDouble (const int theId) const { - return myLineEdits.contains( theId ) ? myLineEdits[ theId ]->text().toDouble() : 0; + return myLineEdits.contains(theId) ? myLineEdits[ theId ]->text().toDouble() : 0; } -int SMESHGUI_FilterTable::AdditionalWidget::GetInteger( const int theId ) const +int SMESHGUI_FilterTable::AdditionalWidget::GetInteger (const int theId) const { - return myLineEdits.contains( theId ) ? myLineEdits[ theId ]->text().toInt() : 0; + return myLineEdits.contains(theId) ? myLineEdits[ theId ]->text().toInt() : 0; } -QString SMESHGUI_FilterTable::AdditionalWidget::GetString( const int theId ) const +QString SMESHGUI_FilterTable::AdditionalWidget::GetString (const int theId) const { - return myLineEdits.contains( theId ) ? myLineEdits[ theId ]->text() : QString(""); + return myLineEdits.contains(theId) ? myLineEdits[ theId ]->text() : QString(""); } -void SMESHGUI_FilterTable::AdditionalWidget::SetDouble( const int theId, const double theVal ) +void SMESHGUI_FilterTable::AdditionalWidget::SetDouble (const int theId, const double theVal) { - if ( myLineEdits.contains( theId ) ) - myLineEdits[ theId ]->setText( QString( "%1" ).arg( theVal ) ); + if (myLineEdits.contains(theId)) + myLineEdits[ theId ]->setText(QString("%1").arg(theVal)); } -void SMESHGUI_FilterTable::AdditionalWidget::SetInteger( const int theId, const int theVal ) +void SMESHGUI_FilterTable::AdditionalWidget::SetInteger (const int theId, const int theVal) { - if ( myLineEdits.contains( theId ) ) - myLineEdits[ theId ]->setText( QString( "%1" ).arg( theVal ) ); + if (myLineEdits.contains(theId)) + myLineEdits[ theId ]->setText(QString("%1").arg(theVal)); } -void SMESHGUI_FilterTable::AdditionalWidget::SetString( const int theId, const QString& theVal ) +void SMESHGUI_FilterTable::AdditionalWidget::SetString (const int theId, const QString& theVal) { - if ( myLineEdits.contains( theId ) ) - myLineEdits[ theId ]->setText( theVal ); + if (myLineEdits.contains(theId)) + myLineEdits[ theId ]->setText(theVal); } -void SMESHGUI_FilterTable::AdditionalWidget::SetEditable( const int theId, const bool isEditable ) +void SMESHGUI_FilterTable::AdditionalWidget::SetEditable (const int theId, const bool isEditable) { - if ( myLineEdits.contains( theId ) ) - myLineEdits[ theId ]->setEdited( isEditable ); + if (myLineEdits.contains(theId)) + myLineEdits[ theId ]->setEdited(isEditable); } -void SMESHGUI_FilterTable::AdditionalWidget::SetEditable( const bool isEditable ) +void SMESHGUI_FilterTable::AdditionalWidget::SetEditable (const bool isEditable) { QValueList aParams; - GetParameters( aParams ); + GetParameters(aParams); QValueList::const_iterator anIter; - for ( anIter = aParams.begin(); anIter != aParams.end(); ++anIter ) - myLineEdits[ *anIter ]->setEdited( isEditable ); + for (anIter = aParams.begin(); anIter != aParams.end(); ++anIter) + myLineEdits[ *anIter ]->setEdited(isEditable); } /* @@ -250,97 +261,95 @@ void SMESHGUI_FilterTable::AdditionalWidget::SetEditable( const bool isEditable */ class SMESHGUI_FilterTable::ComboItem : public QComboTableItem - { public: - ComboItem( QTable*, const QMap& ); + ComboItem(QTable*, const QMap&); virtual ~ComboItem(); - virtual void setStringList ( const QStringList & l ); - void setStringList( const QMap& theIds ); + virtual void setStringList (const QStringList & l); + void setStringList(const QMap& theIds); int GetValue() const; - void SetValue( const int ); - + void SetValue(const int); + private: - + QMap myNumToId; QMap myIdToNum; }; -SMESHGUI_FilterTable::ComboItem::ComboItem( QTable* theParent, - const QMap& theIds ) -: QComboTableItem( theParent, QStringList() ) +SMESHGUI_FilterTable::ComboItem::ComboItem (QTable* theParent, + const QMap& theIds) +: QComboTableItem(theParent, QStringList()) { - setStringList( theIds ); + setStringList(theIds); } -void SMESHGUI_FilterTable::ComboItem::setStringList( const QStringList & l ) +void SMESHGUI_FilterTable::ComboItem::setStringList (const QStringList & l) { - QComboTableItem::setStringList( l ); + QComboTableItem::setStringList(l); } -void SMESHGUI_FilterTable::ComboItem::setStringList( const QMap& theIds ) +void SMESHGUI_FilterTable::ComboItem::setStringList (const QMap& theIds) { int i = 0; QStringList aList; QMap::const_iterator anIter; - for ( anIter = theIds.begin(); anIter != theIds.end(); ++anIter ) - { + for (anIter = theIds.begin(); anIter != theIds.end(); ++anIter) { myNumToId[ i ] = anIter.key(); myIdToNum[ anIter.key() ] = i; - aList.append( anIter.data() ); + aList.append(anIter.data()); i++; } - setStringList( aList ); + setStringList(aList); } SMESHGUI_FilterTable::ComboItem::~ComboItem() { } - + int SMESHGUI_FilterTable::ComboItem::GetValue() const { return myNumToId[ currentItem() ]; } -void SMESHGUI_FilterTable::ComboItem::SetValue( const int theVal ) +void SMESHGUI_FilterTable::ComboItem::SetValue (const int theVal) { - setCurrentItem( myIdToNum[ theVal ] ); + setCurrentItem(myIdToNum[ theVal ]); } /* - Class : SMESHGUI_FilterTable::Table + Class : SMESHGUI_FilterTable::Table Description : Table used by this widget */ class SMESHGUI_FilterTable::Table : public QTable { public: - Table( QWidget* parent ); - Table( int numRows, int numCols, QWidget* parent = 0 ); + Table(QWidget* parent); + Table(int numRows, int numCols, QWidget* parent = 0); virtual ~Table(); - void SetEditable( const bool state, const int row, const int col ); - bool IsEditable( const int row, const int col ) const; + void SetEditable(const bool state, const int row, const int col); + bool IsEditable(const int row, const int col) const; - virtual void insertRows( int row, int count = 1 ); - virtual QString text( int row, int col ) const; + virtual void insertRows(int row, int count = 1); + virtual QString text(int row, int col) const; }; //======================================================================= // name : SMESHGUI_FilterTable::Table::Table // Purpose : Constructor //======================================================================= -SMESHGUI_FilterTable::Table::Table( QWidget* parent ) -: QTable( parent, "SMESHGUI_FilterTable::Table" ) +SMESHGUI_FilterTable::Table::Table (QWidget* parent) +: QTable(parent, "SMESHGUI_FilterTable::Table") { } -SMESHGUI_FilterTable::Table::Table( int numRows, int numCols, QWidget* parent ) -: QTable( numRows, numCols, parent, "SMESHGUI_FilterTable::Table" ) +SMESHGUI_FilterTable::Table::Table (int numRows, int numCols, QWidget* parent) +: QTable(numRows, numCols, parent, "SMESHGUI_FilterTable::Table") { } @@ -352,63 +361,63 @@ SMESHGUI_FilterTable::Table::~Table() // name : SMESHGUI_FilterTable::Table::SetEditable // Purpose : Set editable of specified cell //======================================================================= -void SMESHGUI_FilterTable::Table::SetEditable( const bool isEditable, const int row, const int col ) +void SMESHGUI_FilterTable::Table::SetEditable (const bool isEditable, + const int row, const int col) { - QTableItem* anItem = item( row, col ); - if( anItem ) - takeItem( anItem ); + QTableItem* anItem = item(row, col); + if(anItem) + takeItem(anItem); - if ( !isEditable ) - setItem( row, col, new QTableItem( this, QTableItem::Never, "" ) ); + if (!isEditable) + setItem(row, col, new QTableItem(this, QTableItem::Never, "")); else - setItem( row, col, new QTableItem( this, QTableItem::OnTyping, "" ) ); + setItem(row, col, new QTableItem(this, QTableItem::OnTyping, "")); } //======================================================================= // name : SMESHGUI_FilterTable::Table::IsEditable // Purpose : Verify wheter cell is editable //======================================================================= -bool SMESHGUI_FilterTable::Table::IsEditable( const int row, const int col ) const +bool SMESHGUI_FilterTable::Table::IsEditable (const int row, const int col) const { - QTableItem* anItem = item( row, col ); + QTableItem* anItem = item(row, col); return anItem == 0 || anItem->editType() != QTableItem::Never; } //======================================================================= // name : SMESHGUI_FilterTable::Table::insertRows -// Purpose : Insert rows ( virtual redefined ) +// Purpose : Insert rows (virtual redefined) //======================================================================= -void SMESHGUI_FilterTable::Table::insertRows( int row, int count ) +void SMESHGUI_FilterTable::Table::insertRows (int row, int count) { int anEditRow = currEditRow(); int anEditCol = currEditCol(); - if ( anEditRow >= 0 && anEditCol >= 0 ) - endEdit( anEditRow, anEditCol, true, false ); + if (anEditRow >= 0 && anEditCol >= 0) + endEdit(anEditRow, anEditCol, true, false); QTable::insertRows( row, count ); } //======================================================================= // name : SMESHGUI_FilterTable::Table::text -// Purpose : Get text from cell ( virtual redefined ) +// Purpose : Get text from cell (virtual redefined) //======================================================================= -QString SMESHGUI_FilterTable::Table::text( int row, int col ) const +QString SMESHGUI_FilterTable::Table::text (int row, int col) const { int anEditRow = currEditRow(); int anEditCol = currEditCol(); - if ( anEditRow >= 0 && anEditCol >= 0 && anEditRow == row && anEditCol == col ) - ((Table*)this)->endEdit( row, col, true, false ); + if (anEditRow >= 0 && anEditCol >= 0 && anEditRow == row && anEditCol == col) + ((Table*)this)->endEdit(row, col, true, false); - return QTable::text( row, col ); + return QTable::text(row, col); } - /* Class : SMESHGUI_FilterTable - Description : Frame containig + Description : Frame containig - Button group for switching entity type - Table for displaying filter criterions - Buttons for editing table and filter libraries @@ -418,25 +427,31 @@ QString SMESHGUI_FilterTable::Table::text( int row, int col ) const // name : SMESHGUI_FilterTable::SMESHGUI_FilterTable // Purpose : Constructor //======================================================================= -SMESHGUI_FilterTable::SMESHGUI_FilterTable( QWidget* parent, - const int type ) -: QFrame( parent ) +SMESHGUI_FilterTable::SMESHGUI_FilterTable( SMESHGUI* theModule, + QWidget* parent, + const int type) +: QFrame(parent), + myIsLocked( false ), + mySMESHGUI( theModule ) { myEntityType = -1; - Init( type ); -} + Init(type); +} //======================================================================= // name : SMESHGUI_FilterTable::SMESHGUI_FilterTable // Purpose : Constructor //======================================================================= -SMESHGUI_FilterTable::SMESHGUI_FilterTable( QWidget* parent, - const QValueList& types ) -: QFrame( parent ) +SMESHGUI_FilterTable::SMESHGUI_FilterTable( SMESHGUI* theModule, + QWidget* parent, + const QValueList& types) +: QFrame(parent), + myIsLocked( false ), + mySMESHGUI( theModule ) { myEntityType = -1; - Init( types ); -} + Init(types); +} SMESHGUI_FilterTable::~SMESHGUI_FilterTable() { @@ -446,153 +461,153 @@ SMESHGUI_FilterTable::~SMESHGUI_FilterTable() // name : SMESHGUI_FilterTable::Init // Purpose : Create table corresponding to the specified type //======================================================================= -void SMESHGUI_FilterTable::Init( const int type ) +void SMESHGUI_FilterTable::Init (const int type) { QValueList aTypes; - aTypes.append( type ); - Init( aTypes ); + aTypes.append(type); + Init(aTypes); } //======================================================================= // name : SMESHGUI_FilterTable::Init // Purpose : Create table corresponding to the specified type //======================================================================= -void SMESHGUI_FilterTable::Init( const QValueList& theTypes ) +void SMESHGUI_FilterTable::Init (const QValueList& theTypes) { - if ( theTypes.isEmpty() ) + if (theTypes.isEmpty()) return; - + // Create buttons if necessary - - if ( myTables.isEmpty() ) + + if (myTables.isEmpty()) { int aType = theTypes.first(); // create main layout - QVBoxLayout* aMainLay = new QVBoxLayout( this ); - QGroupBox* aMainGrp = new QGroupBox( 1, Qt::Horizontal, this ); - aMainGrp->setFrameStyle( QFrame::NoFrame ); - aMainGrp->setInsideMargin( 0 ); - aMainLay->addWidget( aMainGrp ); - + QVBoxLayout* aMainLay = new QVBoxLayout(this); + QGroupBox* aMainGrp = new QGroupBox(1, Qt::Horizontal, this); + aMainGrp->setFrameStyle(QFrame::NoFrame); + aMainGrp->setInsideMargin(0); + aMainLay->addWidget(aMainGrp); + // create switch of entity types - myEntityTypeGrp = new QButtonGroup( 1, Qt::Vertical, tr( "ENTITY_TYPE" ), aMainGrp ); + myEntityTypeGrp = new QButtonGroup(1, Qt::Vertical, tr("ENTITY_TYPE"), aMainGrp); const QMap& aSupportedTypes = getSupportedTypes(); QMap::const_iterator anIter; - for ( anIter = aSupportedTypes.begin(); anIter != aSupportedTypes.end(); ++anIter ) + for (anIter = aSupportedTypes.begin(); anIter != aSupportedTypes.end(); ++anIter) { - QRadioButton* aBtn = new QRadioButton( anIter.data(), myEntityTypeGrp ); - myEntityTypeGrp->insert( aBtn, anIter.key() ); + QRadioButton* aBtn = new QRadioButton(anIter.data(), myEntityTypeGrp); + myEntityTypeGrp->insert(aBtn, anIter.key()); } - myTableGrp = new QGroupBox( 1, Qt::Horizontal, tr( "FILTER" ), aMainGrp ); - QFrame* aTableFrame = new QFrame( myTableGrp ); - + myTableGrp = new QGroupBox(1, Qt::Horizontal, tr("FILTER"), aMainGrp ); + QFrame* aTableFrame = new QFrame(myTableGrp); + // create table - mySwitchTableGrp = new QGroupBox( 1, Qt::Horizontal, aTableFrame ); - mySwitchTableGrp->setFrameStyle( QFrame::NoFrame ); - mySwitchTableGrp->setInsideMargin( 0 ); - - myTables[ aType ] = createTable( mySwitchTableGrp, aType ); - + mySwitchTableGrp = new QGroupBox(1, Qt::Horizontal, aTableFrame); + mySwitchTableGrp->setFrameStyle(QFrame::NoFrame); + mySwitchTableGrp->setInsideMargin(0); + + myTables[ aType ] = createTable(mySwitchTableGrp, aType); + // create buttons - myAddBtn = new QPushButton( tr( "ADD" ), aTableFrame ); - myRemoveBtn = new QPushButton( tr( "REMOVE" ), aTableFrame ); - myClearBtn = new QPushButton( tr( "CLEAR" ), aTableFrame ); - myInsertBtn = new QPushButton( tr( "INSERT" ), aTableFrame ); - myCopyFromBtn = new QPushButton( tr( "COPY_FROM" ), aTableFrame ); - myAddToBtn = new QPushButton( tr( "ADD_TO" ), aTableFrame ); - - myAddBtn->setAutoDefault( false ); - myRemoveBtn->setAutoDefault( false ); - myClearBtn->setAutoDefault( false ); - myInsertBtn->setAutoDefault( false ); - myCopyFromBtn->setAutoDefault( false ); - myAddToBtn->setAutoDefault( false ); + myAddBtn = new QPushButton(tr("ADD"), aTableFrame); + myRemoveBtn = new QPushButton(tr("REMOVE"), aTableFrame); + myClearBtn = new QPushButton(tr("CLEAR"), aTableFrame); + myInsertBtn = new QPushButton(tr("INSERT"), aTableFrame); + myCopyFromBtn = new QPushButton(tr("COPY_FROM"), aTableFrame); + myAddToBtn = new QPushButton(tr("ADD_TO"), aTableFrame); + + myAddBtn->setAutoDefault(false); + myRemoveBtn->setAutoDefault(false); + myClearBtn->setAutoDefault(false); + myInsertBtn->setAutoDefault(false); + myCopyFromBtn->setAutoDefault(false); + myAddToBtn->setAutoDefault(false); myCopyFromBtn->hide(); myAddToBtn->hide(); - + // layout widgets - QGridLayout* aLay = new QGridLayout( aTableFrame, 8, 2, 0, SPACING ); - - aLay->addMultiCellWidget( mySwitchTableGrp, 0, 6, 0, 0 ); - aLay->addWidget( myAddBtn, 0, 1 ); - aLay->addWidget( myInsertBtn, 1, 1 ); - aLay->addWidget( myRemoveBtn, 2, 1 ); - aLay->addWidget( myClearBtn, 3, 1 ); - aLay->addWidget( myCopyFromBtn, 5, 1 ); - aLay->addWidget( myAddToBtn, 6, 1 ); - aLay->addMultiCellWidget( createAdditionalFrame( aTableFrame ), 7, 7, 0, 1 ); - - aLay->setColStretch( 0, 1 ); - aLay->setColStretch( 1, 0 ); - - QSpacerItem* aVSpacer = new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding ); - aLay->addItem( aVSpacer, 4, 1 ); - + QGridLayout* aLay = new QGridLayout(aTableFrame, 8, 2, 0, SPACING); + + aLay->addMultiCellWidget(mySwitchTableGrp, 0, 6, 0, 0); + aLay->addWidget(myAddBtn, 0, 1); + aLay->addWidget(myInsertBtn, 1, 1); + aLay->addWidget(myRemoveBtn, 2, 1); + aLay->addWidget(myClearBtn, 3, 1); + aLay->addWidget(myCopyFromBtn, 5, 1); + aLay->addWidget(myAddToBtn, 6, 1); + aLay->addMultiCellWidget(createAdditionalFrame(aTableFrame), 7, 7, 0, 1 ); + + aLay->setColStretch(0, 1); + aLay->setColStretch(1, 0); + + QSpacerItem* aVSpacer = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); + aLay->addItem(aVSpacer, 4, 1); + // signals and slots - connect( myAddBtn, SIGNAL( clicked() ), this, SLOT( onAddBtn() ) ); - connect( myInsertBtn, SIGNAL( clicked() ), this, SLOT( onInsertBtn() ) ); - connect( myRemoveBtn, SIGNAL( clicked() ), this, SLOT( onRemoveBtn() ) ); - connect( myClearBtn, SIGNAL( clicked() ), this, SLOT( onClearBtn() ) ); - - connect( myCopyFromBtn, SIGNAL( clicked() ), this, SLOT( onCopyFromBtn() ) ); - connect( myAddToBtn, SIGNAL( clicked() ), this, SLOT( onAddToBtn() ) ); - - connect( myEntityTypeGrp, SIGNAL( clicked( int ) ), this, SLOT( onEntityType( int ) ) ); - + connect(myAddBtn, SIGNAL(clicked()), this, SLOT(onAddBtn())); + connect(myInsertBtn, SIGNAL(clicked()), this, SLOT(onInsertBtn())); + connect(myRemoveBtn, SIGNAL(clicked()), this, SLOT(onRemoveBtn())); + connect(myClearBtn, SIGNAL(clicked()), this, SLOT(onClearBtn())); + + connect(myCopyFromBtn, SIGNAL(clicked()), this, SLOT(onCopyFromBtn())); + connect(myAddToBtn, SIGNAL(clicked()), this, SLOT(onAddToBtn())); + + connect(myEntityTypeGrp, SIGNAL(clicked(int)), this, SLOT(onEntityType(int))); + myLibDlg = 0; } - + // Hide buttons of entity types if necessary const QMap& aSupportedTypes = getSupportedTypes(); QMap::const_iterator anIt; - for ( anIt = aSupportedTypes.begin(); anIt != aSupportedTypes.end(); ++anIt ) + for (anIt = aSupportedTypes.begin(); anIt != aSupportedTypes.end(); ++anIt) { - QButton* aBtn = myEntityTypeGrp->find( anIt.key() ); - theTypes.contains( anIt.key() ) ? aBtn->show() : aBtn->hide(); + QButton* aBtn = myEntityTypeGrp->find(anIt.key()); + theTypes.contains(anIt.key()) ? aBtn->show() : aBtn->hide(); } // select first button if there is no selected buttons or it is hidden QButton* aBtn = myEntityTypeGrp->selected(); - if ( aBtn == 0 || theTypes.find( myEntityTypeGrp->id( aBtn ) ) == theTypes.end() ) - myEntityTypeGrp->setButton( theTypes.first() ); + if ( aBtn == 0 || theTypes.find(myEntityTypeGrp->id(aBtn)) == theTypes.end()) + myEntityTypeGrp->setButton(theTypes.first()); - if ( theTypes.count() == 1 ) + if (theTypes.count() == 1) myEntityTypeGrp->hide(); else myEntityTypeGrp->show(); myTableGrp->updateGeometry(); - int aType = myEntityTypeGrp->id( myEntityTypeGrp->selected() ); - onEntityType( aType ); + int aType = myEntityTypeGrp->id(myEntityTypeGrp->selected()); + onEntityType(aType); } //======================================================================= // name : SMESHGUI_FilterTable::GetTableGrp // Purpose : Get group box containing table. May be used for adding new widgets in it -////======================================================================= -QWidget* SMESHGUI_FilterTable::createAdditionalFrame( QWidget* theParent ) -{ - QFrame* aFrame = new QFrame( theParent ); - - QFrame* aLine1 = new QFrame( aFrame ); - QFrame* aLine2 = new QFrame( aFrame ); - aLine1->setFrameStyle( QFrame::HLine | QFrame::Sunken ); - aLine2->setFrameStyle( QFrame::HLine | QFrame::Sunken ); - aLine1->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed) ); - aLine2->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed) ); - - QLabel* aLabel = new QLabel( tr( "ADDITIONAL_PARAMETERS" ), aFrame ); - - myWgStack = new QWidgetStack( aFrame ); - - QGridLayout* aLay = new QGridLayout( aFrame, 2, 3, 0, SPACING ); - aLay->addWidget( aLine1, 0, 0 ); - aLay->addWidget( aLabel, 0, 1 ); - aLay->addWidget( aLine2, 0, 2 ); - aLay->addMultiCellWidget( myWgStack, 1, 1, 0, 2 ); +//======================================================================= +QWidget* SMESHGUI_FilterTable::createAdditionalFrame (QWidget* theParent) +{ + QFrame* aFrame = new QFrame(theParent); + + QFrame* aLine1 = new QFrame(aFrame); + QFrame* aLine2 = new QFrame(aFrame); + aLine1->setFrameStyle(QFrame::HLine | QFrame::Sunken); + aLine2->setFrameStyle(QFrame::HLine | QFrame::Sunken); + aLine1->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); + aLine2->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); + + QLabel* aLabel = new QLabel(tr("ADDITIONAL_PARAMETERS"), aFrame); + + myWgStack = new QWidgetStack(aFrame); + + QGridLayout* aLay = new QGridLayout(aFrame, 2, 3, 0, SPACING); + aLay->addWidget(aLine1, 0, 0); + aLay->addWidget(aLabel, 0, 1); + aLay->addWidget(aLine2, 0, 2); + aLay->addMultiCellWidget(myWgStack, 1, 1, 0, 2); return aFrame; } @@ -600,7 +615,7 @@ QWidget* SMESHGUI_FilterTable::createAdditionalFrame( QWidget* theParent ) //======================================================================= // name : SMESHGUI_FilterTable::GetTableGrp // Purpose : Get group box containing table. May be used for adding new widgets in it -////======================================================================= +//======================================================================= QGroupBox* SMESHGUI_FilterTable::GetTableGrp() { return myTableGrp; @@ -609,28 +624,28 @@ QGroupBox* SMESHGUI_FilterTable::GetTableGrp() //======================================================================= // name : SMESHGUI_FilterTable::onEntityType // Purpose : SLOT. Called when entity type changed. -// Display corresponding table +// Display corresponding table //======================================================================= -void SMESHGUI_FilterTable::onEntityType( int theType ) +void SMESHGUI_FilterTable::onEntityType (int theType) { - if ( myEntityType == theType ) + if (myEntityType == theType) return; myIsValid = true; emit NeedValidation(); - if ( !myIsValid ) + if (!myIsValid) { - myEntityTypeGrp->setButton( myEntityType ); + myEntityTypeGrp->setButton(myEntityType); return; } myEntityType = theType; - - if ( !myTables.contains( theType ) ) - myTables[ theType ] = createTable( mySwitchTableGrp, theType ); - + + if (!myTables.contains(theType)) + myTables[ theType ] = createTable(mySwitchTableGrp, theType); + TableMap::iterator anIter; - for ( anIter = myTables.begin(); anIter != myTables.end(); ++anIter ) + for (anIter = myTables.begin(); anIter != myTables.end(); ++anIter) myEntityType == anIter.key() ? anIter.data()->show() : anIter.data()->hide(); updateBtnState(); @@ -638,7 +653,7 @@ void SMESHGUI_FilterTable::onEntityType( int theType ) myTables[ myEntityType ]->updateGeometry(); adjustSize(); - emit EntityTypeChanged( theType ); + emit EntityTypeChanged(theType); } @@ -646,56 +661,51 @@ void SMESHGUI_FilterTable::onEntityType( int theType ) // name : SMESHGUI_FilterTable::IsValid // Purpose : Verify validity of entered data //======================================================================= -bool SMESHGUI_FilterTable::IsValid( const bool theMess, const int theEntityType ) const +bool SMESHGUI_FilterTable::IsValid (const bool theMess, const int theEntityType) const { int aType = theEntityType == -1 ? GetType() : theEntityType; Table* aTable = myTables[ aType ]; - for ( int i = 0, n = aTable->numRows(); i < n; i++ ) + for (int i = 0, n = aTable->numRows(); i < n; i++) { - int aCriterion = GetCriterionType( i, aType ); + int aCriterion = GetCriterionType(i, aType); - if ( aCriterion == FT_RangeOfIds || + if (aCriterion == FT_RangeOfIds || aCriterion == FT_BelongToGeom || aCriterion == FT_BelongToPlane || aCriterion == FT_BelongToCylinder || - aCriterion == FT_LyingOnGeom) - { - if ( aTable->text( i, 2 ).isEmpty() ) - { - if ( theMess ) - QMessageBox::information( SMESHGUI::GetSMESHGUI()->GetDesktop(), - tr( "SMESH_INSUFFICIENT_DATA" ), tr( "ERROR" ), QMessageBox::Ok ); + aCriterion == FT_LyingOnGeom) { + if (aTable->text(i, 2).isEmpty()) { + if (theMess) + QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), + tr("ERROR"), QMessageBox::Ok); return false; } - } - else - { + } else { bool aRes = false; - aTable->blockSignals( true ); - double aThreshold = ( int )aTable->text( i, 2 ).toDouble( &aRes ); - aTable->blockSignals( false ); - - if ( !aRes && aTable->IsEditable( i, 2 ) ) - { - if ( theMess ) - QMessageBox::information( SMESHGUI::GetSMESHGUI()->GetDesktop(), - tr( "SMESH_INSUFFICIENT_DATA" ), tr( "ERROR" ), QMessageBox::Ok ); + aTable->blockSignals(true); + double aThreshold = (int)aTable->text(i, 2).toDouble(&aRes); + aTable->blockSignals(false); + + if (!aRes && aTable->IsEditable(i, 2)) { + if (theMess) + QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), + tr("ERROR"), QMessageBox::Ok); return false; } - else if ( aType == SMESH::EDGE && - GetCriterionType( i, aType ) == SMESH::FT_MultiConnection && - aThreshold == 1 ) + else if (aType == SMESH::EDGE && + GetCriterionType(i, aType) == SMESH::FT_MultiConnection && + aThreshold == 1) { - if ( theMess ) - QMessageBox::information( SMESHGUI::GetSMESHGUI()->GetDesktop(), - tr( "SMESH_INSUFFICIENT_DATA" ), tr( "MULTIEDGES_ERROR" ), QMessageBox::Ok ); + if (theMess) + QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), + tr("MULTIEDGES_ERROR"), QMessageBox::Ok); return false; } } - QTableItem* anItem = aTable->item( i, 0 ); - if ( myAddWidgets.contains( anItem ) && !myAddWidgets[ anItem ]->IsValid() ) + QTableItem* anItem = aTable->item(i, 0); + if (myAddWidgets.contains(anItem) && !myAddWidgets[ anItem ]->IsValid()) return false; } @@ -706,7 +716,7 @@ bool SMESHGUI_FilterTable::IsValid( const bool theMess, const int theEntityType // name : SMESHGUI_FilterTable::SetValidity // Purpose : Set validity of the table //======================================================================= -void SMESHGUI_FilterTable::SetValidity( const bool isValid ) +void SMESHGUI_FilterTable::SetValidity (const bool isValid) { myIsValid = isValid; } @@ -724,10 +734,10 @@ int SMESHGUI_FilterTable::GetType() const // name : SMESHGUI_FilterTable::SetType // Purpose : Set current entity type //======================================================================= -void SMESHGUI_FilterTable::SetType( const int type ) +void SMESHGUI_FilterTable::SetType (const int type) { - myEntityTypeGrp->setButton( type ); - onEntityType( type ); + myEntityTypeGrp->setButton(type); + onEntityType(type); } //======================================================================= @@ -736,18 +746,18 @@ void SMESHGUI_FilterTable::SetType( const int type ) //======================================================================= void SMESHGUI_FilterTable::RestorePreviousEntityType() { - SetType( myEntityType ); + SetType(myEntityType); } //======================================================================= // name : SMESHGUI_FilterTable::GetCriterionType -// Purpose : Get type of criterion from specified row ( corresponding enums in h-file ) +// Purpose : Get type of criterion from specified row (corresponding enums in h-file) //======================================================================= -int SMESHGUI_FilterTable::GetCriterionType( const int theRow, const int theType ) const +int SMESHGUI_FilterTable::GetCriterionType (const int theRow, const int theType) const { int aType = theType == -1 ? GetType() : theType; Table* aTable = myTables[ aType ]; - ComboItem* anItem = (ComboItem*)aTable->item( theRow, 0 ); + ComboItem* anItem = (ComboItem*)aTable->item(theRow, 0); return anItem != 0 ? anItem->GetValue() : FT_Undefined; } @@ -755,90 +765,90 @@ int SMESHGUI_FilterTable::GetCriterionType( const int theRow, const int theType // name : SMESHGUI_FilterTable::GetCriterion // Purpose : Get parameters of criterion from specified row //======================================================================= -void SMESHGUI_FilterTable::GetCriterion( const int theRow, +void SMESHGUI_FilterTable::GetCriterion (const int theRow, SMESH::Filter::Criterion& theCriterion, - const int theEntityType ) const + const int theEntityType) const { int aType = theEntityType == -1 ? GetType() : theEntityType; Table* aTable = myTables[ aType ]; - - theCriterion.Type = ( (ComboItem*)aTable->item( theRow, 0 ) )->GetValue(); - theCriterion.UnaryOp = ( (QCheckTableItem*)aTable->item( theRow, 3 ) )->isChecked() ? FT_LogicalNOT : FT_Undefined; + + theCriterion.Type = ((ComboItem*)aTable->item(theRow, 0))->GetValue(); + theCriterion.UnaryOp = ((QCheckTableItem*)aTable->item(theRow, 3))->isChecked() ? FT_LogicalNOT : FT_Undefined; theCriterion.BinaryOp = theRow != aTable->numRows() - 1 ? - ( (ComboItem*)aTable->item( theRow, 4 ) )->GetValue() : FT_Undefined; + ((ComboItem*)aTable->item(theRow, 4))->GetValue() : FT_Undefined; theCriterion.TypeOfElement = (ElementType)aType; - int aCriterionType = GetCriterionType( theRow, aType ); + int aCriterionType = GetCriterionType(theRow, aType); - if ( aCriterionType != FT_RangeOfIds && + if (aCriterionType != FT_RangeOfIds && aCriterionType != FT_BelongToGeom && aCriterionType != FT_BelongToPlane && aCriterionType != FT_BelongToCylinder && aCriterionType != FT_LyingOnGeom) { - theCriterion.Compare = ( (ComboItem*)aTable->item( theRow, 1 ) )->GetValue(); - theCriterion.Threshold = aTable->item( theRow, 2 )->text().toDouble(); + theCriterion.Compare = ((ComboItem*)aTable->item(theRow, 1))->GetValue(); + theCriterion.Threshold = aTable->item(theRow, 2)->text().toDouble(); } else - theCriterion.ThresholdStr = aTable->text( theRow, 2 ).latin1(); + theCriterion.ThresholdStr = aTable->text(theRow, 2).latin1(); - QTableItem* anItem = aTable->item( theRow, 0 ); - if ( myAddWidgets.contains( anItem ) ) - theCriterion.Tolerance = myAddWidgets[ anItem ]->GetDouble( AdditionalWidget::Tolerance ); + QTableItem* anItem = aTable->item(theRow, 0); + if (myAddWidgets.contains(anItem)) + theCriterion.Tolerance = myAddWidgets[ anItem ]->GetDouble(AdditionalWidget::Tolerance); } //======================================================================= // name : SMESHGUI_FilterTable::SetCriterion // Purpose : Set parameters of criterion of specified row //======================================================================= -void SMESHGUI_FilterTable::SetCriterion( const int theRow, +void SMESHGUI_FilterTable::SetCriterion (const int theRow, const SMESH::Filter::Criterion& theCriterion, - const int theEntityType ) + const int theEntityType) { int aType = theEntityType == -1 ? GetType() : theEntityType; Table* aTable = myTables[ aType ]; - if ( theRow > aTable->numRows() - 1 ) + if (theRow > aTable->numRows() - 1) return; - ( (ComboItem*)aTable->item( theRow, 0 ) )->SetValue( theCriterion.Type ); - onCriterionChanged( theRow, 0, aType ); - ( (ComboItem*)aTable->item( theRow, 1 ) )->SetValue( theCriterion.Compare ); - ( (QCheckTableItem*)aTable->item( theRow, 3 ) )->setChecked( theCriterion.UnaryOp == FT_LogicalNOT ); + ((ComboItem*)aTable->item(theRow, 0))->SetValue(theCriterion.Type); + onCriterionChanged(theRow, 0, aType); + ((ComboItem*)aTable->item(theRow, 1))->SetValue(theCriterion.Compare); + ((QCheckTableItem*)aTable->item(theRow, 3))->setChecked(theCriterion.UnaryOp == FT_LogicalNOT); - if ( theCriterion.BinaryOp != FT_Undefined ) + if (theCriterion.BinaryOp != FT_Undefined) { - if ( !aTable->IsEditable( theRow, 4 ) ) - aTable->setItem( theRow, 4, getBinaryItem( aTable ) ); - ( (ComboItem*)aTable->item( theRow, 4 ) )->SetValue( theCriterion.BinaryOp ); + if (!aTable->IsEditable(theRow, 4)) + aTable->setItem(theRow, 4, getBinaryItem(aTable)); + ((ComboItem*)aTable->item(theRow, 4))->SetValue(theCriterion.BinaryOp); } else - aTable->SetEditable( false, theRow, 4 ); + aTable->SetEditable(false, theRow, 4); - if ( theCriterion.Type != FT_RangeOfIds && + if (theCriterion.Type != FT_RangeOfIds && theCriterion.Type != FT_BelongToGeom && theCriterion.Type != FT_BelongToPlane && theCriterion.Type != FT_BelongToCylinder && theCriterion.Type != FT_LyingOnGeom) - aTable->setText( theRow, 2, QString( "%1" ).arg( theCriterion.Threshold, 0, 'g', 15 ) ); + aTable->setText(theRow, 2, QString("%1").arg(theCriterion.Threshold, 0, 'g', 15)); else - aTable->setText( theRow, 2, QString( theCriterion.ThresholdStr ) ); + aTable->setText(theRow, 2, QString(theCriterion.ThresholdStr)); - if ( theCriterion.Compare == FT_EqualTo || + if (theCriterion.Compare == FT_EqualTo || theCriterion.Type == FT_BelongToPlane || - theCriterion.Type == FT_BelongToCylinder ) + theCriterion.Type == FT_BelongToCylinder) { - QTableItem* anItem = aTable->item( theRow, 0 ); - if ( !myAddWidgets.contains( anItem ) ) + QTableItem* anItem = aTable->item(theRow, 0); + if (!myAddWidgets.contains(anItem)) { - myAddWidgets[ anItem ] = new AdditionalWidget( myWgStack ); - myWgStack->addWidget( myAddWidgets[ anItem ] ); + myAddWidgets[ anItem ] = new AdditionalWidget(myWgStack); + myWgStack->addWidget(myAddWidgets[ anItem ]); } - myAddWidgets[ anItem ]->SetDouble( AdditionalWidget::Tolerance, theCriterion.Tolerance ); + myAddWidgets[ anItem ]->SetDouble(AdditionalWidget::Tolerance, theCriterion.Tolerance); } - emit CretarionChanged( theRow, aType ); + emit CriterionChanged(theRow, aType); } @@ -851,8 +861,8 @@ void SMESHGUI_FilterTable::Update() Table* aTable = myTables[ GetType() ]; int aCurrRow = aTable->currentRow(); int numRows = aTable->numRows(); - if ( ( aCurrRow < 0 || aCurrRow >= numRows ) && numRows > 0 ) - aTable->setCurrentCell( 0, 0 ); + if ((aCurrRow < 0 || aCurrRow >= numRows) && numRows > 0) + aTable->setCurrentCell(0, 0); updateAdditionalWidget(); } @@ -860,20 +870,20 @@ void SMESHGUI_FilterTable::Update() // name : SMESHGUI_FilterTable::AddCriterion // Purpose : Add criterion with parameters //======================================================================= -void SMESHGUI_FilterTable::AddCriterion( const SMESH::Filter::Criterion& theCriterion, - const int theEntityType ) +void SMESHGUI_FilterTable::AddCriterion (const SMESH::Filter::Criterion& theCriterion, + const int theEntityType) { int aType = theEntityType == -1 ? GetType() : theEntityType; Table* aTable = myTables[ aType ]; - addRow( aTable, aType ); - SetCriterion( aTable->numRows() - 1, theCriterion ); + addRow(aTable, aType); + SetCriterion(aTable->numRows() - 1, theCriterion); } //======================================================================= // name : SMESHGUI_FilterTable::NumRows // Purpose : Get number of criterions of current type //======================================================================= -int SMESHGUI_FilterTable::NumRows( const int theEntityType ) const +int SMESHGUI_FilterTable::NumRows (const int theEntityType) const { return myTables[ theEntityType == -1 ? GetType() : theEntityType ]->numRows(); } @@ -882,18 +892,18 @@ int SMESHGUI_FilterTable::NumRows( const int theEntityType ) const // name : SMESHGUI_FilterTable::Clear // Purpose : Clear current table //======================================================================= -void SMESHGUI_FilterTable::Clear( const int theType ) +void SMESHGUI_FilterTable::Clear (const int theType) { int aType = theType == -1 ? GetType() : theType; QTable* aTable = myTables[ aType ]; - if ( aTable->numRows() == 0 ) + if (aTable->numRows() == 0) return; - while ( aTable->numRows() > 0 ) + while (aTable->numRows() > 0) { - removeAdditionalWidget( aTable, 0 ); - aTable->removeRow( 0 ); + removeAdditionalWidget(aTable, 0); + aTable->removeRow(0); } updateBtnState(); @@ -907,7 +917,7 @@ void SMESHGUI_FilterTable::Clear( const int theType ) void SMESHGUI_FilterTable::onAddBtn() { int aType = GetType(); - addRow( myTables[ aType ], aType ); + addRow(myTables[ aType ], aType); Update(); } @@ -919,7 +929,7 @@ void SMESHGUI_FilterTable::onAddBtn() //======================================================================= void SMESHGUI_FilterTable::onInsertBtn() { - addRow( myTables[ GetType() ], GetType(), false ); + addRow(myTables[ GetType() ], GetType(), false); } //======================================================================= @@ -931,25 +941,25 @@ void SMESHGUI_FilterTable::onRemoveBtn() { Table* aTable = myTables[ GetType() ]; - if ( aTable->numRows() == 0 ) + if (aTable->numRows() == 0) return; QMemArray aRows; - for ( int i = 0, n = aTable->numRows(); i < n; i++ ) + for (int i = 0, n = aTable->numRows(); i < n; i++) { - if ( aTable->isRowSelected( i ) ) + if (aTable->isRowSelected(i)) { - aRows.resize( aRows.size() + 1 ); + aRows.resize(aRows.size() + 1); aRows[ aRows.size() - 1 ] = i; - removeAdditionalWidget( aTable, i ); + removeAdditionalWidget(aTable, i); } } - aTable->removeRows( aRows ); + aTable->removeRows(aRows); // remove control of binary logical operation from last row - if ( aTable->numRows() > 0 ) - aTable->SetEditable( false, aTable->numRows() - 1, 4 ); + if (aTable->numRows() > 0) + aTable->SetEditable(false, aTable->numRows() - 1, 4); updateBtnState(); } @@ -962,27 +972,27 @@ void SMESHGUI_FilterTable::updateAdditionalWidget() { Table* aTable = myTables[ GetType() ]; int aRow = aTable->currentRow(); - if ( aRow < 0 || aRow >= aTable->numRows() ) + if (aRow < 0 || aRow >= aTable->numRows()) { - myWgStack->setEnabled( false ); + myWgStack->setEnabled(false); return; } - ComboItem* anItem = ( (ComboItem*)aTable->item( aRow, 0 ) ); - bool toEnable = ( (ComboItem*)aTable->item( aRow, 1 ) )->GetValue() == FT_EqualTo && - GetCriterionType( aRow ) != FT_BelongToGeom && - GetCriterionType( aRow ) != FT_LyingOnGeom && - GetCriterionType( aRow ) != FT_RangeOfIds && - GetCriterionType( aRow ) != FT_FreeEdges && - GetCriterionType( aRow ) != FT_BadOrientedVolume; - if ( !myAddWidgets.contains( anItem ) ) + ComboItem* anItem = ((ComboItem*)aTable->item(aRow, 0)); + bool toEnable = ((ComboItem*)aTable->item(aRow, 1))->GetValue() == FT_EqualTo && + GetCriterionType(aRow) != FT_BelongToGeom && + GetCriterionType(aRow) != FT_LyingOnGeom && + GetCriterionType(aRow) != FT_RangeOfIds && + GetCriterionType(aRow) != FT_FreeEdges && + GetCriterionType(aRow) != FT_BadOrientedVolume; + if (!myAddWidgets.contains(anItem)) { - myAddWidgets[ anItem ] = new AdditionalWidget( myWgStack ); - myWgStack->addWidget( myAddWidgets[ anItem ] ); + myAddWidgets[ anItem ] = new AdditionalWidget(myWgStack); + myWgStack->addWidget(myAddWidgets[ anItem ]); } - myWgStack->raiseWidget( myWgStack->id( myAddWidgets[ anItem ] ) ); - myWgStack->setEnabled( toEnable ); + myWgStack->raiseWidget(myWgStack->id(myAddWidgets[ anItem ])); + myWgStack->setEnabled(toEnable); } //======================================================================= @@ -990,15 +1000,15 @@ void SMESHGUI_FilterTable::updateAdditionalWidget() // Purpose : Remove widgets containing additional parameters from widget // stack and internal map //======================================================================= -void SMESHGUI_FilterTable::removeAdditionalWidget( QTable* theTable, const int theRow ) +void SMESHGUI_FilterTable::removeAdditionalWidget (QTable* theTable, const int theRow) { - QTableItem* anItem = theTable->item( theRow, 0 ); - if ( myAddWidgets.contains( anItem ) ) + QTableItem* anItem = theTable->item(theRow, 0); + if (myAddWidgets.contains(anItem)) { - myWgStack->removeWidget( myAddWidgets[ anItem ] ); - myAddWidgets[ anItem ]->reparent( 0, QPoint() ); + myWgStack->removeWidget(myAddWidgets[ anItem ]); + myAddWidgets[ anItem ]->reparent(0, QPoint()); delete myAddWidgets[ anItem ]; - myAddWidgets.remove( anItem ); + myAddWidgets.remove(anItem); } } @@ -1011,13 +1021,13 @@ void SMESHGUI_FilterTable::onClearBtn() { QTable* aTable = myTables[ GetType() ]; - if ( aTable->numRows() == 0 ) + if (aTable->numRows() == 0) return; - while ( aTable->numRows() > 0 ) + while (aTable->numRows() > 0) { - removeAdditionalWidget( aTable, 0 ); - aTable->removeRow( 0 ); + removeAdditionalWidget(aTable, 0); + aTable->removeRow(0); } updateBtnState(); @@ -1027,63 +1037,64 @@ void SMESHGUI_FilterTable::onClearBtn() // name : SMESHGUI_FilterTable::onCurrentChanged() // Purpose : SLOT. Called when current cell changed //======================================================================= -void SMESHGUI_FilterTable::onCurrentChanged( int theRow, int theCol ) +void SMESHGUI_FilterTable::onCurrentChanged (int theRow, int theCol) { - updateAdditionalWidget(); - emit CurrentChanged( theRow, theCol ); + if( !myIsLocked ) + updateAdditionalWidget(); + emit CurrentChanged(theRow, theCol); } //======================================================================= // name : SMESHGUI_FilterTable::onCriterionChanged() // Purpose : Provides reaction on change of criterion //======================================================================= -void SMESHGUI_FilterTable::onCriterionChanged( const int row, const int col, const int entityType ) +void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, const int entityType) { int aType = entityType == -1 ? GetType() : entityType; Table* aTable = myTables[ aType ]; - ComboItem* aCompareItem = (ComboItem*)aTable->item( row, 1 ); + ComboItem* aCompareItem = (ComboItem*)aTable->item(row, 1); - int aCriterionType = GetCriterionType( row ); + int aCriterionType = GetCriterionType(row); - if ( aType == SMESH::EDGE && aCriterionType == SMESH::FT_FreeBorders || - aType == SMESH::FACE && aCriterionType == SMESH::FT_FreeEdges || - aType == SMESH::VOLUME && aCriterionType == SMESH::FT_BadOrientedVolume ) + if (aType == SMESH::EDGE && aCriterionType == SMESH::FT_FreeBorders || + aType == SMESH::FACE && aCriterionType == SMESH::FT_FreeEdges || + aType == SMESH::VOLUME && aCriterionType == SMESH::FT_BadOrientedVolume) { - if ( aCompareItem->count() > 0 ) - aCompareItem->setStringList( QStringList() ); - aTable->SetEditable( false, row, 2 ); + if (aCompareItem->count() > 0) + aCompareItem->setStringList(QStringList()); + aTable->SetEditable(false, row, 2); } - else if ( aCriterionType == SMESH::FT_RangeOfIds || - aCriterionType == SMESH::FT_BelongToGeom || - aCriterionType == SMESH::FT_BelongToPlane || - aCriterionType == SMESH::FT_BelongToCylinder || - aCriterionType == SMESH::FT_LyingOnGeom) + else if (aCriterionType == SMESH::FT_RangeOfIds || + aCriterionType == SMESH::FT_BelongToGeom || + aCriterionType == SMESH::FT_BelongToPlane || + aCriterionType == SMESH::FT_BelongToCylinder || + aCriterionType == SMESH::FT_LyingOnGeom) { QMap aMap; - aMap[ FT_EqualTo ] = tr( "EQUAL_TO" ); - aCompareItem->setStringList( aMap ); - if ( !aTable->IsEditable( row, 2 ) ) - aTable->SetEditable( true, row, 2 ); + aMap[ FT_EqualTo ] = tr("EQUAL_TO"); + aCompareItem->setStringList(aMap); + if (!aTable->IsEditable(row, 2)) + aTable->SetEditable(true, row, 2); } else { - if ( aCompareItem->count() != 3 ) + if (aCompareItem->count() != 3) { - aCompareItem->setStringList( QStringList() ); - aCompareItem->setStringList( getCompare() ); + aCompareItem->setStringList(QStringList()); + aCompareItem->setStringList(getCompare()); } - QString aText = aTable->text( row, 2 ); + QString aText = aTable->text(row, 2); bool isOk = false; - aText.toDouble( &isOk ); - aTable->setText( row, 2, isOk ? aText : QString("") ); - if ( !aTable->IsEditable( row, 2 ) ) - aTable->SetEditable( true, row, 2 ); + aText.toDouble(&isOk); + aTable->setText(row, 2, isOk ? aText : QString("")); + if (!aTable->IsEditable(row, 2)) + aTable->SetEditable(true, row, 2); } updateAdditionalWidget(); - - emit CretarionChanged( row, entityType ); + + emit CriterionChanged(row, entityType); } //======================================================================= @@ -1091,9 +1102,9 @@ void SMESHGUI_FilterTable::onCriterionChanged( const int row, const int col, con // Purpose : SLOT. Called then contents of table changed // Provides reaction on change of criterion //======================================================================= -void SMESHGUI_FilterTable::onCriterionChanged( int row, int col ) +void SMESHGUI_FilterTable::onCriterionChanged (int row, int col) { - onCriterionChanged( row, col, -1 ); + onCriterionChanged(row, col, -1); } //======================================================================= @@ -1103,8 +1114,8 @@ void SMESHGUI_FilterTable::onCriterionChanged( int row, int col ) int SMESHGUI_FilterTable::getFirstSelectedRow() const { QTable* aTable = myTables[ GetType() ]; - for ( int i = 0, n = aTable->numRows(); i < n; i++ ) - if ( aTable->isRowSelected( i ) ) + for (int i = 0, n = aTable->numRows(); i < n; i++) + if (aTable->isRowSelected(i)) return i; int aRow = aTable->currentRow(); @@ -1115,60 +1126,62 @@ int SMESHGUI_FilterTable::getFirstSelectedRow() const // name : SMESHGUI_FilterTable::addRow // Purpose : Add row at the end of table //======================================================================= -void SMESHGUI_FilterTable::addRow( Table* theTable, const int theType, const bool toTheEnd ) +void SMESHGUI_FilterTable::addRow (Table* theTable, const int theType, const bool toTheEnd) { int aCurrRow = 0; int aSelectedRow = getFirstSelectedRow(); int aCurrCol = theTable->currentColumn(); - if ( toTheEnd || aSelectedRow == -1 ) + myIsLocked = true; + if (toTheEnd || aSelectedRow == -1) { - theTable->insertRows( theTable->numRows() ); + theTable->insertRows(theTable->numRows()); aCurrRow = theTable->numRows() - 1; } else { - theTable->insertRows( aSelectedRow ); + theTable->insertRows(aSelectedRow); aCurrRow = aSelectedRow; } + myIsLocked = false; // Criteria - theTable->setItem( aCurrRow, 0, getCriterionItem( theTable, theType ) ); + theTable->setItem(aCurrRow, 0, getCriterionItem(theTable, theType)); // Compare - theTable->setItem( aCurrRow, 1, getCompareItem( theTable ) ); + theTable->setItem(aCurrRow, 1, getCompareItem(theTable)); // Threshold - //theTable->setItem( aCurrRow, 2, new QTableItem( theTable ) ); + //theTable->setItem(aCurrRow, 2, new QTableItem(theTable)); //Logical operation NOT - theTable->setItem( aCurrRow, 3, getUnaryItem( theTable ) ); - + theTable->setItem(aCurrRow, 3, getUnaryItem(theTable)); + // Logical binary operation for previous value int anAddBinOpStr = -1; - if ( aCurrRow == theTable->numRows() - 1 ) + if (aCurrRow == theTable->numRows() - 1) anAddBinOpStr = aCurrRow - 1; - else if ( aCurrRow >= 0 ) + else if (aCurrRow >= 0 ) anAddBinOpStr = aCurrRow; - - if ( theTable->item( aCurrRow, 4 ) == 0 || - theTable->item( aCurrRow, 4 )->rtti() != 1 ) + + if (theTable->item(aCurrRow, 4) == 0 || + theTable->item(aCurrRow, 4)->rtti() != 1) { - - if ( anAddBinOpStr >= 0 && - ( theTable->item( anAddBinOpStr, 4 ) == 0 || - theTable->item( anAddBinOpStr, 4 )->rtti() != 1 ) ) - theTable->setItem( anAddBinOpStr, 4, getBinaryItem( theTable ) ); + + if (anAddBinOpStr >= 0 && + (theTable->item(anAddBinOpStr, 4) == 0 || + theTable->item(anAddBinOpStr, 4)->rtti() != 1)) + theTable->setItem(anAddBinOpStr, 4, getBinaryItem(theTable)); } - - theTable->SetEditable( false, theTable->numRows() - 1, 4 ); - if ( aCurrRow >=0 && aCurrRow < theTable->numRows() && - aCurrCol >=0 && aCurrCol < theTable->numRows() ) - theTable->setCurrentCell( aCurrRow, aCurrCol ); + theTable->SetEditable(false, theTable->numRows() - 1, 4); + + if (aCurrRow >=0 && aCurrRow < theTable->numRows() && + aCurrCol >=0 && aCurrCol < theTable->numRows()) + theTable->setCurrentCell(aCurrRow, aCurrCol); - onCriterionChanged( aCurrRow, 0 ); + onCriterionChanged(aCurrRow, 0); updateBtnState(); } @@ -1177,43 +1190,43 @@ void SMESHGUI_FilterTable::addRow( Table* theTable, const int theType, const boo // name : SMESHGUI_FilterTable::getCriterionItem // Purpose : Get combo table item for criteria of specified type //======================================================================= -QTableItem* SMESHGUI_FilterTable::getCriterionItem( QTable* theParent , const int theType ) +QTableItem* SMESHGUI_FilterTable::getCriterionItem (QTable* theParent , const int theType) { - return new ComboItem( theParent, getCriteria( theType ) ); + return new ComboItem(theParent, getCriteria(theType)); } //======================================================================= // name : SMESHGUI_FilterTable::getCompareItem // Purpose : Get combo table item for operation of comparision //======================================================================= -QTableItem* SMESHGUI_FilterTable::getCompareItem( QTable* theParent ) +QTableItem* SMESHGUI_FilterTable::getCompareItem (QTable* theParent) { - return new ComboItem( theParent, getCompare() ); + return new ComboItem(theParent, getCompare()); } //======================================================================= // name : SMESHGUI_FilterTable::getBinaryItem // Purpose : //======================================================================= -QTableItem* SMESHGUI_FilterTable::getBinaryItem( QTable* theParent ) +QTableItem* SMESHGUI_FilterTable::getBinaryItem (QTable* theParent) { static QMap aMap; - if ( aMap.isEmpty() ) + if (aMap.isEmpty()) { - aMap[ SMESH::FT_LogicalAND ] = tr( "AND" ); - aMap[ SMESH::FT_LogicalOR ] = tr( "OR" ); + aMap[ SMESH::FT_LogicalAND ] = tr("AND"); + aMap[ SMESH::FT_LogicalOR ] = tr("OR"); } - return new ComboItem( theParent, aMap ); + return new ComboItem(theParent, aMap); } //======================================================================= // name : SMESHGUI_FilterTable::getUnaryItem // Purpose : Get check table item //======================================================================= -QTableItem* SMESHGUI_FilterTable::getUnaryItem( QTable* theParent ) +QTableItem* SMESHGUI_FilterTable::getUnaryItem (QTable* theParent) { - return new QCheckTableItem( theParent, tr( "NOT" ) ); + return new QCheckTableItem(theParent, tr("NOT")); } //======================================================================= @@ -1223,12 +1236,12 @@ QTableItem* SMESHGUI_FilterTable::getUnaryItem( QTable* theParent ) const QMap& SMESHGUI_FilterTable::getSupportedTypes() const { static QMap aTypes; - if ( aTypes.isEmpty() ) + if (aTypes.isEmpty()) { - aTypes[ SMESH::NODE ] = tr( "NODES" ); - aTypes[ SMESH::EDGE ] = tr( "EDGES" ); - aTypes[ SMESH::FACE ] = tr( "FACES" ); - aTypes[ SMESH::VOLUME ] = tr( "VOLUMES" ); + aTypes[ SMESH::NODE ] = tr("NODES"); + aTypes[ SMESH::EDGE ] = tr("EDGES"); + aTypes[ SMESH::FACE ] = tr("FACES"); + aTypes[ SMESH::VOLUME ] = tr("VOLUMES"); } return aTypes; @@ -1238,69 +1251,70 @@ const QMap& SMESHGUI_FilterTable::getSupportedTypes() const // name : SMESHGUI_FilterTable::getCriteria // Purpose : Get criteria for specified type //======================================================================= -const QMap& SMESHGUI_FilterTable::getCriteria( const int theType ) const +const QMap& SMESHGUI_FilterTable::getCriteria (const int theType) const { - if ( theType == SMESH::NODE ) + if (theType == SMESH::NODE) { static QMap aCriteria; - if ( aCriteria.isEmpty() ) + if (aCriteria.isEmpty()) { - aCriteria[ SMESH::FT_RangeOfIds ] = tr( "RANGE_OF_IDS" ); - aCriteria[ SMESH::FT_BelongToGeom ] = tr( "BELONG_TO_GEOM" ); - aCriteria[ SMESH::FT_BelongToPlane ] = tr( "BELONG_TO_PLANE" ); - aCriteria[ SMESH::FT_BelongToCylinder ] = tr( "BELONG_TO_CYLINDER" ); - aCriteria[ SMESH::FT_LyingOnGeom ] = tr( "LYING_ON_GEOM" ); + aCriteria[ SMESH::FT_RangeOfIds ] = tr("RANGE_OF_IDS"); + aCriteria[ SMESH::FT_BelongToGeom ] = tr("BELONG_TO_GEOM"); + aCriteria[ SMESH::FT_BelongToPlane ] = tr("BELONG_TO_PLANE"); + aCriteria[ SMESH::FT_BelongToCylinder ] = tr("BELONG_TO_CYLINDER"); + aCriteria[ SMESH::FT_LyingOnGeom ] = tr("LYING_ON_GEOM"); } return aCriteria; } - else if ( theType == SMESH::EDGE ) + else if (theType == SMESH::EDGE) { static QMap aCriteria; - if ( aCriteria.isEmpty() ) + if (aCriteria.isEmpty()) { - aCriteria[ SMESH::FT_FreeBorders ] = tr( "FREE_BORDERS" ); - aCriteria[ SMESH::FT_MultiConnection ] = tr( "MULTI_BORDERS" ); - aCriteria[ SMESH::FT_Length ] = tr( "LENGTH" ); - aCriteria[ SMESH::FT_RangeOfIds ] = tr( "RANGE_OF_IDS" ); - aCriteria[ SMESH::FT_BelongToGeom ] = tr( "BELONG_TO_GEOM" ); - aCriteria[ SMESH::FT_BelongToPlane ] = tr( "BELONG_TO_PLANE" ); - aCriteria[ SMESH::FT_BelongToCylinder ] = tr( "BELONG_TO_CYLINDER" ); - aCriteria[ SMESH::FT_LyingOnGeom ] = tr( "LYING_ON_GEOM" ); + aCriteria[ SMESH::FT_FreeBorders ] = tr("FREE_BORDERS"); + aCriteria[ SMESH::FT_MultiConnection ] = tr("MULTI_BORDERS"); + aCriteria[ SMESH::FT_Length ] = tr("LENGTH"); + aCriteria[ SMESH::FT_RangeOfIds ] = tr("RANGE_OF_IDS"); + aCriteria[ SMESH::FT_BelongToGeom ] = tr("BELONG_TO_GEOM"); + aCriteria[ SMESH::FT_BelongToPlane ] = tr("BELONG_TO_PLANE"); + aCriteria[ SMESH::FT_BelongToCylinder ] = tr("BELONG_TO_CYLINDER"); + aCriteria[ SMESH::FT_LyingOnGeom ] = tr("LYING_ON_GEOM"); } return aCriteria; } - else if ( theType == SMESH::FACE ) + else if (theType == SMESH::FACE) { static QMap aCriteria; - if ( aCriteria.isEmpty() ) + if (aCriteria.isEmpty()) { - aCriteria[ SMESH::FT_AspectRatio ] = tr( "ASPECT_RATIO" ); - aCriteria[ SMESH::FT_Warping ] = tr( "WARPING" ); - aCriteria[ SMESH::FT_MinimumAngle ] = tr( "MINIMUM_ANGLE" ); - aCriteria[ SMESH::FT_Taper ] = tr( "TAPER" ); - aCriteria[ SMESH::FT_Skew ] = tr( "SKEW" ); - aCriteria[ SMESH::FT_Area ] = tr( "AREA" ); - aCriteria[ SMESH::FT_FreeEdges ] = tr( "FREE_EDGES" ); - aCriteria[ SMESH::FT_RangeOfIds ] = tr( "RANGE_OF_IDS" ); - aCriteria[ SMESH::FT_BelongToGeom ] = tr( "BELONG_TO_GEOM" ); - aCriteria[ SMESH::FT_BelongToPlane ] = tr( "BELONG_TO_PLANE" ); - aCriteria[ SMESH::FT_BelongToCylinder ] = tr( "BELONG_TO_CYLINDER" ); - aCriteria[ SMESH::FT_LyingOnGeom ] = tr( "LYING_ON_GEOM" ); - aCriteria[ SMESH::FT_Length2D ] = tr( "LENGTH2D" ); - aCriteria[ SMESH::FT_MultiConnection2D] = tr( "MULTI2D_BORDERS" ); + aCriteria[ SMESH::FT_AspectRatio ] = tr("ASPECT_RATIO"); + aCriteria[ SMESH::FT_Warping ] = tr("WARPING"); + aCriteria[ SMESH::FT_MinimumAngle ] = tr("MINIMUM_ANGLE"); + aCriteria[ SMESH::FT_Taper ] = tr("TAPER"); + aCriteria[ SMESH::FT_Skew ] = tr("SKEW"); + aCriteria[ SMESH::FT_Area ] = tr("AREA"); + aCriteria[ SMESH::FT_FreeEdges ] = tr("FREE_EDGES"); + aCriteria[ SMESH::FT_RangeOfIds ] = tr("RANGE_OF_IDS"); + aCriteria[ SMESH::FT_BelongToGeom ] = tr("BELONG_TO_GEOM"); + aCriteria[ SMESH::FT_BelongToPlane ] = tr("BELONG_TO_PLANE"); + aCriteria[ SMESH::FT_BelongToCylinder ] = tr("BELONG_TO_CYLINDER"); + aCriteria[ SMESH::FT_LyingOnGeom ] = tr("LYING_ON_GEOM"); + aCriteria[ SMESH::FT_Length2D ] = tr("LENGTH2D"); + aCriteria[ SMESH::FT_MultiConnection2D] = tr("MULTI2D_BORDERS"); } return aCriteria; } - else if ( theType == SMESH::VOLUME ) + else if (theType == SMESH::VOLUME) { static QMap aCriteria; - if ( aCriteria.isEmpty() ) + if (aCriteria.isEmpty()) { - aCriteria[ SMESH::FT_AspectRatio3D] = tr( "ASPECT_RATIO_3D" ); - aCriteria[ SMESH::FT_RangeOfIds ] = tr( "RANGE_OF_IDS" ); - aCriteria[ SMESH::FT_BelongToGeom ] = tr( "BELONG_TO_GEOM" ); - aCriteria[ SMESH::FT_LyingOnGeom ] = tr( "LYING_ON_GEOM" ); - aCriteria[ SMESH::FT_BadOrientedVolume ] = tr( "BAD_ORIENTED_VOLUME" ); + aCriteria[ SMESH::FT_AspectRatio3D] = tr("ASPECT_RATIO_3D"); + aCriteria[ SMESH::FT_RangeOfIds ] = tr("RANGE_OF_IDS"); + aCriteria[ SMESH::FT_BelongToGeom ] = tr("BELONG_TO_GEOM"); + aCriteria[ SMESH::FT_LyingOnGeom ] = tr("LYING_ON_GEOM"); + aCriteria[ SMESH::FT_BadOrientedVolume ] = tr("BAD_ORIENTED_VOLUME"); + aCriteria[ SMESH::FT_Volume3D ] = tr("VOLUME_3D"); } return aCriteria; } @@ -1320,11 +1334,11 @@ const QMap& SMESHGUI_FilterTable::getCompare() const { static QMap aMap; - if ( aMap.isEmpty() ) + if (aMap.isEmpty()) { - aMap[ SMESH::FT_LessThan ] = tr( "LESS_THAN" ); - aMap[ SMESH::FT_MoreThan ] = tr( "MORE_THAN" ); - aMap[ SMESH::FT_EqualTo ] = tr( "EQUAL_TO" ); + aMap[ SMESH::FT_LessThan ] = tr("LESS_THAN"); + aMap[ SMESH::FT_MoreThan ] = tr("MORE_THAN"); + aMap[ SMESH::FT_EqualTo ] = tr("EQUAL_TO" ); } return aMap; @@ -1334,57 +1348,57 @@ const QMap& SMESHGUI_FilterTable::getCompare() const // name : SMESHGUI_FilterTable::createTable // Purpose : Create table //======================================================================= -SMESHGUI_FilterTable::Table* SMESHGUI_FilterTable::createTable( QWidget* theParent, - const int theType ) +SMESHGUI_FilterTable::Table* SMESHGUI_FilterTable::createTable (QWidget* theParent, + const int theType) { // create table - Table* aTable= new Table( 0, 5, theParent ); + Table* aTable= new Table(0, 5, theParent); QHeader* aHeaders = aTable->horizontalHeader(); - QFontMetrics aMetrics( aHeaders->font() ); + QFontMetrics aMetrics(aHeaders->font()); // append spaces to the header of criteria in order to // provide visibility of criterion inside comboboxes static int aMaxLenCr = 0; - if ( aMaxLenCr == 0 ) + if (aMaxLenCr == 0) { const QMap& aSupportedTypes = getSupportedTypes(); QMap::const_iterator anIter; - for ( anIter = aSupportedTypes.begin(); anIter != aSupportedTypes.end(); ++anIter ) - aMaxLenCr = Max( maxLength( getCriteria( anIter.key() ), aMetrics ), aMaxLenCr ); + for (anIter = aSupportedTypes.begin(); anIter != aSupportedTypes.end(); ++anIter) + aMaxLenCr = Max(maxLength(getCriteria(anIter.key()), aMetrics), aMaxLenCr); } - static int aLenCr = abs( aMaxLenCr - - aMetrics.width( tr( "CRITERION" ) ) ) / aMetrics.width( ' ' ) + 5; + static int aLenCr = abs( aMaxLenCr - + aMetrics.width(tr("CRITERION"))) / aMetrics.width(' ') + 5; QString aCrStr; - aCrStr.fill( ' ', aLenCr ); + aCrStr.fill(' ', aLenCr); QString aCoStr; - aCoStr.fill( ' ', 10 ); + aCoStr.fill(' ', 10); - aHeaders->setLabel( 0, tr( "CRITERION" ) + aCrStr ); - aHeaders->setLabel( 1, tr( "COMPARE" ) + aCoStr ); - aHeaders->setLabel( 2, tr( "THRESHOLD_VALUE" ) ); - aHeaders->setLabel( 3, tr( "UNARY" ) ); - aHeaders->setLabel( 4, tr( "BINARY" ) + " " ); + aHeaders->setLabel(0, tr("CRITERION") + aCrStr); + aHeaders->setLabel(1, tr("COMPARE") + aCoStr); + aHeaders->setLabel(2, tr("THRESHOLD_VALUE")); + aHeaders->setLabel(3, tr("UNARY")); + aHeaders->setLabel(4, tr("BINARY") + " "); // set geometry of the table - for ( int i = 0; i <= 4; i++ ) - aTable->adjustColumn( i ); + for (int i = 0; i <= 4; i++) + aTable->adjustColumn(i); aTable->updateGeometry(); QSize aSize = aTable->sizeHint(); int aWidth = aSize.width(); - aTable->setMinimumSize( QSize( aWidth, aWidth / 2 ) ); - aTable->setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding) ); + aTable->setMinimumSize(QSize(aWidth, aWidth / 2)); + aTable->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); - connect( aTable, SIGNAL( valueChanged( int, int ) ), - this, SLOT( onCriterionChanged( int, int ) ) ); + connect(aTable, SIGNAL(valueChanged(int, int)), + this, SLOT(onCriterionChanged(int, int))); - connect( aTable, SIGNAL( currentChanged( int, int ) ), - this, SLOT( onCurrentChanged( int, int ) ) ); + connect(aTable, SIGNAL(currentChanged(int, int)), + this, SLOT(onCurrentChanged(int, int))); return aTable; } @@ -1395,22 +1409,22 @@ SMESHGUI_FilterTable::Table* SMESHGUI_FilterTable::createTable( QWidget* thePar //======================================================================= void SMESHGUI_FilterTable::updateBtnState() { - myRemoveBtn->setEnabled( myTables[ GetType() ]->numRows() > 0 ); - myClearBtn->setEnabled( myTables[ GetType() ]->numRows() > 0 ); + myRemoveBtn->setEnabled(myTables[ GetType() ]->numRows() > 0); + myClearBtn->setEnabled(myTables[ GetType() ]->numRows() > 0); } //======================================================================= // name : SMESHGUI_FilterTable::SetEditable // Purpose : Set read only flag for tables. Show/hide buttons for work with rows //======================================================================= -void SMESHGUI_FilterTable::SetEditable( const bool isEditable ) +void SMESHGUI_FilterTable::SetEditable (const bool isEditable) { TableMap::iterator anIter; - for ( anIter = myTables.begin(); anIter != myTables.end(); ++anIter ) + for (anIter = myTables.begin(); anIter != myTables.end(); ++anIter) { - anIter.data()->setReadOnly( !isEditable ); + anIter.data()->setReadOnly(!isEditable); - if ( isEditable ) + if (isEditable) { myAddBtn->show(); myInsertBtn->show(); @@ -1427,27 +1441,27 @@ void SMESHGUI_FilterTable::SetEditable( const bool isEditable ) } QMap::iterator anIter2; - for ( anIter2 = myAddWidgets.begin(); anIter2 != myAddWidgets.end(); ++anIter2 ) - anIter2.data()->SetEditable( isEditable ); + for (anIter2 = myAddWidgets.begin(); anIter2 != myAddWidgets.end(); ++anIter2) + anIter2.data()->SetEditable(isEditable); } //======================================================================= // name : SMESHGUI_FilterTable::SetEnabled // Purpose : Enable/Disable table. Switching type of elements already enabled //======================================================================= -void SMESHGUI_FilterTable::SetEnabled( const bool isEnabled ) +void SMESHGUI_FilterTable::SetEnabled (const bool isEnabled) { - myAddBtn->setEnabled( isEnabled ); - myInsertBtn->setEnabled( isEnabled ); - myRemoveBtn->setEnabled( isEnabled ); - myClearBtn->setEnabled( isEnabled ); + myAddBtn->setEnabled(isEnabled); + myInsertBtn->setEnabled(isEnabled); + myRemoveBtn->setEnabled(isEnabled); + myClearBtn->setEnabled(isEnabled); - if ( isEnabled ) + if (isEnabled) updateBtnState(); - + QMap::iterator anIter2; - for ( anIter2 = myAddWidgets.begin(); anIter2 != myAddWidgets.end(); ++anIter2 ) - anIter2.data()->setEnabled( isEnabled ); + for (anIter2 = myAddWidgets.begin(); anIter2 != myAddWidgets.end(); ++anIter2) + anIter2.data()->setEnabled(isEnabled); } //======================================================================= @@ -1463,9 +1477,9 @@ bool SMESHGUI_FilterTable::IsEditable() const // name : SMESHGUI_FilterTable::SetLibsEnabled // Purpose : Show/hide buttons for work with libraries //======================================================================= -void SMESHGUI_FilterTable::SetLibsEnabled( const bool isEnabled ) +void SMESHGUI_FilterTable::SetLibsEnabled (const bool isEnabled) { - if ( isEnabled ) + if (isEnabled) { myCopyFromBtn->show(); myAddToBtn->show(); @@ -1484,15 +1498,15 @@ void SMESHGUI_FilterTable::SetLibsEnabled( const bool isEnabled ) //======================================================================= void SMESHGUI_FilterTable::onCopyFromBtn() { - if ( myLibDlg == 0 ) + if (myLibDlg == 0) myLibDlg = new SMESHGUI_FilterLibraryDlg( - this, GetType(), SMESHGUI_FilterLibraryDlg::COPY_FROM ); + mySMESHGUI, this, GetType(), SMESHGUI_FilterLibraryDlg::COPY_FROM); else - myLibDlg->Init( GetType(), SMESHGUI_FilterLibraryDlg::COPY_FROM ); + myLibDlg->Init(GetType(), SMESHGUI_FilterLibraryDlg::COPY_FROM); - if ( myLibDlg->exec() == QDialog::Accepted ) + if (myLibDlg->exec() == QDialog::Accepted) { - Copy( myLibDlg->GetTable() ); + Copy(myLibDlg->GetTable()); Update(); } } @@ -1504,32 +1518,32 @@ void SMESHGUI_FilterTable::onCopyFromBtn() //======================================================================= void SMESHGUI_FilterTable::onAddToBtn() { - if ( !IsValid( true ) ) + if (!IsValid(true)) return; - if ( myLibDlg == 0 ) + if (myLibDlg == 0) myLibDlg = new SMESHGUI_FilterLibraryDlg( - this, GetType(), SMESHGUI_FilterLibraryDlg::ADD_TO ); + mySMESHGUI, this, GetType(), SMESHGUI_FilterLibraryDlg::ADD_TO); else - myLibDlg->Init( GetType(), SMESHGUI_FilterLibraryDlg::ADD_TO ); + myLibDlg->Init(GetType(), SMESHGUI_FilterLibraryDlg::ADD_TO); + + myLibDlg->SetTable(this); - myLibDlg->SetTable( this ); - myLibDlg->exec(); -} +} //======================================================================= // name : SMESHGUI_FilterTable::Copy // Purpose : Initialise table with values of other table //======================================================================= -void SMESHGUI_FilterTable::Copy( const SMESHGUI_FilterTable* theTable ) +void SMESHGUI_FilterTable::Copy (const SMESHGUI_FilterTable* theTable) { Clear(); - for ( int i = 0, n = theTable->NumRows(); i < n; i++ ) + for (int i = 0, n = theTable->NumRows(); i < n; i++) { SMESH::Filter::Criterion aCriterion = SMESHGUI_FilterDlg::createCriterion(); - theTable->GetCriterion( i, aCriterion ); - AddCriterion( aCriterion ); + theTable->GetCriterion(i, aCriterion); + AddCriterion(aCriterion); } } @@ -1537,7 +1551,7 @@ void SMESHGUI_FilterTable::Copy( const SMESHGUI_FilterTable* theTable ) // name : SMESHGUI_FilterTable::CurrentCell // Purpose : Returns current cell //======================================================================= -bool SMESHGUI_FilterTable::CurrentCell( int& theRow, int& theCol ) const +bool SMESHGUI_FilterTable::CurrentCell (int& theRow, int& theCol) const { theRow = myTables[ GetType() ]->currentRow(); theCol = myTables[ GetType() ]->currentColumn(); @@ -1546,36 +1560,36 @@ bool SMESHGUI_FilterTable::CurrentCell( int& theRow, int& theCol ) const //======================================================================= // name : SMESHGUI_FilterTable::SetText -// Purpose : Set text and internal value in cell of threshold value +// Purpose : Set text and internal value in cell of threshold value //======================================================================= -void SMESHGUI_FilterTable::SetThreshold( const int theRow, +void SMESHGUI_FilterTable::SetThreshold (const int theRow, const QString& theText, - const int theEntityType ) + const int theEntityType) { Table* aTable = myTables[ theEntityType == -1 ? GetType() : theEntityType ]; - aTable->setText( theRow, 2, theText ); + aTable->setText(theRow, 2, theText); } //======================================================================= // name : SMESHGUI_FilterTable::SetText // Purpose : Get text and internal value from cell of threshold value //======================================================================= -bool SMESHGUI_FilterTable::GetThreshold( const int theRow, +bool SMESHGUI_FilterTable::GetThreshold (const int theRow, QString& theText, - const int theEntityType ) + const int theEntityType) { Table* aTable = myTables[ theEntityType == -1 ? GetType() : theEntityType ]; - QTableItem* anItem = aTable->item( theRow, 2 ); - if ( anItem != 0 ) + QTableItem* anItem = aTable->item(theRow, 2); + if (anItem != 0) { theText = anItem->text(); - return true; + return true; } else return false; } -/* +/* Class : SMESHGUI_FilterDlg Description : Dialog to specify filters for VTK viewer */ @@ -1585,82 +1599,91 @@ bool SMESHGUI_FilterTable::GetThreshold( const int theRow, // name : SMESHGUI_FilterDlg::SMESHGUI_FilterDlg // Purpose : Constructor //======================================================================= -SMESHGUI_FilterDlg::SMESHGUI_FilterDlg( QWidget* theParent, +SMESHGUI_FilterDlg::SMESHGUI_FilterDlg( SMESHGUI* theModule, const QValueList& theTypes, - const char* theName ) -: QDialog( theParent, theName, false, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ) + const char* theName) +: QDialog( SMESH::GetDesktop( theModule ), theName, false, + WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu), + mySMESHGUI( theModule ), + mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) { - construct( theTypes ); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + mySelector = aViewWindow->GetSelector(); + + construct(theTypes); } //======================================================================= // name : SMESHGUI_FilterDlg::SMESHGUI_FilterDlg // Purpose : Constructor //======================================================================= -SMESHGUI_FilterDlg::SMESHGUI_FilterDlg( QWidget* theParent, +SMESHGUI_FilterDlg::SMESHGUI_FilterDlg( SMESHGUI* theModule, const int theType, - const char* theName ) -: QDialog( theParent, theName, false, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ) -{ + const char* theName) +: QDialog( SMESH::GetDesktop( theModule ), theName, false, + WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu), + mySMESHGUI( theModule ), + mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) +{ + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + mySelector = aViewWindow->GetSelector(); QValueList aTypes; - aTypes.append( theType ); - construct( aTypes ); + aTypes.append(theType); + construct(aTypes); } //======================================================================= // name : SMESHGUI_FilterDlg::construct -// Purpose : Construct dialog ( called by constructor ) +// Purpose : Construct dialog (called by constructor) //======================================================================= -void SMESHGUI_FilterDlg::construct( const QValueList& theTypes ) +void SMESHGUI_FilterDlg::construct (const QValueList& theTypes) { myTypes = theTypes; - setCaption( tr( "CAPTION" ) ); + setCaption(tr("CAPTION")); - QVBoxLayout* aDlgLay = new QVBoxLayout( this, MARGIN, SPACING ); + QVBoxLayout* aDlgLay = new QVBoxLayout (this, MARGIN, SPACING); - myMainFrame = createMainFrame ( this ); - QFrame* aBtnFrame = createButtonFrame( this ); + myMainFrame = createMainFrame (this); + QFrame* aBtnFrame = createButtonFrame(this); - aDlgLay->addWidget( myMainFrame ); - aDlgLay->addWidget( aBtnFrame ); + aDlgLay->addWidget(myMainFrame); + aDlgLay->addWidget(aBtnFrame); - aDlgLay->setStretchFactor( myMainFrame, 1 ); + aDlgLay->setStretchFactor(myMainFrame, 1); - Init( myTypes ); + Init(myTypes); } //======================================================================= // name : SMESHGUI_FilterDlg::createMainFrame // Purpose : Create frame containing dialog's input fields //======================================================================= -QFrame* SMESHGUI_FilterDlg::createMainFrame( QWidget* theParent ) +QFrame* SMESHGUI_FilterDlg::createMainFrame (QWidget* theParent) { - QGroupBox* aMainFrame = new QGroupBox( 1, Qt::Horizontal, theParent ); - aMainFrame->setFrameStyle( QFrame::NoFrame ); - aMainFrame->setInsideMargin( 0 ); + QGroupBox* aMainFrame = new QGroupBox(1, Qt::Horizontal, theParent); + aMainFrame->setFrameStyle(QFrame::NoFrame); + aMainFrame->setInsideMargin(0); // filter frame - myTable = new SMESHGUI_FilterTable( aMainFrame, myTypes ); - myTable->SetLibsEnabled( true ); + myTable = new SMESHGUI_FilterTable( mySMESHGUI, aMainFrame, myTypes ); + myTable->SetLibsEnabled(true); - QFrame* aLine = new QFrame( myTable->GetTableGrp() ); - aLine->setFrameStyle( QFrame::HLine | QFrame::Sunken ); + QFrame* aLine = new QFrame(myTable->GetTableGrp()); + aLine->setFrameStyle(QFrame::HLine | QFrame::Sunken); - mySetInViewer = new QCheckBox( tr( "SET_IN_VIEWER" ), myTable->GetTableGrp() ); - mySetInViewer->setChecked( true ); + mySetInViewer = new QCheckBox(tr("SET_IN_VIEWER"), myTable->GetTableGrp()); + mySetInViewer->setChecked(true); // other controls - mySourceGrp = createSourceGroup( aMainFrame ); + mySourceGrp = createSourceGroup(aMainFrame); - connect( myTable, SIGNAL( CretarionChanged( const int, const int ) ), - SLOT( onCriterionChanged( const int, const int ) ) ); + connect(myTable, SIGNAL(CriterionChanged(const int, const int)), + SLOT(onCriterionChanged(const int, const int))); - connect( myTable, SIGNAL( CurrentChanged( int, int ) ), - SLOT( onCurrentChanged( int, int ) ) ); + connect(myTable, SIGNAL(CurrentChanged(int, int)), + SLOT(onCurrentChanged(int, int))); return aMainFrame; } @@ -1669,30 +1692,30 @@ QFrame* SMESHGUI_FilterDlg::createMainFrame( QWidget* theParent ) // name : SMESHGUI_FilterDlg::createSourceFrame // Purpose : Create frame containing source radio button //======================================================================= -QButtonGroup* SMESHGUI_FilterDlg::createSourceGroup( QWidget* theParent ) +QButtonGroup* SMESHGUI_FilterDlg::createSourceGroup (QWidget* theParent) { - QButtonGroup* aGrp = new QButtonGroup( 1, Qt::Vertical, tr( "SOURCE" ), theParent ); + QButtonGroup* aGrp = new QButtonGroup(1, Qt::Vertical, tr("SOURCE"), theParent); - QRadioButton* aMeshBtn = new QRadioButton( tr( "MESH" ), aGrp ); - QRadioButton* aSelBtn = new QRadioButton( tr( "SELECTION" ), aGrp ); - QRadioButton* aGrpBtn = new QRadioButton( tr( "CURRENT_GROUP" ), aGrp ); + QRadioButton* aMeshBtn = new QRadioButton(tr("MESH"), aGrp); + QRadioButton* aSelBtn = new QRadioButton(tr("SELECTION"), aGrp); + QRadioButton* aGrpBtn = new QRadioButton(tr("CURRENT_GROUP"), aGrp); - aGrp->insert( aMeshBtn, Mesh ); - aGrp->insert( aSelBtn, Selection ); - aGrp->insert( aGrpBtn, Dialog ); + aGrp->insert(aMeshBtn, Mesh); + aGrp->insert(aSelBtn, Selection); + aGrp->insert(aGrpBtn, Dialog); - aGrp->setButton( Selection ); + aGrp->setButton(Selection); return aGrp; } //======================================================================= // name : SMESHGUI_FilterDlg::updateMainButtons -// Purpose : Update visibility of main buttons ( OK, Cancel, Close ... ) +// Purpose : Update visibility of main buttons (OK, Cancel, Close ...) //======================================================================= void SMESHGUI_FilterDlg::updateMainButtons() { - if ( myTypes.count() == 1 ) + if (myTypes.count() == 1) { myButtons[ BTN_Cancel ]->show(); myButtons[ BTN_Apply ]->hide(); @@ -1712,23 +1735,23 @@ void SMESHGUI_FilterDlg::updateMainButtons() // name : SMESHGUI_FilterDlg::createButtonFrame // Purpose : Create frame containing buttons //======================================================================= -QFrame* SMESHGUI_FilterDlg::createButtonFrame( QWidget* theParent ) +QFrame* SMESHGUI_FilterDlg::createButtonFrame (QWidget* theParent) { - QGroupBox* aGrp = new QGroupBox( 1, Qt::Vertical, theParent ); + QGroupBox* aGrp = new QGroupBox(1, Qt::Vertical, theParent); - myButtons[ BTN_OK ] = new QPushButton( tr( "SMESH_BUT_OK" ), aGrp ); - myButtons[ BTN_Apply ] = new QPushButton( tr( "SMESH_BUT_APPLY" ), aGrp ); + myButtons[ BTN_OK ] = new QPushButton(tr("SMESH_BUT_OK" ), aGrp); + myButtons[ BTN_Apply ] = new QPushButton(tr("SMESH_BUT_APPLY"), aGrp); - QLabel* aLbl = new QLabel( aGrp ); - aLbl->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + QLabel* aLbl = new QLabel(aGrp); + aLbl->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - myButtons[ BTN_Cancel ] = new QPushButton( tr( "SMESH_BUT_CANCEL" ), aGrp ); - myButtons[ BTN_Close ] = new QPushButton( tr( "SMESH_BUT_CLOSE" ), aGrp ); + myButtons[ BTN_Cancel ] = new QPushButton(tr("SMESH_BUT_CANCEL"), aGrp); + myButtons[ BTN_Close ] = new QPushButton(tr("SMESH_BUT_CLOSE"), aGrp); - 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_Apply ], SIGNAL( clicked() ), SLOT( onApply() ) ); + 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_Apply ], SIGNAL(clicked()), SLOT(onApply())); updateMainButtons(); @@ -1747,82 +1770,80 @@ SMESHGUI_FilterDlg::~SMESHGUI_FilterDlg() // name : SMESHGUI_FilterDlg::Init // Purpose : Init dialog fields, connect signals and slots, show dialog //======================================================================= -void SMESHGUI_FilterDlg::Init( const int type ) +void SMESHGUI_FilterDlg::Init (const int type) { QValueList aTypes; - aTypes.append( type ); - Init( aTypes ); + aTypes.append(type); + Init(aTypes); } //======================================================================= // name : SMESHGUI_FilterDlg::Init // Purpose : Init dialog fields, connect signals and slots, show dialog //======================================================================= -void SMESHGUI_FilterDlg::Init( const QValueList& theTypes ) +void SMESHGUI_FilterDlg::Init (const QValueList& theTypes) { mySourceWg = 0; - mySelection = 0; myTypes = theTypes; myMesh = SMESH::SMESH_Mesh::_nil(); myIObjects.Clear(); myIsSelectionChanged = false; - myTable->Init( theTypes ); + myTable->Init(theTypes); // set caption - if ( theTypes.count() == 1 ) + if (theTypes.count() == 1) { int aType = theTypes.first(); - if ( aType == SMESH::NODE ) setCaption( tr( "NODES_TLT" ) ); - else if ( aType == SMESH::EDGE ) setCaption( tr( "EDGES_TLT" ) ); - else if ( aType == SMESH::FACE ) setCaption( tr( "FACES_TLT" ) ); - else if ( aType == SMESH::VOLUME ) setCaption( tr( "VOLUMES_TLT" ) ); + if (aType == SMESH::NODE ) setCaption(tr("NODES_TLT")); + else if (aType == SMESH::EDGE ) setCaption(tr("EDGES_TLT")); + else if (aType == SMESH::FACE ) setCaption(tr("FACES_TLT")); + else if (aType == SMESH::VOLUME) setCaption(tr("VOLUMES_TLT")); } else - setCaption( tr( "TLT" ) ); + setCaption(tr("TLT")); qApp->processEvents(); updateGeometry(); adjustSize(); - setEnabled( true ); + setEnabled(true); - mySMESHGUI = SMESHGUI::GetSMESHGUI() ; - mySMESHGUI->SetActiveDialogBox( ( QDialog* )this ) ; + mySMESHGUI->SetActiveDialogBox((QDialog*)this); - connect( mySMESHGUI, SIGNAL( SignalDeactivateActiveDialog() ), SLOT( onDeactivate() ) ); - connect( mySMESHGUI, SIGNAL( SignalCloseAllDialogs() ), SLOT( onClose() ) ); + connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate())); + connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(onClose())); - int x, y ; - mySMESHGUI->DefineDlgPosition( this, x, y ); - this->move( x, y ); + int x, y; + mySMESHGUI->DefineDlgPosition(this, x, y); + this->move(x, y); updateMainButtons(); updateSelection(); // Initialise filter table with values of previous filter QValueList::const_iterator anIter; - for ( anIter = theTypes.begin(); anIter != theTypes.end(); ++anIter ) + for (anIter = theTypes.begin(); anIter != theTypes.end(); ++anIter) { - myTable->Clear( *anIter ); - if ( !myFilter[ *anIter ]->_is_nil() ) + myTable->Clear(*anIter); + if (!myFilter[ *anIter ]->_is_nil()) { SMESH::Filter::Criteria_var aCriteria = new SMESH::Filter::Criteria; - if ( myFilter[ *anIter ]->GetCriteria( aCriteria ) ) + if (myFilter[ *anIter ]->GetCriteria(aCriteria)) { - for ( int i = 0, n = aCriteria->length(); i < n; i++ ) - myTable->AddCriterion( aCriteria[ i ], *anIter ); + for (int i = 0, n = aCriteria->length(); i < n; i++) + myTable->AddCriterion(aCriteria[ i ], *anIter); } } } - if ( myInsertState.contains( theTypes.first() ) ) - mySetInViewer->setChecked( myInsertState[ theTypes.first() ] ); + if (myInsertState.contains(theTypes.first())) + mySetInViewer->setChecked(myInsertState[ theTypes.first() ]); else - mySetInViewer->setChecked( true ); - if ( myApplyToState.contains( theTypes.first() ) ) - mySourceGrp->setButton( myApplyToState[ theTypes.first() ] ); + mySetInViewer->setChecked(true); + if (myApplyToState.contains(theTypes.first())) + mySourceGrp->setButton(myApplyToState[ theTypes.first() ]); else - mySourceGrp->setButton( Selection ); + mySourceGrp->setButton(Selection); } //======================================================================= @@ -1832,12 +1853,12 @@ void SMESHGUI_FilterDlg::Init( const QValueList& theTypes ) //======================================================================= void SMESHGUI_FilterDlg::onOk() { - if ( onApply() ) + if (onApply()) { - mySelection->ClearFilters(); - disconnect( mySMESHGUI, 0, this, 0 ); - disconnect( mySelection, 0, this, 0 ); - mySMESHGUI->ResetState() ; + mySelectionMgr->clearFilters(); + disconnect(mySMESHGUI, 0, this, 0); + disconnect(mySelectionMgr, 0, this, 0); + mySMESHGUI->ResetState(); accept(); emit Accepted(); } @@ -1850,29 +1871,33 @@ void SMESHGUI_FilterDlg::onOk() void SMESHGUI_FilterDlg::onClose() { // Restore previously selected object - if ( mySelection ) + if (mySelectionMgr) { - mySelection->ClearFilters(); - mySelection->Clear(); - SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger anIter( myIObjects ); - for ( ; anIter.More(); anIter.Next() ) + SALOME_ListIO aList; + mySelectionMgr->clearFilters(); + mySelectionMgr->clearSelected(); + SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger anIter (myIObjects); + for (; anIter.More(); anIter.Next()) { - mySelection->AddIObject( anIter.Key() ); + aList.Append(anIter.Key()); TColStd_MapOfInteger aResMap; const TColStd_IndexedMapOfInteger& anIndMap = anIter.Value(); - for ( int i = 1, n = anIndMap.Extent(); i <= n; i++ ) - aResMap.Add( anIndMap( i ) ); - - mySelection->AddOrRemoveIndex( anIter.Key(), aResMap, false ); + for (int i = 1, n = anIndMap.Extent(); i <= n; i++) + aResMap.Add(anIndMap(i)); + + mySelector->AddOrRemoveIndex( anIter.Key(), aResMap, false); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->highlight( anIter.Key(), true, true ); } + mySelectionMgr->setSelectedObjects(aList, false); } - disconnect( mySMESHGUI, 0, this, 0 ); - disconnect( mySelection, 0, this, 0 ); - mySMESHGUI->ResetState() ; - reject() ; - return ; + disconnect(mySMESHGUI, 0, this, 0); + disconnect(mySelectionMgr, 0, this, 0); + mySMESHGUI->ResetState(); + reject(); + return; } //======================================================================= @@ -1881,67 +1906,66 @@ void SMESHGUI_FilterDlg::onClose() //======================================================================= void SMESHGUI_FilterDlg::onDeactivate() { - setEnabled( false ); + setEnabled(false); } //======================================================================= // name : SMESHGUI_FilterDlg::enterEvent // Purpose : Event filter //======================================================================= -void SMESHGUI_FilterDlg::enterEvent( QEvent* ) +void SMESHGUI_FilterDlg::enterEvent (QEvent*) { // mySMESHGUI->EmitSignalDeactivateDialog(); - mySMESHGUI->SetActiveDialogBox( (QDialog*)this ); + mySMESHGUI->SetActiveDialogBox((QDialog*)this); mySMESHGUI->ResetState(); - setEnabled( true ); + setEnabled(true); } - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void SMESHGUI_FilterDlg::closeEvent( QCloseEvent* e ) +//======================================================================= +// name : closeEvent() +// Purpose : +//======================================================================= +void SMESHGUI_FilterDlg::closeEvent (QCloseEvent*) { - onClose() ; + onClose(); } //======================================================================= // name : SMESHGUI_FilterDlg::getIdsFromWg // Purpose : Retrieve list of ids from given widget //======================================================================= -void SMESHGUI_FilterDlg::getIdsFromWg( const QWidget* theWg, QValueList& theRes ) const +void SMESHGUI_FilterDlg::getIdsFromWg (const QWidget* theWg, QValueList& theRes) const { theRes.clear(); - if ( theWg == 0 ) + if (theWg == 0) return; - if ( theWg->inherits( "QListBox" ) ) + if (theWg->inherits("QListBox")) { - QListBox* aListBox = ( QListBox* )theWg; + QListBox* aListBox = (QListBox*)theWg; bool b; - for ( int i = 0, n = aListBox->count(); i < n; i++ ) + for (int i = 0, n = aListBox->count(); i < n; i++) { - int anId = aListBox->text( i ).toInt( &b ); - if ( b ) - theRes.append( anId ); + int anId = aListBox->text(i).toInt(&b); + if (b) + theRes.append(anId); } } - else if ( theWg->inherits( "QLineEdit" ) ) + else if (theWg->inherits("QLineEdit")) { - QLineEdit* aLineEdit = ( QLineEdit* )theWg; + QLineEdit* aLineEdit = (QLineEdit*)theWg; QString aStr = aLineEdit->text(); - QRegExp aRegExp( "(\\d+)" ); + QRegExp aRegExp("(\\d+)"); bool b; int aPos = 0; - while ( aPos >= 0 ) + while (aPos >= 0) { - aPos = aRegExp.search( aStr, aPos ); - if ( aPos > -1 ) + aPos = aRegExp.search(aStr, aPos); + if (aPos > -1) { - int anId = aRegExp.cap( 1 ).toInt( &b ); - if ( b ) - theRes.append( anId ); + int anId = aRegExp.cap(1).toInt(&b); + if (b) + theRes.append(anId); aPos += aRegExp.matchedLength(); } } @@ -1952,9 +1976,9 @@ void SMESHGUI_FilterDlg::getIdsFromWg( const QWidget* theWg, QValueList& th // name : SMESHGUI_FilterDlg::getSelMode // Purpose : Get selection mode of specified type //======================================================================= -Selection_Mode SMESHGUI_FilterDlg::getSelMode( const int theType ) const +Selection_Mode SMESHGUI_FilterDlg::getSelMode (const int theType) const { - switch ( theType ) + switch (theType) { case SMESH::NODE : return NodeSelection; case SMESH::EDGE : return EdgeSelection; @@ -1969,36 +1993,36 @@ Selection_Mode SMESHGUI_FilterDlg::getSelMode( const int theType ) const // name : SMESHGUI_FilterDlg::setIdsToWg // Purpose : Insert identifiers in specified widgets //======================================================================= -void SMESHGUI_FilterDlg::setIdsToWg( QWidget* theWg, const QValueList& theIds ) +void SMESHGUI_FilterDlg::setIdsToWg (QWidget* theWg, const QValueList& theIds) { - if ( theWg == 0 ) + if (theWg == 0) return; - if ( theWg->inherits( "QListBox" ) ) + if (theWg->inherits("QListBox")) { - QListBox* aListBox = ( QListBox* )theWg; + QListBox* aListBox = (QListBox*)theWg; aListBox->clear(); QStringList aStrList; QValueList::const_iterator anIter; - for ( anIter = theIds.begin(); anIter != theIds.end(); ++anIter ) - aStrList.append( QString( "%1" ).arg( *anIter ) ); + for (anIter = theIds.begin(); anIter != theIds.end(); ++anIter) + aStrList.append(QString("%1").arg(*anIter)); - aListBox->insertStringList( aStrList ); + aListBox->insertStringList(aStrList); } - else if ( theWg->inherits( "QLineEdit" ) ) + else if (theWg->inherits("QLineEdit")) { - QLineEdit* aLineEdit = ( QLineEdit* )theWg; + QLineEdit* aLineEdit = (QLineEdit*)theWg; QString aStr; QValueList::const_iterator anIter; - for ( anIter = theIds.begin(); anIter != theIds.end(); ++ anIter ) - aStr += QString( "%1 " ).arg( *anIter ); + for (anIter = theIds.begin(); anIter != theIds.end(); ++ anIter) + aStr += QString("%1 ").arg(*anIter); - if ( !aStr.isEmpty() ) - aStr.remove( aStr.length() - 1, 1 ); + if (!aStr.isEmpty()) + aStr.remove(aStr.length() - 1, 1); - aLineEdit->setText( aStr ); + aLineEdit->setText(aStr); } } @@ -2008,64 +2032,57 @@ void SMESHGUI_FilterDlg::setIdsToWg( QWidget* theWg, const QValueList& theI //======================================================================= bool SMESHGUI_FilterDlg::isValid() const { - if ( !myTable->IsValid() ) + if (!myTable->IsValid()) return false; - - for ( int i = 0, n = myTable->NumRows(); i < n; i++ ) + + for (int i = 0, n = myTable->NumRows(); i < n; i++) { - int aType = myTable->GetCriterionType( i ); - if ( aType == FT_BelongToGeom || - aType == FT_BelongToPlane || - aType == FT_BelongToCylinder || - aType == FT_LyingOnGeom) - { + int aType = myTable->GetCriterionType(i); + if (aType == FT_BelongToGeom || + aType == FT_BelongToPlane || + aType == FT_BelongToCylinder || + aType == FT_LyingOnGeom) { QString aName; - myTable->GetThreshold( i, aName ); - - SALOMEDS::Study::ListOfSObject_var aList = SMESHGUI::GetSMESHGUI()->GetActiveStudy()-> - getStudyDocument()->FindObjectByName( aName.latin1(), "GEOM" ); - if ( aList->length() == 0 ) - { - QMessageBox::information( SMESHGUI::GetSMESHGUI()->GetDesktop(), - tr( "SMESH_INSUFFICIENT_DATA" ), tr( "BAD_SHAPE_NAME" ).arg( aName ), QMessageBox::Ok ); + myTable->GetThreshold(i, aName); + + std::vector<_PTR(SObject)> aList = + SMESH::GetActiveStudyDocument()->FindObjectByName(aName.latin1(), "GEOM"); + if (aList.size() == 0) { + QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), + tr("BAD_SHAPE_NAME").arg(aName), QMessageBox::Ok); return false; } - if ( aType == FT_BelongToCylinder || aType == FT_BelongToPlane ) - { - GEOM::GEOM_Object_var aGeomObj = - GEOM::GEOM_Object::_narrow( aList[ 0 ]->GetObject() ); - if ( !aGeomObj->_is_nil() ) - { + if (aType == FT_BelongToCylinder || aType == FT_BelongToPlane) { + CORBA::Object_var anObject = SMESH::SObjectToObject(aList[ 0 ]); + //GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(aList[ 0 ]->GetObject()); + GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(anObject); + if (!aGeomObj->_is_nil()) { TopoDS_Shape aFace; - if ( !GEOMBase::GetShape( aGeomObj, aFace ) || + if (!GEOMBase::GetShape(aGeomObj, aFace) || aFace.IsNull() || - aFace.ShapeType() != TopAbs_FACE ) - { - QMessageBox::information( SMESHGUI::GetSMESHGUI()->GetDesktop(), - tr( "SMESH_INSUFFICIENT_DATA" ), tr( "SHAPE_IS_NOT_A_FACE" ).arg( aName ), QMessageBox::Ok ); + aFace.ShapeType() != TopAbs_FACE) { + QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), + tr("SHAPE_IS_NOT_A_FACE").arg(aName), QMessageBox::Ok); return false; } - Handle(Geom_Surface) aSurf = BRep_Tool::Surface( TopoDS::Face( aFace ) ); - if ( aSurf.IsNull() ) - { - QMessageBox::information( SMESHGUI::GetSMESHGUI()->GetDesktop(), - tr( "SMESH_INSUFFICIENT_DATA" ), tr( "SHAPE_IS_NOT_A_FACE" ).arg( aName ), QMessageBox::Ok ); + Handle(Geom_Surface) aSurf = BRep_Tool::Surface(TopoDS::Face(aFace)); + if (aSurf.IsNull()) { + QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), + tr("SHAPE_IS_NOT_A_FACE").arg(aName), QMessageBox::Ok); return false; } - if ( aType == FT_BelongToPlane && !aSurf->IsKind( STANDARD_TYPE( Geom_Plane ) ) ) - { - QMessageBox::information( SMESHGUI::GetSMESHGUI()->GetDesktop(), - tr( "SMESH_INSUFFICIENT_DATA" ), tr( "SHAPE_IS_NOT_A_PLANE" ).arg( aName ), QMessageBox::Ok ); + if (aType == FT_BelongToPlane && !aSurf->IsKind(STANDARD_TYPE(Geom_Plane))) { + QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), + tr("SHAPE_IS_NOT_A_PLANE").arg(aName), QMessageBox::Ok); return false; } - if ( aType == FT_BelongToCylinder && !aSurf->IsKind( STANDARD_TYPE( Geom_CylindricalSurface ) ) ) - { - QMessageBox::information( SMESHGUI::GetSMESHGUI()->GetDesktop(), - tr( "SMESH_INSUFFICIENT_DATA" ), tr( "SHAPE_IS_NOT_A_CYLINDER" ).arg( aName ), QMessageBox::Ok ); + if (aType == FT_BelongToCylinder && !aSurf->IsKind(STANDARD_TYPE(Geom_CylindricalSurface))) { + QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"), + tr("SHAPE_IS_NOT_A_CYLINDER").arg(aName), QMessageBox::Ok); return false; } } @@ -2081,7 +2098,7 @@ bool SMESHGUI_FilterDlg::isValid() const // Purpose : Set widget of parent dialog containing idsto be filtered if // user select corresponding source radio button //======================================================================= -void SMESHGUI_FilterDlg::SetSourceWg( QWidget* theWg ) +void SMESHGUI_FilterDlg::SetSourceWg (QWidget* theWg) { mySourceWg = theWg; } @@ -2090,7 +2107,7 @@ void SMESHGUI_FilterDlg::SetSourceWg( QWidget* theWg ) // name : SMESHGUI_FilterDlg::SetGroupIds // Purpose : Set mesh //======================================================================= -void SMESHGUI_FilterDlg::SetMesh( SMESH::SMESH_Mesh_ptr theMesh ) +void SMESHGUI_FilterDlg::SetMesh (SMESH::SMESH_Mesh_ptr theMesh) { myMesh = theMesh; } @@ -2099,26 +2116,22 @@ void SMESHGUI_FilterDlg::SetMesh( SMESH::SMESH_Mesh_ptr theMesh ) // name : SMESHGUI_FilterDlg::SetSelection // Purpose : Get filtered ids //======================================================================= -void SMESHGUI_FilterDlg::SetSelection( SALOME_Selection* theSel ) +void SMESHGUI_FilterDlg::SetSelection() { - if ( mySelection ) - disconnect( mySelection, SIGNAL( currentSelectionChanged() ), this, SLOT( onSelectionDone() ) ); - - mySelection = theSel; + if (mySelectionMgr) + disconnect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(onSelectionDone())); - if ( mySelection ) - { + if (mySelectionMgr) { myIObjects.Clear(); - const SALOME_ListIO& anObjs = mySelection->StoredIObjects(); - SALOME_ListIteratorOfListIO anIter( anObjs ); - for ( ;anIter.More(); anIter.Next() ) - { + const SALOME_ListIO& anObjs = mySelector->StoredIObjects(); + SALOME_ListIteratorOfListIO anIter (anObjs); + for (; anIter.More(); anIter.Next()) { TColStd_IndexedMapOfInteger aMap; - mySelection->GetIndex( anIter.Value(), aMap ); - myIObjects.Bind( anIter.Value(), aMap ); + mySelector->GetIndex(anIter.Value(), aMap); + myIObjects.Bind(anIter.Value(), aMap); } - - connect( mySelection, SIGNAL( currentSelectionChanged() ), SLOT( onSelectionDone() ) ); + + connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone())); updateSelection(); } @@ -2133,34 +2146,31 @@ void SMESHGUI_FilterDlg::SetSelection( SALOME_Selection* theSel ) //======================================================================= bool SMESHGUI_FilterDlg::onApply() { - if ( !isValid() ) + if (!isValid()) return false; - try - { + try { int aCurrType = myTable->GetType(); - if ( !createFilter( aCurrType ) ) + if (!createFilter(aCurrType)) return false; insertFilterInViewer(); - if ( !myFilter[ aCurrType ]->GetPredicate()->_is_nil() ) - { + if (!myFilter[ aCurrType ]->GetPredicate()->_is_nil()) { QValueList aResultIds; - filterSource( aCurrType, aResultIds ); - selectInViewer( aCurrType, aResultIds ); + filterSource(aCurrType, aResultIds); + selectInViewer(aCurrType, aResultIds); } myInsertState[ aCurrType ] = mySetInViewer->isChecked(); - myApplyToState[ aCurrType ] = mySourceGrp->id( mySourceGrp->selected() ); - + myApplyToState[ aCurrType ] = mySourceGrp->id(mySourceGrp->selected()); } - catch( const SALOME::SALOME_Exception& S_ex ) + catch(const SALOME::SALOME_Exception& S_ex) { - QtCatchCorbaException( S_ex ); + SalomeApp_Tools::QtCatchCorbaException(S_ex); } - catch( ... ) + catch(...) { } @@ -2171,37 +2181,32 @@ bool SMESHGUI_FilterDlg::onApply() // name : SMESHGUI_FilterDlg::createFilter // Purpose : Create predicate for given type //======================================================================= -bool SMESHGUI_FilterDlg::createFilter( const int theType ) +bool SMESHGUI_FilterDlg::createFilter (const int theType) { SMESH::FilterManager_var aFilterMgr = SMESH::GetFilterManager(); - if ( aFilterMgr->_is_nil() ) + if (aFilterMgr->_is_nil()) return false; int n = myTable->NumRows(); SMESH::Filter::Criteria_var aCriteria = new SMESH::Filter::Criteria; - aCriteria->length( n ); + aCriteria->length(n); long aPrecision = -1; - if ( QAD_CONFIG->hasSetting( "SMESH:ControlsPrecision" ) ) - { - QString aStr = QAD_CONFIG->getSetting( "SMESH:ControlsPrecision" ); - bool isOk = false; - int aVal = aStr.toInt( &isOk ); - if ( isOk ) - aPrecision = aVal; - } - - for ( CORBA::ULong i = 0; i < n; i++ ) - { + SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI ); + + if ( mgr && mgr->booleanValue( "SMESH", "use_precision", false ) ) + aPrecision = mgr->integerValue( "SMESH", "controls_precision", aPrecision ); + + for (CORBA::ULong i = 0; i < n; i++) { SMESH::Filter::Criterion aCriterion = createCriterion(); - myTable->GetCriterion( i, aCriterion ); + myTable->GetCriterion(i, aCriterion); aCriterion.Precision = aPrecision; aCriteria[ i ] = aCriterion; } myFilter[ theType ] = aFilterMgr->CreateFilter(); - myFilter[ theType ]->SetCriteria( aCriteria.inout() ); + myFilter[ theType ]->SetCriteria(aCriteria.inout()); return true; } @@ -2212,19 +2217,17 @@ bool SMESHGUI_FilterDlg::createFilter( const int theType ) //======================================================================= void SMESHGUI_FilterDlg::insertFilterInViewer() { - if ( VTKViewer_InteractorStyleSALOME* aStyle = SMESH::GetInteractorStyle() ) - { + if (SVTK_InteractorStyle* aStyle = SMESH::GetInteractorStyle()) { SMESH::ElementType anEntType = (SMESH::ElementType)myTable->GetType(); - if ( myFilter[ myTable->GetType() ]->_is_nil() || + if (myFilter[ myTable->GetType() ]->_is_nil() || myFilter[ myTable->GetType() ]->GetPredicate()->_is_nil() || - !mySetInViewer->isChecked() ) - SMESH::RemoveFilter( getFilterId( anEntType ), aStyle ); - else - { + !mySetInViewer->isChecked()) { + SMESH::RemoveFilter(getFilterId(anEntType), aStyle); + } else { Handle(SMESHGUI_PredicateFilter) aFilter = new SMESHGUI_PredicateFilter(); - aFilter->SetPredicate( myFilter[ myTable->GetType() ]->GetPredicate() ); - SMESH::SetFilter( aFilter, aStyle ); + aFilter->SetPredicate(myFilter[ myTable->GetType() ]->GetPredicate()); + SMESH::SetFilter(aFilter, aStyle); } } } @@ -2233,34 +2236,34 @@ void SMESHGUI_FilterDlg::insertFilterInViewer() // name : SMESHGUI_FilterDlg::filterSource // Purpose : Filter source ids //======================================================================= -void SMESHGUI_FilterDlg::filterSource( const int theType, - QValueList& theResIds ) +void SMESHGUI_FilterDlg::filterSource (const int theType, + QValueList& theResIds) { theResIds.clear(); - if ( myFilter[ theType ]->_is_nil() ) + if (myFilter[ theType ]->_is_nil()) return; - int aSourceId = mySourceGrp->id( mySourceGrp->selected() ); + int aSourceId = mySourceGrp->id(mySourceGrp->selected()); - if ( aSourceId == Mesh ) + if (aSourceId == Mesh) { - if ( myMesh->_is_nil() ) + if (myMesh->_is_nil()) return; - SMESH::long_array_var anIds = myFilter[ theType ]->GetElementsId( myMesh ); - for ( int i = 0, n = anIds->length(); i < n; i++ ) - theResIds.append( anIds[ i ] ); + SMESH::long_array_var anIds = myFilter[ theType ]->GetElementsId(myMesh); + for (int i = 0, n = anIds->length(); i < n; i++) + theResIds.append(anIds[ i ]); } - else if ( aSourceId == Selection ) + else if (aSourceId == Selection) { - filterSelectionSource( theType, theResIds ); + filterSelectionSource(theType, theResIds); } - else if ( aSourceId == Dialog ) + else if (aSourceId == Dialog) { // retrieve ids from dialog QValueList aDialogIds; - getIdsFromWg( mySourceWg, aDialogIds ); + getIdsFromWg(mySourceWg, aDialogIds); - if ( myMesh->_is_nil() ) + if (myMesh->_is_nil()) { theResIds = aDialogIds; return; @@ -2268,14 +2271,14 @@ void SMESHGUI_FilterDlg::filterSource( const int theType, // filter ids SMESH::Predicate_ptr aPred = myFilter[ theType ]->GetPredicate(); - aPred->SetMesh( myMesh ); + aPred->SetMesh(myMesh); QValueList::const_iterator anIter; - for ( anIter = aDialogIds.begin(); anIter != aDialogIds.end(); ++ anIter ) - if ( aPred->IsSatisfy( *anIter ) ) - theResIds.append( *anIter ); + for (anIter = aDialogIds.begin(); anIter != aDialogIds.end(); ++ anIter) + if (aPred->IsSatisfy(*anIter)) + theResIds.append(*anIter); // set ids to the dialog - setIdsToWg( mySourceWg, theResIds ); + setIdsToWg(mySourceWg, theResIds); } } @@ -2283,57 +2286,57 @@ void SMESHGUI_FilterDlg::filterSource( const int theType, // name : SMESHGUI_FilterDlg::filterSelectionSource // Purpose : Filter source selection //======================================================================= -void SMESHGUI_FilterDlg::filterSelectionSource( const int theType, - QValueList& theResIds ) +void SMESHGUI_FilterDlg::filterSelectionSource (const int theType, + QValueList& theResIds) { theResIds.clear(); - if ( myMesh->_is_nil() || mySelection == 0 ) + if (myMesh->_is_nil() || mySelectionMgr == 0) return; // Create map of entities to be filtered TColStd_MapOfInteger aToBeFiltered; - SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger anIter( myIObjects ); + SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger anIter(myIObjects); - for ( ; anIter.More(); anIter.Next() ) + for (; anIter.More(); anIter.Next()) { // process sub mesh - SMESH::SMESH_subMesh_var aSubMesh = SMESH::IObjectToInterface( anIter.Key() ); - if ( !aSubMesh->_is_nil() ) + SMESH::SMESH_subMesh_var aSubMesh = SMESH::IObjectToInterface(anIter.Key()); + if (!aSubMesh->_is_nil()) { - if ( aSubMesh->GetFather()->GetId() == myMesh->GetId() ) + if (aSubMesh->GetFather()->GetId() == myMesh->GetId()) { SMESH::long_array_var anIds = theType == SMESH::NODE ? aSubMesh->GetNodesId() : aSubMesh->GetElementsId(); - for ( int i = 0, n = anIds->length(); i < n; i++ ) - aToBeFiltered.Add( anIds[ i ] ); + for (int i = 0, n = anIds->length(); i < n; i++) + aToBeFiltered.Add(anIds[ i ]); } } // process group SMESH::SMESH_GroupBase_var aGroup = - SMESH::IObjectToInterface( anIter.Key() ); - if ( !aGroup->_is_nil() ) + SMESH::IObjectToInterface(anIter.Key()); + if (!aGroup->_is_nil()) { - if ( aGroup->GetType() == theType && aGroup->GetMesh()->GetId() == myMesh->GetId() ) + if (aGroup->GetType() == theType && aGroup->GetMesh()->GetId() == myMesh->GetId()) { SMESH::long_array_var anIds = aGroup->GetListOfID(); - for ( int i = 0, n = anIds->length(); i < n; i++ ) - aToBeFiltered.Add( anIds[ i ] ); + for (int i = 0, n = anIds->length(); i < n; i++) + aToBeFiltered.Add(anIds[ i ]); } } // process mesh - SMESH::SMESH_Mesh_var aMeshPtr = SMESH::IObjectToInterface( anIter.Key() ); - if ( !aMeshPtr->_is_nil() && aMeshPtr->GetId() == myMesh->GetId() ) + SMESH::SMESH_Mesh_var aMeshPtr = SMESH::IObjectToInterface(anIter.Key()); + if (!aMeshPtr->_is_nil() && aMeshPtr->GetId() == myMesh->GetId()) { const TColStd_IndexedMapOfInteger& aSelMap = anIter.Value(); - if ( aSelMap.Extent() > 0 ) + if (aSelMap.Extent() > 0) { - if( SMESH::FindActorByEntry( anIter.Key()->getEntry() ) ) + if(SMESH::FindActorByEntry(anIter.Key()->getEntry())) { - for ( int i = 1; i <= aSelMap.Extent(); i++ ) - aToBeFiltered.Add( aSelMap(i) ); + for (int i = 1; i <= aSelMap.Extent(); i++) + aToBeFiltered.Add(aSelMap(i)); } } } @@ -2341,67 +2344,71 @@ void SMESHGUI_FilterDlg::filterSelectionSource( const int theType, // Filter entities SMESH::Predicate_ptr aPred = myFilter[ theType ]->GetPredicate(); - aPred->SetMesh( myMesh ); - TColStd_MapIteratorOfMapOfInteger aResIter( aToBeFiltered ); - for ( ; aResIter.More(); aResIter.Next() ) - if ( aPred->IsSatisfy( aResIter.Key() ) ) - theResIds.append( aResIter.Key() ); + aPred->SetMesh(myMesh); + TColStd_MapIteratorOfMapOfInteger aResIter(aToBeFiltered); + for (; aResIter.More(); aResIter.Next()) + if (aPred->IsSatisfy(aResIter.Key())) + theResIds.append(aResIter.Key()); } //======================================================================= // name : SMESHGUI_FilterDlg::selectInViewer // Purpose : Select given entities in viewer //======================================================================= -void SMESHGUI_FilterDlg::selectInViewer( const int theType, const QValueList& theIds ) +void SMESHGUI_FilterDlg::selectInViewer (const int theType, const QValueList& theIds) { - if ( mySelection == 0 || myMesh->_is_nil() ) + if (mySelectionMgr == 0 || myMesh->_is_nil()) return; - mySelection->ClearFilters(); + mySelectionMgr->clearFilters(); // Set new selection mode if necessary - Selection_Mode aSelMode = getSelMode( theType ); - if ( aSelMode != mySelection->SelectionMode() ) - { - mySelection->ClearIObjects(); - mySelection->ClearFilters(); - if ( aSelMode == NodeSelection ) + Selection_Mode aSelMode = getSelMode(theType); + SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ); + if ( aViewWindow && aViewWindow->SelectionMode()!=aSelMode) { + mySelectionMgr->clearSelected(); + mySelectionMgr->clearFilters(); + if (aSelMode == NodeSelection) SMESH::SetPointRepresentation(true); - QAD_Application::getDesktop()->SetSelectionMode( aSelMode ); + aViewWindow->SetSelectionMode(aSelMode); } // Clear selection SMESH_Actor* anActor = SMESH::FindActorByObject(myMesh); - if ( !anActor || !anActor->hasIO() ) + if (!anActor || !anActor->hasIO()) return; Handle(SALOME_InteractiveObject) anIO = anActor->getIO(); - mySelection->ClearIObjects(); - mySelection->AddIObject( anIO, false ); + //mySelectionMgr->clearSelected(); + //mySelectionMgr->AddIObject(anIO, false); + SALOME_ListIO aList; + aList.Append(anIO); + mySelectionMgr->setSelectedObjects(aList, false); // Remove filter corresponding to the current type from viewer int aType = myTable->GetType(); int aFilterId = SMESHGUI_UnknownFilter; - if ( aType == SMESH::EDGE ) aFilterId = SMESHGUI_EdgeFilter; - else if ( aType == SMESH::FACE ) aFilterId = SMESHGUI_FaceFilter; - else if ( aType == SMESH::VOLUME ) aFilterId = SMESHGUI_VolumeFilter; - Handle(VTKViewer_Filter) aFilter = SMESH::GetFilter( aFilterId ); - SMESH::RemoveFilter( aFilterId ); + if (aType == SMESH::EDGE ) aFilterId = SMESHGUI_EdgeFilter; + else if (aType == SMESH::FACE ) aFilterId = SMESHGUI_FaceFilter; + else if (aType == SMESH::VOLUME) aFilterId = SMESHGUI_VolumeFilter; + Handle(VTKViewer_Filter) aFilter = SMESH::GetFilter(aFilterId); + SMESH::RemoveFilter(aFilterId); // get vtk ids TColStd_MapOfInteger aMap; QValueList::const_iterator anIter; - for ( anIter = theIds.begin(); anIter != theIds.end(); ++anIter ) - { - aMap.Add( *anIter ); + for (anIter = theIds.begin(); anIter != theIds.end(); ++anIter) { + aMap.Add(*anIter); } // Set new selection - mySelection->AddOrRemoveIndex( anIO, aMap, false, true ); + mySelector->AddOrRemoveIndex(anIO, aMap, false); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->highlight( anIO, true, true ); // insert previously stored filter in viewer if necessary - if ( !aFilter.IsNull() ) - SMESH::SetFilter( aFilter ); + if (!aFilter.IsNull()) + SMESH::SetFilter(aFilter); } //======================================================================= @@ -2432,25 +2439,27 @@ SMESH::Filter::Criterion SMESHGUI_FilterDlg::createCriterion() void SMESHGUI_FilterDlg::onSelectionDone() { int aRow, aCol; - if ( mySelection->IObjectCount() != 1 || - !myTable->CurrentCell( aRow, aCol ) || - myTable->GetCriterionType( aRow ) != FT_BelongToGeom && - myTable->GetCriterionType( aRow ) != FT_BelongToPlane && - myTable->GetCriterionType( aRow ) != FT_BelongToCylinder && - myTable->GetCriterionType( aRow ) != FT_LyingOnGeom ) + const SALOME_ListIO& aList = mySelector->StoredIObjects(); + + if (aList.Extent() != 1 || + !myTable->CurrentCell(aRow, aCol) || + myTable->GetCriterionType(aRow) != FT_BelongToGeom && + myTable->GetCriterionType(aRow) != FT_BelongToPlane && + myTable->GetCriterionType(aRow) != FT_BelongToCylinder && + myTable->GetCriterionType(aRow) != FT_LyingOnGeom) return; - Handle(SALOME_InteractiveObject) anIO = mySelection->firstIObject() ; - GEOM::GEOM_Object_var anObj = SMESH::IObjectToInterface( anIO ) ; - if ( !anObj->_is_nil() ) - myTable->SetThreshold( aRow, GEOMBase::GetName(anObj) ); + Handle(SALOME_InteractiveObject) anIO = aList.First(); + GEOM::GEOM_Object_var anObj = SMESH::IObjectToInterface(anIO); + if (!anObj->_is_nil()) + myTable->SetThreshold(aRow, GEOMBase::GetName(anObj)); } //======================================================================= // name : SMESHGUI_FilterDlg::onCriterionChanged // Purpose : SLOT called when cretarion of current row changed. Update selection //======================================================================= -void SMESHGUI_FilterDlg::onCriterionChanged( const int , const int ) +void SMESHGUI_FilterDlg::onCriterionChanged (const int , const int) { updateSelection(); } @@ -2459,7 +2468,7 @@ void SMESHGUI_FilterDlg::onCriterionChanged( const int , const int ) // name : SMESHGUI_FilterDlg::onCurrentChanged // Purpose : SLOT called when current row changed. Update selection //======================================================================= -void SMESHGUI_FilterDlg::onCurrentChanged( int, int ) +void SMESHGUI_FilterDlg::onCurrentChanged (int, int) { updateSelection(); } @@ -2470,55 +2479,43 @@ void SMESHGUI_FilterDlg::onCurrentChanged( int, int ) //======================================================================= void SMESHGUI_FilterDlg::updateSelection() { - if ( mySelection == 0 ) + if (mySelectionMgr == 0) return; - - mySelection->ClearFilters(); - - int aRow, aCol; - - if ( myTable->CurrentCell( aRow, aCol ) && - ( myTable->GetCriterionType( aRow ) == FT_BelongToGeom || - myTable->GetCriterionType( aRow ) == FT_BelongToPlane || - myTable->GetCriterionType( aRow ) == FT_BelongToCylinder || - myTable->GetCriterionType( aRow ) == FT_LyingOnGeom) ) - { - if ( myTable->GetCriterionType( aRow ) == FT_BelongToGeom || myTable->GetCriterionType( aRow ) == FT_LyingOnGeom ) - mySelection->AddFilter( new SALOME_TypeFilter( "GEOM" ) ); - else if ( myTable->GetCriterionType( aRow ) == FT_BelongToPlane ) - mySelection->AddFilter( new GEOM_FaceFilter( StdSelect_Plane ) ); - else if ( myTable->GetCriterionType( aRow ) == FT_BelongToCylinder ) - mySelection->AddFilter( new GEOM_FaceFilter( StdSelect_Cylinder ) ); - - myIsSelectionChanged = true; - } - else - { - if ( myIsSelectionChanged ) - mySelection->AddFilter( new SALOME_TypeFilter( "This filter deactivate selection" ) ); - } -} - - - - - - - - - - - - - - + TColStd_MapOfInteger allTypes; + for( int i=0; i<10; i++ ) + allTypes.Add( i ); + SalomeApp_Study* aStudy = dynamic_cast( mySMESHGUI->application()->activeStudy() ); + if( !aStudy ) + return; + mySelectionMgr->clearFilters(); + int aRow, aCol; + if (myTable->CurrentCell(aRow, aCol) && + (myTable->GetCriterionType(aRow) == FT_BelongToGeom || + myTable->GetCriterionType(aRow) == FT_BelongToPlane || + myTable->GetCriterionType(aRow) == FT_BelongToCylinder || + myTable->GetCriterionType(aRow) == FT_LyingOnGeom)) { + if (myTable->GetCriterionType(aRow) == FT_BelongToGeom || + myTable->GetCriterionType(aRow) == FT_LyingOnGeom) { + mySelectionMgr->installFilter(new GEOM_SelectionFilter( aStudy, true )); + } else if (myTable->GetCriterionType(aRow) == FT_BelongToPlane) { + mySelectionMgr->installFilter(new GEOM_FaceFilter( aStudy, StdSelect_Plane ) ); + } else if (myTable->GetCriterionType(aRow) == FT_BelongToCylinder) { + mySelectionMgr->installFilter(new GEOM_FaceFilter( aStudy, StdSelect_Cylinder ) ); + } + myIsSelectionChanged = true; + } else { + if (myIsSelectionChanged) { + mySelectionMgr->installFilter( new GEOM_TypeFilter( aStudy, -1 ) ); // This filter deactivates selection + } + } +}