Többszöröző komponensek megvalósítása
Többszörözőben használathoz a helyfelületeknek be kell jegyezniük egy
alternatív alapértelmezett megvalósítást az org.eclipse.ui.part.SiteMultiplexerInitializer
hatókörrel. Mivel ez kiterjeszti a helyhatókört, ezért a specifikusabb
többszöröző változat nagyobb prioritást fog élvezni az alapértelmezett
változattal szemben a Többszörözőben használat során.
Egy töbszörözött komponens szinte minden esetben az alábbi mintát használja:
- Megvalósítja az INestedComponent életciklus felületet;
- Egy IMultiplexer felületet fogad a konstruktorában és a felületek osztott
változatának elérésére használja;
- Eltárolja a rész állapotát;
- Figyeli az állapotváltozásokat az utódban és ennek megfelelően frissíti a
tárolt állapotot;
- A komponens minden egyes aktiválásakor továbbítania kell a tárolt
állapotot az osztott felületnek a többszörözőben;
- Amíg a komponens aktív, továbbítania kell az állapotváltozásokat
közvetlenül az osztott felületnek.
Az alábbi példa a munkaterület által az ISelectionHandler felület
ChildSelectionHandler elemmel többszörözésére használt kódot mutatja be.
/**
* Az ISelectionHandler felület többszörözött változata
*
* A 3.1 változat óta
*/
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;
// Hozzáférés a többszörözendő megosztott ISelectionHandler elemhez (csak akkor kell
// módosítanunk, ha ez az objektum az aktív utód)
this.parent = (ISelectionHandler)
mplex.getSharedComponents().getComponent(ISelectionHandler.class);
// A kezdeti állapot beállítása (A rész kiinduló kijelölése üres,
// amíg kifejezetten be nem állítja azt).
}
public IMultiplexer getMultiplexer() {
// A többszöröző visszaadása, mellyel az objektum létrejött
return multiplexer;
}
public void activate() {
// A tárolt kijelölés továbbítása az osztott felülethez
parent.setSelection(selection);
isActive = true;
}
public void deactivate() {
isActive = false;
}
public void setSelection(ISelection newSelection) {
// Az utód új kijelölésének megjegyzése
selection = newSelection;
if (isActive) {
// Ha aktív az objektum, akkor továbbítani kell a kijelölést közvetlenül az osztott
// felülethez
parent.setSelection(newSelection);
}
}
}
Ez a ChildSelectionHandler osztályhoz tartozó kiterjesztési pont kódja.
<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>