Předávání argumentů části

Nadřazený prvek předává argumenty svým podřízeným prvkům s použitím prvku ContainerContext. Kontext může předávat argumenty konstruktoru části nebo může stanovit továrnu, která tyto argumenty sestaví. Určitý prvek ContainerContext může určovat například takováto pravidla:
Pokud kontext určitou závislost nepodporuje, podřízený prvek použije výchozí implementaci z bodu rozšíření org.eclipse.core.component.types. Protože kontext může potlačit kterýkoli z argumentů, které má část ve svém konstruktoru, nadřízený prvek může potlačit kterékoli z rozhraní, které část normálně získává ze svého webu. Například nadřazený prvek může svůj podřízený prvek donutit použít odlišnou implementaci IActionBars poskytnutím IActionBars v kontextu.

Nadřazený prvek má řadu voleb konstruování kontextu:

Následující ukázky DefaultContextView, RedirectContextView a OverrideInstanceView předvádějí jednotlivé možnosti.

Výchozí kontext

Následující příklad uvádí zdrojový text pohledu, který vytváří dva vnořené podřízené prvky ve výchozím kontextu. Skutečnost, že podřízené prvky jsou vytvořeny ve výchozím kontextu, znamená, že nadřazený prvek nezná název, panel nástrojů, volby atd. podřízených prvků a neumí s nimi manipulovat. Pokud chce nadřazený prvek něco udělat například s aktuální volbou některého ze svých podřízených prvků, musí tomuto prvku předat ISelectionHandler. Následuje ukázka konečného výsledku.

/**
 * Pohled ilustrující vytvoření dvou vnořených podřízených prvků
 * s použitím výchozího kontextu.
 */
public class DefaultContextView {
    public DefaultContextView(Composite parent, IPartFactory factory) throws CoreException {
        // Vytvoří navigátor prostředků
        ContainerContext viewContext1 = new ContainerContext();  
        ISite view1 = factory.createView(
                IPageLayout.ID_RES_NAV, parent, viewContext1, null);
   
        // Vytvoří pohled Vlastnosti
        ContainerContext viewContext2 = new ContainerContext();
        ISite view2 = factory.createView(IPageLayout.ID_PROP_SHEET, parent, viewContext2, null);
   
        parent.setLayout(new FillLayout());       
    }
}

Snímek obrazovky DefaultContextView

Přesměrování závislostí z nadřazeného prvku na podřízený

Tento příklad předvádí způsob přesměrování rozhraní webu z nadřazeného prvku na podřízený. Tento kompozitní pohled obsahuje navigátor prostředků a pohled Vlastnosti. Přesměrovává svůj popisovač výběru na navigátor prostředků a ten přesměrovává své řádky s akcemi do pohledu Vlastnosti. Výsledkem je pohled, který umožňuje volbu prostředku a obsahuje panel nástrojů a nabídku pohledu Vlastnosti, viz níže.

public class RedirectContextView {
    /**
     * Konstruktor komponenty. Nespouštějte přímo.
     */
    public RedirectContextView(Composite parent, IPartFactory factory, ISelectionHandler selection, IActionBars actionBars) throws CoreException {
        // Vytvoří navigátor prostředků. Přesměruje výběr navigátoru přímo na svůj nadřazený prvek.
        ContainerContext viewContext1 = new ContainerContext()
            .addInstance(ISelectionHandler.class, selection);
        ISite view1 = factory.createView(
                IPageLayout.ID_RES_NAV,
                parent, viewContext1, null);
   
        // Vytvoří pohled Vlastnosti. Umožní pohledu Vlastnosti přímé používání našich řádků s akcemi.
        ContainerContext viewContext2 = new ContainerContext()
            .addInstance(IActionBars.class, actionBars);
        ISite view2 = factory.createView(IPageLayout.ID_PROP_SHEET, parent, viewContext2, null);
   
        parent.setLayout(new FillLayout());       
    }
}


Snímek obrazovky RedirectContextView

Přímé poskytování závislostí

Tento příklad předvádí přímé poskytnutí jedné ze závislostí podřízenému prvku. V rámci příkladu vytvoříme kompozitní pohled obsahující pohledy Problémy a Vlastnosti. Do pohledu Problémy přidáme ISelectionHandler, abychom mohli zobrazovat počet zvolených problémů v popisu obsahu. Následuje ukázka konečného výsledku.

public class OverrideInstanceView {
   
    /**
     * Konstruktor komponenty. Nespouštějte přímo.
     */
    public OverrideInstanceView(Composite parent, IPartFactory factory, final INameable name) throws CoreException {
        ContainerContext viewContext1 = new ContainerContext();
       
        // Přidává ISelectionHandler do kontextu pohledu. Vždy při změně výběru pohledu
        // zobrazí počet zvolených položek v popisu obsahu
        viewContext1.addInstance(ISelectionHandler.class, new ISelectionHandler() {
            /* (mimo Javadoc)
             * @viz 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("zvoleno {0} problémů",
                            new String[] {Integer.toString(selectionSize)}));
                }
            }
        });

        // Vytvoří pohled Problémy
        ISite view1 = factory.createView(
                IPageLayout.ID_PROBLEM_VIEW, parent, viewContext1, null);
   
        // Vytvoří pohled Vlastnosti
        ContainerContext viewContext2 = new ContainerContext();
        ISite view2 = factory.createView(IPageLayout.ID_PROP_SHEET, parent, viewContext2, null);
   
        parent.setLayout(new FillLayout());
    }
}



Snímek obrazovky OverrideInstanceView