Réglages et pages de réglages¶
Trois services apparentés couvrent la configuration : ISettings (stockage
clé/valeur persistant), IDocumentSettings (lectures superposées par
.editorconfig) et ISettingsRegistry (une page d'interface dans la boîte de
dialogue Préférences).
ISettings — configuration clé/valeur persistante¶
ctx.settings() renvoie un magasin restreint à votre plugin : l'hôte
l'enracine sous plugins/<plugin.id>/, de sorte que des noms de clés locaux
courts n'entrent jamais en collision avec l'éditeur ou les autres plugins. Les
clés utilisent / comme séparateur de chemin ("ui/fontSize").
class ISettings {
public:
bool contains(std::string_view key) const;
void remove(std::string_view key);
// Typed accessors -- defaultValue is returned when the key is missing
// or the stored value cannot convert to the requested type.
bool getBool (std::string_view key, bool defaultValue = false) const;
std::int64_t getInt (std::string_view key, std::int64_t defaultValue = 0) const;
double getDouble(std::string_view key, double defaultValue = 0.0) const;
std::string getString(std::string_view key, std::string_view defaultValue = {}) const;
std::vector<std::uint8_t> getBytes(std::string_view key) const;
void setBool / setInt / setDouble / setString / setBytes(...);
void sync(); // flush now; the host also syncs on shutdown
};
L'implémentation par défaut s'appuie sur QSettings (INI), mais c'est un détail
d'implémentation — l'interface est exempte de Qt et un plugin Python utilise
le même magasin via ctx.settings.
Réglages globaux de l'application (lecture seule)¶
ctx.appSettings() est une vue const de la configuration propre à
l'éditeur. Utilisez les constantes de clés de PluginApi/AppSettingsKeys.h
plutôt que des chaînes codées en dur. Pour réagir aux changements,
abonnez-vous à events::SettingsChanged (un scope vide signifie « quelque
chose a changé »).
Réglages au niveau du document (.editorconfig)¶
ctx.documentSettings() lit des valeurs par document qui superposent le
.editorconfig d'un projet à vos réglages stockés : pour une clé k, il
résout mte.<plugin.id>.<k> à partir des sections du .editorconfig
s'appliquant au chemin du document, se rabat sur ctx.settings(), puis sur
votre valeur par défaut. Les écritures passent toujours par
ctx.settings() — jamais en retour dans .editorconfig.
Une page dans la boîte de dialogue Préférences¶
L'interface de page est consciente de Qt, elle vit donc dans l'en-tête
optionnel PluginApi/Qt/ISettingsPage.h :
class ISettingsPage {
public:
std::string category() const; // tree path, e.g. "Plugins/Hello World"
std::string title() const; // page heading
QWidget* createWidget(QWidget* parent); // built lazily, at most once per dialog
void apply(); // OK/Apply -> write widget state to ISettings
void reset(); // Cancel/re-show -> reload from ISettings (optional)
std::string scope() const; // published via events::SettingsChanged (optional)
};
Enregistrez-la dans initialize() et conservez le jeton :
category()regroupe les pages dans l'arborescence de la boîte de dialogue ; les segments intermédiaires créent ou réutilisent des groupes. Par convention, les pages de plugins vivent sous"Plugins/<Name>".apply()est l'endroit où vous persistez ;reset()celui où vous rechargez après une annulation. N'écrivez pas les réglages depuis les signaux des widgets — le contrat de la boîte de dialogue est l'application différée.- Par convention,
scope()renvoie"plugins/<plugin.id>"afin que d'autres parties du code puissent réagir sélectivement aux changements de votre page viaevents::SettingsChanged. - Le
SettingsPageTokenrenvoyé révoque la page (et la libère) à sa destruction — faites-en lereset()dansshutdown()comme pour tout autre jeton.
Localisez chaque chaîne de la page et livrez les quatre catalogues — voir Traductions.
Plugins Python
Un plugin Python déclare la page équivalente de façon déclarative — un
formulaire JSON construit avec mte.ui
passé à ctx.settings_page.register(...) ; les valeurs liées avec
binds="settings:<key>" sont persistées dans le même magasin par plugin.
Voir la référence Python ctx.