Files
pilotclient/blacklib/include/blackmisc/message_factory.h
Roland Winklmeier 584251e0a8 Initial commit
2013-02-15 18:50:17 +01:00

60 lines
1.5 KiB
C++

//! Copyright (C) 2013 Roland Winklmeier
//! This Source Code Form is subject to the terms of the Mozilla Public
//! License, v. 2.0. If a copy of the MPL was not distributed with this
//! file, You can obtain one at http://mozilla.org/MPL/2.0/
#ifndef MESSAGE_FACTORY_H
#define MESSAGE_FACTORY_H
#include <QHash>
#include "blackmisc/message.h"
#include "blackmisc/gui_messages.h"
#include "blackmisc/debug.h"
#include "blackmisc/context.h"
#define REGISTER_MESSAGE(classname, msgName) new MessageCreatorImpl<classname>(#msgName);
namespace BlackMisc
{
class IMessageCreator
{
public:
IMessageCreator(const QString& messageID);
virtual IMessage* create() = 0;
};
template <class T>
class MessageCreatorImpl : public IMessageCreator
{
public:
MessageCreatorImpl(const QString& messageID) : IMessageCreator(messageID) {}
virtual IMessage* create() { return new T; }
};
class CMessageFactory
{
// safe singleton declaration
SINGLETON_CLASS_DECLARATION(CMessageFactory)
CMessageFactory() { }
public:
virtual ~CMessageFactory();
IMessage* create (const QString &messageID);
void registerMessage(const QString &messageID, IMessageCreator* creator);
static void registerMessages();
private:
typedef QHash<QString, IMessageCreator*> TMessageCreatorHash;
TMessageCreatorHash m_creators;
};
} // namespace BlackMisc
#endif // MESSAGE_FACTORY_H