diff options
-rw-r--r-- | sigtools/PluginLoader.cpp | 26 | ||||
-rw-r--r-- | sigtools/PluginLoader.h | 6 | ||||
-rw-r--r-- | sigtools/PluginLoader_p.h | 5 |
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; }; } } |