O ambiente de trabalho sob as coberturas

O ambiente de trabalho fornece um conjunto abrangente de classes e interfaces para a construção de interfaces do usuário complexas. Felizmente, não é necessário entender todas para fazer algo simples. Começaremos olhando alguns conceitos que foram expostos na interface do usuário do ambiente de trabalho e a estrutura correspondente deles sob as coberturas.

Ambiente de Trabalho

Temos utilizado o termo workbench de modo impreciso para nos referirmos"à janela que abre quando você inicia a plataforma." Vamos nos aprofundar um pouco e ver alguns dos componentes visuais que formam o ambiente de trabalho.

Workbench com três exibições e um editor em uma página

No restante desta discussão, quando utilizarmos o termo ambiente de trabalho, estaremos nos referindo à janela ambiente de trabalho (IWorkbenchWindow). A janela ambiente de trabalho é a janela de nível superior em um ambiente de trabalho. É o quadro que armazena a barra de menus, a barra de ferramentas, a linha de status, a barra de atalhos e as páginas. Em geral, não é preciso programar a janela ambiente de trabalho. Basta saber que ela está lá.

Nota:  É possível abrir várias janelas no ambiente de trabalho; no entanto, cada uma delas é um mundo independente de editores e visualizações, sendo assim, vamos nos focalizar em apenas uma delas.

Do ponto de vista do usuário, um ambiente de trabalho contém exibições e editores. Há algumas outras classes utilizadas para implementar a janela do ambiente de trabalho. 

Página

Na janela do ambiente de trabalho, você encontrará uma página (IWorkbenchPage) que, por sua vez, contém partes. As páginas são mecanismos de implementação para agrupamento de partes. Geralmente, não é preciso programar a página, mas você a verá no contexto da programação e depuração.

Perspectivas

As perspectivas fornecem uma camada adicional de organização dentro da página do ambiente de trabalho.  Uma perspectiva define uma coleção apropriada de exibições, seu layout e ações aplicáveis para uma determinada tarefa do usuário.  Os usuários podem alternar entre as perspectivas conforme se movem pelas tarefas.   Do ponto de vista de uma implementação, a perspectiva ativa do usuário controla quais exibições são mostradas na página do ambiente de trabalho, além de suas posições e tamanhos.  Os editores não são afetados por uma alteração na perspectiva.

Exibições e editores

Exibições e editores são para onde movemos detalhes da implementação de alguma programação comum de plug-in. Quando você inclui um componente visual no ambiente de trabalho, deve decidir se deseja implementar uma exibição ou um editor. Como decidir isso?

Em ambos os casos, você estará construindo a exibição ou o editor de acordo com um ciclo de vida comum.

Em todo esse ciclo de vida, os eventos serão disparados da página que contém o ambiente de trabalho para notificar as partes interessadas sobre a abertura, ativação, desativação e o fechamento de exibições e editores.

Parece simples?  Pode ser. Essa é a beleza das exibições e dos editores do ambiente de trabalho. Eles são apenas identificadores do widget e podem ser tão simples ou complexos quanto precisem ser. Vimos a mais simples das exibições anteriormente, quando construímos uma exibição hello world. Vamos examiná-la novamente agora que explicamos melhor o que está acontecendo.

   package org.eclipse.examples.helloworld;

   import org.eclipse.swt.widgets.Composite;
   import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.SWT;
   import org.eclipse.ui.part.ViewPart;

   public class HelloWorldView extends ViewPart {
      Label label;
      public HelloWorldView() {
      }
public void createPartControl(Composite parent) {
         label = new Label(parent, SWT.WRAP);
         label.setText("Hello World");
      }
      public void setFocus() {
         // focalizar meu widget.  Para um rótulo, não
         // faz muito sentido, mas para conjuntos de widgets mais complexos
         // você decidirá qual será focalizado.
      }
   }

Observe que não implementamos um método dispose(), pois não fizemos nada além de criar um etiqueta no método createPartControl(parent). Se tivéssemos alocado qualquer recurso da UI, como imagens ou fontes, teríamos que tê-las descartado aqui. Como estendemos a classe ViewPart, herdamos a implementação "do nothing" de dispose().