/* GWEN Copyright (c) 2010 Facepunch Studios See license in Gwen.h */ #pragma once #ifndef GWEN_EVENTS_H #define GWEN_EVENTS_H #include #include "Gwen/Exports.h" #include "Gwen/Structures.h" // TODO: REMOVE THIS - IT SUCKS. Template the function instead. #define GWEN_MCALL( fnc ) this, (Gwen::Event::Handler::Function)&fnc namespace Gwen { namespace Controls { class Base; } namespace Event { class Caller; // A class must be derived from this class GWEN_EXPORT Handler { public: Handler(); virtual ~Handler(); void RegisterCaller( Caller* ); void UnRegisterCaller( Caller* ); protected: void CleanLinks(); std::list m_Callers; public: typedef void (Handler::*Function)( Gwen::Controls::Base* pFromPanel ); typedef void (Handler::*FunctionStr)( const Gwen::String& string ); }; // // // class GWEN_EXPORT Caller { public: Caller(); ~Caller(); void Call( Controls::Base* pThis ); template void Add( Event::Handler* ob, T f ) { AddInternal( ob, static_cast(f) ); } void RemoveHandler( Event::Handler* pObject ); protected: void CleanLinks(); void AddInternal( Event::Handler* pObject, Handler::Function pFunction ); struct handler { Handler::Function fnFunction; Event::Handler* pObject; }; std::list m_Handlers; }; } } #endif