summaryrefslogtreecommitdiffstats
path: root/sigencore
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
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')
-rw-r--r--sigencore/plugins/ArenaPlugin.cpp25
-rw-r--r--sigencore/plugins/ArenaPlugin_p.h12
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);
};
}
}