Interfacce del sito

Gli argomenti in un costruttore di parte sono noti come dipendenze. Le dipendenze di parte sostituiscono i diversi adattatori e metodi get, ad esempio, una parte basata sul componente utilizzerà un'istanza di IActionBars nel suo costruttore per accedere a IActionBars di un sito.

I siti nel nuovo stile offrono un insieme di interfacce open-end. Qualsiasi plugin può estendere l'insieme delle interfacce del sito utilizzando il punto di estensione org.eclipse.core.component.types. Anche se l'insieme di interfacce del sito può essere esteso, tutti i siti supportano lo stesso insieme, assicurando che una parte possa essere inserita in qualsiasi sito. È possibile visualizzare l'intero insieme di interfacce del sito utilizzando la vista del registro plugin PDE.

Il workbench fornisce le seguenti interfacce del sito:

Interfaccia
Descrizione
IErrorContext
Costruisce e registra i messaggi IStatus nel log del plugin.
Bundle
L'insieme dei plugin contiene l'implementazione delle parti. Questo fornisce automaticamente informazioni agli altri componenti, quali l'implementazione di IErrorContext, sui relativi plugin.
IContainer
Il contenitore del sito. Questo oggetto può essere interrogato sulle altre interfacce del sito; questo risulta utile se la parte vuole utilizzare in multiplex o reindirizzare dal sito ai suoi siti secondari.
INameable
Consente ad una parte di impostare il nome, l'icona, la descrizione comando a comparsa e la descrizione del contenuto. Sostituisce i diversi metodi get e listener su IWorkbenchPart.
Composite
Il composto principale della parte. Questo composto non è condiviso con altre parti, e verrà eliminato insieme alla parte. La parte può impostare il layout e collegare i listener a questo composto.
ISecondaryId
Interfaccia che restituisce un ID secondario della parte quando viene utilizzata come una vista con più istanze.
ResourceManager
Alloca e dealloca in modo protetto le immagini, i tipi di carattere, i colori e altre risorse SWT. Assicura che risorse identiche siano condivise tra le parti e che le dispersioni siano cancellate alla chiusura della parte.
IDirtyHandler
Consente alle parti di impostare o cancellare gli stati non finali.
IMessageDialogs
Visualizza all'utente le finestre di dialogo di errore, avviso o informazioni.
IActionBars
Svolge la stessa funzione di getViewSite().getActionBars() con l'API Eclipse 3.0.
IMultiplexer
Fornisce un componente in multiplex con accesso al multiplexer ed alle interfacce condivise
.
ISavedState
Conserva lo stato precedentemente permanente della parte.
IPartFactory
Consente ad una parte di creare editor e viste nidificate.
IPartDescriptor
Conserva le meta-informazioni sulla parte, quali l'ID, il titolo, l'immagine predefinita, ecc.
IEditorInput
Conserva l'input dell'editor per un editor. Per le viste fa riferimento ad un input di editor vuoto.
ISelectionHandler
Gestisce le modifiche di selezione. Le parti la possono utilizzare per modificare la selezione fornita al workbench.

Dipende dal contesto di contenuto della parte determinare se la parte riceve un'unica istanza di ciascuna interfaccia o un oggetto condiviso tra più parti. Il costruttore della parte non riceve mai un argomento null.

 

Utilizzo delle interfacce del sito con le parti esistenti

Anche se l'inserimento di un costruttore può essere conveniente, non sarebbe praticabile riscrivere tutti gli editor e le viste esistenti per inserire un costruttore in modo da trarre vantaggio delle nuove interfacce del sito. Per questo motivo, tutte le nuove interfacce sono disponibili anche per le viste esistenti come adattatori in IWorkbenchPartSite.

Di seguito viene riportata una vista che contiene un singolo pulsante che apre una finestra di dialogo dei messaggi.

Immagine di DependenciesViewOld

Nell'esempio seguente viene mostrata l'origine di una vista nel nuovo stile che apre la finestra di dialogo utilizzando la nuova interfaccia IMessageDialogs.

/**
 * Demonstrates how to use component dependencies in a new-style part.
 *
 * @since 3.1
 */
public class DependenciesViewNew {
    // Dependencies
    private IMessageDialogs dialogs;
   
    /**
     * Component constructor. Do not invoke directly.
     */
    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");
    }
}

Questo esempio mostra una vista tradizionale che apre una finestra di dialogo che utilizza IMessageDialogs; dimostra che è possibile anche utilizzare una parte di workbench tradizionale. Le righe in rosso mostrano come viene inizializzata e utilizzata l'interfaccia IMessageDialogs nei diversi casi.

/**
 * Demonstrates how to use component dependencies in an old-style view
 *
 * @since 3.1
 */
public class DependenciesViewOld extends ViewPart {
    // Dependencies
    private IMessageDialogs dialogs;
    
    // Main widget
    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();
    }
}