Instellingen en instellingenpagina's¶
Drie verwante diensten dekken de configuratie: ISettings (blijvende
sleutel/waarde-opslag), IDocumentSettings (met .editorconfig gelaagde
lezingen) en ISettingsRegistry (een interfacepagina in het venster Voorkeuren).
ISettings — blijvende sleutel/waarde-configuratie¶
ctx.settings() levert een opslag op die tot uw plug-in beperkt is: de host
wortelt haar onder plugins/<plugin.id>/, zodat korte lokale sleutelnamen nooit
botsen met de editor of met andere plug-ins. Sleutels gebruiken / als
padscheiding ("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
};
De standaardimplementatie steunt op QSettings (INI), maar dat is een
implementatiedetail — de interface is vrij van Qt en een Python-plug-in gebruikt
dezelfde opslag via ctx.settings.
Instellingen van de hele toepassing (alleen-lezen)¶
ctx.appSettings() is een const kijk op de eigen configuratie van de editor.
Gebruik de sleutelconstanten uit PluginApi/AppSettingsKeys.h in plaats van
tekenreeksen hard in de code te schrijven. Om op wijzigingen te reageren schrijft u
zich in op events::SettingsChanged (een lege scope betekent «er is iets
veranderd»).
Instellingen met documentbereik (.editorconfig)¶
ctx.documentSettings() leest waarden per document die de .editorconfig van een
project over uw bewaarde instellingen leggen: voor een sleutel k lost hij
mte.<plugin.id>.<k> op uit de .editorconfig-secties die op het pad van het
document van toepassing zijn, valt terug op ctx.settings(), en dan op uw
standaardwaarde. Schrijfacties gaan altijd via ctx.settings() — nooit terug de
.editorconfig in.
Een pagina in het venster Voorkeuren¶
De pagina-interface kent Qt, dus zij woont in de optionele header
PluginApi/Qt/ISettingsPage.h. Het register zelf (ISettingsRegistry,
SettingsPageToken) is vrij van Qt en woont in PluginApi/ISettingsRegistry.h —
de Qt-header voegt hem in, dus een plug-in die een pagina implementeert heeft
alsnog maar één invoeging nodig:
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)
};
Registreer haar in initialize() en houd het token vast:
category()groepeert pagina's in de boom van het venster; tussenliggende segmenten maken groepen aan of hergebruiken ze. Plug-inpagina's wonen volgens afspraak onder"Plugins/<Name>".apply()is waar u wegschrijft;reset()is waar u na een annulering opnieuw laadt. Schrijf geen instellingen vanuit signalen van widgets — het contract van het venster is uitgesteld toepassen.- Volgens afspraak levert
scope()"plugins/<plugin.id>"op, zodat andere code selectief op de wijzigingen van uw pagina kan reageren viaevents::SettingsChanged. - Het teruggegeven
SettingsPageTokentrekt de pagina in (en geeft haar vrij) wanneer het vernietigd wordt — voer erreset()op uit inshutdown(), net als bij elk ander token.
Lokaliseer elke tekenreeks op de pagina en lever alle vijftien catalogi mee — zie Vertalingen.
Python-plug-ins
Een Python-plug-in verklaart de gelijkwaardige pagina declaratief: een
JSON-formulier gebouwd met mte.ui en
doorgegeven aan ctx.settings_page.register(...); waarden die met
binds="settings:<key>" gekoppeld zijn worden naar dezelfde opslag per
plug-in weggeschreven. Zie de
Python-naslag voor ctx.