Számos összetételrész rendelkezni fog egy aktív utód funkcióival. Az ilyen
részek esetén gyakori, hogy dinamikusan szeretnének egy függőséget csatolni az
aktuálisan aktív utódhoz.
Például előfordulhat, hogy létre szeretnénk hozni egy nézetet, amely elrendezi
az utódjait egy lapmappában. A szülő be szeretné állítani a saját nevét és
ikonját az aktív utódjának megfelelően. Ezt a következő minta alapján tehetjük
meg:
public class MultiplexNameView implements
IDisposable {
private Multiplexer mplex;
private ISite view1;
private ISite view2;
private Listener focusListener = new Listener() {
/* (nem Javadoc)
* @lásd: org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
*/
public void handleEvent(Event
e) {
if
(e.widget == view1.getControl()) {
mplex.setActivePart(view1);
} else
if (e.widget == view2.getControl()) {
mplex.setActivePart(view2);
}
}
};
/**
* A komponens konstruktora. Ne hívja meg közvetlenül.
*/
public MultiplexNameView(Composite parent, IPartFactory
factory, INameable name) throws CoreException {
// Többszöröző létrehozása. Az INameable
átirányítása a többszörözőhöz
mplex = new Multiplexer(new ContainerContext().addInstance(INameable.class,
name));
// Erőforrás-navigátor létrehozása.
A navigátornak egy többszörözött INameable felületet adjon, de
// az alapértelmezéseket
használja az összes többi felülethez.
ContainerContext viewContext1 = new ContainerContext()
.delegateTo(INameable.class, mplex);
view1 = factory.createView(
IPageLayout.ID_RES_NAV, parent, viewContext1, null);
view1.getControl().addListener(SWT.Activate,
focusListener);
// Tulajdonságnézet létrehozása. A tulajdonságok nézetnek
egy többszörözött INameable felületet adjon, de
// az alapértelmezéseket használja
minden máshoz.
ContainerContext viewContext2 = new ContainerContext()
.delegateTo(INameable.class, mplex);
view2 = factory.createView(IPageLayout.ID_PROP_SHEET,
parent, viewContext2, null);
view2.getControl().addListener(SWT.Activate,
focusListener);
// Tegye aktívvá a navigátor
kezdetben
mplex.setActivePart(view1);
parent.setLayout(new FillLayout());
}
/* (nem Javadoc)
* @lásd: org.eclipse.core.component.IDisposable#dispose()
*/
public void dispose() {
mplex.dispose();
}
}