org.eclipse.ui.views

Uma exibição é uma parte do workbench que pode navegar uma hierarquia de informações ou exibir propriedades para um objeto.  Apenas uma instância de uma determinada exibição é aberta em uma página do workbench.  Quando o usuário faz seleções ou outras alterações em uma exibição, essas alterações são imediatamente refletidas no workbench. Muitas vezes, as exibições são fornecidas para suportar um editor correspondente  Por exemplo, uma exibição contorno mostra uma exibição estruturada das informações em um editor.  Uma exibição propriedades mostra as propriedades de um objeto que estão sendo editadas no momento.

O ponto de extensão org.eclipse.ui.views permite que os plug-ins incluam exibições no workbench. Os plug-ins que contribuem com uma exibição devem registrá-la no arquivo plugin.xml e fornecer  informações de configuração sobre a exibição, como sua classe de implementação, a categoria (ou grupo) de exibições a qual pertence e o nome e o ícone que devem ser utilizados para descrever a exibição em menus e rótulos.

A interface da exibição é definida em IViewPart, mas os plug-ins podem optar por estender a classe ViewPart, em vez de implementar um IViewPart desde o início.

Implementamos uma extensão de exibição mínima no exemplo hello world. Agora, veremos um que sabe da existência das outras exibições do workbench e responde à navegação e alterações de seleção do usuário no workbench. Primeiro, vamos dar uma olhada na declaração da extensão no plugin.xml.

<extension
   point="org.eclipse.ui.views">
	<category 
	   id="org.eclipse.ui.examples.readmetool"
	   name="%Views.category">
	</category>
	<view
 	   id="org.eclipse.ui.examples.readmetool.views.SectionsView"
	   name="%Views.ReadmeSections"
	   icon="icons/view16/sections.gif"
	   category="org.eclipse.ui.examples.readmetool"
	   class="org.eclipse.ui.examples.readmetool.ReadmeSectionsView">
	</view>
</extension> 

Isso deve parecer bastante familiar. Vimos que uma nova exibição, ReadmeSectionsView, é uma contribuição para o workbench. O view id, name e category são especificados como vimos anteriormente. Um icon é também fornecido para a exibição, utilizando um caminho relativo para o diretório de instalação do plug-in.

Vamos dar uma olhada em ReadmeSectionsView. Você pode mostrar qualquer exibição no workbench, selecionando Janela->Mostrar Exibição->Outro... e selecionando a exibição na lista Mostrar Exibição.

Quando mostramos ReadmeSectionsView, aparece uma exibição com uma lista nela. A lista estará vazia, a menos que cliquemos em um arquivo com extensão .readme e, nesse caso, ela será preenchida com seções do arquivo Leia-me.

Como o plug-in reconhece o arquivo readme e como sabia sobre as alterações de seleção? Se pudermos rastrear as respostas a essas perguntas, conseguiremos compreender como construir plug-ins integrados ao workbench.

Começaremos com o conhecido método createPartControl.  Como vimos no exemplo Hello World, é onde os widgets que representam uma exibição são criados.   Vamos ignorar alguns dos códigos para começar.

   public void createPartControl(Composite parent) {
      viewer = new ListViewer(parent);
      ...
      // incluir-me como um ouvinte de seleção global
      getSite().getPage().addSelectionListener(this);

      // preparar a seleção
      selectionChanged(null, getSite().getPage().getSelection());
   }

A exibição cria e armazena um ListViewer e registra-se como um atendente de seleção na sua página. Ele obtém a página em um IViewSite, que contém informações sobre o contexto da exibição, como a janela, a página de conteúdo e o plug-in do workbench. Quando somos notificados de uma alteração de seleção, o que acontece?  O seguinte código é executado:

   public void selectionChanged(IWorkbenchPart part, ISelection sel) {
      //se a seleção for um arquivo Leia-me, obtenha as seções dele.
      AdaptableList input = ReadmeModelFactory.getInstance().getSections(sel);
      viewer.setInput(input);
   }

Parece que a classe ReadmeModelFactory é responsável pela transformação da seleção em seções do Leia-me e essas seções são entrada para o visualizador que criamos no método createPartControl.

Mas como o visualizador preencheu os widgets de lista?  Por enquanto, suponhamos apenas que, uma vez que o visualizador tomou conhecimento do seu elemento de entrada, ele soube como preencher um widget de lista com as informações - apesar de tudo, é um ListViewer.  Se quiser saber agora como é este visualizador, vá para Visualizadores

Ainda não sabemos como os arquivos readme são detectados ou de onde vem as informações de seção do arquivo.  Uma olhada rápida no ReadmeModelFactory pode dar alguma idéia.

   public AdaptableList getSections(ISelection sel) {
      // Se sel não for uma seleção estruturada, apenas retornar.
      if (!(sel instanceof IStructuredSelection))
     return null;
      IStructuredSelection structured = (IStructuredSelection)sel;

      //se a seleção for um arquivo Leia me, obtenha as seções dele.
      Object object = structured.getFirstElement();
      if (object instanceof IFile) {
         IFile file = (IFile) object;
         String extension = file.getFileExtension();
         if (extension != null && extension.equals(IReadmeConstants.EXTENSION)) {
            return getSections(file);
         }
      }

      //o objeto selecionado não é um arquivo Leia-me
      return null;
   }

Verificamos a seleção para ver se ela é estruturada (múltipla).  (O conceito de uma seleção estruturada vem dos visualizadores do JFace).  Para o primeiro objeto na seleção, verificamos se ele é um recurso (IFile) do arquivo.  Se for, verificamos sua extensão para ver se ela corresponde à extensão ".readme".  Assim que sabemos ter um arquivo Leia me, podemos utilizar outros métodos para analisar as seções.   Você pode navegar pelo restante do ReadmeModelFactory, do MarkElement e do DefaultSectionsParser para obter detalhes sobre a análise do arquivo.

Abordamos muitos conceitos comuns do workbench estudando essa extensão. Agora, mudaremos para algumas outras extensões do workbench e examinaremos como o plug-in pode contribuir mais com a UI do workbench.

Copyright IBM Corp. e outros 2000,2002.