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/attributelistener.cpp | 25 +------------------------ src/listeners/attributelistener.h | 13 ++----------- src/listeners/baselistener.hpp | 37 +++++++++++++++++++++++++++++++++++-- 3 files changed, 38 insertions(+), 37 deletions(-) (limited to 'src') diff --git a/src/listeners/attributelistener.cpp b/src/listeners/attributelistener.cpp index b547cb219..244bd9a3f 100644 --- a/src/listeners/attributelistener.cpp +++ b/src/listeners/attributelistener.cpp @@ -20,31 +20,9 @@ #include "listeners/attributelistener.h" -#include "listeners/baselistener.hpp" - #include "debug.h" -std::vector AttributeListener::mListeners; - -AttributeListener::AttributeListener() -{ - addListener(this); -} - -AttributeListener::~AttributeListener() -{ - removeListener(this); -} - -void AttributeListener::addListener(AttributeListener *const listener) -{ - mListeners.push_back(listener); -} - -void AttributeListener::removeListener(AttributeListener *const listener) -{ - listenerRemoveListener; -} +defineListener(AttributeListener) void AttributeListener::distributeEvent(const int id, const int oldVal, @@ -58,4 +36,3 @@ void AttributeListener::distributeEvent(const int id, listener->attributeChanged(id, oldVal, newVal); } } - diff --git a/src/listeners/attributelistener.h b/src/listeners/attributelistener.h index 83605ffe9..f30dfa26f 100644 --- a/src/listeners/attributelistener.h +++ b/src/listeners/attributelistener.h @@ -21,31 +21,22 @@ #ifndef LISTENERS_ATTRIBUTELISTENER_H #define LISTENERS_ATTRIBUTELISTENER_H -#include +#include "listeners/baselistener.hpp" #include "localconsts.h" class AttributeListener { public: - AttributeListener(); - - virtual ~AttributeListener(); - virtual void attributeChanged(const int id, const int oldVal, const int newVal) = 0; - static void addListener(AttributeListener *const listener); - - static void removeListener(AttributeListener *const listener); - static void distributeEvent(const int id, const int oldVal, const int newVal); - private: - static std::vector mListeners; + defineListenerHeader(AttributeListener) }; #endif // LISTENERS_ATTRIBUTELISTENER_H 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-60-g2f50