Nastavenia a stránky nastavení¶
Konfiguráciu pokrývajú tri súvisiace služby: ISettings (trvalé úložisko kľúč/hodnota),
IDocumentSettings (čítanie vo vrstvách so .editorconfig) a ISettingsRegistry (stránka
rozhrania v dialógu Predvoľby).
ISettings — trvalá konfigurácia kľúč/hodnota¶
ctx.settings() vracia úložisko s rozsahom vášho zásuvného modulu: hostiteľ ho ukotví pod
plugins/<plugin.id>/, takže krátke lokálne názvy kľúčov nikdy nekolidujú s editorom ani
s inými modulmi. Kľúče používajú ako oddeľovač cesty / ("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
};
Predvolená implementácia stojí na QSettings (INI), ale to je implementačný detail — rozhranie je
bez Qt a zásuvný modul v Pythone používa to isté úložisko cez ctx.settings.
Nastavenia celej aplikácie (iba na čítanie)¶
ctx.appSettings() je konštantný pohľad na vlastnú konfiguráciu editora. Používajte
konštanty kľúčov z PluginApi/AppSettingsKeys.h, a nie reťazce napevno v kóde. Ak chcete
reagovať na zmeny, prihláste sa na events::SettingsChanged (prázdny scope znamená „zmenilo
sa čokoľvek“).
Nastavenia v rozsahu dokumentu (.editorconfig)¶
ctx.documentSettings() číta hodnoty pre daný dokument, ktoré ukladajú .editorconfig projektu
ako vrstvu nad vaše uložené nastavenia: pre kľúč k vyhodnotí mte.<plugin.id>.<k> zo sekcií
súboru .editorconfig platných pre cestu dokumentu, potom sa vráti k ctx.settings() a napokon
k vašej predvolenej hodnote. Zápisy idú vždy cez ctx.settings() — nikdy nie späť do
.editorconfig.
Stránka v dialógu Predvoľby¶
Rozhranie stránky pozná Qt, preto sa nachádza vo voliteľnej hlavičke
PluginApi/Qt/ISettingsPage.h. Samotný register (ISettingsRegistry, SettingsPageToken) je
bez Qt a nachádza sa v PluginApi/ISettingsRegistry.h — hlavička pre Qt ho zahŕňa, takže
zásuvný modul implementujúci stránku potrebuje aj tak iba jeden include:
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)
};
Zaregistrujte ju v initialize() a token si ponechajte:
category()zoskupuje stránky v strome dialógu; medziľahlé segmenty vytvárajú alebo znova používajú skupiny. Stránky zásuvných modulov sa podľa zvyklosti nachádzajú pod"Plugins/<Name>".apply()je miestom, kde ukladáte;reset()je miestom, kde po zrušení načítavate znova. Nastavenia nezapisujte zo signálov widgetov — kontraktom dialógu je odložené uplatnenie.- Podľa zvyklosti vracia
scope()hodnotu"plugins/<plugin.id>", aby iný kód mohol na zmeny vašej stránky reagovať výberovo cezevents::SettingsChanged. - Vrátený
SettingsPageTokenpri zničení stránku odvolá (a uvoľní) — vshutdown()na ňom zavolajtereset()ako na každom inom tokene.
Každý reťazec na stránke lokalizujte a dodajte všetkých pätnásť katalógov — pozri Preklady.
Zásuvné moduly v Pythone
Zásuvný modul v Pythone deklaruje rovnocennú stránku deklaratívne — ako formulár JSON
zostavený pomocou mte.ui a odovzdaný do
ctx.settings_page.register(...); hodnoty zviazané cez binds="settings:<key>" sa
uchovávajú v tom istom úložisku daného modulu. Pozri
referenciu ctx pre Python.