편집기는 사용자가 오브젝트(대개는 파일)를 수정할 수 있게 해주는 Workbench 파트입니다. 편집기는 플랫폼 Workbench UI에 긴밀하게 통합되어 있다는 점을 제외하고는 파일 시스템 편집 도구와 비슷한 방식으로 작동합니다. 편집기는 항상 입력 오브젝트(IEditorInput)와 연관되어 있습니다. 입력 오브젝트를 편집되는 문서나 파일로 생각할 수 있습니다. 편집기에서 수행한 변경사항은 이를 저장한 경우에만 적용됩니다.
Workbench 페이지의 특정 편집기 입력에 대해 하나의 편집기만 열 수 있습니다. 예를 들어, 사용자가 Workbench에서 readme.txt를 편집하려면, Perspective에서 다시 열면 같은 편집기가 활성화됩니다. 다른 Workbench 창이나 Perspective에서 동일한 파일에 대해 다른 편집기를 열 수 있습니다. 그러나 보기와는 달리 다른 입력에 대해 하나의 Workbench 페이지에서 같은 편집기 유형(예: 문서 편집기)을 여러 번 열 수 있습니다.
플러그인에서는 Workbench 확장점 org.eclipse.ui.editors를 사용하여 편집기를 Workbench에 추가합니다. 편집기를 제공하는 플러그인에서는 자신의 plugin.xml 파일에 편집기에 대한 구성 정보와 함께 편집기 확장을 등록해야 합니다. Workbench 메뉴와 레이블에서 사용될 이름과 아이콘 및 구현 클래스 같은 일부 편집기 정보는 보기 정보와 유사합니다. 그리고 편집기 확장에서는 편집기에서 이해하는 파일의 파일 확장자나 파일 이름 패턴을 지정합니다. 편집기가 활성화된 경우 편집기는 Workbench 메뉴와 도구 모음에 조치를 추가하는 클래스인 contributorClass를 정의할 수도 있습니다.
편집기용 인터페이스는 IEditorPart에 정의되어 있지만 플러그인에서는 처음부터 IEditorPart를 구현하는 대신 EditorPart 클래스를 확장할 것을 선택할 수 있습니다.
참고: 외부 프로그램을 실행하거나 기존 Java 코드를 호출하도록 편집기 확장을 구성할 수도 있습니다. 이 설명에서는 IEditorPart를 사용하여 구현되고 Workbench에 실제로 긴밀하게 통합된 해당 편집기에 초점을 맞추고 있습니다.
readme 도구에서는 주로 자신의 컨텐츠 아웃라이너 페이지를 Workbench 아웃라인 보기에 제공하기 위한 사용자 정의 편집기를 제공합니다.
편집기 확장에 대한 구성은 다음과 같이 정의됩니다.
<extension point = "org.eclipse.ui.editors"> <editor id = "org.eclipse.ui.examples.readmetool.ReadmeEditor" name="%Editors.ReadmeEditor" icon="icons/obj16/editor.png" class="org.eclipse.ui.examples.readmetool.ReadmeEditor" extensions="readme" contributorClass="org.eclipse.ui.examples.readmetool.ReadmeEditorActionBarContributor"> </editor> </extension>
ID, name, icon 및 class에 대해 익숙한 구성 마크업을 볼 수 있습니다. extensions 속성은 편집기가 이해하는 파일 유형을 설명합니다. 또한 더 구체적으로 지정해야 할 경우 filenames도 지정할 수 있습니다. class는 편집기를 구현하며 contributorClass는 편집기 관련 조치를 제공합니다. 이제 좀 더 자세히 제공자를 살펴봅니다.
제공자 클래스는 편집기 관련 조치를 Workbench 메뉴와 도구 모음에 추가합니다. 이 클래스는 IEditorActionBarContributor 인터페이스를 구현해야 합니다. 주어진 Workbench 페이지가 같은 유형의 편집기 여러 개를 포함할 수 있으므로 제공자는 편집기와 분리됩니다. 편집기의 각 인스턴스가 조치와 이미지를 작성하는 것이 아니라 단일 제공자를 특정 유형의 모든 편집기에서 공유합니다.
ReadmeEditorActionBarContributor에서는 세 가지 조치, "Editor Action1", "Editor Action2" 및 "Editor Action3"을 제공합니다. 이 조치는 생성자에서 설정됩니다.
public ReadmeEditorActionBarContributor() { ... action1 = new EditorAction(MessageUtil.getString("Editor_Action1")); action1.setToolTipText(MessageUtil.getString("Readme_Editor_Action1")); action1.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE_DISABLE); action1.setImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE_ENABLE); ... action2 = new RetargetAction(IReadmeConstants.RETARGET2, MessageUtil.getString("Editor_Action2")); action2.setToolTipText(MessageUtil.getString("Readme_Editor_Action2")); action2.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION2_IMAGE_DISABLE); action2.setImageDescriptor(ReadmeImages.EDITOR_ACTION2_IMAGE_ENABLE); ... action3 = new LabelRetargetAction(IReadmeConstants.LABELRETARGET3, MessageUtil.getString("Editor_Action3")); action3.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION3_IMAGE_DISABLE); action3.setImageDescriptor(ReadmeImages.EDITOR_ACTION3_IMAGE_ENABLE); ... }
조치의 이름과 아이콘은 plugin.xml이 아니라 코드에서 설정됩니다. 새로 대상 지정 가능한 조치가 표시될 때까지 조치 클래스의 차이를 무시합니다.
보기 조치에 대해 마크업에서 보았던 viewActions 정보와 조치 정보가 얼마나 유사한지 확인하십시오. 동일한 편집기의 서로 다른 인스턴스 사이에서 조치 공유를 관리해야 하기 때문에 조치는 코드에 설정됩니다. 조치가 생성자에서 작성될 경우 편집기의 특정 인스턴스에 독립적입니다.
편집기가 활성화되고 Workbench 메뉴와 도구 모음에 설치되어야 하는 조치가 있는 경우, setActiveEditor 메시지가 제공자로 전송됩니다. 제공자는 편집기 조치를 특정 편집기에 연결합니다.
public void setActiveEditor(IEditorPart editor) { ... action1.setActiveEditor(editor); ... }
위에서 볼 수 있듯이 readme 편집기가 활성화된 경우 Workbench 메뉴와 도구 모음에 조치가 표시됩니다.
편집기가 활성화된 경우에만 이 메뉴와 도구 모음 항목이 표시됩니다. 메뉴와 도구 모음 항목의 위치는 메뉴 및 도구 모음 경로에서 설명한 대로 지정할 수 있습니다.
readme 편집기인 ReadmeEditor는 크게 복잡하지 않습니다. 여기서는 TextEditor 클래스를 확장하여 readme 파일을 편집할 경우 사용자 정의한 컨텐츠 아웃라이너 페이지를 아웃라인 보기에 제공할 수 있습니다. 문서 편집기 내의 작동을 변경하지 않습니다.
편집기에는 편집기 컨텐츠의 구조화된 보기를 제공하고 사용자가 편집기의 컨텐츠를 탐색하는 것을 지원하는 해당 컨텐츠 아웃라이너가 있습니다. 자세한 내용은 컨텐츠 아웃라이너를 참조하십시오.
문서 편집기 및 플랫폼 텍스트에 문서 편집기의 구현이 표시됩니다.