From af0ae4d0b7c56d540639bb1f4ba7cc458ec718c1 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 27 Apr 2014 15:30:00 +0300 Subject: Simplify AttributeListener. --- src/listeners/baselistener.hpp | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'src/listeners/baselistener.hpp') diff --git a/src/listeners/baselistener.hpp b/src/listeners/baselistener.hpp index ae3c7112e..66dd0d7cf 100644 --- a/src/listeners/baselistener.hpp +++ b/src/listeners/baselistener.hpp @@ -21,9 +21,29 @@ #ifndef LISTENERS_BASELISTENER_HPP #define LISTENERS_BASELISTENER_HPP -#define listenerRemoveListener \ +#include + +#define defineListener(name) \ + std::vector name::mListeners; \ + \ + name::name() \ + { \ + addListener(this); \ + } \ + \ + name::~name() \ + { \ + removeListener(this); \ + } \ + \ + void name::addListener(name *const listener) \ { \ - std::vector::iterator it = mListeners.begin(); \ + mListeners.push_back(listener); \ + } \ + \ + void name::removeListener(name *const listener) \ + { \ + std::vector::iterator it = mListeners.begin(); \ while (it != mListeners.end()) \ { \ if (*it == listener) \ @@ -33,4 +53,17 @@ } \ } +#define defineListenerHeader(name) \ + public: \ + name(); \ + \ + virtual ~name(); \ + \ + static void addListener(name *const listener); \ + \ + static void removeListener(name *const listener); \ + \ + private: \ + static std::vector mListeners; + #endif // LISTENERS_BASELISTENER_HPP -- cgit v1.2.3-70-g09d2