Interfaces de Site

Os argumentos em um construtor de partes são conhecidos como dependências. Dependências de partes substituem os vários adaptadores e métodos get, por exemplo, para acessar o IActionBars de um site, uma parte com base em componente deve utilizar uma instância IActionBars em seu construtor.

Sites de novos estilos oferecem um conjunto de interfaces ilimitado. Qualquer plug-in pode estender o conjunto de interfaces de sites utilizando o ponto de extensão org.eclipse.core.component.types. Embora o conjunto de interfaces de site possa ser estendido, todos os sites suportam o mesmo conjunto, garantindo que qualquer parte possa ser plugada em qualquer site. É possível visualizar o conjunto completo de interfaces de site utilizando a visualização de registro de plug-in PDE.

O workbench fornece as seguintes interfaces de site:

Interface
Descrição
IErrorContext
Constrói e registra mensagens de IStatus no log do plug-in.
Pacote configurável
O pacote configurável de plug-in que contém a implementação da parte. Essa interface informa outros componentes, como a implementação de IErrorContext, automaticamente sobre seus plug-ins.
IContainer
O contêiner do site. Esse objeto pode ser consultado para qualquer uma das outras interfaces do site, o que poderá ser útil se a parte desejar redirecionar ou multiplexar tudo de seu site para seus filhos.
INameable
Permite que uma parte configure seu nome, ícone, dicas de ferramenta e descrição de conteúdo. Substitui os vários métodos get e listeners no WorkbenchPart.
Composto
Composto pai da parte. Esse composto não é compartilhado com nenhuma outra parte e será descartado ao mesmo tempo que a parte. A parte pode configurar o layout e anexar listeners a esse composto.
ISecondaryId
Interface que retorna o ID secundário de uma parte quando utilizada como uma visualização de várias instâncias.
ResourceManager
Aloca e desaloca imagens, fontes, cores e outros recursos do SWT de maneira segura. Garante que recursos idênticos sejam compartilhados entre partes e que quaisquer vazamentos sejam limpos quando a parte está fechada.
IDirtyHandler
Permite que as partes configurem ou limpem seu estado sujo.
IMessageDialogs
Exibe diálogos de erro, aviso e informativos para o usuário.
IActionBars
Atende ao mesmo objetivo atendido pelo getViewSite().getActionBars() com a API do Eclipse 3.0.
IMultiplexer
Fornece um componente multiplexado com acesso ao seu multiplexador e a quaisquer interfaces compartilhadas
.
ISavedState
Mantém o estado persistido anteriormente da parte.
IPartFactory
Permite que uma parte crie visualizações e editores aninhados.
IPartDescriptor
Mantém meta informações sobre uma parte, como seu ID, título, imagem padrão e assim por diante.
IEditorInput
Mantém a entrada do editor para um editor. Aponta para uma entrada do editor vazia para visualizações.
ISelectionHandler
Manipula alterações na seleção. As partes podem utilizar essa interface para alterar a seleção que fornecem ao workbench.

A parte que contém o contexto é responsável por determinar se a parte obtém uma instância exclusiva para cada interface ou um objeto compartilhado entre várias partes. O construtor da parte nunca recebe um argumento nulo.

 

Utilizando Novas Interfaces de Site com Partes Existentes

Embora a injeção do construtor seja conveniente, não seria prático gravar novamente cada editor e visualização existentes para utilizar injeção do construtor para se beneficiar das novas interfaces de site. Por esse motivo, todas as novas interfaces também estão disponíveis para visualizações existentes como adaptadores no IWorkbenchPartSite.

Esta é uma visualização que contém um único botão que abre um diálogo de mensagem.

Imagem de DependenciesViewOld

O exemplo a seguir mostra a origem de uma visualização de novo estilo que abre o diálogo utilizando a nova interface IMessageDialogs.

/**
 * Demonstra como utilizar dependências de componente em uma parte de novo estilo.
 *
 * @since 3.1
 */
public class DependenciesViewNew {
    // Dependências
    private IMessageDialogs dialogs;
   
    /**
     * Construtor do componente. Não chamar diretamente.
     */
    public DependenciesViewNew(Composite parent, IMessageDialogs dialogs) {
        this.dialogs = dialogs;
       
        Button testButton = new Button(parent, SWT.PUSH);
        testButton.setText("Open a dialog");
        testButton.addSelectionListener(new SelectionAdapter() {
        /* (non-Javadoc)
         * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
         */
        public void widgetSelected(SelectionEvent e) {
            openADialog();
        }
        });
    }
   
    private void openADialog() {
        dialogs.open(IStatus.INFO, "This is a message");
    }
}

Este exemplo mostra uma visualização tradicional que abre um diálogo utilizando IMessageDialogs que demonstra que isso também é possível utilizando uma parte tradicional de workbench. As linhas em vermelho mostram como a interface IMessageDialogs é inicializada e utilizada em cada caso.

/**
 * Demonstra como utilizar dependências de componente em uma visualização em estilo antigo
 *
 * @since 3.1
 */
public class DependenciesViewOld extends ViewPart {
    // Dependências
    private IMessageDialogs dialogs;
    
    // Widget principal
    private Composite parent;
    
    /* (non-Javadoc)
     * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
     */
    public void createPartControl(Composite parent) {
        this.parent = parent;
        this.dialogs = (IMessageDialogs)getSite().getAdapter(IMessageDialogs.class);
        
        Button testButton = new Button(parent, SWT.PUSH);
        testButton.setText("Open a dialog");
        testButton.addSelectionListener(new SelectionAdapter() {
        /* (non-Javadoc)
         * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
         */
        public void widgetSelected(SelectionEvent e) {
            openADialog();
        }
        });
    }
    
    private void openADialog() {
        if (dialogs != null) {
            dialogs.open(IStatus.INFO, "This is a message");
        }
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.IWorkbenchPart#setFocus()
     */
    public void setFocus() {
        parent.setFocus();
    }
}