#ifndef _PANE_EVENT #define _PANE_EVENT #include namespace Pane { /* ** EventHandler class (4 parameters) */ template class EventHandler { public: class EventClass { public: virtual ~EventClass () { } virtual Return operator () (Param1, Param2, Param3, Param4) = 0; }; template class Event : public EventClass { public: typedef Return (Sender::*Method) (Param1, Param2, Param3, Param4); /**/ Event (Sender* sender, Method method) : method (method), sender (sender) { } virtual Return operator () (Param1 param1, Param2 param2, Param3 param3, Param4 param4) { return (this->sender->*method) (param1, param2, param3, param4); } private: Method method; Sender* sender; }; /**/ ~EventHandler (); void operator += (EventClass*); bool operator () (Param1, Param2, Param3, Param4); private: typedef std::vector Events; Events events; }; /* ** EventHandler class (3 parameters) */ template class EventHandler { public: class EventClass { public: virtual ~EventClass () { } virtual Return operator () (Param1, Param2, Param3) = 0; }; template class Event : public EventClass { public: typedef Return (Sender::*Method) (Param1, Param2, Param3); /**/ Event (Sender* sender, Method method) : method (method), sender (sender) { } virtual Return operator () (Param1 param1, Param2 param2, Param3 param3) { return (this->sender->*method) (param1, param2, param3); } private: Method method; Sender* sender; }; /**/ ~EventHandler (); void operator += (EventClass*); bool operator () (Param1, Param2, Param3); private: typedef std::vector Events; Events events; }; /* ** EventHandler class (2 parameters) */ template class EventHandler { public: class EventClass { public: virtual ~EventClass () { } virtual Return operator () (Param1, Param2) = 0; }; template class Event : public EventClass { public: typedef Return (Sender::*Method) (Param1, Param2); /**/ Event (Sender* sender, Method method) : method (method), sender (sender) { } virtual Return operator () (Param1 param1, Param2 param2) { return (this->sender->*method) (param1, param2); } private: Method method; Sender* sender; }; /**/ ~EventHandler (); void operator += (EventClass*); bool operator () (Param1, Param2); private: typedef std::vector Events; Events events; }; /* ** EventHandler class (1 parameter) */ template class EventHandler { public: class EventClass { public: virtual ~EventClass () { } virtual Return operator () (Param1) = 0; }; template class Event : public EventClass { public: typedef Return (Sender::*Method) (Param1); /**/ Event (Sender* sender, Method method) : method (method), sender (sender) { } virtual Return operator () (Param1 param1) { return (this->sender->*method) (param1); } private: Method method; Sender* sender; }; /**/ ~EventHandler (); void operator += (EventClass*); bool operator () (Param1); private: typedef std::vector Events; Events events; }; /* ** EventHandler class (0 parameter) */ template class EventHandler { public: class EventClass { public: virtual ~EventClass () { } virtual Return operator () () = 0; }; template class Event : public EventClass { public: typedef Return (Sender::*Method) (); /**/ Event (Sender* sender, Method method) : method (method), sender (sender) { } virtual Return operator () () { return (this->sender->*method) (); } private: Method method; Sender* sender; }; /**/ ~EventHandler (); void operator += (EventClass*); bool operator () (); private: typedef std::vector Events; Events events; }; } #include "eventHandler.hxx" #endif // _PANE_EVENT