Écrire un plugin natif¶
Un plugin natif minimal, c'est une classe, une macro de fabrique, un fichier
JSON et un court CMakeLists.txt. Vous pouvez l'écrire entièrement hors de
l'arborescence, contre le Plugin SDK — aucune copie des sources de MTE n'est
requise.
Natif ou Python ?
Cette page couvre les plugins C++ natifs (compilés en
.dll/.so/.dylib et chargés par le chargeur Qt). Si vous préférez
livrer un dossier de fichiers .py que l'éditeur lance comme
sous-processus, consultez les
plugins Python — même surface PluginApi,
backend différent, aucun compilateur requis.
Brouillon
Ce guide pas à pas s'appuie sur PLUGIN_ARCHITECTURE.md ; vérifiez le nom
exact du paquet SDK et les arguments de mte_add_plugin() par rapport au
SDK livré avant de vous y fier.
1. Implémenter IPlugin¶
#include <PluginApi/IPlugin.h>
#include <PluginApi/IPluginContext.h>
class HelloWorldPlugin : public MTE::plugin::IPlugin {
public:
MTE::plugin::PluginInfo info() const override {
return { "org.mte.helloworld", "Hello World", "1.0.0",
"Example Vendor", "Says hi.", MTE_PLUGIN_API_VERSION };
}
bool initialize(MTE::plugin::IPluginContext& ctx) override {
m_cmd = ctx.commands().registerCommand(
{ "helloworld.sayHi", "Say Hi", "Ctrl+Alt+H", "Hello" },
[&ctx] { ctx.log().log(MTE::plugin::LogLevel::Info, "Hi!"); });
m_menu = ctx.menus().addItem("Plugins/Say Hi", "helloworld.sayHi");
return true;
}
void shutdown() noexcept override {} // tokens tear down automatically
private:
MTE::plugin::CommandToken m_cmd;
MTE::plugin::MenuToken m_menu;
};
2. Exporter la fabrique (backend natif Qt)¶
#include <PluginApi/Qt/PluginQtGlue.h>
class HelloWorldFactory : public QObject, public MTE::plugin::IPluginFactory {
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.mte.IPluginFactory/1" FILE "plugin.json")
Q_INTERFACES(MTE::plugin::IPluginFactory)
public:
std::unique_ptr<MTE::plugin::IPlugin> create() override {
return std::make_unique<HelloWorldPlugin>();
}
};
3. Le décrire dans plugin.json¶
{
"id": "org.mte.helloworld",
"name": "Hello World",
"version": "1.0.0",
"apiVersion": 1,
"entry": "native",
"requires": [],
"order": 600,
"menus": [
{ "title": "Plugins", "barPriority": 570, "itemPriority": 100 }
]
}
L'apiVersion déclaré ici et celui renvoyé par info() doivent tous deux
être égaux à MTE_PLUGIN_API_VERSION, sinon l'hôte refuse de charger le
plugin.
Attribuer les bibliothèques embarquées — thirdParty¶
Si votre plugin embarque ou lie un composant tiers, déclarez-le dans un tableau
optionnel thirdParty afin que l'éditeur puisse honorer ses obligations
d'attribution :
"thirdParty": [
{ "name": "Qt WebEngine", "license": "LGPL-3.0",
"url": "https://doc.qt.io/qt-6/qtwebengine-index.html",
"file": "QtWebEngine-LGPLv3.txt" }
]
Chaque entrée requiert un name (les entrées sans nom sont ignorées) ;
license, url et file sont optionnels. Votre plugin est propriétaire des
textes de licence — livrez-les à côté du plugin sous
Plugins/Licenses/<your-plugin-id>/, où file est le nom de base du fichier.
La boîte de dialogue À propos liste les composants thirdParty de chaque
plugin installé et oriente les utilisateurs vers ce dossier ; le cœur de
l'éditeur ne porte jamais les textes tiers d'un plugin à sa place. (Le plugin
fourni HtmlPreviewPlugin, qui embarque QtWebEngine + Chromium, est l'exemple
de référence.)
4. Le compiler¶
Utilisez l'assistant CMake du SDK :
find_package(MTEPluginSDK REQUIRED)
mte_add_plugin(NAME HelloWorldPlugin
SOURCES Src/HelloWorldPlugin.cpp
# TRANSLATIONS Translations/HelloWorld_en.ts ...
)
5. Installer et lancer¶
Soit vous compressez la bibliothèque compilée + plugin.json en
<name>.mteplugin et l'installez via Préférences ▸ Extensions ▸
Installer… (le paquet est validé — manifeste, sûreté de l'archive et
métadonnées embarquées dans le binaire — avant que quoi que ce soit ne soit
touché), soit vous déposez les fichiers à la main dans un répertoire de plugins
découvert (voir la
vue d'ensemble de l'architecture). Redémarrez
l'éditeur ; activez le plugin dans Préférences ▸ Extensions si nécessaire.
Étapes suivantes¶
- Vue d'ensemble de l'API de plugin — cycle de vie, jetons et le tableau complet des services
- Commandes et menus
- Panneaux, onglets et barre d'état
- Pages de réglages
- Événements
- Traductions