Selektion
Die Eigenschaften Selection und SelectionPropagation steuern das Verhalten eines Fensters bezüglich der Selektion.
Globale Selektion
Zahlreiche Befehle benötigen eine Menge von Modellelementen, auf denen sie ausgeführt werden. Ein einfaches Beispiel ist der Befehl Aus Modell löschen. Um diese Elementmenge festzulegen, wird in der Regel in einem Fenster eine Selektion vorgenommen, beispielsweise im Modellbaum oder in einem Diagramm. Da viele Fenster gleichzeitig geöffnet sein können, die eine Selektion von Modellelementen beinhalten, ergibt sich die Frage, auf welche dieser Elementmengen ein Menübandbefehl wie Aus Modell löschen angewendet wird. Es muss also einen Mechanismus geben, der eine der Selektionen als die momentan gültige festlegt. Diese Selektion wird als "globale Selektion" bezeichnet.
-
Die Statusleiste zeigt die globale Selektion an.
-
Fenster wie das Detail- und das Eigenschaftenfenster passen ihren Inhalt an die globale Selektion an
-
Befehle auf Modellelementen beziehen sich auf die globale Selektion.
Hinweis
Es gilt die Regel, dass das aktive Fenster die globale Selektion vorgibt.
Technisch realisiert wird die Behandlung der globalen Selektion mittels der beiden IWorkArea-Eigenschaften Selection und SelectionPropagation.
Szenario 1 - Fenster mit Elementselektion
Ein Fenster, in dem eine Selektion von Modellelementen vorgenommen werden kann, sollte die beiden Eigenschaften wie folgt behandeln:
-
SelectionPropagation ist auf SelectionType.ContextElement zu setzen.
(Der Wert ContextElement signalisiert dem Framework, dass im Fenster Modellelemente selektiert werden können, die die globale Selektion darstellen, wenn das Fenster aktiv ist.)
-
Für die Eigenschaft Selection ist eine private Variable vom Typ ElementSet bereitzustellen, die über den Setter gesetzt und vom Getter geliefert wird.
(Bei einem Wechsel des aktiven Fensters aktualisiert das Framework ggf. automatisch die globale Selektion. Dazu muss es die Selektion im nun aktiven Fenster ermitteln können. Diesem Zweck dient die Eigenschaft Selection.)
-
Wird im Fenster die Elementselektion geändert, dann ist über den Selection-Setter die neue Selektion in die private Variable zu übertragen. Nachfolgend ist die statische Methode WorkArea.TransferSelection aufzurufen.
(Ändert sich die Selektion im aktiven Fenster, dann muss das Framework benachrichtigt werden, damit es die globale Selektion anpassen kann. Dazu wird die Methode TransferSelection aufgerufen.)
Hinweis
Zur Erzeugung eines Fensters mit Elementselektion siehe das Sample MID.Innovator.Plugin.Sample.Selection1.
Szenario 2 - Fenster mit einer Abhängigkeit von der Selektion
Fenster wie das Detail- und das Eigenschaftenfenster passen ihren Inhalt an die globale Selektion an. Ein derartiges Fenster ist wie folgt zu implementieren:
-
SelectionPropagation ist auf SelectionType.None zu setzen.
(Der Wert None signalisiert dem Framework, dass im Fenster keine Modellelemente selektiert werden können und dieses damit keinen Einfluss auf die globale Selektion hat.)
-
Der Selection-Getter liefert null und der Setter bleibt ohne Aktion.
-
Eine SelectionChanged-Nachricht ist in der Methode MessageHandler so zu verarbeiten, dass der Fensterinhalt der globalen Selektion entsprechend aktualisiert wird.
(Die SelectionChanged-Nachricht wird vom Framework bei Änderung der globalen Selektion generiert und an alle Fenster gesendet.)
Hinweis
Zur Erzeugung eines Fensters mit einer Abhängigkeit von der Selektion siehe das Sample MID.Innovator.Plugin.Sample.Selection2.
Szenario 3 - Fenster ohne Selektionsbezug
Einige wenige Fenster, wie z.B. der Info-Bereich, geben weder die Selektion vor, noch hängen sie davon ab. Ein derartiges Fenster ist wie folgt zu implementieren:
-
SelectionPropagation ist auf SelectionType.None zu setzen.
-
Der Selection-Getter liefert null und der Setter bleibt ohne Aktion.
Hinweis
Zur Erzeugung eines Fensters ohne Selektionsbezug siehe das Sample MID.Innovator.Plugin.Sample.HelloToolWindow.