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, a exceção é que eles estão 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 um documento ou arquivo 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). No entanto, diferentemente das exibições, o mesmo tipo de editor (como um editor de texto) pode ser aberto muitas vezes dentro de 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 e o nome e o ícone utilizados nos menus e etiquetas do workbench, são semelhantes às informações sobre a exibiçã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 podem também definir um contribuidorClass, 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: as extensões do editor podem também ser configuradas para lançar um programa externo para editar um arquivo ou para fornecer uma classe de lançador que seja utilizada para chamar código java preexistente como o editor. Nesta discussão, estamos centralizando-nos naqueles editores que estão realmente bem integrados ao workbench e que foram 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 à exibição de contorno 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="Readme File Editor"
icon="icons/basic/obj16/editor.gif"
class="org.eclipse.ui.examples.readmetool.ReadmeEditor"
extensions="readme"
contribuidorClass="org.eclipse.ui.examples.readmetool.ReadmeEditorActionBarContributor">
</editor>
</extension>
Vemos a marcação de configuração familiar para id, name, icon e class. Há também algo novo, um contribuidorClass.
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 fornecida do workbench pode ter vários editores do mesmo tipo. Em vez de ter cada ocorrência de um editor do tipo criar ações e imagens, um único contribuidor é compartilhado por todos os editores de um tipo específico.
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("&Editor Action1");
action1.setToolTipText("Readme Editor Action1");
action1.setImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE);
...
action2 = new EditorAction("&Editor Action2");
action2.setToolTipText("Readme Editor Action2");
action2.setImageDescriptor(ReadmeImages.EDITOR_ACTION2_IMAGE);
...
action3 = new EditorAction("&Editor Action3");
action3.setToolTipText("Readme Editor Action3");
action3.setImageDescriptor(ReadmeImages.EDITOR_ACTION3_IMAGE);
...
}
Os nomes e os ícones das ações são configurados no código, em vez de no plugin.xml. Observe como essas informações são semelhantes às informações de viewActions que vimos na marcação da ação de exibição. As ações são configuradas no código, pois temos que gerenciar o compartilhamento delas entre as diferentes ocorrências do mesmo editor.
Como são criadas no construtor, as ações não dependem de qualquer ocorrência específica do editor. Quando um editor torna-se ativo e as ações 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 com um editor específico.
public void setActiveEditor(IEditorPart editor) {
...
action1.setActiveEditor(editor);
action2.setActiveEditor(editor);
action3.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.
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.
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 exibição de contorno, quando um arquivo Leia-me 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 exibiçã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 mais detalhes.
Daremos uma olhada na implementação dos editores de texto em Editores de texto e texto JFace.