컨텐츠 아웃라이너

편집기에는 편집기 컨텐츠에 대한 구조화된 보기를 제공하고 편집기 컨텐츠의 탐색을 지원하는 해당 컨텐츠 아웃라이너가 있는 경우가 많습니다.

Workbench는 이런 목적으로 표준 아웃라인 보기를 제공합니다. Workbench 사용자는 창 >보기 표시 메뉴를 사용하여 이 보기를 볼 수 있는 시기를 제어합니다.

일반 TextEditor는 텍스트 구조를 알지 못하기 때문에 흥미로운 아웃라인 보기에 대한 작동을 제공할 수 없습니다.  따라서 아래 표시된 기본 아웃라인 보기는 많은 역할을 수행하지 못합니다.

기본 컨텐츠 아웃라이너

 

텍스트 프레임워크의 편집기는 고유한 컨텐츠 아웃라이너 페이지를 아웃라인 보기에 제공할 수 있습니다. 편집기 아웃라이너는 Workbench가 IContentOutlinePage 유형 어댑터를 요청할 때 지정됩니다.

public Object getAdapter(Class required) {
	if (IContentOutlinePage.class.equals(required)) {
		if (fOutlinePage == null) {
			fOutlinePage= new JavaContentOutlinePage(getDocumentProvider(), this);
			if (getEditorInput() != null)
				fOutlinePage.setInput(getEditorInput());
		}
		return fOutlinePage;
	}
	return super.getAdapter(required);
}

컨텐츠 아웃라이너 페이지는 IContentOutlinePage를 구현해야 합니다. 이 인터페이스는 선택사항 변경 리스너(ISelectionProvider)에 알리는 기능을 보기(IPage)의 페이지에 작동과 결합합니다. 컨텐츠 아웃라이너는 일반적으로 JFace 표시기를 사용하여 구현됩니다. 컨텐츠 아웃라이너(ContentOutlinePage)의 기본 구현은 JFace 트리 표시기를 사용하여 아웃라인의 계층 구조 표시를 표시합니다. 이 표시는 JavaContentOutlinePage를 포함하여 다수의 구조화된 아웃라이너에 적합합니다.

페이지의 구현을 좀 더 자세히 살펴 봅시다. 위 스니펫에서 편집기로 아웃라인 페이지가 작성될 때 해당 입력 요소가 편집기의 입력 요소로 설정됩니다. 이 입력은 종종 아래 예처럼 아웃라인 페이지의 표시기로 직접 전달될 수 있습니다.

    public void createControl(Composite parent) {

	super.createControl(parent);

	TreeViewer viewer= getTreeViewer();
	viewer.setContentProvider(new ContentProvider());
	viewer.setLabelProvider(new LabelProvider());
	viewer.addSelectionChangedListener(this);

	if (fInput != null)
		viewer.setInput(fInput);
}

트리 표시기 작성은 ContentOutlinePage에서 상속됩니다. 표준 레이블 제공자가 사용됩니다. 컨텐츠 제공자가 JavaContentOutlinePage 내부에 제공되며, 이 제공자는 편집기가 변경될 때마다 이를 개별 세그먼트로 구문 분석해야 합니다.

public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
			...
			if (newInput != null) {
				IDocument document= fDocumentProvider.getDocument(newInput);
	if (document != null) {
					document.addPositionCategory(SEGMENTS);
					document.addPositionUpdater(fPositionUpdater);
					parse(document);
				}
			}
		}

텍스트는 문서 내의 세그먼트라는 범위로 구문 분석됩니다.  이 세그먼트는 아웃라인 보기에서 표시됩니다.

Java 예제 아웃라이너

선택사항이 변경되면 선택된 세그먼트가 검색됩니다. 해당 오프셋이 편집기의 강조표시 범위를 설정하는 데 사용됩니다.

public void selectionChanged(SelectionChangedEvent event) {

	super.selectionChanged(event);

	ISelection selection= event.getSelection();
	if (selection.isEmpty())
		fTextEditor.resetHighlightRange();
	else {
		Segment segment= (Segment) ((IStructuredSelection) selection).getFirstElement();
		int start= segment.position.getOffset();
		int length= segment.position.getLength();
		try {
			fTextEditor.setHighlightRange(start, length, true);
		} catch (IllegalArgumentException x) {
			fTextEditor.resetHighlightRange();
		}
	}
}