Salome HOME
Merge from BR_phase16 branch (09/12/09)
[modules/smesh.git] / src / SMESH / SMESH_subMeshEventListener.hxx
1 //  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 //  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
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.
10 //
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.
15 //
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
19 //
20 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 //  SMESH SMESH : implementaion of SMESH idl descriptions
23 // File      : SMESH_subMeshEventListener.hxx
24 // Created   : Mon Nov 13 10:45:49 2006
25 // Author    : Edward AGAPOV (eap)
26 //
27 #ifndef SMESH_subMeshEventListener_HeaderFile
28 #define SMESH_subMeshEventListener_HeaderFile
29
30 #include "SMESH_SMESH.hxx"
31
32 #include <list>
33
34 class  SMESH_subMesh;
35 class  SMESH_Hypothesis;
36 struct SMESH_subMeshEventListenerData;
37
38 // ------------------------------------------------------------------
39 /*!
40  * \brief A base for objects reacting on submesh events
41  */
42 // ------------------------------------------------------------------
43
44 class SMESH_EXPORT SMESH_subMeshEventListener {
45   bool myIsDeletable; //!< if true, it will be deleted by SMESH_subMesh
46 public:
47   SMESH_subMeshEventListener(bool isDeletable):myIsDeletable(isDeletable) {}
48   bool IsDeletable() const { return myIsDeletable; }
49   /*!
50    * \brief Do something on a certain event
51    * \param event - algo_event or compute_event itself (of SMESH_subMesh)
52    * \param eventType - ALGO_EVENT or COMPUTE_EVENT (of SMESH_subMesh)
53    * \param subMesh - the submesh where the event occures
54    * \param data - listener data stored in the subMesh
55    * \param hyp - hypothesis, if eventType is algo_event
56    * 
57    * The base implementation translates CLEAN event to the subMesh stored
58    * in the listener data. Also it sends SUBMESH_COMPUTED event in case of
59    * successful COMPUTE event.
60    */
61   virtual void ProcessEvent(const int          event,
62                             const int          eventType,
63                             SMESH_subMesh*     subMesh,
64                             SMESH_subMeshEventListenerData* data,
65                             const SMESH_Hypothesis*         hyp = 0);
66 };
67
68 // ------------------------------------------------------------------
69 /*!
70  * \brief Data specific for EventListener and to be stored in a submesh
71  */
72 // ------------------------------------------------------------------
73
74 struct SMESH_subMeshEventListenerData
75 {
76   bool myIsDeletable; //!< if true, it will be deleted by SMESH_subMesh
77   int myType;         //!< to recognize data type
78   std::list<SMESH_subMesh*> mySubMeshes; //!< generally: submeshes depending
79                                          // on the one storing this data
80 public:
81   SMESH_subMeshEventListenerData(bool isDeletable):myIsDeletable(isDeletable) {}
82   bool IsDeletable() const { return myIsDeletable; }
83
84   /*!
85    * \brief Create a default listener data.
86    * \param dependentSM - subMesh to store
87    * \param type - data type
88    * \retval SMESH_subMeshEventListenerData* - a new listener data
89    *
90    * See SMESH_subMeshEventListener::ProcessEvent() to know how the default
91    * listener uses it (implementation is in SMESH_subMesh.cxx)
92    */
93   static SMESH_subMeshEventListenerData* MakeData(SMESH_subMesh* dependentSM,
94                                                   const int      type = 0)
95   {
96     SMESH_subMeshEventListenerData* data = new SMESH_subMeshEventListenerData(true);
97     data->mySubMeshes.push_back( dependentSM );
98     data->myType = type;
99     return data;
100   }
101 };
102
103
104 #endif