System/MessageHandler: Make this class useful by implementing EventListener and also add a vector of listeners with register/unregister methods.
This commit is contained in:
parent
cd32d0b7c2
commit
a30fd37032
2 changed files with 47 additions and 4 deletions
|
|
@ -2,16 +2,25 @@
|
|||
#ifndef SPECTRE_SYSTEM_MESSAGEHANDLER_H
|
||||
#define SPECTRE_SYSTEM_MESSAGEHANDLER_H
|
||||
|
||||
#include <Spectre/System/Event.h>
|
||||
#include <vector>
|
||||
#include "EventListener.h"
|
||||
|
||||
namespace sp {
|
||||
|
||||
class Display;
|
||||
|
||||
class MessageHandler
|
||||
class MessageHandler : public EventListener
|
||||
{
|
||||
public :
|
||||
|
||||
void registerListener(EventListener *listener);
|
||||
|
||||
void unregisterListener(EventListener *listener);
|
||||
|
||||
virtual void onSizeChanged(Display* display, int width, int height);
|
||||
|
||||
virtual void onEvent(const Event& event);
|
||||
|
||||
protected :
|
||||
std::vector<EventListener*> m_listeners;
|
||||
};
|
||||
|
||||
} // namespace sp
|
||||
|
|
|
|||
|
|
@ -4,8 +4,42 @@
|
|||
|
||||
namespace sp {
|
||||
|
||||
void MessageHandler::registerListener(EventListener *listener)
|
||||
{
|
||||
for(auto it = m_listeners.begin(); it != m_listeners.end(); it++) {
|
||||
|
||||
if (listener == *it) {
|
||||
// Already in vector. nothing to do.
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
m_listeners.push_back(listener);
|
||||
}
|
||||
|
||||
void MessageHandler::unregisterListener(EventListener *listener)
|
||||
{
|
||||
for(auto it = m_listeners.begin(); it != m_listeners.end(); it++) {
|
||||
|
||||
if (listener == *it) {
|
||||
m_listeners.erase(it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MessageHandler::onSizeChanged(Display* display, int width, int height)
|
||||
{
|
||||
for(EventListener* listener : m_listeners) {
|
||||
listener->onSizeChanged(display, width, height);
|
||||
}
|
||||
}
|
||||
|
||||
void MessageHandler::onEvent(const Event& event)
|
||||
{
|
||||
for(EventListener* listener : m_listeners) {
|
||||
listener->onEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace sp
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue