Zum Hauptinhalt springen

Plugin Optionen Dialog erzeugen

Sollte Ihr Plugin Einstellungen benötigen die der Admin Benutzter im AppBuilder variable einstellen können soll dann können Sie ein "OptionPlugIn" benutzten.

Hier kann der Admin Anwender dann z.B. Datenbankverbindungsnamen, Farbeinstellungen etc einstellen die ihr Plugin ggf benötigt.

Das nutzen eines Optionen Plugins ist optional und kann vom Anwender mittels des Knopfes "Plugin Einstellungen" im AppBuilder geöffnet werden.

Hier zum Bespiel der Optionen Dialog des Schrägbildviewer Plugins.

Zum anlegen eines Optionen Plugins erzeugen Sie eine Klasse mit dem Namen "OptionPlugIn" und leiten sie dieses von "Mum.Geo.PlugIns.AppBuilderOptionPlugIn" ab. Achtung: Die Klasse muss fix "OptionPlugIn" heisen und muss exakt so geschrieben werden.

Wenn im AppBuilder der Knopf "Plugin Einstellungen" gedrückt wird dann wird die Klasse "OptionPlugIn" geladen und die Methode "Open" ausgeführt.

Beachten Sie das Sie in dieser Klasse keine Zugriff auf MapEdit Client Funktionen haben (wie this.Map etc) Im AppBuilder wird einzig und alleine diese Klasse geladen und sonst keine anderen Klassen ihres Plugins.

Hier das Grundgerüst:

using Mum.Geo.PlugIns;
using XSystem;

namespace MySample1
{

public class OptionPlugIn : Mum.Geo.PlugIns.AppBuilderOptionPlugIn
{
public override void Open(AppBuilderOptionPlugInArgs args)
{
//Hier einen modales Fenster anzeigen
}
}
}
~~~ cs


Hier ein ausführliches Beispiel wie ein Optionen Dialog aussehen kann.

~~~ cs
using Mum.Geo.PlugIns;
using Mum.Geo.ClientDb;
using XSystem;

namespace MySample1
{

public class OptionPlugIn : Mum.Geo.PlugIns.AppBuilderOptionPlugIn
{
public override void Open(AppBuilderOptionPlugInArgs args)
{
//Lade wenn vorhanden die existierenden Einstellungen.
//In diesem Beispiel werden die Optionen auf dem MapEdit Server
//Projektweise und für Alle Benutzer gespeichert.

MyOptions opt = new MyOptions();
var loadResult = args.Repository.Settings.Load(Mum.Geo.ClientDb.SettingStorageLocation.Server, Mum.Geo.ClientDb.SettingStorageDependency.Project, Mum.Geo.ClientDb.SettingStoragePrivacy.AllUsers, typeof(MyOptions));

if (loadResult.Succeeded)
{
opt = (MyOptions)loadResult.Data;
}

//Create a Auto Window
//Auto window is a easy way to create Simple UI without a
//Form Designer with a few simple lines of code.
XAutoWindow w = new XAutoWindow();
w.Title = "My Options";
w.WindowSize = XAutoWindowSize.Big;

//Add Controls that are not Bound to Datasource just to display Values
w.AddGroup("Hey Ho");
w.AddUnbound.LabelBox("Project Name:", args.ProjectName);
w.AddUnbound.LabelBox("Display Model: ", args.ProjectMetadata.DisplayModels.Count.ToString());
//Sample for a Connection + Table Connection at the Same Time
var selBoxTableAndConnection = w.AddUnbound.SelectionBox("Connection/Table:");
args.Repository.InitConnectionAndTableBox(selBoxTableAndConnection);


//Add Control that are Bound to your MyOptions Data
w.AddGroup("My Options");
w.AddTextBox(nameof(opt.Whatever), "Whatever:"); //creats a TextBox that is bound to the Property Whatever

var selBoxConnection = w.AddSelectionBox(nameof(opt.ConnectionName), "Connection:", true);
args.Repository.InitConnectionBox(selBoxConnection);

var selBoxTable = w.AddSelectionBox(nameof(opt.TableName), "Geometry Table:", true);
args.Repository.InitGeometryTableBox(selBoxConnection, selBoxTable);

w.DataSourceObject = opt; //Don't forget to set the Source


if (w.ShowDialog())
{
//Save Options when window is closed
var saveResult = args.Repository.Settings.Save(Mum.Geo.ClientDb.SettingStorageLocation.Server, Mum.Geo.ClientDb.SettingStorageDependency.Project, Mum.Geo.ClientDb.SettingStoragePrivacy.AllUsers, opt);
}


//Notes:
//To get a Connection use:
//args.Repository.GetDbConnection("connectionname")

}
}

//Klasse die die Einstellungen Abbildet und Daten serializiert
//laed und speichert
public class MyOptions
{

public MyOptions()
{
this.ConnectionName = "";
this.TableName = "";
this.Whatever = "";
}

[SodSerializable]
public string ConnectionName { get; set; }

[SodSerializable]
public string TableName { get; set; }

[SodSerializable]
public string Whatever { get; set; }
}
}