Perspectivas

Já vimos algumas maneiras de o workbench permitir ao usuário controlar a aparência da funcionalidade do plug-in. As exibições podem ser ocultadas ou exibidas utilizando o menu Janela >Mostrar Visualização. Os conjuntos de ações podem ser ocultados ou exibidos utilizando o menu Janela >Personalizar Perspectiva.... Esses recursos ajudam o usuário a organizar o workbench.

As Perspectivas fornecem uma camada adicional de organização em uma janela do workbench. Os usuários podem alternar entre as perspectivas conforme se movem pelas tarefas. Uma perspectiva define uma coleção de exibições, um layout das exibições e os conjuntos de ações visíveis que devem ser utilizados quando o usuário abre a perspectiva pela primeira vez.

As perspectivas são implementadas utilizando  IPerspectiveFactoryEspera-se que os implementadores de IPerspectiveFactory configurem um IPageLayout com informações que descrevam a perspectiva e o layout de sua página de perspectiva.

Layout de parte do workbench

Um dos principais jobs de um IPageLayout é descrever o posicionamento do editor e das exibições na janela do workbench. Observe que esses layouts são diferente da classe Layout no SWT. Embora IPageLayout e Layout resolvam um problema semelhante (dimensionamento e posicionamento do widget em uma área maior), não é preciso entender os layouts do SWT para fornecer um layout de página da perspectiva.

O layout de página de uma perspectiva é inicializado com uma área para visualização de um editor. O factory da perspectiva é o responsável pela inclusão de exibições adicionais relativas ao editor. As exibições são incluídas no layout em relação à (top, bottom, left, right) outra parte. Os marcadores (espaço vazio) também podem ser incluídos para itens não exibidos inicialmente.

Para organizar as exibições relacionadas e reduzir a desordem, você pode utilizar IFolderLayout para agrupar as exibições nas pastas separadas por guias. Por exemplo, a perspectiva Recurso coloca o navegador do recurso dentro de uma pasta no canto superior esquerdo do workbench.  Normalmente, os marcadores são utilizados em layouts de pasta. A perspectiva Recurso define um marcador para a visualização de marcadores na mesma pasta que o navegador de recurso. Se o usuário mostrar a visualização dos marcadores, ela aparecerá na mesma pasta que o navegador, com uma guia para cada visualização.

IPageLayout também permite definir as ações e atalhos disponíveis em uma perspectiva.  

Vinculando exibições e editores com "mostrar em"

Outro serviço valioso fornecido pelas perspectivas e pelo IPageLayout é auxiliar na navegação entre um editor e suas exibições relacionadas.  Normalmente vemos as exibições como uma ajuda para o usuário localizar os objetos com os quais trabalhar em editores.  Entretanto, a operação de contrária também é útil:  um usuário que esteja trabalhando com um objeto em um editor pode precisar navegar até esse objeto dentro de uma visualização.  Isso pode ser atingido utilizando o menu Navegar > Mostrar Em do workbench.  Esse comando permite ao usuário ir direto para uma visualização entre qualquer quantidade de exibições relacionadas no contexto do objeto atualmente editado (ou selecionado).  Por exemplo, um usuário que esteja editando um arquivo pode desejar ir direto para esse arquivo no navegador de recursos.

A arquitetura do plug-in do workbench permite que os desenvolvedores contribuam com exibições e editores em plug-ins diferentes que nem mesmo estejam cientes uns dos outros.  Fazendo a implementação do suporte para "mostrar em", sua visualização ou editor podem suportar uma navegação conveniente para ou de exibições e editores que foram contribuídos por outros plug-ins. 

Essa navegação permite aos usuários mover rapidamente entre exibições e abrir facilmente uma visualização que não seja mostrada normalmente em uma perspectiva específica.  Por exemplo, um usuário que esteja trabalhando na perspectiva Java pode utilizar Navegar > Mostrar Em para exibir o arquivo Java editado atualmente na visualização Navegador.

Origem de Mostrar Em

Se desejar permitir que os usuários utilizem Navegar > Mostrar Em a partir de seu editor ou visualização para ir direto para outra visualização, será necessário implementar IShowInSource.  Sua parte pode fornecer seu IShowInSourcediretamente utilizando protocolo (getShowInSource()) ou como um adaptador.  IShowInSourcepermite que a sua parte forneça um contexto(ShowInContext) que é utilizado pelo destino para decidir como mostrar a origem.  O contexto de mostrar em, de um editor é, normalmente, seu elemento de entrada.  Para uma visualização, o contexto é normalmente a sua seleção.  Uma seleção e um elemento de entrada são fornecidos em um ShowInContextpara dar flexibilidade ao destino em determinar como mostrar a origem. 

É fornecido um contexto padrão para editores, de forma que seu editor possa participar em "mostrar em" sem qualquer codificação especial.  Para editores, o elemento de entrada e a seleção são usados para criar um contexto apropriado. 

Para exibições, IShowInSource deve ser implementado pela visualização para oferecer a funcionalidade Navegar > Mostrar Em.

Destino de Mostrar Em

É necessário implementar IShowInTarget se você desejar que a visualização seja um destino válido para uma operação "mostram em".  O destino é responsável por mostrar um determinado contexto de maneira apropriada em sua apresentação.  Por exemplo, a visualização Navegador expande sua árvore para selecionar e revelar um recurso especificado no contexto.  

Um destino deve verificar a seleção no ShowInContext ao decidir o que mostrar, pois essas são as informações mais específicas.  Ele deveria mostrar o elemento de entrada apenas se nenhuma seleção for indicada.

Apresentando Destinos Apropriados

Como a lista de destinos disponíveis é determinada?  É possível especificar os destinos disponíveis para sua perspectiva em seu IPageLayout.  Lembre-se de que uma navegação "mostrar em" pode abrir uma visualização que ainda não esteja presente na perspectiva.  Utilizando IPageLayout.addShowInPart, é possível especificar um destino "mostrar em" válido pelo ID.  Sendo assim, os destinos válidos podem ser estabelecidos sem criar qualquer visualização desnecessariamente.