diff options
author | Ben Boeckel <MathStuf@gmail.com> | 2009-03-17 22:15:29 -0400 |
---|---|---|
committer | Ben Boeckel <MathStuf@gmail.com> | 2009-03-17 22:15:29 -0400 |
commit | a4f88e0425faade7510cb2516eb47f0e8b32ac51 (patch) | |
tree | ea73bdaede18c6eba6fec4334aa93c264e2c4e5c /sigencore | |
parent | 3a66ebb965da92b0e14c56c14cfa066266d0a525 (diff) | |
download | sigen-a4f88e0425faade7510cb2516eb47f0e8b32ac51.tar.gz sigen-a4f88e0425faade7510cb2516eb47f0e8b32ac51.tar.xz sigen-a4f88e0425faade7510cb2516eb47f0e8b32ac51.zip |
Use a QSignalMapper instead of emiting a pointer
Diffstat (limited to 'sigencore')
-rw-r--r-- | sigencore/plugins/ArenaPlugin.cpp | 25 | ||||
-rw-r--r-- | sigencore/plugins/ArenaPlugin_p.h | 12 |
2 files changed, 33 insertions, 4 deletions
diff --git a/sigencore/plugins/ArenaPlugin.cpp b/sigencore/plugins/ArenaPlugin.cpp index 1dc03687..4c108592 100644 --- a/sigencore/plugins/ArenaPlugin.cpp +++ b/sigencore/plugins/ArenaPlugin.cpp @@ -22,13 +22,16 @@ // Sigencore includes #include <sigencore/Arena.h> +// Qt includes +#include <QtCore/QSignalMapper> + using namespace Sigscript; using namespace Sigencore; using namespace Sigencore::Interfaces; ArenaPlugin::ArenaPlugin(QObject* parent, const QVariantList& args) : QObject(parent), - d(new Private(args)) + d(new Private(this, args)) { } @@ -40,15 +43,31 @@ ArenaPlugin::~ArenaPlugin() Arena* ArenaPlugin::getArena(const QString& name, GameWrapper* game, Config* parent) { Arena* arena = createArena(name, game, parent); - connect(arena, SIGNAL(cleanupArena(Sigencore::Arena*)), this, SLOT(cleanupArena(Sigencore::Arena*))); + d->addArena(arena); return arena; } -ArenaPlugin::Private::Private(const QVariantList& args) +ArenaPlugin::Private::Private(ArenaPlugin* plugin, const QVariantList& args) : + q(plugin), + m_mapper(new QSignalMapper(this)) { Q_UNUSED(args) + connect(m_mapper, SIGNAL(mapped(QObject*)), this, SLOT(cleanupArena(QObject*))); } ArenaPlugin::Private::~Private() { } + +void ArenaPlugin::Private::addArena(Arena* arena) +{ + connect(arena, SIGNAL(cleanupArena()), m_mapper, SLOT(map())); + m_mapper->setMapping(arena, arena); +} + +void ArenaPlugin::Private::cleanupArena(QObject* object) +{ + Arena* arena = qobject_cast<Arena*>(object); + if (arena) + q->cleanupArena(arena); +} diff --git a/sigencore/plugins/ArenaPlugin_p.h b/sigencore/plugins/ArenaPlugin_p.h index 29126036..e662ca33 100644 --- a/sigencore/plugins/ArenaPlugin_p.h +++ b/sigencore/plugins/ArenaPlugin_p.h @@ -21,6 +21,9 @@ // Header include #include "ArenaPlugin.h" +// Forward declarations +class QSignalMapper; + namespace Sigencore { namespace Interfaces @@ -30,8 +33,15 @@ class SIGENCOREPLUGINS_NO_EXPORT ArenaPlugin::Private : public QObject Q_OBJECT public: - Private(const QVariantList& args); + Private(ArenaPlugin* plugin, const QVariantList& args); ~Private(); + + void addArena(Arena* arena); + private: + ArenaPlugin* const q; + QSignalMapper* m_mapper; + private slots: + void cleanupArena(QObject* object); }; } } |