summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-04-11 02:25:57 -0400
committerBen Boeckel <MathStuf@gmail.com>2009-04-11 02:27:39 -0400
commit885942085b71c8dde8680a9f565d2837245845fd (patch)
tree05659109c6bfd703b7a08d229da156df742ff437 /plugins
parent94b1a10f6b340f1827c90f3501cd0becca8ac11f (diff)
downloadsigen-885942085b71c8dde8680a9f565d2837245845fd.tar.gz
sigen-885942085b71c8dde8680a9f565d2837245845fd.tar.xz
sigen-885942085b71c8dde8680a9f565d2837245845fd.zip
Discover Kross plugins that are installed
Diffstat (limited to 'plugins')
-rw-r--r--plugins/arena/kross/SigenArenaKross.cpp18
-rw-r--r--plugins/arena/kross/SigenArenaKross.h5
2 files changed, 22 insertions, 1 deletions
diff --git a/plugins/arena/kross/SigenArenaKross.cpp b/plugins/arena/kross/SigenArenaKross.cpp
index 362640e4..892a6014 100644
--- a/plugins/arena/kross/SigenArenaKross.cpp
+++ b/plugins/arena/kross/SigenArenaKross.cpp
@@ -23,6 +23,8 @@
// KDE includes
#include <KIcon>
+#include <KServiceTypeTrader>
+#include <kross/core/manager.h>
SIGEN_ARENA_PLUGIN_VERSION(SigenArenaKross, "sigen_arena_kross", 000101)
@@ -33,6 +35,16 @@ using namespace Sigencore::Plugins;
SigenArenaKross::SigenArenaKross(QObject* parent, const QVariantList& args) :
ArenaPlugin(parent, args)
{
+ KService::List services;
+ const QString versionQuery = "";
+ QStringList interpreterQueries;
+ const QStringList interpreters = Kross::Manager::self().interpreters();
+ foreach (const QString& interpreter, interpreters)
+ interpreterQueries.append(QString("([X-Sigen-Kross-Interpreter] == %1)").arg(interpreter));
+ if (interpreterQueries.size())
+ services = KServiceTypeTrader::self()->query("Sigen/Arena/Kross", QString("([X-Sigen-MinVersion] <= 000101) and (%1)").arg(interpreterQueries.join(" or ")));
+ foreach (KService::Ptr service, services)
+ m_scripts[service->name()] = service;
}
SigenArenaKross::~SigenArenaKross()
@@ -41,16 +53,20 @@ SigenArenaKross::~SigenArenaKross()
QStringList SigenArenaKross::classList() const
{
- return QStringList();
+ return m_scripts.keys();
}
QString SigenArenaKross::description(const QString& name) const
{
+ if (m_scripts.contains(name))
+ return m_scripts[name]->comment();
return "(Unknown arena)";
}
QIcon SigenArenaKross::icon(const QString& name)
{
+ if (m_scripts.contains(name))
+ return KIcon(m_scripts[name]->icon());
return KIcon();
}
diff --git a/plugins/arena/kross/SigenArenaKross.h b/plugins/arena/kross/SigenArenaKross.h
index d8c3d226..d6984804 100644
--- a/plugins/arena/kross/SigenArenaKross.h
+++ b/plugins/arena/kross/SigenArenaKross.h
@@ -21,6 +21,9 @@
// Sigencore plugin includes
#include <sigencore/plugins/ArenaPlugin.h>
+// KDE includes
+#include <KService>
+
class SigenArenaKross : public Sigencore::Plugins::ArenaPlugin
{
Q_OBJECT
@@ -36,6 +39,8 @@ class SigenArenaKross : public Sigencore::Plugins::ArenaPlugin
Sigencore::Arena* createArena(const QString& name, Sigscript::GameWrapper* game, Sigscript::Config* parent);
protected slots:
void cleanupArena(Sigencore::Arena* arena);
+ private:
+ QMap<QString, KService::Ptr> m_scripts;
};
#endif