Trasmissione degli argomenti ad una parte

Un elemento principale trasmette gli argomenti ai rispettivi elementi secondari utilizzando un ContainerContext. Il contesto può trasmettere gli argomenti al costruttore di una parte o specificare un factory per la costruzione di tali argomenti. Ad esempio, un particolare ContainerContext può specificare regole come:
Se il contesto non fornisce una dipendenza particolare, l'elemento secondario utilizzerà l'implementazione predefinita dal punto di estensione org.eclipse.core.component.types. Poiché il contesto può sovrascrivere qualsiasi argomento che la parte può ottenere nel costruttore, l'elemento principale può sovrascrivere qualsiasi interfaccia che la parte normalmente ottiene per il sito. Ad esempio, l'elemento principale può forzare l'elemento secondario ad utilizzare una differente implementazione di IActionBars fornendo un IActionBars nel contesto.

La parte principale dispone di diverse opzioni per la creazione del contesto:

I seguenti esempi DefaultContextView, RedirectContextView e OverrideInstanceView mostrano le diverse possibilità.

Contesto predefinito

Il seguente esempio mostra l'origine di una vista che consente di creare due elementi secondari nidificati nel contesto predefinito. Gli elementi secondari vengono creati nel contesto predefinito perché l'elemento principale non rileva il nome, la barra degli strumenti la selezione, ecc. dell'elemento secondario. Se l'elemento principale ha bisogno di tali elementi, ad esempio la selezione corrente di uno dei suoi elementi secondari, deve trasmettere un ISelectionHandler a quell'elemento secondario. Il risultato finale è mostrato al di sotto dell'esempio.

/**
 * View that demonstrates how to create two nested children
 * with the default context.
 */
public class DefaultContextView {
    public DefaultContextView(Composite parent, IPartFactory factory) throws CoreException {
        // Create a resource navigator
        ContainerContext viewContext1 = new ContainerContext();  
        ISite view1 = factory.createView(
                IPageLayout.ID_RES_NAV, parent, viewContext1, null);
   
        // Create property view
        ContainerContext viewContext2 = new ContainerContext();
        ISite view2 = factory.createView(IPageLayout.ID_PROP_SHEET, parent, viewContext2, null);
   
        parent.setLayout(new FillLayout());       
    }
}

Immagine di DefaultContextView

Rendirizzamento dipendenze da un elemento principale a un secondario

Questo esempio mostra come reindirizzare l'interfaccia di un sito da un elemento principale a un elemento secondario. Questa vista composta contiene vista per l'esplorazione delle risorse e una vista delle proprietà. Reindirizza il gestore di selezione alla vista di esplorazione risorse e la barra delle azioni alla vista delle proprietà. Il risultato ottenuto è una vista che fornisce una selezione di risorse e che contiene la barra degli strumenti e il menu della vista proprietà, come mostrato di seguito.

public class RedirectContextView {
    /**
     * Component constructor. Do not invoke directly.
     */
    public RedirectContextView(Composite parent, IPartFactory factory, ISelectionHandler selection, IActionBars actionBars) throws CoreException {
        // Create a resource navigator. Redirect the navigator's selection directly to our parent.
        ContainerContext viewContext1 = new ContainerContext()
            .addInstance(ISelectionHandler.class, selection);
        ISite view1 = factory.createView(
                IPageLayout.ID_RES_NAV,
                parent, viewContext1, null);
   
        // Create property view. Allow the property view to use our action bars directly.
        ContainerContext viewContext2 = new ContainerContext()
            .addInstance(IActionBars.class, actionBars);
        ISite view2 = factory.createView(IPageLayout.ID_PROP_SHEET, parent, viewContext2, null);
   
        parent.setLayout(new FillLayout());       
    }
}


Immagine di RedirectContextView

Assegnazione diretta delle dipendenze

Questo esempio mostra come fornire direttamente ad un elemento secondario le proprie dipendenze. Viene creata una vista composta contenente una vista dei problemi e una delle proprietà. La vista problemi viene fornita con un ISelectionHandler per visualizzare il numero dei problemi selezionati nella descrizione del contenuto. Il risultato finale è mostrato di seguito.

public class OverrideInstanceView {
   
    /**
     * Component constructor. Do not invoke directly.
     */
    public OverrideInstanceView(Composite parent, IPartFactory factory, final INameable name) throws CoreException {
        ContainerContext viewContext1 = new ContainerContext();
       
        // Add an ISelectionHandler to the view's context. Whenever the view changes its selection,
        // display the number of selected items in the content description
        viewContext1.addInstance(ISelectionHandler.class, new ISelectionHandler() {
            /* (non-Javadoc)
             * @see org.eclipse.ui.part.services.ISelectionHandler#setSelection(org.eclipse.jface.viewers.ISelection)
             */
            public void setSelection(ISelection newSelection) {
                if (newSelection instanceof IStructuredSelection) {
                    IStructuredSelection sel = (IStructuredSelection)newSelection;
                    int selectionSize = sel.size();
                   
                    name.setContentDescription(MessageFormat.format("{0} problems selected",
                            new String[] {Integer.toString(selectionSize)}));
                }
            }
        });

        // Create a problem view
        ISite view1 = factory.createView(
                IPageLayout.ID_PROBLEM_VIEW, parent, viewContext1, null);
   
        // Create property view
        ContainerContext viewContext2 = new ContainerContext();
        ISite view2 = factory.createView(IPageLayout.ID_PROP_SHEET, parent, viewContext2, null);
   
        parent.setLayout(new FillLayout());
    }
}



Immagine di OverrideInstanceView