Hallo,
Soekkle hat gefragt wie er eigene Settings für sein Plugin hinterlegen kann. Damit es mal öffentlich dokumentiert ist, hier die Antwort
1. Registrieren von Settings:
Sowohl in der GUI als auch im Kernel kann mit folgendem Code ein Setting registriert werden:
//In this example I am registering an Integer Setting which is Application specific and can range from 0 > 20.
var metadata = new SettingsMetadata(ESettingsRegisterType.APPLICATION, "<Category>", "<SettingName>", "<UniqueKeyToIdentifySetting, e.g. MYPLUGIN.MYSETTING>", "<Description>", null);
/*
* The last parameter is "List of Values in case Value Type is an EnumType, otherwise null".
* As we want to register an int, it is null
*/
metadata.Min = 0;
metadata.Max = 20;
SettingsManager.getInstance().registerSetting(metadata, 1);
//The last parameter is the initial Value and also describes the Type we want to have. If we wanted to register a "String" Setting, we would simply provide a String Value as last Parameter
=> WICHTIG: In der GUI gibt es die Unterscheidung zwischen GUI Setting und Setting. Ein GUI Setting ist ein Setting, welches nur für die GUI gilt, also NICHT im Kernel gespeichert wird. Alle anderen Settings werden im Kernel gespeichert und stehen dadurch allen GUIs sowie dem Kernel selbst zur Verfügung. Logischerweise kann auf diese Settings auch nur zugegriffen werden, wenn die GUI Verbunden ist. GUI Settings können auch Ohne Verbindung gelesen werden.
2. Darstellen von Settings
Settings können in den Vorhandenen Kategorien angezeigt werden. Dazu einfach bei "<Category>" Eintragen in welcher Kategorie (e.g. "HAL") Das Setting angezeigt werden soll.
3. Eigene Kategorie erzeugen
Auch das geht:
//In der Gui in der Init Methode des GUI Plugins
var myPluginNode = new ConfigurableSettingsNode("Settings:MyPlugin", "MyPlugin", "image.png");
//Image File must be placed in Kernel or GUI Symbols Folder and should be of Size 32x32
var branchId = SettingsManager.getInstance().GetSettignsBranchID();
var branch = PEManager.getInstance().GetBranchByID(branchId);
//Add Node to Branch
branch.AddRecursive(branch.ID, myPluginNode);
//Now you have a node and all Settings in Category "MyPlugin" will be shown there
4. Auslesen / Schreiben von Settings
SettingsManager.getInstance().setSetting(ESettingsType.APPLICATION, "MYPLUGIN.MYSETTING", 17);
var value = SettingsManager.getInstance().getSetting<int>(ESettingsType.APPLICATION, "MYPLUGIN.MYSETTING");
5. Events
SettingsManager.getInstance().SettingChanged += MySettingsHandler;
private void MySettingsHandler(object sender, SettingChangedEventArgs args)
{
if(args.PropertyName == "MYPLUGIN.MYSETTING")
{
var v = args.NewValue;
//Do whatever with new Value
}
}
Bei Fragen oder Fehlern bitte posten