00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #pragma warning( disable : 4786 )
00023
00024 #include "stdafx.h"
00025 #include "Events.h"
00026 #include "BONImpl.h"
00027 #include <algorithm>
00028 namespace BON
00029 {
00030
00031
00032
00033
00034
00035
00036
00037 Event::Event( MON::ObjectEventType eType, const Object& context )
00038 : m_eType( eType ), m_context( context )
00039 {
00040 }
00041
00042 Event::Event( const Event& event )
00043 : m_eType( event.m_eType ), m_context( event.m_context )
00044 {
00045 }
00046
00047 Event& Event::operator = ( const Event& event )
00048 {
00049 if ( this != &event ) {
00050 m_eType = event.m_eType;
00051 m_context = event.m_context;
00052 }
00053 return *this;
00054 }
00055
00056 MON::ObjectEventType Event::getType() const
00057 {
00058 return m_eType;
00059 }
00060
00061 Object Event::getContext() const
00062 {
00063 return m_context;
00064 }
00065
00066 std::string Event::getInfoString( Util::InfoOptions usOptions ) const
00067 {
00068 return toString( m_eType ) + "\n\n" + m_context->getInfoString( usOptions );
00069 }
00070
00071 std::string Event::getInfoString( std::set<Util::InfoOption> setOptions ) const
00072 {
00073 return getInfoString( copy( setOptions ) );
00074 }
00075
00076
00077
00078
00079
00080
00081
00082 void EventListenerPool::performEvent( const Event& event )
00083 {
00084 ListenerMap::iterator it = m_mapListeners.find( event.getType() );
00085 if ( it != m_mapListeners.end() ) {
00086 for ( int i = 0 ; i < it->second.size() ; i++ )
00087 if ( it->second[ i ]->isActive() )
00088 it->second[ i ]->eventPerformed( event );
00089 }
00090 }
00091
00092 void EventListenerPool::addListener( EventListener* pListener )
00093 {
00094 if ( pListener ) {
00095 for ( MON::ObjectEventType eType = MON::OET_ObjectCreated ; eType != MON::OET_All ; eType++ ) {
00096 if ( pListener->getAssignments() & eType ) {
00097 ListenerMap::iterator it = m_mapListeners.find( eType );
00098 if ( it == m_mapListeners.end() )
00099 m_mapListeners[ eType ] = ListenerVector( 1, pListener );
00100 else
00101 if ( std::find( m_mapListeners[ eType ].begin(), m_mapListeners[ eType ].end(), pListener ) == m_mapListeners[ eType ].end() )
00102 m_mapListeners[ eType ].push_back( pListener );
00103 }
00104 }
00105 }
00106 }
00107
00108 void EventListenerPool::removeListener( EventListener* pListener )
00109 {
00110 if ( pListener ) {
00111 for ( ListenerMap::iterator it = m_mapListeners.begin() ; it != m_mapListeners.end() ; it++ ) {
00112 ListenerVector::iterator itv = std::find( it->second.begin(), it->second.end(), pListener );
00113 if ( itv != it->second.end() )
00114 it->second.erase( itv );
00115 }
00116 }
00117 }
00118
00119 };