Interfaces du site

Les arguments dans le constructeur d'un composant "part" sont appelés dépendances. Les dépendances de composants "part" remplacent les différents adaptateurs et méthodes 'get', par exemple, pour accéder aux IActionBars d'un site. Un composant "part" basé sur des composants prendrait une instance IActionBars dans son constructeur.

Les sites d'un nouveau style offrent un ensemble d'interfaces extensibles. Tout plug-in peut étendre l'ensemble d'interfaces du site en utilisant le point d'extension org.eclipse.core.component.types. Bien que l'ensemble d'interfaces de site puisse être étendu, tous les sites prennent en charge le même ensemble, garantissant que n'importe quel composant "part" peut être inséré dans n'importe quel site. Il est possible de visualiser l'ensemble interfaces de site grâce à la vue de registre plug-in PDE.

Le plan de travail fournit les interfaces de site suivantes :

Interface
Description
IErrorContext
Messages IStatus des blocs de construction et des journaux au journal du plug-in.
Bundle
L'ensemble de plug-ins contenant l'implémentation du composant "part". Il informe automatiquement de leurs plug-ins les autres composants, comme l'implémentation d'IErrorContext.
IContainer
Le conteneur du site. Cet objet peut faire l'objet de requêtes pour tout autre interface de site, ce qui est pratique si le composant "part" veut tout rediriger ou multiplexer de son site vers ses enfants.
INameable
Permet à un composant "part" de définir ses nom, icône, info-bulle, et description du contenu. Remplace les différentes méthodes 'get' et programmes d'écoutes sur IWorkbenchPart.
Composite
Composite parent du composant "part". Ce composite n'est pas partagé avec d'autres composants "part", et sera supprimé en même temps que le composant. Le composant "part" est autorisé à définir le format et à joindre des programmes d'écoute au composite.
ISecondaryId
Interface qui retourne l'ID secondaire d'un composant "part" quand elle est utilisée comme une vue à instances multiples.
ResourceManager
Attribue et retire en toute sécurité des images, polices, couleurs, et autres ressources SWT. Garantit que des ressources identiques sont partagées entre les composants "part" et que toute fuite est nettoyée quand le composant est fermé.
IDirtyHandler
Permet aux composants "part" de définir ou d'effacer leurs états incorrects.
IMessageDialogs
Affiche des erreurs, avertissements et boîtes de dialogue d'information pour l'utilisateur
IActionBars
Même rôle que getViewSite().getActionBars() pour l'API d'Eclipse 3.0.
IMultiplexer
Fournit un composant multiplexé avec accès à son multiplexeur et toute interface partagée
.
ISavedState
Met en attente l'état du composant "part" conservé précédemment.
IPartFactory
Permet à un composant "part" de créer des vues et des éditeurs imbriqués.
IPartDescriptor
Met en attente des méta-info concernant un composant "part", comme son ID, titre, image par défaut, etc.
IEditorInput
Met en attente les entrées d'un éditeur. Pointe vers une entrée d'éditeur vide pour les vues.
ISelectionHandler
Changements de sélection des identificateurs. Les composants "part" peuvent s'en servir pour changer la sélection qu'ils fournissent au plan de travail.

Il revient au contexte contenant le composant "part" de déterminer si celui-ci reçoit une instance unique pour chaque interface ou un objet partagé entre plusieurs composants "part". Le constructeur du composant "part" ne reçoit jamais d'argument null.

 

Utilisation de nouvelles interfaces de site avec des composants "part" existants

Bien que l'injection de constructeur soit pratique, il serait dérangeant de devoir re-écrire tous les éditeurs et vues existants pour l'utiliser et profiter ainsi des nouvelles interfaces de site. C'est pourquoi toutes les nouvelles interfaces sont également disponibles pour les vues existantes comme adaptateurs sur IWorkbenchPartSite.

Voici une vue contenant un seul bouton qui ouvre une boîte de dialogue.

Image de DependenciesViewOld

L'exemple suivant montre la source pour une vue du nouveau style qui ouvre la boîte de dialogue en utilisant la nouvelle interface 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");
    }
}

Cet exemple montre une vue traditionnelle qui ouvre une boîte de dialogue en utilisant IMessageDialogs, et montre comment il est également possible de le faire avec un composant "part" de plan de travail traditionnel. Les lignes en rouge montrent comment l'interface IMessageDialogs est initialisée et utilisée dans chaque cas.

/**
 * 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();
    }
}