2012-05-25 3 views

답변

0

일부 확장에 대해 설명하는 동작은 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 

}