Pohledy a editory se běžně vytvářejí s použitím IPartFactory a IPartFactory může vytvářet pouze části registrované bodem rozšíření pohledů nebo editorů. . Části vytvořené prostřednictvím IPartFactory závisejí na IWorkbenchPage a nelze uchovat IWorkbenchPage. IPartFactory vytváří části podle ID a implementační třída části nemusí mít podobu API. IPartFactory lze získat z IWorkbenchPage. Části mohou mít ve svém konstruktoru rovněž IPartFactory k vytvoření vnořených podřízených prvků.
Tento příklad ukazuje vytvoření pohledu s použitím IPartFactory.
/**
* Vytváří instance editorů a pohledů.
*
* @od 3.1
*/
public interface IPartFactory {
/**
* Vytváří instanci pohledu. Vrací <code>ISite</code>
pro nově vytvořený pohled.
* Pokud volající objekt skončil svou činnost s částí, měl by zlikvidovat hlavní obslužný prvek části. Toto lze
* zajistit voláním <code>ISite.getControl().dispose()</code>
nebo likvidací
* nadřazeného kompozitního prvku.
*
* @parametr viewId ID pohledu registrované
bodem rozšíření org.eclipse.ui.views
* @parametr parentComposite nadřazený kompozitní prvek pohledu. Je-li pohled vytvořen úspěšně,
* vytvoří
v tomto kompozitním prvku přesně jeden nový podřízený obslužný prvek.
* @parametr context lokální kontext pohledu. Tento
objekt může potlačit kteroukoli nebo všechny závislosti pohledu.
* Pokud
má pohled závislost, která není nalezena v lokálním kontextu, výchozí implementaci
* poskytne
bod rozšíření org.eclipse.core.component.types.
* @parametr savedState předchozí uložený stav
části nebo null, pokud neexistuje
* @vrací ISite nově vytvořeného pohledu
* @spouští výjimku jádra, nelze-li část vytvořit
*/
public ISite createView(String viewId, Composite parentComposite,
IContainerContext context, IMemento savedState) throws CoreException;
/**
¨ * Vytváří instanci editoru. Opětovně spouští <code>ISite</code>
pro nově vytvořený editor.
* Pokud volající objekt skončil svou činnost s částí, měl by zlikvidovat hlavní obslužný prvek části. Toto lze
* zajistit voláním <code>ISite.getControl().dispose()</code>
nebo likvidací
* nadřazeného kompozitního prvku.
*
* @parametr editorId ID editoru registrované
bodem rozšíření org.eclipse.ui.editors
* @parametr parentComposite nadřazený kompozitní prvek pro editor. Pokud je editor vytvořen úspěšně,
* vytvoří
v tomto kompozitním prvku právě jeden podřízený obslužný prvek.
* @parametr context lokální kontext editoru. Tento
objekt může potlačit kteroukoli nebo všechny závislosti části.
* Pokud
má část závislost, která není nalezena v lokálním kontextu, výchozí implementaci
* poskytne
bod rozšíření org.eclipse.core.component.types.
* @parametr input IEditorInput tohoto editoru
* @parametr savedState předchozí uložený stav
části nebo null, pokud neexistuje
* @vrací ISite nově vytvořeného editoru
* @spouští výjimku jádra, nelze-li část vytvořit
*/
public ISite createEditor(String editorId, Composite parentComposite,
IContainerContext context, IEditorInput input, IMemento savedState) throws
CoreException;
}
Zde uvádíme příklad akce, která vytváří pohled pomocí IPartFactory
/**
* Postup otevření pohledu podle ID z IWorkbenchPage.
*/
public class CreateViewByIdAction implementuje IWorkbenchWindowActionDelegate
{
okno private IWorkbenchWindow;
public void run(IAction action) {
IWorkbenchPage page = window.getActivePage();
if (page == null) {
//
...zde je odebrán běžný kód obsluhy chyb...
return;
}
final Shell tempShell = new Shell(window.getShell(),
SWT.DIALOG_TRIM | SWT.RESIZE);
tempShell.setLayout(new FillLayout());
tempShell.setText("Problémy");
IPartFactory factory = page.getPartFactory();
try {
factory.createView(IPageLayout.ID_PROBLEM_VIEW, tempShell, new ContainerContext(),
null);
} catch (CoreException e) {
//
...zde je odebrán běžný kód obsluhy chyb...
}
// Otevře dialogové okno
tempShell.open();
Display d = tempShell.getDisplay();
while (!tempShell.isDisposed())
{
if (!d.readAndDispatch())
d.sleep();
}
}
public void init(IWorkbenchWindow window) {
this.window = window;
}
// ...odebrány zbývající metody (prázdné)...
}
/**
* Postup otevření části v programu s použitím třídy Site.
*/
public class ProgrammaticViewCreationExampleAction implementuje IWorkbenchWindowActionDelegate
{
private IWorkbenchWindow window;
public void run(IAction action) {
// Vytvoří interpret textové konzoly
final Shell tempShell =
new Shell(window.getShell(), SWT.DIALOG_TRIM | SWT.RESIZE);
tempShell.setLayout(new
FillLayout());
tempShell.setText("Název testovacího pohledu");
Bundle thisPlugin = ComponentExamplesPlugin.getDefault().getBundle();
try {
// Vytváří instanci části NameTestView (tento řádek je klíčovou částí ukázky)
// Předvádí použití třídy Site místo volání konstruktoru NameTestView.
Site testPart = new Site(tempShell, new ContainerContext(),
thisPlugin,
NameTestView.class);
} catch (CoreException
e) {
// ...zde je odebrán běžný kód obsluhy chyb...
}
// Otevírá modální dialogové okno
tempShell.open();
Display d = tempShell.getDisplay();
while (!tempShell.isDisposed())
{
if (!d.readAndDispatch())
d.sleep();
}
}
public void init(IWorkbenchWindow window) {
this.window = window;
}
// ...odebrány zbývající metody (prázdné)...
}