+// ======
+// Group
+// ======
+
+class SMESH_I_EXPORT SMESH_Group_i:
+ public virtual POA_SMESH::SMESH_Group,
+ public SMESH_GroupBase_i
+{
+ public:
+ SMESH_Group_i( PortableServer::POA_ptr thePOA,
+ SMESH_Mesh_i* theMeshServant,
+ const int theLocalID );
+ // CORBA interface implementation
+ void Clear();
+ SMESH::smIdType Add( const SMESH::smIdType_array& theIDs );
+ SMESH::smIdType Remove( const SMESH::smIdType_array& theIDs );
+
+ SMESH::smIdType AddByPredicate( SMESH::Predicate_ptr thePredicate );
+ SMESH::smIdType RemoveByPredicate( SMESH::Predicate_ptr thePredicate );
+
+ SMESH::smIdType AddFrom( SMESH::SMESH_IDSource_ptr theSource );
+};
+
+// =========================
+// Group linked to geometry
+// =========================
+
+class SMESH_I_EXPORT SMESH_GroupOnGeom_i:
+ public virtual POA_SMESH::SMESH_GroupOnGeom,
+ public SMESH_GroupBase_i
+{
+ public:
+ SMESH_GroupOnGeom_i( PortableServer::POA_ptr thePOA,
+ SMESH_Mesh_i* theMeshServant,
+ const int theLocalID );
+ // CORBA interface implementation
+ GEOM::GEOM_Object_ptr GetShape();
+};
+
+// =========================
+// Group denied by filter
+// =========================
+
+class SMESH_I_EXPORT SMESH_GroupOnFilter_i:
+ public virtual POA_SMESH::SMESH_GroupOnFilter,
+ public SMESH_GroupBase_i
+{
+ public:
+ SMESH_GroupOnFilter_i( PortableServer::POA_ptr thePOA,
+ SMESH_Mesh_i* theMeshServant,
+ const int theLocalID );
+ ~SMESH_GroupOnFilter_i();
+
+ // Persistence
+ static SMESH::Filter_ptr StringToFilter(const std::string& thePersistentString );
+ std::string FilterToString() const;
+
+ static SMESH_PredicatePtr GetPredicate( SMESH::Filter_ptr );
+
+ // CORBA interface implementation
+ void SetFilter(SMESH::Filter_ptr theFilter);
+ SMESH::Filter_ptr GetFilter();
+ virtual CORBA::Boolean IsUpToDate();
+ virtual SMESH::smIdType_array* GetListOfID();
+ virtual SMESH::smIdType_array* GetMeshInfo();
+ //! @return false in two cases: 1) if mesh not loaded and GetMeshInfo() returns
+ //! incorrect information 2) mesh loaded but group contents is not computed.
+ virtual bool IsMeshInfoCorrect();
+
+ // method of SMESH::NotifyerAndWaiter to update self when myFilter changes
+ virtual void OnBaseObjModified(NotifyerAndWaiter* filter, bool);
+
+ private:
+ SMESH::Filter_var myFilter;
+};