mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-03-15 23:41:27 +05:00
0021543: EDF 1978 SMESH: Viscous layer for 2D meshes
1) Fix notifyListenersOnEvent() for the case if a listener is deleted 2) in setEventListener(), use a listener name to find an existing listener
This commit is contained in:
parent
c0f78ed06c
commit
b648205fec
@ -149,6 +149,17 @@ SMESHDS_SubMesh * SMESH_subMesh::GetSubMeshDS()
|
|||||||
*/
|
*/
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
|
const SMESHDS_SubMesh * SMESH_subMesh::GetSubMeshDS() const
|
||||||
|
{
|
||||||
|
return ((SMESH_subMesh*) this )->GetSubMeshDS();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
SMESHDS_SubMesh* SMESH_subMesh::CreateSubMeshDS()
|
SMESHDS_SubMesh* SMESH_subMesh::CreateSubMeshDS()
|
||||||
{
|
{
|
||||||
if ( !GetSubMeshDS() ) {
|
if ( !GetSubMeshDS() ) {
|
||||||
@ -2078,7 +2089,8 @@ void SMESH_subMesh::SetEventListener(EventListener* listener,
|
|||||||
*/
|
*/
|
||||||
//================================================================================
|
//================================================================================
|
||||||
|
|
||||||
void SMESH_subMesh::setEventListener(EventListener* listener, EventListenerData* data)
|
void SMESH_subMesh::setEventListener(EventListener* listener,
|
||||||
|
EventListenerData* data)
|
||||||
{
|
{
|
||||||
map< EventListener*, EventListenerData* >::iterator l_d =
|
map< EventListener*, EventListenerData* >::iterator l_d =
|
||||||
_eventListeners.find( listener );
|
_eventListeners.find( listener );
|
||||||
@ -2089,7 +2101,19 @@ void SMESH_subMesh::setEventListener(EventListener* listener, EventListenerData*
|
|||||||
l_d->second = data;
|
l_d->second = data;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
for ( l_d = _eventListeners.begin(); l_d != _eventListeners.end(); ++l_d )
|
||||||
|
if ( listener->GetName() == l_d->first->GetName() )
|
||||||
|
{
|
||||||
|
EventListenerData* curData = l_d->second;
|
||||||
|
if ( curData && curData != data && curData->IsDeletable() )
|
||||||
|
delete curData;
|
||||||
|
if ( l_d->first->IsDeletable() )
|
||||||
|
delete l_d->first;
|
||||||
|
_eventListeners.erase( l_d );
|
||||||
|
}
|
||||||
_eventListeners.insert( make_pair( listener, data ));
|
_eventListeners.insert( make_pair( listener, data ));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
@ -2140,16 +2164,18 @@ void SMESH_subMesh::notifyListenersOnEvent( const int event,
|
|||||||
SMESH_Hypothesis* hyp)
|
SMESH_Hypothesis* hyp)
|
||||||
{
|
{
|
||||||
map< EventListener*, EventListenerData* >::iterator l_d = _eventListeners.begin();
|
map< EventListener*, EventListenerData* >::iterator l_d = _eventListeners.begin();
|
||||||
for ( ; l_d != _eventListeners.end(); ++l_d )
|
for ( ; l_d != _eventListeners.end(); )
|
||||||
{
|
{
|
||||||
std::pair< EventListener*, EventListenerData* > li_da = *l_d; /* copy to enable removal
|
std::pair< EventListener*, EventListenerData* > li_da = *l_d++; /* copy to enable removal
|
||||||
of a listener from
|
of a listener from
|
||||||
_eventListeners by
|
_eventListeners by
|
||||||
its ProcessEvent() */
|
its ProcessEvent() */
|
||||||
if ( li_da.first->myBusySM.insert( this ).second )
|
if ( li_da.first->myBusySM.insert( this ).second )
|
||||||
{
|
{
|
||||||
|
const size_t nbListenersBefore = _eventListeners.size();
|
||||||
li_da.first->ProcessEvent( event, eventType, this, li_da.second, hyp );
|
li_da.first->ProcessEvent( event, eventType, this, li_da.second, hyp );
|
||||||
li_da.first->myBusySM.erase( this );
|
if ( nbListenersBefore == _eventListeners.size() )
|
||||||
|
li_da.first->myBusySM.erase( this ); // a listener hopefully not removed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user