보기는 정보 계층을 탐색하고 오브젝트의 특성을 표시할 수 있는 Workbench의 일부입니다. 주어진 보기에서 하나의 인스턴스만 Workbench 페이지에서 열려 있습니다. 사용자가 보기에서 선택을 하거나 변경을 하는 경우 이 변경사항이 즉시 Workbench에 반영됩니다. 일반적으로 대응하는 편집기를 지원하기 위해 보기가 제공됩니다. 예를 들어 아웃라인 보기는 편집기에 있는 정보의 구조화된 보기를 표시합니다. 특성 보기는 현재 편집하고 있는 오브젝트의 특성을 표시합니다.
org.eclipse.ui.views 확장점을 사용하면 플러그인에서 보기를 Workbench에 추가할 수 있습니다. 보기를 제공하는 플러그인은 보기를 plugin.xml 파일에 등록하고 보기에 관한 구성 정보(예: 구현 클래스, 자신이 속하는 보기의 카테고리(또는 그룹), 메뉴와 레이블의 보기를 설명하는 데 사용해야 할 이름 및 아이콘)를 제공해야 합니다.
보기의 인터페이스는 IViewPart에 정의되어 있지만 플러그인에서 처음부터 IViewPart를 구현하는 대신 ViewPart 클래스를 확장하도록 선택할 수 있습니다.
Hello world 예에 최소한의 보기 확장을 구현했습니다. 이제 다른 Workbench 보기를 인식하고 Workbench의 사용자 탐색과 선택사항 변경에 응답하는 예제를 살펴봅니다. 먼저 plugin.xml의 확장 선언을 살펴보겠습니다.
<extension point="org.eclipse.ui.views"> <category id="org.eclipse.ui.examples.readmetool" name="%Views.category"> </category> <view id="org.eclipse.ui.examples.readmetool.views.SectionsView" name="%Views.ReadmeSections" icon="icons/view16/sections.png" category="org.eclipse.ui.examples.readmetool" class="org.eclipse.ui.examples.readmetool.ReadmeSectionsView"> </view> </extension>
이것은 익숙한 내용입니다. 새 보기 ReadmeSectionsView가 Workbench에 제공됩니다. 보기 ID, 이름 및 카테고리는 이전처럼 지정됩니다. 플러그인의 설치 디렉토리에 관련된 경로를 사용하여 보기에 아이콘을 제공합니다.
ReadmeSectionsView를 살펴보겠습니다. 창->보기 표시->기타...를 선택하고 보기 표시 목록에서 보기를 선택하여 Workbench에 보기를 표시할 수 있습니다.
ReadmeSectionsView를 표시할 경우 목록을 가진 보기가 팝업으로 나타납니다. 확장자가 .readme인 파일을 클릭하지 않으면 목록이 공백으로 나타납니다. 이 경우 readme 파일의 섹션을 사용하여 목록을 채웁니다.
플러그인이 readme 파일을 인식하는 방법 및 선택사항이 변경되었는지 파악하는 방법을 살펴봅니다. 이 방법을 추적할 수 있으면 통합된 Workbench 플러그인을 빌드하는 방법을 이해할 수 있습니다.
createPartControl 메소드로 시작하겠습니다. Hello World 예에서 보았듯이 보기를 나타내는 위지트(widget)가 이곳에서 작성됩니다. 일부 코드는 무시하고 시작하겠습니다.
public void createPartControl(Composite parent) { viewer = new ListViewer(parent); ... // add myself as a global selection listener getSite().getPage().addSelectionListener(this); // prime the selection selectionChanged(null, getSite().getPage().getSelection()); }
보기에서 ListViewer를 작성하고 저장하고 자신을 해당 페이지에 선택사항 리스너로 등록합니다. Workbench 창, 포함하는 페이지 및 플러그인 등 보기의 컨텍스트에 대한 정보를 포함하는 IViewSite에서 페이지를 가져옵니다. 선택사항의 변경을 통지받은 경우에는 다음 코드가 실행됩니다.
public void selectionChanged(IWorkbenchPart part, ISelection sel) { //if the selection is a readme file, get its sections. AdaptableList input = ReadmeModelFactory.getInstance().getSections(sel); viewer.setInput(input); }
ReadmeModelFactory 클래스가 선택사항을 readme 섹션으로 변환하며 이 섹션이 createPartControl 메소드에서 작성한 표시기의 입력으로 나타납니다.
표시기가 목록 위지트(widget)를 채우는 방법을 살펴봅니다. 지금은 표시기가 입력 요소를 인식하고 정보로 목록 위지트(widget)를 채우는 방법을 안다고 가정합니다. 이 표시기를 ListViewer라고 합니다. 이 표시기에 대한 정보를 지금 보려면 표시기로 이동하십시오.
readme 파일을 발견하는 방법 또는 파일의 섹션 정보의 출처에 대해 알지 못합니다. ReadmeModelFactory를 살펴 보면 약간의 정보를 얻을 수 있습니다.
public AdaptableList getSections(ISelection sel) { // If sel is not a structured selection just return. if (!(sel instanceof IStructuredSelection)) return null; IStructuredSelection structured = (IStructuredSelection)sel; //if the selection is a readme file, get its sections. Object object = structured.getFirstElement(); if (object instanceof IFile) { IFile file = (IFile) object; String extension = file.getFileExtension(); if (extension != null && extension.equals(IReadmeConstants.EXTENSION)) { return getSections(file); } } //the selected object is not a readme file return null; }
구조화된 복수 선택사항인지 확인하기 위해 선택사항을 검사합니다. 구조화된 선택사항의 개념은 JFace 표시기에서 가져옵니다. 선택사항의 첫 번째 오브젝트의 경우 파일(IFile) 자원인지 확인합니다. 파일 자원일 경우 확장자가 ".readme" 확장자와 일치하는지 확인합니다. readme 파일이 있으면 다른 메소드를 사용하여 선택사항을 구문분석할 수 있습니다. 파일 구문분석에 대한 자세한 내용은 ReadmeModelFactory, MarkElement 및 DefaultSectionsParser의 나머지 부분에서 찾아볼 수 있습니다.
이 확장을 연구하여 일반 Workbench 개념을 많이 다루었습니다. 이제 몇 개의 다른 Workbench 확장으로 이동하여 플러그인에서 Workbench UI에 제공할 수 있는 방법을 점검합니다.