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 Exibiçã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 IPerspectiveFactory. Espera-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.
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 exibiçã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 exibição de marcadores na mesma pasta que o navegador de recurso. Se o usuário mostrar a exibição dos marcadores, ela aparecerá na mesma pasta que o navegador, com uma guia para cada exibição.
IPageLayout também permite definir as ações e atalhos disponíveis em uma perspectiva.
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 exibição. Isso pode ser atingido utilizando o menu Navegar > Mostrar Em do workbench. Esse comando permite ao usuário ir direto para uma exibiçã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 exibiçã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 exibiçã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 exibição Navegador.
Se desejar permitir que os usuários utilizem Navegar > Mostrar Em a partir de seu editor ou exibição para ir direto para outra exibição, será necessário implementar IShowInSource. Sua parte pode fornecer seu IShowInSource diretamente utilizando protocolo (getShowInSource()) ou como um adaptador. IShowInSource permite que sua parte forneça um contexto (IShowInContext) 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 exibição, o contexto é normalmente a sua seleção. Tanto uma seleção quanto um elemento de entrada são fornecidos em um IShowInContext para fornecer ao destino a flexibilidade na determinação de 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 exibição para oferecer a funcionalidade Navegar > Mostrar Em.
É necessário implementar IShowInTarget se você desejar que a exibiçã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 exibição Navegador expande sua árvore para selecionar e revelar um recurso especificado no contexto.
Um destino deveria verificar primeiramente a seleção no IShowInContext para 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.
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 exibiçã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 exibição desnecessariamente.