Difference between revisions of "Projects/KDevelop4/LanguagePlugin"

Jump to: navigation, search
(the plugin)
Line 21: Line 21:
 
     Q_INTERFACES( KDevelop::ILanguageSupport )
 
     Q_INTERFACES( KDevelop::ILanguageSupport )
 
     public:
 
     public:
         explicit KDevQmlJsPlugin( QObject* parent, const QVariantList& args = QVariantList() );
+
         explicit KDevTestLangPlugin( QObject* parent, const QVariantList& args = QVariantList() );
 
          
 
          
 
         virtual KDevelop::ParseJob* createParseJob(const KUrl& url);
 
         virtual KDevelop::ParseJob* createParseJob(const KUrl& url);
Line 32: Line 32:
 
<pre>
 
<pre>
  
#include "kdevqmljsplugin.h"
+
#include "kdevtestlangplugin.h"
 
#include <KPluginFactory>
 
#include <KPluginFactory>
 
#include <KAboutData>
 
#include <KAboutData>
  
#include "qmljsparsejob.h"
+
#include "testlangparsejob.h"
  
K_PLUGIN_FACTORY(KDevQmlJsSupportFactory, registerPlugin<KDevQmlJsPlugin>(); )
+
K_PLUGIN_FACTORY(KDevTestLangSupportFactory, registerPlugin<KDevTestLangPlugin>(); )
 
// note: "kdevtestlangsupport" must be the same as you used in X-KDE-PluginInfo-Name!
 
// note: "kdevtestlangsupport" must be the same as you used in X-KDE-PluginInfo-Name!
K_EXPORT_PLUGIN(KDevQmlJsSupportFactory(KAboutData("kdevtestlangsupport","kdevtestlang", ki18n("TestLanguage Support"), "0.1", ki18n("Support for Some Test Language"), KAboutData::License_GPL)))
+
K_EXPORT_PLUGIN(KDevTestLangSupportFactory(KAboutData("kdevtestlangsupport","kdevtestlang", ki18n("TestLanguage Support"), "0.1", ki18n("Support for Some Test Language"), KAboutData::License_GPL)))
  
KDevQmlJsPlugin::KDevQmlJsPlugin(QObject* parent, const QVariantList& )
+
KDevTestLangPlugin::KDevTestLangPlugin(QObject* parent, const QVariantList& )
     : KDevelop::IPlugin( KDevQmlJsSupportFactory::componentData(), parent )
+
     : KDevelop::IPlugin( KDevTestLangSupportFactory::componentData(), parent )
 
     , KDevelop::ILanguageSupport()
 
     , KDevelop::ILanguageSupport()
 
{
 
{

Revision as of 21:39, 24 October 2012

.desktop file

In order to find your language support plugin, KDE needs a .desktop file with some meta information.

  • X-KDE-Library=... this must be the same as the name of your library, i.e. look into the CMakeLists.txt for your kde4_add_plugin line and use the same name
  • X-KDE-PluginInfo-Name=... this must be the same as the name of your plugin in the code, i.e. look into your main plugin .cpp file and find the K_EXPORT_PLUGIN line, more exactly the first argument to the KAboutData.

After installing your plugin, make sure to run kbuildsycoca4. For testing, try duchainify or ktraderclient.

the plugin

A basic plugin's header looks like this:

#include <interfaces/iplugin.h>
#include <language/interfaces/ilanguagesupport.h>

class KDevTestLangPlugin : public KDevelop::IPlugin, public KDevelop::ILanguageSupport
{
    Q_OBJECT
    Q_INTERFACES( KDevelop::ILanguageSupport )
    public:
        explicit KDevTestLangPlugin( QObject* parent, const QVariantList& args = QVariantList() );
        
        virtual KDevelop::ParseJob* createParseJob(const KUrl& url);
        virtual QString name() const;
};

An implementation could look like this:


#include "kdevtestlangplugin.h"
#include <KPluginFactory>
#include <KAboutData>

#include "testlangparsejob.h"

K_PLUGIN_FACTORY(KDevTestLangSupportFactory, registerPlugin<KDevTestLangPlugin>(); )
// note: "kdevtestlangsupport" must be the same as you used in X-KDE-PluginInfo-Name!
K_EXPORT_PLUGIN(KDevTestLangSupportFactory(KAboutData("kdevtestlangsupport","kdevtestlang", ki18n("TestLanguage Support"), "0.1", ki18n("Support for Some Test Language"), KAboutData::License_GPL)))

KDevTestLangPlugin::KDevTestLangPlugin(QObject* parent, const QVariantList& )
     : KDevelop::IPlugin( KDevTestLangSupportFactory::componentData(), parent )
     , KDevelop::ILanguageSupport()
{
    // NOTE: this is important!
    KDEV_USE_EXTENSION_INTERFACE(KDevelop::ILanguageSupport)
}

KDevelop::ParseJob* KDevTestLangPlugin::createParseJob(const KUrl& url)
{
    return new TestLangParseJob(url, this);
}

QString KDevTestLangPlugin::name() const
{
    // some unique id for your language
    return "testlang";
}

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V.Legal