2012-04-17 2 views
2

"확장"을 통해 생성 된 두 개의 뷰가있는 원근감이 있습니다. 첫 번째보기에는 표가 있고 두 번째보기에는 나무가 있습니다. 응용 프로그램이 열려있을 때 첫 번째보기 만 표시하고 사용자가 표에서 항목을 선택하면이 항목 이름을 두 번째보기의 텍스트 필드에 놓고 두 번째보기가 열려있는 동안 첫 번째보기를 숨기려고합니다. 원하는 것이 있습니다. 또한 두 번째보기를 숨기고 사용자가 단추를 누를 때 첫 번째보기를 표시합니다. 가능한가?RCP 두 개의 뷰를 가진 원근감

두 번째보기에서 항목 이름을 입력 할 수 있었지만보기 표시 및 숨기기를 조정할 수 없습니다.

+0

이 질문에 봐 -이 대답 - - (http://stackoverflow.com/q/171824/150166) 프로그래밍 이클립스 플러그인에서보기 표시] 을 [보기 볼 수 있도록하는 방법/런타임에 보이지 않는] (http://stackoverflow.com/a/8295692/150166). –

답변

2

예,보기를 표시하거나 숨길 수 있습니다.

1) 각보기에는 고유 한 ID가 있어야합니다. 이 ID는 plugin.xml의보기 확장에있는 ID와 일치해야합니다.

여기 내 plugin.xml보기 확장 중 하나입니다.

<view 
     class="gov.bop.rabid.ui.views.PrefetchView" 
     icon="icons/folder_user.png" 
     id="gov.bop.rabid.ui.views.PrefetchView" 
     name="Prefetch" 
     restorable="true"> 
    </view> 

여기에 ID 정의는 PrefetchView입니다.

public static final String ID = "gov.bop.rabid.ui.views.PrefetchView"; 

일반적으로 ID를 클래스 이름과 동일하게 지정합니다. 나에게 덜 혼란 스럽다.

2) Perspective 클래스에서 createInitialLayout 메서드는 자리 표시자를 사용하여 IFolderLayout을 정의해야합니다. 다시 말하지만, 여기에 제 코드가 있습니다.

IFolderLayout consoleFolder = layout.createFolder(CONSOLE_ID, 
      IPageLayout.BOTTOM, 0.75f, editorArea); 
    consoleFolder.addPlaceholder(PrefetchedInmatesView.ID); 
    consoleFolder.addPlaceholder(FoundInmatesView.ID); 
    consoleFolder.addView(ProcessedInmatesView.ID); 

    setClosable(layout, FoundInmatesView.ID, false); 
    setClosable(layout, PrefetchedInmatesView.ID, false); 
    setClosable(layout, ProcessedInmatesView.ID, false); 

3) 다른보기 내부에서 어떤보기 에나 액세스 할 수있는 정적 방법이 필요합니다. 이 정적 메서드를 내 Activator 클래스에 넣었으나 원하는 곳이면 어디든지 넣을 수 있습니다.

public static IViewPart getView(IWorkbenchWindow window, String viewId) { 
    IViewReference[] refs = window.getActivePage().getViewReferences(); 
    for (IViewReference viewReference : refs) { 
     if (viewReference.getId().equals(viewId)) { 
      return viewReference.getView(true); 
     } 
    } 
    return null; 
} 

4) 마지막으로 이벤트 코드에서보기를 표시하거나 숨 깁니다. 여기에 예제가 있습니다.

 final PhotoView view = (PhotoView) RabidPlugin.getView(window, 
       PhotoView.ID); 
     if (view == null) 
      return; 

        *** Do stuff with the other view *** 

     IWorkbenchPage page = window.getActivePage(); 
     page.hideView(page.findView(FoundInmatesView.ID)); 
+0

Gilbert가 빠른 응답과 지식 습득에 대해 고마워합니다. -보기가 "확장"을 통해 생성되었지만 실제로는 ""전망 확장을 통해 이루어 졌다고 말하면 적절합니까? point2- - setCloseable 메서드를 구현해야합니까? 또는 "closeable = true"옵션을 선택할 수 있다고 설명했듯이 뷰를 생성해야합니다. –

+0

나를 이스케이프 한 또 다른 문제는 다음과 같습니다. 이렇게하면 첫 번째 뷰만 시작됩니다. 두 번째는 숨겨져있는 테이블에 선택을 기다리는 동안 숨겨져 있습니다 (첫 번째를 닫습니다). 모두에게 감사드립니다. 내게 진짜 방해물이되고 싶습니다. –

+0

@ user1338650 : MANIFEST.MF의 확장 탭에서 뷰를 정의했습니다. . 결과 XML을 보여 주었다. setClosable 메서드는 사용자가 뷰를 닫을 수 있는지 여부를 정의한다. 사용자가 X를 클릭하고보기를 닫을 수 없게하려는 경우. Application 클래스에서 start 메소드를 사용하면 첫 번째보기가 표시됩니다. –

관련 문제