-
Notifications
You must be signed in to change notification settings - Fork 23
[FR] 2.1 Créer le projet (Partie 2) : création de plugin
Une fois que vous avez votre projet de prêt, il va falloir y mettre un interface à Sielo. C'est cette classe qui permettra la communication avec le navigateur et elle doit hériter à la fois de QObject
et de PluginInterface
.
MyPlugin.hpp
#include "Plugins/PluginInterface.hpp"
#include <QObject>
namespace Sn
{
class MyPlugin: public QObject, public PluginInterface {
Q_OBJECT
Q_INTERFACES(Sn::PluginInterface)
Q_PLUGIN_METADATA(IID "com.me.MyPlugin")
public:
MyPlugin();
PluginProp pluginProp();
void init(InitState state, const QString& settingsPath);
void unload();
bool testPlugin();
};
}
MyPlugin.cpp
#include "MyPlugin.hpp"
#include "Application.hpp"
MyPlugin::MyPlugin()
{
// Empty
}
PluginProp MyPlugin::pluginProp()
{
PluginProp props{};
props.name = "My Plugin";
props.info = "Short plugin description";
props.desc = "Plugin description";
props.icon = ":images/icon.png"
props.version = "1.0.0";
props.author = "Victor DENIS <[email protected]";
props.hasSettings = false;
return props;
}
void MyPlugin::init(InitState state, const QString& settingsPath)
{
// ...
}
void MyPlugin::unload()
{
// ...
}
bool MyPlugin::testPlugin()
{
return Application::currentVersion == "1.17.04";
}
Q_INTERFACES(Sn::PluginInterface)
Q_PLUGIN_METADATA(IID "com.me.MyPlugin")
Qu'est-ce que c'est que ça pour commencer ? Et bien, c'est ce qui indique que votre classe est une interface de plugin de Sielo. L'interface est la même pour tous les plugin, mais vous pouvez changer l'IID (qui correspond à l'identifiant du plugin) de façon à ce qu'il soit unique à votre plugin.
MyPlugin();
PluginProp pluginProp();
void init(InitState state, const QString& settingsPath);
void unload();
bool testPlugin();
Ce sont les fonctions minimale de l'interface. L'interface hérite d'une classe abstraite, ce qui veut dire que toutes les fonctions citées ci-dessus doivent être implémenté !
MyPlugin()
Le constructeur de l'interface. On évite d'y faire des opérations lourdes car ils sera toujours appelé, y compris quand l'utilisateur n'a pas choisi de le charger.
PluginProp MyPlugin::pluginProp()
{
PluginProp props{};
props.name = "My Plugin";
props.info = "Short plugin description";
props.desc = "Plugin description";
props.icon = ":images/icon.png"
props.version = "1.0.0";
props.author = "Victor DENIS <[email protected]";
props.hasSettings = false;
return props;
}
Cette fonction donne à Sielo tout ce qu'il y a à savoir sur votre plugin. il faut bien faire attention à retourner l'objet créé ! L'icone n'est pas obligatoire.
void init(InitState state, const QString& settingsPath)
C'est la fonction qui est appelée quand le plugin est chargé. On verra plus tard que c'est ici qu'on enregistre les événements que l'on souhaite récupérer où que l'on créer les SideBar.
void unload()
C'est ici qu'il faudra penser à détruire les objets qu'il faut détruire.
bool MyPlugin::testPlugin()
{
return Application::currentVersion == "1.17.04";
}
Cela permet à Sielo de savoir s'il peut charger le plugin où non. Si la fonction retourne true
alors Sielo peut utiliser le plugin, si elle retourne false
alors le plugin ne sera pas chargé. Généralement on teste la version pour savoir si l'API utilisé par le plugin correspond à celle utilisé par le navigateur du client.
- Introduction
- Créer le projet [Partie 1]
- Créer le projet [Partie 2]
- Les événements [Partie 1]