필요한 헬퍼 클래스의 문서 프리젠테이션 및 구성의 구현은 주로 편집기 및 해당 텍스트 표시기가 수행합니다. (표시기 개념에 익숙하지 않으면 표시기를 참조하십시오.)
TextViewer는 문서 모델 맵핑의 모든 하위 레벨 세부사항 및 해당 파티션을 사용자가 보는 채색되고 형식화된 텍스트로 처리합니다. 소스 코드 스타일 편집기의 경우 SourceViewer가 제공됩니다. 소스 표시기에서는 소스 코드 어노테이션의 개념을 소개합니다. 이러한 어노테이션은 텍스트의 왼쪽에 세로 눈금자, 텍스트의 오른쪽에 개요 눈금자에 표시되거나 또는 텍스트 밑에 채색된 불규칙한 선으로 표시될 수 있습니다.
SourceViewer 및 해당 헬퍼 클래스는 AbstractTextEditor 계층 구조에서 사용됩니다. 패키지 org.eclipse.jface.text.source는 이 표시기 및 어노테이션 프리젠테이션을 지원하는 기타 클래스를 정의합니다.
파티션과 같은 어노테이션은 주로 편집 중인 문서에 따라 다릅니다. 문서의 IAnnotationModel은 어노테이션을 보유하고 요청 시에 어노테이션을 나열하며 텍스트와 함께 어노테이션을 최신으로 유지하기 위해 텍스트 변경사항을 청취합니다. 어노테이션 모델은 org.eclipse.core.filebuffers.annotationModelCreation 확장에서 등록됩니다. 이 확장점을 사용하면 플러그인이 주어진 파일 확장자에 적절한 어노테이션 모델을 작성하는 클래스를 등록할 수 있습니다. Java 편집기 예제는 이 확장점을 사용하지 않으므로, 플랫폼에서 정의하는 어노테이션 모델을 상속합니다.
<extension point="org.eclipse.core.filebuffers.annotationModelCreation"> <factory extensions="*" class="org.eclipse.ui.texteditor.ResourceMarkerAnnotationModelFactory"> </factory> </extension>
제공된 팩토리 클래스는 확장자가 있는 파일에 ResourceMarkerAnnotationModel을 작성합니다. 이 클래스는 작업공간의 자원에서 마커를 나타내는 어노테이션을 표시합니다. (마커에 대한 자세한 정보는 자원 마커를 참조하십시오.) 이 모델은 각 마커에 이미지와 설명을 지정하고 마커의 변경사항과 관련한 자원을 모니터합니다.
문서 편집기에 어노테이션 모델을 표시하는 방법을 확인하기 위해 플랫폼 문서 편집기 및 해당 눈금자와 어노테이션의 사용을 검사합니다. 서로 다른 어노테이션이 눈금자 및 텍스트에 표시되는 특정 방법을 일반 > 편집기 > 문서 편집기 > 어노테이션 환경 설정에서 사용자가 제어할 수 있습니다.
편집 영역 왼쪽의 세로 눈금자는 텍스트 행과 인접한 행 기반 어노테이션 및 텍스트 범위를 표시하는 경우 플랫폼 문서 편집기에서 사용됩니다.
이러한 어노테이션은 제공된 ResourceMarkerAnnotationModel에서 설명됩니다. 이 모델은 소스 표시기가 편집기에 의해 초기화될 때 SourceViewer로 설정됩니다. AbstractTextEditor 로부터 다음 스니펫은 문서와 어노테이션 모델이 문서와 연관되는 방법을 보여줍니다.
private void initializeSourceViewer(IEditorInput input) { IAnnotationModel model= getDocumentProvider().getAnnotationModel(input); IDocument document= getDocumentProvider().getDocument(input); if (document != null) { fSourceViewer.setDocument(document, model); ...
소스 표시기가 적절한 문서 및 어노테이션 모델에 대해 구성되면, 소스 표시기는 문서를 제출하고 올바른 어노테이션이 왼쪽의 세로 눈금자에 표시되기에 충분한 정보를 갖습니다. 문서가 설정될 때 모델이 눈금자와 연관됩니다. 다음 스니펫에서는 문서가 소스 표시기로 설정될 때 일어나는 상황을 보여줍니다. 이것은 명료하게 SourceViewer의 실제 코드로부터 단순화되었습니다.
public void setDocument(IDocument document, IAnnotationModel annotationModel) { ... // create visual annotation model from the supplied model and store // in fVisualAnnotationModel ... if (fVerticalRuler != null) fVerticalRuler.setModel(fVisualAnnotationModel);
이런 방법으로 눈금자는 적절한 어노테이션 모델과 연관됩니다.
눈금자를 살펴봅니다. 문서 편집기에서 작성되며 편집기 표시기와 연결됩니다. Java 편집기 예제가 눈금자의 특수 작동을 정의하지 않으므로, TextEditor에 정의된 대로 눈금자를 상속합니다.
protected IVerticalRuler createVerticalRuler() { CompositeRuler ruler= new CompositeRuler(); ruler.addDecorator(0, new AnnotationRulerColumn(VERTICAL_RULER_WIDTH)); if (isLineNumberRulerVisible()) ruler.addDecorator(1, createLineNumberRulerColumn()); return ruler; }
문서 편집기는 CompositeRuler를 사용합니다. 이 눈금자에는 자체 비주얼 프리젠테이션이 없습니다. 프리젠테이션은 눈금자의 열(IVerticalRulerColumn)을 표시하는 데코레이터 목록에 제공됩니다. 이 예제에서 어노테이션(AnnotationRulerColumn)을 표시하는 눈금자 열은 항상 추가되며 행 번호 눈금자 열은 사용자 환경 설정을 기반으로 추가됩니다. 어노테이션 눈금자 열은 적절한 위치에서 어노테이션 이미지를 표시하는 특정 항목을 처리합니다.
모든 클래스가 눈금자를 표시하는 데 연관되지만 눈금자 작동을 가져오는 경우 예제 클래스에는 서브클래스 프레임워크 클래스만 필요합니다. JavaDocumentProvider는 FileDocumentProvider로부터 적절한 마커 어노테이션 모델을 상속합니다. JavaTextEditor는 TextEditor로부터 눈금자 프리젠테이션을 상속합니다.
편집 영역 오른쪽에 있는 개요 눈금자는 전체 문서에 대한 어노테이션을 표시하는 데 사용됩니다. 문서 위치에 상대적으로 이러한 어노테이션이 표시되며, 사용자가 문서를 화면이동할 때 어노테이션은 이동하지 않습니다. 문서의 해당 부분이 표시되면 세로 눈금자에 대개 해당 어노테이션이 있습니다.
아래 세로 눈금자는 문서에 두 개의 타스크와 하나의 책갈피가 있음을 보여줍니다. 책갈피 처리된 텍스트가 표시되므로 해당 어노테이션 또한 왼쪽에 표시됩니다.
사용자는 어노테이션 자체를 눌러 코드에 어노테이션 위치로 탐색할 수 있습니다.
개요 눈금자에 표시된 어노테이션 유형은 어노테이션 유형을 눈금자에 추가하여 판별합니다. 다음 스니펫에서 SourceViewerDecorationSupport로부터 어노테이션 유형이 동적으로 눈금자에 추가됩니다.(SourceViewerDecorationSupport에 대한 자세한 정보는 다음 절을 참조하십시오.)
private void showAnnotationOverview(Object annotationType) {
if (fOverviewRuler != null) { Color c= getAnnotationTypeColor(annotationType);
fOverviewRuler.setAnnotationTypeColor(annotationType, c); int l= getAnnotationTypeLayer(annotationType);
fOverviewRuler.setAnnotationTypeLayer(annotationType, l);
fOverviewRuler.addAnnotationType(annotationType);
fOverviewRuler.update();
} }
또한 개요 눈금자는 유형 및 유형이 표시되는 방법 등의 특정 어노테이션에 대한 정보를 제공하는 데 사용되는 IAnnotationAccess와 함께 제공됩니다. TextEditor는 해당 마커 유형에 따라 어노테이션을 해석하고 개요 눈금자에 표시될 마커 유형을 확인하기 위해 사용자 환경 설정을 참조하는 DefaultMarkerAnnotationAccess를 사용합니다.
protected IAnnotationAccess createAnnotationAccess() { return new DefaultMarkerAnnotationAccess(fAnnotationPreferences); }
개요 눈금자에 마커를 표시하는 방법에 대한 자세한 내용은 DefaultMarkerAnnotationAccess 및 MarkerAnnotation 구현을 참조하십시오.
눈금자에 어노테이션을 표시하는 것 이외에 소스 표시기는 텍스트에 채색된 불규칙한 표시로 어노테이션을 표시할 수 있습니다.
TextEditor에서 소스 표시기의 작성을 다시 살펴봅니다.
protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler ruler, int styles) { ... ISourceViewer sourceViewer= new SourceViewer(parent, ruler, fOverviewRuler, isOverviewRulerVisible(), styles); fSourceViewerDecorationSupport= new SourceViewerDecorationSupport(sourceViewer, fOverviewRuler, fAnnotationAccess, sharedColors); configureSourceViewerDecorationSupport(); return sourceViewer; }
SourceViewerDecorationSupport 클래스는 텍스트 어노테이션, 유색 여백, 유색 커서 행 등을 포함하여 소스 표시기에 표시되는 많은 데코레이션을 처리합니다. 이 클래스는 사용자의 환경 설정 변경사항의 동적인 갱신에 응답할 수 있도록 사용자의 환경 설정과 함께 구성됩니다. 대부분의 편집기는 이러한 데코레이션의 채색 방식을 세부적으로 상관할 필요가 없습니다. (필요한 경우 SourceViewerDecorationSupport 및 AnnotationPainter와 같은 관련 클래스를 참조하십시오! ) SourceViewer 및 이를 지원하는 SourceViewerDecorationSupport가 올바르게 구성되도록 사용할 수 있는 데코레이션에 대해 알고 있어야 합니다.
데코레이션 지원을 위해 TextEditor에서 사용하는 구성을 살펴보겠습니다.
protected void configureSourceViewerDecorationSupport() { Iterator e= fAnnotationPreferences.getAnnotationPreferences().iterator(); while (e.hasNext()) fSourceViewerDecorationSupport.setAnnotationPreference((AnnotationPreference) e.next()); fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(DefaultMarkerAnnotationAccess.UNKNOWN, UNKNOWN_INDICATION_COLOR, UNKNOWN_INDICATION, UNKNOWN_INDICATION_IN_OVERVIEW_RULER, 0); fSourceViewerDecorationSupport.setCursorLinePainterPreferenceKeys(CURRENT_LINE, CURRENT_LINE_COLOR); fSourceViewerDecorationSupport.setMarginPainterPreferenceKeys(PRINT_MARGIN, PRINT_MARGIN_COLOR, PRINT_MARGIN_COLUMN); fSourceViewerDecorationSupport.setSymbolicFontName(getFontPropertyPreferenceKey()); }
어노테이션 환경 설정은 사용자 환경 설정에 표시된 모든 어노테이션에 대한 어노테이션 유형을 정의하는 데 사용됩니다. 여기에는 플러그인에서 제공하는 어노테이션이 포함되며 Workbench 제공 어노테이션으로 제한되지 않습니다. 편집기에 사용 가능한 어노테이션을 일부만 표시하려면 이 메소드를 대체하여 표시하려는 유형만 사용하여 SourceViewerDecorationSupport를 설정해야 합니다.