많은 컴포지트 부분에는 활성 하위의 개념이 있습니다. 이러한 부분은 현재
활성인 하위에 동적으로 종속성을 첨부하려 할 수 있습니다.
예를 들어 탭 폴더에 상위의 하위를 배열하는 보기를 작성하려는 경우 상위는
활성 하위의 이름 및 아이콘이 자신의 이름과 아이콘과 일치하도록 설정하려
할 수 있습니다. 다음 패턴을 사용하면 이 작업을 수행할 수 있습니다.
public class MultiplexNameView implements
IDisposable {
private Multiplexer mplex;
private ISite view1;
private ISite view2;
private Listener focusListener = new Listener() {
/* (non-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);
}
}
};
/**
* Component constructor. Do not invoke directly.
*/
public MultiplexNameView(Composite parent, IPartFactory
factory, INameable name) throws CoreException {
// Create a multiplexer. Redirect
our INameable to the multiplexer
mplex = new Multiplexer(new ContainerContext().addInstance(INameable.class,
name));
// Create a resource navigator.
Give the navigator a multiplexed INameable, but use
// defaults for all of the
other interfaces.
ContainerContext viewContext1 = new ContainerContext()
.delegateTo(INameable.class, mplex);
view1 = factory.createView(
IPageLayout.ID_RES_NAV, parent, viewContext1, null);
view1.getControl().addListener(SWT.Activate,
focusListener);
// Create property view. Give
the properties view a multiplexed INameable, but use
// defaults for everything
else.
ContainerContext viewContext2 = new ContainerContext()
.delegateTo(INameable.class, mplex);
view2 = factory.createView(IPageLayout.ID_PROP_SHEET,
parent, viewContext2, null);
view2.getControl().addListener(SWT.Activate,
focusListener);
// Make the navigator active
initially
mplex.setActivePart(view1);
parent.setLayout(new FillLayout());
}
/* (non-Javadoc)
* @see org.eclipse.core.component.IDisposable#dispose()
*/
public void dispose() {
mplex.dispose();
}
}