Istanza delle parti

Tutte le interazioni con una parte si verificano mediante un ISite. Dal punto di vista del creatore di una parte, l'ISite è la parte. L'ISite può essere creato da un IPartFactory o istanziando direttamente la classe del sito.

Per eliminare una parte, eliminare il controllo per il rispettivo ISite.

Istanza delle parti utilizzando IPartFactory

Le viste e gli editor, normalmente vengono creati utilizzando un IPartFactory e IPartFactory può solo creare parti registrate con i punti di estensione delle viste o degli editor . Le parti create da IPartFactory dipendono da IWorkbenchPage e non possono esistere senza IWorkbenchPage. IPartFactory crea le parti mediante un ID e la classe di implementazione della parte non deve essere necessariamente API. IPartFactory può essere ottenuto da IWorkbenchPage. Le parti possono anche utilizzare IPartFactory nei rispettivi costruttori per creare elementi secondari nidificati.

Questo esempio dimostra come creare una vista utilizzando IPartFactory.

/**
 * Used to create instances of editors and views.
 *
 * @since 3.1
 */
public interface IPartFactory {
    /**
     * Creates an instance of a view. Returns an <code>ISite</code> for the newly created view.
     * When the caller is done with the part it should dispose the part's main control. This can
     * be accomplished by calling <code>ISite.getControl().dispose()</code>, or by disposing the
     * parent composite.
     *
     * @param viewId ID of the view, as registered with the org.eclipse.ui.views extension point
     * @param parentComposite parent composite for the view. If the view is successfully created, it
     *        will create exactly one new child control in this composite.
     * @param context local context for the view. This object can override any or all of the view's dependencies.
     *        If the view has a dependency that isn't found in the local context, a default implementation will
     *        be supplied by the org.eclipse.core.component.types extension point.
     * @param savedState previously saved state of the part, or null if none
     * @return an ISite for the newly created view
     * @throws CoreException if unable to create the part
     */
    public ISite createView(String viewId, Composite parentComposite, IContainerContext context, IMemento savedState) throws CoreException;
   
    /**
     * Creates an instance of an editor. Returns an <code>ISite</code> for the newly created editor.
     * When the caller is done with the part it should dispose the part's main control. This can
     * be accomplished by calling <code>ISite.getControl().dispose()</code>, or by disposing the
     * parent composite.
     *
     * @param editorId ID of the editor, as registered with the org.eclipse.ui.editors extension point
     * @param parentComposite parent composite for the editor. If the editor is successfully created,
     *        it will create exactly one new child control in this composite.
     * @param context local context for the editor. This object can override any or all of the part's dependencies.
     *        If the part has a dependency that isn't found in the local context, a default implementation will
     *        be supplied by the org.eclipse.core.component.types extension point.
     * @param input IEditorInput for this editor
     * @param savedState previously saved state for the part, or null if none
     * @return an ISite for the newly created editor
     * @throws CoreException if unable to create the part
     */
    public ISite createEditor(String editorId, Composite parentComposite, IContainerContext context, IEditorInput input, IMemento savedState) throws CoreException;
}


Di seguito è riportato un esempio di un'azione che crea una vista utilizzando IPartFactory

/**
 * Demonstrate how to open a view by its ID from an IWorkbenchPage.
 */
public class CreateViewByIdAction implements IWorkbenchWindowActionDelegate {
    private IWorkbenchWindow window;

    public void run(IAction action) {       
        IWorkbenchPage page = window.getActivePage();
       
        if (page == null) {
           
// ...uninteresting error-handling code removed...
            return;
        }
       
        final Shell tempShell = new Shell(window.getShell(), SWT.DIALOG_TRIM | SWT.RESIZE);
       
        tempShell.setLayout(new FillLayout());
        tempShell.setText("Problems");
       
        IPartFactory factory = page.getPartFactory();
        try {
            factory.createView(IPageLayout.ID_PROBLEM_VIEW, tempShell, new ContainerContext(), null);
        } catch (CoreException e) {
           
// ...uninteresting error-handling code removed...
        }
       
        // Open the dialog
        tempShell.open();
        Display d = tempShell.getDisplay();
        while (!tempShell.isDisposed()) {
            if (!d.readAndDispatch())
                d.sleep();
        }
       
    }

    public void init(IWorkbenchWindow window) {
        this.window = window;
    }

    // ...remaining (empty) methods removed...
}

Istanza delle parti utilizzando la classe Site

Non tutte le parti sono viste o editor. I client possono utilizzare anche l'API delle parti per creare i propri componenti riutilizzabili. Tali parti non sono registrate con i punti di estensione della vista o dell'editor, ma possono utilizzare la maggior parte di API disponibili per le viste e gli editor. Anche se i client possono creare le proprie API per i componenti riutilizzabili, l'uso dei modelli per le parti consente di integrare i componenti in qualsiasi elemento che supporta l'integrazione di viste ed editor.

Le parti create utilizzando le classi del sito, hanno le seguenti proprietà: Al costruttore del sito bisonga fornire la classe di implementazione della parte e l'insieme dei plugin associati. L'insieme di plugin determina dove registrare i messaggi di errore del log e dove ricercare le risorse nei propri plugin.

Il seguente esempio dimostra come utilizzare la classe Site per istanziare direttamente una parte. In questo esempio, viene istanziata la parte NameTestView in una finestra. Anche se NameTestView è definito vista e può utilizzare l'API della vista, non è necessario registrarlo con il punto di estensione org.eclipse.ui.views a meno che il workbench non debba utilizzarlo come una vista.


/**
 * Demonstrate how to open a part programmatically using the Site class.
 */
public class ProgrammaticViewCreationExampleAction implements IWorkbenchWindowActionDelegate {
    private IWorkbenchWindow window;

    public void run(IAction action) {       
        // Create a shell
        final Shell tempShell = new Shell(window.getShell(), SWT.DIALOG_TRIM | SWT.RESIZE);
        tempShell.setLayout(new FillLayout());
        tempShell.setText("Name test view");
       
        Bundle thisPlugin = ComponentExamplesPlugin.getDefault().getBundle();
       
        try {
            // Instantiate the NameTestView part (this line is the whole point of the example)
            // It demonstrates how the Site class can be used instead of calling NameTestView's constructor.
            Site testPart = new Site(tempShell, new ContainerContext(),
                    thisPlugin,
                    NameTestView.class);           
           
        } catch (CoreException e) {
            // ...uninteresting error-handling code removed...
        }
       
        // Open a modal dialog
        tempShell.open();
        Display d = tempShell.getDisplay();
        while (!tempShell.isDisposed()) {
            if (!d.readAndDispatch())
                d.sleep();
        }
       
    }
\
    public void init(IWorkbenchWindow window) {
        this.window = window;
    }

   
// ...remaining (empty) methods removed...
}