org.eclipse.ui.editors

Edytor to część środowiska roboczego, która umożliwia użytkownikom edytowanie obiektu (zwykle pliku). Edytory działają w sposób podobny do narzędzi edycyjnych z systemu plików, jednak są one ściśle zintegrowane z interfejsem użytkownika środowiska roboczego platformy. Edytor jest zawsze powiązany z obiektem wejściowym (IEditorInput). Obiektem wejściowym może być na przykład edytowany dokument lub plik. Zmiany wprowadzone w edytorze nie są zatwierdzane, dopóki użytkownik ich nie zapisze.

W danym momencie na stronie środowiska roboczego dla danego obiektu wejściowego może być otwarty tylko jeden edytor. Gdy na przykład użytkownik edytuje plik readme.txt w środowisku roboczym, ponowne otwarcie go w tej samej perspektywie aktywuje ten sam edytor. Dla tego samego pliku można otworzyć inny edytor w innym oknie środowiska roboczego lub w innej perspektywie.  W przeciwieństwie jednak do widoków, edytor tego samego typu, na przykład edytor tekstu, może być otwierany wiele razy w środowisku roboczym dla różnych obiektów wejściowych.

Moduły dodatkowe mogą dodawać edytory do środowiska roboczego za pośrednictwem punktu rozszerzenia org.eclipse.ui.editors. Moduły dodatkowe, które wnoszą edytor, muszą zarejestrować w pliku plugin.xml rozszerzenie edytora wraz z informacjami konfiguracyjnymi dla edytora. Niektóre informacje o edytorze, na przykład klasa implementacji (class), nazwa (name) i ikona (icon), używane w menu i etykietach w środowisku roboczym, są podobne do informacji o widoku. Ponadto rozszerzenia edytorów określają rozszerzenia nazw plików lub wzorce nazw plików dla typów plików obsługiwanych przez edytor. Edytory mogą także definiować klasę contributorClass, która dodaje akcje do menu i paska narzędzi środowiska roboczego, gdy edytor jest aktywny.

Interfejs dla edytorów to IEditorPart, ale moduły dodatkowe mogą rozszerzać klasę EditorPart zamiast implementować interfejs IEditorPart od podstaw.

Uwaga: Rozszerzenie edytora można także skonfigurować w taki sposób, aby uruchamiało program zewnętrzny lub wywoływało już istniejący kod Java. Ten opis koncentruje się przede wszystkim na edytorach, które są faktycznie ściśle powiązane ze środowiskiem roboczym i implementowane przy użyciu interfejsu IEditorPart.

Narzędzie readme udostępnia niestandardowy edytor przeznaczony głównie do wnoszenia własnej strony widoku schematu treści do widoku schematu środowiska roboczego.  

Konfiguracja rozszerzenia edytora jest definiowana następująco.

   <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>

W tym kodzie znaczników konfiguracji widać znajome atrybuty id, name, icon i class.   Atrybut extensions opisuje typy plików obsługiwane przez edytor.  Aby zrobić to precyzyjniej, można także określić atrybut filenames.   Klasa class implementuje edytor, a klasa contributorClass jest odpowiedzialna za udostępnienie akcji dotyczących edytora.  Poniżej przedstawiono bardziej szczegółowy opis klasy wnoszącej.

Klasy wnoszące akcje edytora

Klasa wnosząca dodaje akcje dotyczące edytora do menu i paska narzędzi środowiska roboczego. Musi ona implementować interfejs IEditorActionBarContributor. Klasa wnosząca jest oddzielna od samego edytora, ponieważ dowolna strona środowiska roboczego może mieć wiele edytorów tego samego pliku. Pojedyncza klasa wnosząca jest współużytkowana przez wszystkie edytory danego typu, aby każda instancja edytora nie musiała tworzyć akcji i obrazów. 

W klasie ReadmeEditorActionBarContributor wnoszone są trzy akcje: "Editor Action1," "Editor Action2" i "Editor Action3."   Akcje te są konfigurowane w konstruktorze.

   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);
	...   
   }

Nazwy i ikony akcji są określane w kodzie, a nie w pliku plugin.xml.  Na tym etapie do opisu akcji z możliwością zmiany celu różnice między klasami akcji będą ignorowane.  

Warto zwrócić uwagę, jak bardzo informacje o akcji są podobne do informacji viewActions znajdujących się w kodzie znaczników dla akcji widoku.  Akcje są konfigurowane w kodzie, ponieważ trzeba obsłużyć ich współużytkowanie przez różne instancje tego samego edytora.  Akcje tworzone w konstruktorze są niezależne od konkretnej instancji edytora.

Gdy edytor, który ma akcje do zainstalowania w menu i na pasku narzędzi środowiska roboczego, staje się aktywny, do klasy wnoszącej zostaje wysłany komunikat setActiveEditor.  Klasa wnosząca łączy akcje edytora z konkretnym edytorem.  

public void setActiveEditor(IEditorPart editor) {
      ...
      action1.setActiveEditor(editor);
      ...
   }

Jak widać, akcje są wyświetlane w menu i na pasku narzędzi środowiska roboczego, gdy edytor readme jest aktywny.

Pozycja Readme na pasku menu środowiska roboczego z trzema akcjami edytora

Pasek narzędzi środowiska roboczego z trzema akcjami narzędzia readme

Te opcje menu i paska narzędzi są wyświetlane tylko wtedy, gdy edytor jest aktywny. Sposób określenia położenia opcji w menu i na pasku narzędzi opisano w temacie Ścieżki menu i paska narzędzi.

Edytory i widoki schematu treści

Sam edytor narzędzia readme, ReadmeEditor, nie jest specjalnie skomplikowany. Rozszerza on klasę TextEditor, dzięki czemu może wnosić dostosowaną stronę widoku schematu treści do widoku schematu, gdy edytowany jest plik readme. Nie zmienia on żadnego zachowania w edytorze tekstu.

Edytory często mają widoki schematu treści, które udostępniają widok strukturalny treści edytora i pomagają użytkownikom w nawigacji poprzez treść edytora.  Więcej szczegółowych informacji można znaleźć w temacie Widoki schematów treści.

Implementacja edytorów tekstu została przedstawiona w temacie Edytory tekstu i tekst platformy.