summaryrefslogtreecommitdiffstats
path: root/sigencore/plugins/ArenaPlugin.cpp
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-03-17 22:15:29 -0400
committerBen Boeckel <MathStuf@gmail.com>2009-03-17 22:15:29 -0400
commita4f88e0425faade7510cb2516eb47f0e8b32ac51 (patch)
treeea73bdaede18c6eba6fec4334aa93c264e2c4e5c /sigencore/plugins/ArenaPlugin.cpp
parent3a66ebb965da92b0e14c56c14cfa066266d0a525 (diff)
downloadsigen-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.cpp25
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);
+}