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/plugins/ArenaPlugin.cpp | |
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/plugins/ArenaPlugin.cpp')
-rw-r--r-- | sigencore/plugins/ArenaPlugin.cpp | 25 |
1 files changed, 22 insertions, 3 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); +} |