1
두 가지 관점에서 주어진보기 (두 가지 다른 관점에 추가됨)를 표시해야하는 응용 프로그램에서 문제가 발생했습니다 하나의 관점에서 동일한 내용으로 한 번 열면 즉, 관점 중 하나에서 관점을 열면 관점을 전환 할 때 다른 관점에 대해 열려 있어야합니다.둘 다 볼 수있는 두 개의 관점에 하나의보기 추가 하나의 관점에서 열린 하나의보기
두 가지 관점에서 주어진보기 (두 가지 다른 관점에 추가됨)를 표시해야하는 응용 프로그램에서 문제가 발생했습니다 하나의 관점에서 동일한 내용으로 한 번 열면 즉, 관점 중 하나에서 관점을 열면 관점을 전환 할 때 다른 관점에 대해 열려 있어야합니다.둘 다 볼 수있는 두 개의 관점에 하나의보기 추가 하나의 관점에서 열린 하나의보기
일부 확장에 대해 설명하는 동작은 Eclipse UI 지침 및 Eclipse UI 메타포 아이디어에 위배됩니다. 그러나 다음과 같은 코드로 원하는 동작을 얻을 수 있습니다.
public class MyViewPart extends ViewPart {
public final static String ID = "foo.bar.perspectivesync.view";
private final class PerspectiveListenerImplementation implements IPerspectiveListener4 {
final Set<String> PERSPECTIVE_IDS = new HashSet<String>(Arrays.asList("foo.bar.perspectivesync.p1",
"foo.bar.perspectivesync.p2"));
@Override
public void perspectiveActivated(final IWorkbenchPage page, final IPerspectiveDescriptor perspective) {
if (PERSPECTIVE_IDS.contains(perspective.getId())) {
if (!viewIsAlreadyInPage(MyViewPart.ID, page)) {
try {
page.showView(MyViewPart.ID);
}
catch (PartInitException e) {
// TODO log exception properly
e.printStackTrace();
}
}
}
}
private boolean viewIsAlreadyInPage(final String id, final IWorkbenchPage page) {
boolean result = false;
IViewReference[] viewReferences = page.getViewReferences();
for (IViewReference ref: viewReferences) {
if (id.equals(ref.getId())) {
result = true;
}
}
return result;
}
//@formatter:off
@Override public void perspectiveChanged(final IWorkbenchPage page, final IPerspectiveDescriptor perspective, final String changeId) {}
@Override public void perspectiveChanged(final IWorkbenchPage page, final IPerspectiveDescriptor perspective, final IWorkbenchPartReference partRef, final String changeId) {}
@Override public void perspectiveSavedAs(final IWorkbenchPage page, final IPerspectiveDescriptor oldPerspective, final IPerspectiveDescriptor newPerspective) {}
@Override public void perspectiveOpened(final IWorkbenchPage page, final IPerspectiveDescriptor perspective) {}
@Override public void perspectiveDeactivated(final IWorkbenchPage page, final IPerspectiveDescriptor perspective) {}
@Override public void perspectiveClosed(final IWorkbenchPage page, final IPerspectiveDescriptor perspective) {}
@Override public void perspectivePreDeactivate(final IWorkbenchPage page, final IPerspectiveDescriptor perspective) {}
//@formatter:on
}
private final IPerspectiveListener4 perspectiveListener = new PerspectiveListenerImplementation();
@Override
public void init(final IViewSite site) throws PartInitException {
super.init(site);
site.getWorkbenchWindow().addPerspectiveListener(perspectiveListener);
}
@Override
public void dispose() {
getSite().getWorkbenchWindow().removePerspectiveListener(perspectiveListener);
super.dispose();
}
//@formatter:off
@Override public void createPartControl(final Composite parent) {}
@Override public void setFocus(){}
// @formatter:on
}