Übergabe von Argumenten an einen Abschnitt

Ein übergeordnetes Element übergibt Argumente unter Verwendung von 'ContainerContext' an seine untergeordneten Elemente. Der Kontext kann Argumente an den Konstruktor eines Abschnitts übergeben oder eine Factiry für die Konstruktion dieser Argumente angeben. So kann zum Beispiel ein bestimmter ContainerContext Regeln angeben wie:
Wenn der Kontext keine bestimmte Abhängigkeit liefert, wird das untergeordnete Element die Standardimplementierung des Erweiterungspunkts org.eclipse.core.component.types verwenden. Da der Kontext jedes dieser Argumente außer Kraft setzen kann, die ein Abschnitt in seinem Konstruktor enthält, kann das übergeordnete Element jede der Schnittstellen, die der Abschnitt normalerweise von seiner Site erhält, außer Kraft setzen. Das übergeordnete Elementkönnte sein untergeordnetes Element zum Beispiel zwingen, eine andere Implementierung von IActionBars du7rchn Lieferung einer IActionBars in dem Kontext zu verwenden.

Das übergeordnete Element hat mehrere Möglichkeiten, den Kontext zu konstruieren:

Die folgenden DefaultContextView, RedirectContextView und OverrideInstanceView Beispiele demonstrieren jede Möglichkeit.

Standardkontext

Das folgende Beispiel zeigt zeigt die Quelle für eine Ansicht, die zwei verschachtelte untergeordnete Elemente in dem Standardkontext erstellt. Die Tatsache, dass die untergeordneten Elemente in dem Standardkontext erstellt werden, bedeutet, dass das übergeordnete Element keinen Einfluss auf den Namen, die Symbolleiste. die Auswahl usw. des untergeordneten Elements ausübt und nicht bereit ist, sich damit zu befassen. Wenn das übergeordnete Element beispielsweise etwas mit der aktuellen Auswahl seines untergeordneten Elements machen wollte, hätte es einen ISelectionHandler an dieses untergeordnete Element übergeben müssen. Das Endergebnis wird unterhalb des Beispiels gezeigt.

/**
 * Ansicht, die demonstriert, wie zwei verschachtelte untergeordnete Elemente mit dem Standardkontext
 * zu erstellen sind.
 */
public class DefaultContextView {
    public DefaultContextView(Composite parent, IPartFactory factory) throws CoreException {
        // Erstellt einen Ressourcennavigator
        ContainerContext viewContext1 = new ContainerContext();  
        ISite view1 = factory.createView(
                IPageLayout.ID_RES_NAV, parent, viewContext1, null);
   
        // Erstellt eine Sicht 'Eigenschaften'
        ContainerContext viewContext2 = new ContainerContext();
        ISite view2 = factory.createView(IPageLayout.ID_PROP_SHEET, parent, viewContext2, null);
   
        parent.setLayout(new FillLayout());       
    }
}

Screenshot einer Standard-Kontextansicht

Umleiten von Abhängigkeiten von einem übergeordneten zu einem untergeordneten Element

Dieses Beispiel zeigt, wie eine Site-Schnittstelle von dem übergeordneten Element zu dem untergeordneten Element umzuleiten ist. Diese zusammengesetzte Ansicht enthält einen Ressourcennavigator und eine Sicht 'Eigenschaften'. Es leitet seine Auswahlsteuerroutine an den Ressourcennavigator weiter und leitet seine Aktionsleisten an die Sicht 'Eigenschaften weiter. Das Ergebnis ist eine Ansicht, die eine Ressourcenauswahl zur Verfügung stellt und die Symbolleiste und das Menü der Sicht 'Eigenschaften' enthält, wie im Folgenden gezeigt wird.

public class RedirectContextView {
    /**
     * Komponentenkonstruktor. Nicht direkt aufrufen.
     */
    public RedirectContextView(Composite parent, IPartFactory factory, ISelectionHandler selection, IActionBars actionBars) throws CoreException {
        // Erstellt einen Ressourcennavigator. Leitet die Auswahl des Navigators direkt zu unserem übergeordneten Element um.
        ContainerContext viewContext1 = new ContainerContext()
            .addInstance(ISelectionHandler.class, selection);
        ISite view1 = factory.createView(
                IPageLayout.ID_RES_NAV,
                parent, viewContext1, null);
   
        // Erstellt eine Sicht 'Eigenschaften'. Ermöglicht der Sicht 'Eigenschaften', unsere Aktionsleiste direkt zu verwenden.
        ContainerContext viewContext2 = new ContainerContext()
            .addInstance(IActionBars.class, actionBars);
        ISite view2 = factory.createView(IPageLayout.ID_PROP_SHEET, parent, viewContext2, null);
   
        parent.setLayout(new FillLayout());       
    }
}


Screenshot der Ansicht 'Kontext umleiten'

Abhängigkeiten direkt zur Verfügung stellen

Dieses Beispiel demonstriert, wie ein untergeordnetes Element mit einer seiner Abhängigkeiten direkt zu liefern ist. In diesem Beispiel erstellen wir eine zusammengesetzte Ansicht, die eine Sicht 'Fehler' view und eine Sicht 'Eigenschaften' enthält. Wir liefern die Sicht 'Fehler' mit einem ISelectionHandler, um die Zahl der ausgewählten Fehler in der Inhaltsbeschreibung anzuzeigen. Das Endergebnis wird unterhalb des Beispiels gezeigt.

public class OverrideInstanceView {
   
    /**
     * Komponentenkonstruktor. Nicht direkt aufrufen.
     */
    public OverrideInstanceView(Composite parent, IPartFactory factory, final INameable name) throws CoreException {
        ContainerContext viewContext1 = new ContainerContext();
       
        // Fügt dem Inhalt der Sicht einen ISelectionHandler hinzu. Immer wenn die Sicht ihre Auswahl ändert,
        // wird die Zahl der ausgewählten Elemente in der Inhaltsbeschreibung angezeigt.
        viewContext1.addInstance(ISelectionHandler.class, new ISelectionHandler() {
            /* (nicht 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)}));
                }
            }
        });

        // Erstellt eine Sicht 'Fehler'
        ISite view1 = factory.createView(
                IPageLayout.ID_PROBLEM_VIEW, parent, viewContext1, null);
   
        // Erstellt eine Sicht 'Eigenschaften'.
        ContainerContext viewContext2 = new ContainerContext();
        ISite view2 = factory.createView(IPageLayout.ID_PROP_SHEET, parent, viewContext2, null);
   
        parent.setLayout(new FillLayout());
    }
}



Screenshot der Sicht 'Instanz außer Kraft setzen'