
Table of Contents
A plugin can be used to extend the functionality of Kst, without the need to recompile Kst. A properly configured plugin, once installed, will be automatically detected by Kst when it is next run and the associated functionality made available to the user.
There are three flavors of plugin and the one you select will depend on what you are trying to achieve. The “C” plugin should now be considered as deprecated by the Basic plugin.
Basic Plugin - written in C++ and derived from KstBasicPlugin.
Data Object Plugin - written in C++ and derived from KstDataObject.
“C” Plugin - written in C.
The purpose of a KstBasicPlugin plugin is to provide an implementation of the
virtual class KstDataObject via the abstract class KstBasicPlugin.
Plugin writers need to provide a class that inherits KstBasicPlugin and a
.desktop file.
Here is an example of the .desktop file named kstobject_myplugin.desktop:
[Desktop Entry]
Encoding=UTF-8
Type=Service
ServiceTypes=Kst Data Object
X-KDE-ModuleType=Plugin
X-KDE-Library=kstobject_fooplugin
X-Kst-Plugin-Author=Your Name
X-Kst-Plugin-Version=0.1
Name=Foo
Comment=A plugin that provides Foo algorithm.
Your C++ class should inherit KstBasicPlugin and provide implementations of the
pure virtual methods found in KstBasicPlugin:
//The implementation of the algorithm the plugin provides.
//Operates on the inputVectors, inputScalars, and inputStrings
//to produce the outputVectors, outputScalars, and outputStrings.
virtual bool algorithm() = 0;
//String lists of the names of the expected inputs.
virtual QStringList inputVectorList() const = 0;
virtual QStringList inputScalarList() const = 0;
virtual QStringList inputStringList() const = 0;
//String lists of the names of the expected outputs.
virtual QStringList outputVectorList() const = 0;
virtual QStringList outputScalarList() const = 0;
virtual QStringList outputStringList() const = 0;
Here is an example of a plugins header file:
#ifndef FOOPLUGIN_H
#define FOOPLUGIN_H
#include <kstbasicplugin.h>
class FooPlugin : public KstBasicPlugin {
Q_OBJECT
public:
FooPlugin(QObject *parent, const char *name, const QStringList &args);
virtual ~FooPlugin();
virtual bool algorithm();
virtual QStringList inputVectorList() const;
virtual QStringList inputScalarList() const;
virtual QStringList inputStringList() const;
virtual QStringList outputVectorList() const;
virtual QStringList outputScalarList() const;
virtual QStringList outputStringList() const;
};
And here is an example of a plugin's .cpp file:
#include "fooplugin.h"
#include <kgenericfactory.h>
static const QString& VECTOR_IN = KGlobal::staticQString("Vector In");
static const QString& SCALAR_IN = KGlobal::staticQString("Scalar In");
static const QString& STRING_IN = KGlobal::staticQString("String In");
static const QString& VECTOR_OUT = KGlobal::staticQString("Vector Out");
static const QString& SCALAR_OUT = KGlobal::staticQString("Scalar Out");
static const QString& STRING_OUT = KGlobal::staticQString("String Out");
K_EXPORT_COMPONENT_FACTORY( kstobject_fooplugin,
KGenericFactory<FooPlugin>( "kstobject_fooplugin" ) )
FooPlugin::FooPlugin( QObject */*parent*/, const char */*name*/, const QStringList &/*args*/ )
: KstBasicPlugin() {
}
FooPlugin::~FooPlugin() {
}
bool FooPlugin::algorithm() {
//Do something...
return true;
}
QStringList FooPlugin::inputVectorList() const {
return QStringList( VECTOR_IN );
}
QStringList FooPlugin::inputScalarList() const {
return QStringList( SCALAR_IN );
}
QStringList FooPlugin::inputStringList() const {
return QStringList( STRING_IN );
}
QStringList FooPlugin::outputVectorList() const {
return QStringList( VECTOR_OUT );
}
QStringList FooPlugin::outputScalarList() const {
return QStringList( SCALAR_OUT );
}
QStringList FooPlugin::outputStringList() const {
return QStringList( STRING_OUT );
}
#include "fooplugin.moc"
Default values for input scalars can be specified in the constructor of the basic plugin. In the above example the constructor could be modified as follows to set a default value of 1.0 for the input scalar as follows:
FooPlugin::FooPlugin( QObject */*parent*/, const char */*name*/, const QStringList &/*args*/ )
: KstBasicPlugin() {
_inputScalarDefaults.insert(SCALAR_IN, 1.0);
}
The KstBasicPlugin takes care of providing almost everything, including the
configuration widget for your plugin. It does not provide
the actual algorithm or the names of the inputs/outputs.
See the bin plugin for an example implementation.
Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team