org.eclipse.ui.editors

Um editor é uma parte do workbench que permite ao usuário editar um objeto (freqüentemente um arquivo). Os editores operam de maneira semelhante às ferramentas de edição do sistema de arquivos, exceto pelo fato de estarem bem integrados à UI do workbench da plataforma. Um editor é sempre associado a um objeto de entrada (IEditorInput). Você pode pensar no objeto de entrada como o documento ou arquivo que está sendo editado. As alterações feitas em um editor são ativadas somente após o usuário salvá-las.

Somente um editor pode ser aberto para qualquer entrada específica dele em uma página do workbench. Por exemplo, se o usuário estiver editando readme.txt no workbench, abri-lo novamente na mesma perspectiva irá ativar o mesmo editor. (Você pode abrir outro editor no mesmo arquivo em uma janela ou perspectiva diferente do workbench).  Ao contrário das exibições, o mesmo tipo de editor, como um editor de texto, pode ser aberto muitas vezes em uma página do workbench para entradas diferentes.

O ponto de extensão do workbench org.eclipse.ui.editors é utilizado pelos plug-ins para incluir editores no workbench. Os plug-ins que contribuem com um editor devem registrar a extensão do editor no arquivo plugin.xml deles, juntamente com as informações sobre configuração do editor. Algumas das informações sobre o editor, como a classe de implementação, o nome e o ícone a serem utilizados nos menus e rótulos do workbench, são semelhantes às informações sobre a visualização. Além disso, as extensões do editor especificam os padrões de extensão ou nome de arquivo dos tipos de arquivo que ele compreende. Os editores também podem definir um contributorClass, uma classe que inclui ações nos menus e nas barras de ferramentas do workbench quando o editor está ativo.

A interface dos editores é definida em IEditorPart, mas os plug-ins podem optar por estender a classe EditorPart, em vez de implementar um IEditorPart desde o início.

Nota:  Uma extensão do editor também pode ser configurada para ativar um programa externo ou para chamar código java preexistente. Nesta discussão, nosso objetivo são os editores que estão realmente bem integrados ao workbench e que são implementados utilizando IEditorPart.

A ferramenta Leia-me fornece um editor personalizado, principalmente com a finalidade de fornecer sua própria página descritora de conteúdo à visualização de outline do workbench.  

A configuração da extensão do editor é definida da seguinte forma:

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

Vemos a marcação de configuração familiar para id, name, icon e class.    O atributo extensions descreve os tipos de arquivos que o editor entende.  (Também é possível especificar filenames se precisar ser mais específico.)  A class implementa o editor e o contributorClass é responsável pelo fornecimento de ações relacionadas ao editor.  Vejamos o contribuidor com detalhes adicionais.

Contribuidores de ação do editor

A classe contribuidor inclui ações relacionadas ao editor no menu e na barra de ferramentas do workbench. Ela deve implementar a interface IEditorActionBarContributor. O contribuidor é separado do próprio editor, pois qualquer página especificada do workbench pode ter vários editores do mesmo tipo. Um único contribuidor é compartilhado por todos os editores de um tipo específico, em vez de cada instância de um editor criar ações e imagens. 

Em ReadmeEditorActionBarContributor, contribuímos com três ações, "Editor Action1," "Editor Action2," e "Editor Action3"  . Elas são configuradas no construtor.

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

Os nomes e os ícones das ações são configurados no código, em vez de no plugin.xml.  (Ignoraremos as diferenças nas classes de ações por enquanto até examinarmos ações reatingíveis.)  

Observe como essas informações são semelhantes às informações de viewActions que vimos na marcação da ação de visualização.  As ações são configuradas no código, pois temos que gerenciar o compartilhamento delas entre as diferentes instâncias do mesmo editor.  Quando as ações são criadas no construtor, elas não dependem de nenhuma instância específica do editor.

Quando um editor torna-se ativo e possui ações que precisam ser instaladas nos menus e na barra de ferramentas do workbench, a mensagem setActiveEditor é enviada ao contribuidor.  O contribuidor conecta as ações do editor a um editor específico.  

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

Como você pode ver, as ações são mostradas no menu e na barra de ferramentas do workbench quando um editor do Leia-me está ativo.

Entrada de Leia-me na barra de menus do workbench com três ações do editor

Barra de ferramentas do workbench com três ações de leia-me

Esses itens de menu e barra de ferramentas são mostrados somente quando o editor está ativo. A localização dos itens de menu e barra de ferramentas pode ser especificada conforme descrito em Caminhos do menu e da barra de ferramentas.

Editores e descritores de conteúdo

O editor do Leia-me, ReadmeEditor, não é muito complicado. Ele estende a classe TextEditor para que ela possa contribuir com uma página descritora de conteúdo personalizada para a visualização de outline, quando um arquivo Readme está sendo editado. Isso não altera qualquer comportamento dentro do editor de texto.

Freqüentemente, os editores possuem descritores de conteúdo correspondentes que fornecem uma visualização estruturada do conteúdo do editor e ajudam o usuário na navegação pelo conteúdo do editor.  Consulte Descritores de conteúdo para obter detalhes adicionais.

Daremos uma olhada na implementação dos editores de texto em Editores de texto e texto da plataforma.