diff options
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); +} |
