X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_FilterDlg.h;h=f63d2b2e0a134802a10023875517e0ad9c550238;hp=6ba1d4a79299f4419541b16d8f4abfdddfe4c7b1;hb=e4737e85f0da6d3f90fd08f6be1c2825195fe16f;hpb=51569f091c2d18be76ea9bd3e68ca0247cc731c3 diff --git a/src/SMESHGUI/SMESHGUI_FilterDlg.h b/src/SMESHGUI/SMESHGUI_FilterDlg.h index 6ba1d4a79..f63d2b2e0 100755 --- a/src/SMESHGUI/SMESHGUI_FilterDlg.h +++ b/src/SMESHGUI/SMESHGUI_FilterDlg.h @@ -1,195 +1,319 @@ -// 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 -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -// -// -// -// File : SMESHGUI_FilterDlg.h -// Author : Sergey LITONIN -// Module : SMESH - - -#ifndef SMESHGUI_FilterDlg_H -#define SMESHGUI_FilterDlg_H - -#include -#include -#include -#include - -#include -#include CORBA_SERVER_HEADER(SMESH_Filter) -#include CORBA_SERVER_HEADER(SMESH_Mesh) - -class QCloseEvent; -class QWidgetStack; -class QStringList; -class QTableItem; -class QFrame; -class QEvent; -class QPushButton; -class QTable; -class SALOME_Selection; -class SMESHGUI; -class QComboBox; -class QButtonGroup; -class QCheckBox; -class QGroupBox; - - -/* - Class : SMESHGUI_FilterDlg - Description : Dialog to specify filters for VTK viewer -*/ - -class SMESHGUI_FilterDlg : public QDialog -{ - Q_OBJECT - - class Table; - - // Edge criteria - enum { FreeBorders = 0, MultiBorders, Length }; - - // Face criteria - enum { AspectRatio = 0, Warping, MinimumAngle, Taper, Skew, Area }; - - // Comparision - enum { LessThan = 0, MoreThan, EqualTo }; - - // Logical operations - enum { LO_And = 0, LO_Or, LO_Undefined }; - - // Source elements to be selected - enum { Mesh, Selection, Dialog, None }; - - typedef QMap TableMap; - -public: - SMESHGUI_FilterDlg( QWidget* parent, - const int type, - const bool theModal = true, - const char* name = 0 ); - virtual ~SMESHGUI_FilterDlg(); - - void Init( const int type ); - - void SetSelection( SALOME_Selection* ); - void SetMesh( SMESH::SMESH_Mesh_ptr ); - void SetSourceWg( QWidget* ); - -private slots: - - void onAddBtn(); - void onRemoveBtn(); - void onClearBtn(); - void onCriterionChanged( int, int ); - - void onOk(); - bool onApply(); - void onClose(); - void onDeactivate(); - -private: - - void closeEvent( QCloseEvent* e ); - void enterEvent ( QEvent * ); - - void updateBtnState(); - - // dialog creation - QFrame* createButtonFrame( QWidget*, const bool ); - QFrame* createMainFrame( QWidget* ); - Table* createTable( QWidget*, const int ); - QButtonGroup* createSourceGroup( QWidget* ); - void addRow( Table*, const int ); - QTableItem* getCriterionItem( QTable*, const int ); - QTableItem* getCompareItem( QTable* ); - QTableItem* getNotItem( QTable* ); - QTableItem* getLogOpItem( QTable* ); - const QStringList& getCriteria( const int theType ) const; - const QStringList& getCompare () const; - - // query - int getCurrType() const; - int getCriterion( const int theType, const int theRow ) const; - - // execution - bool isValid() const; - SMESH::Predicate_ptr createPredicate( const int theType ); - void insertFilterInViewer( SMESH::Predicate_ptr thePred ); - void selectInViewer( const int theType, - const QValueList& theIds ); - void filterSource( const int theType, - SMESH::Predicate_ptr thePred, - QValueList& theResIds ); - void filterSelectionSource( const int theType, - SMESH::Predicate_ptr thePred, - QValueList& theResIds ); - void getIdsFromWg( const QWidget*, QValueList& ) const; - void setIdsToWg( QWidget*, const QValueList& ); - Selection_Mode getSelMode( const int ) const; - -private: - - // widgets - QFrame* myMainFrame; - QGroupBox* myTableGrp; - - TableMap myTables; - QPushButton* myAddBtn; - QPushButton* myRemoveBtn; - QPushButton* myClearBtn; - QButtonGroup* mySourceGrp; - QCheckBox* mySetInViewer; - - QPushButton* myOkBtn; - QPushButton* myApplyBtn; - QPushButton* myCloseBtn; - - // initial fields - int myType; - SMESHGUI* mySMESHGUI; - SALOME_Selection* mySelection; - SMESH::SMESH_Mesh_ptr myMesh; - QWidget* mySourceWg; -}; - -#endif - - - - - - - - - - - - - - - - - - - - +// 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 +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : SMESHGUI_FilterDlg.h +// Author : Sergey LITONIN +// Module : SMESH + + +#ifndef SMESHGUI_FilterDlg_H +#define SMESHGUI_FilterDlg_H + +#include +#include +#include +#include + +#include "SALOME_Selection.h" +#include "SALOME_InteractiveObject.hxx" +#include "SALOME_DataMapOfIOMapOfInteger.hxx" + +#include + +#include +#include CORBA_SERVER_HEADER(SMESH_Filter) +#include CORBA_SERVER_HEADER(SMESH_Mesh) + +class QButtonGroup; +class QCheckBox; +class QCloseEvent; +class QComboBox; +class QEvent; +class QGroupBox; +class QPushButton; +class QStringList; +class QTable; +class QTableItem; +class QWidgetStack; +class SALOME_Selection; +class SMESHGUI; +class SMESHGUI_FilterLibraryDlg; + +/* + Class : SMESHGUI_FilterTable + Description : Frame containig + - Button group for switching entity type + - Table for displaying filter criterions + - Buttons for editing table +*/ + +class SMESHGUI_FilterTable : public QFrame +{ + Q_OBJECT + + class Table; + class ComboItem; + class AdditionalWidget; + + typedef QMap TableMap; + +public: + + SMESHGUI_FilterTable( QWidget* parent, + const int type ); + SMESHGUI_FilterTable( QWidget* parent, + const QValueList& type ); + virtual ~SMESHGUI_FilterTable(); + + void Init( const int type ); + void Init( const QValueList& types ); + + QGroupBox* GetTableGrp(); + + bool IsValid( const bool = true, const int theEntityType = -1 ) const; + int GetType() const; + void SetType( const int ); + void RestorePreviousEntityType(); + int NumRows( const int theEntityType = -1 ) const; + void Clear( const int theEntityType = -1 ); + void SetEditable( const bool ); + void SetEnabled( const bool ); + void SetLibsEnabled( const bool ); + bool IsEditable() const; + + int GetCriterionType( const int theRow, const int theType = -1 ) const; + + void GetCriterion( const int theRow, + SMESH::Filter::Criterion& theCriterion, + const int theEntityType = -1 ) const; + + void SetCriterion( const int theRow, + const SMESH::Filter::Criterion& theCriterion, + const int theEntityType = -1 ); + + void AddCriterion( const SMESH::Filter::Criterion& theCriterion, + const int theEntityType = -1 ); + + void Copy( const SMESHGUI_FilterTable* ); + void SetValidity( const bool ); + + bool CurrentCell( int& theRow, int& theCol ) const; + void SetThreshold( const int theRow, + const QString& theText, + const int theEntityType = -1 ); + + bool GetThreshold( const int theRow, + QString& theText, + const int theEntityType = -1 ); + + void Update(); + + +signals: + + void CopyFromClicked(); + void AddToClicked(); + void EntityTypeChanged( const int ); + void NeedValidation(); + void CretarionChanged( const int theRow, const int theEntityType ); + void CurrentChanged( int, int ); + +private slots: + + void onAddBtn(); + void onInsertBtn(); + void onRemoveBtn(); + void onClearBtn(); + void onCopyFromBtn(); + void onAddToBtn(); + void onCriterionChanged( int, int ); + void onEntityType( int ); + void onCurrentChanged( int, int ); + +private: + + void addRow( Table*, const int, const bool toTheEnd = true ); + QTableItem* getCriterionItem( QTable*, const int ); + QTableItem* getCompareItem( QTable* ); + QTableItem* getUnaryItem( QTable* ); + QTableItem* getBinaryItem( QTable* ); + const QMap& getCriteria( const int theType ) const; + const QMap& getCompare() const; + Table* createTable( QWidget*, const int ); + QWidget* createAdditionalFrame( QWidget* theParent ); + int getFirstSelectedRow() const; + void onCriterionChanged( const int, const int, const int ); + + void updateBtnState(); + void removeAdditionalWidget( QTable* theTable, const int theRow ); + void updateAdditionalWidget(); + + const QMap& getSupportedTypes() const; + +private: + + QGroupBox* myTableGrp; + QGroupBox* mySwitchTableGrp; + + TableMap myTables; + QPushButton* myAddBtn; + QPushButton* myInsertBtn; + QPushButton* myRemoveBtn; + QPushButton* myClearBtn; + QPushButton* myCopyFromBtn; + QPushButton* myAddToBtn; + + QButtonGroup* myEntityTypeGrp; + int myEntityType; + int myIsValid; + + SMESHGUI_FilterLibraryDlg* myLibDlg; + + QWidgetStack* myWgStack; + QMap myAddWidgets; +}; + + +/* + Class : SMESHGUI_FilterDlg + Description : Dialog to specify filters for VTK viewer +*/ + +class SMESHGUI_FilterDlg : public QDialog +{ + Q_OBJECT + + // Source elements to be selected + enum { Mesh, Selection, Dialog, None }; + + // Buttons + enum { BTN_OK, BTN_Cancel, BTN_Apply, BTN_Close }; + +public: + SMESHGUI_FilterDlg( QWidget* parent, + const QValueList& types, + const char* name = 0 ); + + SMESHGUI_FilterDlg( QWidget* parent, + const int type, + const char* name = 0 ); + virtual ~SMESHGUI_FilterDlg(); + + void Init( const QValueList& types ); + void Init( const int type ); + + void SetSelection( SALOME_Selection* ); + void SetMesh( SMESH::SMESH_Mesh_ptr ); + void SetSourceWg( QWidget* ); + + static SMESH::Filter::Criterion createCriterion(); + +signals: + + void Accepted(); + +private slots: + + void onOk(); + bool onApply(); + void onClose(); + void onDeactivate(); + void onSelectionDone(); + void onCriterionChanged( const int, const int ); + void onCurrentChanged( int, int ); + +private: + + void construct( const QValueList& types ); + + void closeEvent( QCloseEvent* e ); + void enterEvent ( QEvent * ); + + // dialog creation + QFrame* createButtonFrame( QWidget* ); + QFrame* createMainFrame( QWidget* ); + QButtonGroup* createSourceGroup( QWidget* ); + void updateMainButtons(); + + // execution + bool isValid() const; + bool createFilter( const int theType ); + void insertFilterInViewer(); + void selectInViewer( const int theType, + const QValueList& theIds ); + void filterSource( const int theType, + QValueList& theResIds ); + void filterSelectionSource( const int theType, + QValueList& theResIds ); + void getIdsFromWg( const QWidget*, QValueList& ) const; + void setIdsToWg( QWidget*, const QValueList& ); + Selection_Mode getSelMode( const int ) const; + void updateSelection(); + +private: + + // widgets + QFrame* myMainFrame; + QButtonGroup* mySourceGrp; + + QCheckBox* mySetInViewer; + + QMap myButtons; + + SMESHGUI_FilterTable* myTable; + + // initial fields + QValueList myTypes; + SMESHGUI* mySMESHGUI; + SALOME_Selection* mySelection; + SMESH::SMESH_Mesh_ptr myMesh; + QWidget* mySourceWg; + + SALOME_DataMapOfIOMapOfInteger myIObjects; + bool myIsSelectionChanged; + QMap< int, SMESH::Filter_var > myFilter; + QMap< int, bool > myInsertState; + QMap< int, int > myApplyToState; +}; + +#endif + + + + + + + + + + + + + + + + + + + +