Wiele części złożonych zawiera informacje na temat aktywnego elementu potomnego. Mogą one dynamicznie podłączać
zależność elementu potomnego, który jest aktywny.
Możliwe jest na przykład utworzenie widoku, który będzie rozmieszczał swoje elementy potomne w folderze
kart. Element macierzysty może ustawić własną nazwę i ikonę w taki sposób, aby były zgodne z nazwą i ikoną
aktywnego elementu potomnego. Można to osiągnąć za pomocą następującego wzorca:
public class MultiplexNameView implements
IDisposable {
private Multiplexer mplex;
private ISite view1;
private ISite view2;
private Listener focusListener = new Listener() {
/* (komentarz nienależący do dokumentacji Javadoc)
* @see 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);
}
}
};
/**
* Konstruktor komponentu. Nie należy wywoływać bezpośrednio.
*/
public MultiplexNameView(Composite parent, IPartFactory
factory, INameable name) throws CoreException {
// Tworzenie multipleksera. Przekierowanie interfejsu INameable do multipleksera.
mplex = new Multiplexer(new ContainerContext().addInstance(INameable.class,
name));
// Tworzenie nawigatora zasobów.
Należy przypisać nawigatorowi multipleksowany interfejs INameable, ale
// użyć wartości domyślnych dla innych interfejsów.
ContainerContext viewContext1 = new ContainerContext()
.delegateTo(INameable.class, mplex);
view1 = factory.createView(
IPageLayout.ID_RES_NAV, parent, viewContext1, null);
view1.getControl().addListener(SWT.Activate,
focusListener);
// Tworzenie widoku właściwości. Należy przypisać
widokowi właściwości multipleksowany interfejs INameable, ale
// użyć wartości domyślnych we wszystkich innych przypadkach.
ContainerContext viewContext2 = new ContainerContext()
.delegateTo(INameable.class, mplex);
view2 = factory.createView(IPageLayout.ID_PROP_SHEET,
parent, viewContext2, null);
view2.getControl().addListener(SWT.Activate,
focusListener);
// Ustawianie, aby nawigator był wstępnie aktywny.
mplex.setActivePart(view1);
parent.setLayout(new FillLayout());
}
/* (komentarz nienależący do dokumentacji Javadoc)
* @see org.eclipse.core.component.IDisposable#dispose()
*/
public void dispose() {
mplex.dispose();
}
}