123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /*
- GWEN
- Copyright (c) 2010 Facepunch Studios
- See license in Gwen.h
- */
- #include "Gwen/Events.h"
- using namespace Gwen;
- using namespace Gwen::Event;
- Handler::Handler()
- {
- }
- Handler::~Handler()
- {
- CleanLinks();
- }
- void Handler::CleanLinks()
- {
- // Tell all the callers that we're dead
- std::list<Caller*>::iterator iter = m_Callers.begin();
- while ( iter != m_Callers.end() )
- {
- Caller* pCaller = *iter;
- UnRegisterCaller( pCaller );
- pCaller->RemoveHandler( this );
- iter = m_Callers.begin();
- }
- }
- void Handler::RegisterCaller( Caller* pCaller )
- {
- m_Callers.push_back( pCaller );
- }
- void Handler::UnRegisterCaller( Caller* pCaller )
- {
- m_Callers.remove( pCaller );
- }
- Caller::Caller()
- {
-
- }
- Caller::~Caller()
- {
- CleanLinks();
- }
- void Caller::CleanLinks()
- {
- std::list<handler>::iterator iter;
- for (iter = m_Handlers.begin(); iter != m_Handlers.end(); ++iter)
- {
- handler& h = *iter;
- h.pObject->UnRegisterCaller( this );
- }
- m_Handlers.clear();
- }
- void Caller::Call( Controls::Base* pThis )
- {
- std::list<handler>::iterator iter;
- for (iter = m_Handlers.begin(); iter != m_Handlers.end(); ++iter)
- {
- handler& h = *iter;
- (h.pObject->*h.fnFunction)( pThis );
- }
- }
- void Caller::AddInternal( Event::Handler* pObject, Event::Handler::Function pFunction )
- {
- handler h;
- h.fnFunction = pFunction;
- h.pObject = pObject;
- m_Handlers.push_back( h );
- pObject->RegisterCaller( this );
- }
- void Caller::RemoveHandler( Event::Handler* pObject )
- {
- pObject->UnRegisterCaller( this );
- std::list<handler>::iterator iter = m_Handlers.begin();
- while ( iter != m_Handlers.end() )
- {
- handler& h = *iter;
- if ( h.pObject == pObject )
- {
- iter = m_Handlers.erase( iter );
- }
- else
- {
- ++iter;
- }
- }
- }
|