summaryrefslogtreecommitdiffstats
path: root/sigtools
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-03-27 16:50:58 -0400
committerBen Boeckel <MathStuf@gmail.com>2009-03-27 16:50:58 -0400
commit663248cd1e0ea17f5da772d35cc1a851005101fd (patch)
treee0eb5b46aa3c72e7d564f701fcd4bddefd231aa4 /sigtools
parent6fd11afdde2304a0e8e288c101be0f85a77a52bc (diff)
downloadsigen-663248cd1e0ea17f5da772d35cc1a851005101fd.tar.gz
sigen-663248cd1e0ea17f5da772d35cc1a851005101fd.tar.xz
sigen-663248cd1e0ea17f5da772d35cc1a851005101fd.zip
Use shared pointers for Games
Diffstat (limited to 'sigtools')
-rw-r--r--sigtools/PluginLoader.cpp26
-rw-r--r--sigtools/PluginLoader.h6
-rw-r--r--sigtools/PluginLoader_p.h5
3 files changed, 16 insertions, 21 deletions
diff --git a/sigtools/PluginLoader.cpp b/sigtools/PluginLoader.cpp
index b28d0a0c..7bdd927b 100644
--- a/sigtools/PluginLoader.cpp
+++ b/sigtools/PluginLoader.cpp
@@ -55,11 +55,6 @@ KService::Ptr PluginLoader::service(const QString& type, const QString& name)
return loader->service(type, name);
}
-Game* PluginLoader::game(const QString& name)
-{
- return loader->game(name);
-}
-
PluginBase* PluginLoader::plugin(const QString& type, const QString& name)
{
return loader->factory(type, name);
@@ -75,6 +70,11 @@ CanvasPlugin* PluginLoader::pluginForCanvas(const QString& canvas)
return qobject_cast<CanvasPlugin*>(loader->factory("Canvas", canvas));
}
+QSharedPointer<Game> PluginLoader::game(const QString& name)
+{
+ return loader->game(name);
+}
+
Arena* PluginLoader::loadArena(const QString& name, GameWrapper* game, Config* parent)
{
ArenaPlugin* plugin = pluginForArena(name);
@@ -111,12 +111,7 @@ void PluginLoader::Private::refresh(const QString& type)
delete service.second;
m_available[type].clear();
if (type == "Sigmod")
- {
- QList<Game*> games = m_games.values();
- foreach (Game* game, games)
- delete game;
m_games.clear();
- }
// TODO: Progress dialog?
KService::List services = KServiceTypeTrader::self()->query(QString("Sigen/%1").arg(type), "[X-Sigen-MinVersion] <= 000101");
foreach (KService::Ptr service, services)
@@ -136,7 +131,7 @@ void PluginLoader::Private::refresh(const QString& type)
if (!fileName.isEmpty())
{
QFile file(fileName);
- Game* game = NULL;
+ QSharedPointer<Game> game;
if (file.open(QIODevice::ReadOnly))
{
QDomDocument xml;
@@ -146,7 +141,7 @@ void PluginLoader::Private::refresh(const QString& type)
if (xml.setContent(&file, &error, &line, &column))
{
if (xml.doctype().name() == "Sigmod")
- game = new Game(xml.documentElement());
+ game = QSharedPointer<Game>(new Game(xml.documentElement()));
else
KMessageBox::error(NULL, "The file is not a Sigmod.", "Invalid Sigmod");
}
@@ -215,13 +210,13 @@ PluginBase* PluginLoader::Private::factory(const QString& type, const QString& n
return NULL;
}
-Game* PluginLoader::Private::game(const QString& name)
+QSharedPointer<Game> PluginLoader::Private::game(const QString& name)
{
if (!m_games.contains(name))
refresh("Sigmod");
if (m_games.contains(name))
return m_games[name];
- return NULL;
+ return QSharedPointer<Game>();
}
void PluginLoader::Private::clean(const QString& type)
@@ -237,8 +232,5 @@ void PluginLoader::Private::clean(const QString& type)
}
}
if (type == "Sigmod")
- {
- qDeleteAll(m_games.values());
m_games.clear();
- }
}
diff --git a/sigtools/PluginLoader.h b/sigtools/PluginLoader.h
index fb000361..31d94b51 100644
--- a/sigtools/PluginLoader.h
+++ b/sigtools/PluginLoader.h
@@ -24,6 +24,9 @@
// KDE includes
#include <KService>
+// Qt includes
+#include <QtCore/QSharedPointer>
+
// Forward declarations
class KPluginFactory;
namespace Sigencore
@@ -54,12 +57,11 @@ namespace PluginLoader
SIGTOOLS_EXPORT QStringList availablePlugins(const QString& type, const bool forceLookup = false);
SIGTOOLS_EXPORT KService::Ptr service(const QString& type, const QString& name);
- SIGTOOLS_EXPORT Sigmod::Game* game(const QString& name);
-
SIGTOOLS_EXPORT Sigencore::Plugins::PluginBase* plugin(const QString& type, const QString& name);
SIGTOOLS_EXPORT Sigencore::Plugins::ArenaPlugin* pluginForArena(const QString& arena);
SIGTOOLS_EXPORT Sigencore::Plugins::CanvasPlugin* pluginForCanvas(const QString& canvas);
+ SIGTOOLS_EXPORT QSharedPointer<Sigmod::Game> game(const QString& name);
SIGTOOLS_EXPORT Sigencore::Arena* loadArena(const QString& arena, Sigscript::GameWrapper* game, Sigscript::Config* parent);
SIGTOOLS_EXPORT Sigencore::Canvas* loadCanvas(const QString& canvas, Sigscript::GameWrapper* game, Sigscript::Config* parent);
}
diff --git a/sigtools/PluginLoader_p.h b/sigtools/PluginLoader_p.h
index 89c37cda..baa29871 100644
--- a/sigtools/PluginLoader_p.h
+++ b/sigtools/PluginLoader_p.h
@@ -27,6 +27,7 @@
// Qt includes
#include <QtCore/QObject>
#include <QtCore/QPair>
+#include <QtCore/QSharedPointer>
// Forward declarations
namespace Sigencore
@@ -57,14 +58,14 @@ class SIGTOOLS_NO_EXPORT Private : public QObject
QStringList services(const QString& type);
KService::Ptr service(const QString& type, const QString& name);
Sigencore::Plugins::PluginBase* factory(const QString& type, const QString& name);
- Sigmod::Game* game(const QString& name);
+ QSharedPointer<Sigmod::Game> game(const QString& name);
protected:
void clean(const QString& type);
typedef QPair<KService::Ptr, Sigencore::Plugins::PluginBase*> Service;
typedef QMap<QString, Service> PluginList;
QMap<QString, PluginList> m_available;
- QMap<QString, Sigmod::Game*> m_games;
+ QMap<QString, QSharedPointer<Sigmod::Game> > m_games;
};
}
}