The KDevelop Extension Interfaces Library
Version CVS
Link with: -lkdevelopInclude path: -I$(kde_includes)/kdevelop/interfaces/extensions
What is the KDevelop extension
Extension is a KDevelop plugin which implements one of extension interfaces. Extension is usually not important enough to be returned by KDevApi and KDevPlugin methods. Therefore extension instance can be obtained by KDevPlugin::extension method.Note: extension plugins can be either core, global and project plugins. They are loaded in the same way other plugins are. But extensions differ from usual plugins.
Note: many plugins implementing extension interface can be created but only one of those should be loaded at a time. This can be accomplished by:
- using a shell plugin profile (as done in current generic shell implementation) - define different X-KDevelop-Properties for different extension implementations;
- writing project manager which looks into the project file and loads the neccesary extension.
Creating and using an extension
- Define a service, use following .desktop file:
[Desktop Entry] Encoding=UTF-8 Type=ServiceType X-KDE-ServiceType=KDevelop/MyExtension X-KDE-Derived=KDevelop/Plugin Name=My Extension Interface [PropertyDef::X-KDevelop-Version] Type=int - Define an abstract base class for an extension like:
class KDevMyExtension: public KDevPlugin { public: KDevMyExtension(const KDevPluginInfo *info, QObject* parent, const char* name) :KDevPlugin(info, parent, name) {} virtual void doSomething() = 0; };
- Create an usual plugin, but instead of setting service type to "KDevelop/Plugin", set:
ServiceTypes=KDevelop/MyExtension
- Use your extension:
KDevMyExtension *myext = extension<KDevMyExtension>("KDevelop/MyExtension"); if (sf) { // do something } else { // fail }
