Implementierung von Multiplexing-Komponenten
Um in einem Multiplexer verwendet zu werden, müssen Site-Schnittstellen eine alternative
Standardimplementierung im Bereich des org.eclipse.ui.part.SiteMultiplexerInitializer
anmelden. Da dadurch der Bereich der Site erweitert wird, hat die spezifischere Multiplexer-Version
Priorität vor der Standardversion, wenn sie in einem Multiplexer verwendet wird.
Eine multiplexte Komponente verwendet nahezu immer folgendes Muster:
- Implementieren der Lebenszyklusschnittstelle 'INestedComponent';
- Aufnahme eines IMultiplexer in ihren Konstruktor und dessen Verwendung für den Zugriff auf die gemeinsam genutzte Version ihrer Schnittstelle;
- Speichern des Abschnittstatus;
- Verfolgung von Statusänderungen im untergeordneten Element und entsprechende Aktualisierung des gespeicherten Status;
- Jedesmal, wenn die Komponente aktiviert wird, sollte sie den gespeicherten Status an die gemeinsam genutzte Schnittstelle in dem Multiplexer weiterleiten;
- Während die Komponente aktiv ist, sollte sie Statusänderungen direkt an an die gemeinsam genutzte Schnittstelle weiterleiten.
Das folgende Beispiel zeigt den Code, der durch die Workbench verwendet wird, um die Schnittstelle ISelectionHandler mit ChildSelectionHandler zu multiplexen.
/**
* Multiplexte Version der Schnittstelle ISelectionHandler
*
* @Ab 3.1
*/
public class ChildSelectionHandler implements ISelectionHandler, INestedComponent {
private ISelectionHandler parent;
private ISelection selection;
private boolean isActive = false;
private IMultiplexer multiplexer;
public ChildSelectionHandler(IMultiplexer mplex) throws DependencyException {
this.multiplexer = mplex;
// Zugriff auf die gemeinsam genutzte ISelectionHandler, die multiplext wird (wir sollten sie
// nur ändern, wenn wir das aktive untergeordnete Element sind)
this.parent = (ISelectionHandler)
mplex.getSharedComponents().getComponent(ISelectionHandler.class);
// Setzen des ursprünglichen Status (die ursprüngliche Auswahl des Abschnitts ist Null
// bis er ausdrücklich gesetzt wird).
}
public IMultiplexer getMultiplexer() {
// Rückgabe des Multiplexers, der erstellt wurde, mit
return multiplexer;
}
public void activate() {
// Weiterleitung unserer gespeicherten Auswahl an die gemeinsam genutzte Schnittstelle
parent.setSelection(selection);
isActive = true;
}
public void deactivate() {
isActive = false;
}
public void setSelection(ISelection newSelection) {
// Erinnern Sie sich an die neue Auswahl des untergeordneten Elements
selection = newSelection;
if (isActive) {
// Wenn wir aktiv sind, leiten wir die Auswahl direkt an die gemeinsam
// genutzte Schnittstelle weiter
parent.setSelection(newSelection);
}
}
}
Hier ist das Formatierungssteuerzeichen des zugeordneten Erweiterungspunkts für ChildSelectionHandler.
<extension point="org.eclipse.core.component.types">
<component
implementation="org.eclipse.ui.internal.part.services.ChildSelectionHandler"
interface="org.eclipse.ui.part.services.ISelectionHandler"
singleton="false"
initializer="org.eclipse.ui.part.SiteMultiplexerInitializer"/>
</extension>