1 // Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 // File : SMESHGUI_SelectionOp.h
24 // Author : Alexander SOLOVYOV, Open CASCADE S.A.S.
26 #ifndef SMESHGUI_SELECTIONOP_H
27 #define SMESHGUI_SELECTIONOP_H
30 #include "SMESH_SMESHGUI.hxx"
32 #include "SMESHGUI_Operation.h"
33 #include "SMESHGUI_Dialog.h"
35 // SALOME GUI includes
36 #include <SVTK_Selection.h>
37 #include <SVTK_Hash.h>
38 #include <SALOME_InteractiveObject.hxx>
41 #include <SALOMEconfig.h>
42 #include CORBA_SERVER_HEADER(SMESH_Mesh)
45 #include <TColStd_MapOfInteger.hxx>
47 class SUIT_SelectionFilter;
48 class SVTK_ViewWindow;
53 Class : SMESHGUI_SelectionOp
54 Description : Base operation for all operations using object selection in viewer or objectbrowser
55 through common widgets created by LightApp_Dialog::createObject
57 class SMESHGUI_EXPORT SMESHGUI_SelectionOp : public SMESHGUI_Operation
62 typedef QList<int> IdList; //! List of node or element ids
65 SMESHGUI_SelectionOp( const Selection_Mode = ActorSelection );
66 virtual ~SMESHGUI_SelectionOp();
68 static void extractIds( const QStringList&, IdList&, const QChar );
79 This enumeration is used in typeById method to distinguish objects, mesh nodes and mesh elements,
80 because node end element ids may overlap
84 virtual void startOperation();
85 virtual void commitOperation();
86 virtual void abortOperation();
87 virtual void selectionDone();
89 //! sets the dialog widgets to state just after operation start
90 virtual void initDialog();
93 * Creates filter being used when certain object selection widget is active
94 * If no filter must be used, then function must return 0
95 * if id is negative, then function must return filter for common using independently of active widget
97 virtual SUIT_SelectionFilter* createFilter( const int ) const;
99 //! Remove only filters set by this operation (they are in map myFilters )
100 void removeCustomFilters();
102 //! Return what selection mode is set in VTK viewer
103 Selection_Mode selectionMode() const;
105 //! Set selection mode in VTK viewer
106 void setSelectionMode( const Selection_Mode );
108 //! Highlight object in VTK viewer
109 void highlight( const Handle( SALOME_InteractiveObject )&,
110 const bool, const bool = true );
112 //! Select some nodes or elements in VTK
113 void addOrRemoveIndex( const Handle( SALOME_InteractiveObject )&,
114 const SVTK_TVtkIDsMap&, const bool isModeShift);
116 SVTK_ViewWindow* viewWindow() const;
117 SVTK_Selector* selector() const;
119 //! Get names, types and ids of selected objects
120 virtual void selected( QStringList&,
121 SMESHGUI_Dialog::TypesList&, QStringList& ) const;
124 virtual int typeById( const QString&, const EntityType ) const;
126 //! Char using to divide <entry> and <id> in string id representation. By default, '#'
127 virtual QChar idChar() const;
129 //! Try to find in certain object selection widget selected node or element ids and return it
130 void selectedIds( const int, IdList& ) const;
132 //! Find in QStringList correct node or element ids representation and append integer(id) to IdList
133 void extractIds( const QStringList&, IdList& ) const;
135 //! Return selected mesh if selection mode isn't ActorSelection and only one object is selected
136 SMESH::SMESH_Mesh_var mesh() const;
138 //! Return actor according to selected mesh if selection mode isn't ActorSelection
139 SMESH_Actor* actor() const;
142 //! Installs filter corresponding to certain object selection widget
143 virtual void onActivateObject( int );
145 //! Removes filter corresponding to certain object selection widget
146 virtual void onDeactivateObject( int );
149 * Empty default implementation. In successors it may be used for more advanced selection checking.
150 * This slot is connected to signal when the selection changed in some object selection widget
152 virtual void onSelectionChanged( int );
154 /*! Default implementation allowing user to edit selected ids "by hands".
155 In order to run default mechanism, you must set for some
156 object selection widget the "name indication" to "ListOfNames",
157 "read only" state to false and connect the dialog's signal "objectChanged"
159 Warning: this mechanism can process only integer ids, NOT MESH OR GROUP NAMES!!!
161 virtual void onTextChanged( int, const QStringList& );
164 typedef QMap<int, SUIT_SelectionFilter*> Filters;
168 Selection_Mode myDefSelectionMode, myOldSelectionMode;
171 #endif // SMESHGUI_SELECTIONOP_H