blob: eb6f75185504e20175d4b7292cbf75959cbd6ad9 [file] [log] [blame]
package org.eclipse.e4.workbench.ui.renderers.swt;
import org.eclipse.e4.core.services.IContributionFactory;
import org.eclipse.e4.core.services.context.IEclipseContext;
import org.eclipse.e4.core.services.context.spi.ContextInjectionFactory;
import org.eclipse.e4.ui.model.application.MMenu;
import org.eclipse.e4.ui.model.application.MMenuItem;
import org.eclipse.e4.ui.model.application.MPart;
import org.eclipse.e4.ui.model.application.MPartSashContainer;
import org.eclipse.e4.ui.model.application.MPartStack;
import org.eclipse.e4.ui.model.application.MPerspective;
import org.eclipse.e4.ui.model.application.MTrimStructure;
import org.eclipse.e4.ui.model.application.MUIElement;
import org.eclipse.e4.ui.model.application.MWindow;
import org.eclipse.e4.ui.workbench.swt.factories.IRendererFactory;
import org.eclipse.e4.ui.workbench.swt.internal.AbstractPartRenderer;
import org.eclipse.e4.ui.workbench.swt.internal.PartRenderingEngine;
public class WorkbenchRendererFactory implements IRendererFactory {
private MenuRenderer menuRenderer;
private MenuItemRenderer menuItemRenderer;
private ContributedPartRenderer contributedPartRenderer;
private PerspectiveRenderer perspRenderer;
private SashRenderer partSashRenderer;
private StackRenderer stackRenderer;
private TrimRenderer trimRenderer;
private WBWRenderer wbwRenderer;
private PartRenderingEngine renderingEngine;
private IEclipseContext context;
private IContributionFactory contributionFactory;
public AbstractPartRenderer getRenderer(MUIElement uiElement, Object parent) {
if (uiElement instanceof MPart) {
if (contributedPartRenderer == null) {
contributedPartRenderer = new ContributedPartRenderer();
initRenderer(contributedPartRenderer);
}
return contributedPartRenderer;
} else if (uiElement instanceof MMenuItem) {
if (menuItemRenderer == null) {
menuItemRenderer = new MenuItemRenderer();
initRenderer(menuItemRenderer);
}
return menuItemRenderer;
} else if (uiElement instanceof MMenu) {
if (menuRenderer == null) {
menuRenderer = new MenuRenderer();
initRenderer(menuRenderer);
}
return menuRenderer;
} else if (uiElement instanceof MPerspective) {
if (perspRenderer == null) {
perspRenderer = new PerspectiveRenderer();
initRenderer(perspRenderer);
}
return perspRenderer;
} else if (uiElement instanceof MPerspective) {
if (perspRenderer == null) {
perspRenderer = new PerspectiveRenderer();
initRenderer(perspRenderer);
}
return perspRenderer;
} else if (uiElement instanceof MPartSashContainer) {
if (partSashRenderer == null) {
partSashRenderer = new SashRenderer();
initRenderer(partSashRenderer);
}
return partSashRenderer;
} else if (uiElement instanceof MPartStack) {
if (stackRenderer == null) {
stackRenderer = new StackRenderer();
initRenderer(stackRenderer);
}
return stackRenderer;
} else if (uiElement instanceof MTrimStructure<?>) {
if (trimRenderer == null) {
trimRenderer = new TrimRenderer();
initRenderer(trimRenderer);
}
return trimRenderer;
} else if (uiElement instanceof MWindow) {
if (wbwRenderer == null) {
wbwRenderer = new WBWRenderer();
initRenderer(wbwRenderer);
}
return wbwRenderer;
}
// We could return an 'no renderer' renderer here ??
return null;
}
protected void initRenderer(AbstractPartRenderer renderer) {
renderer.init(renderingEngine, context, contributionFactory);
ContextInjectionFactory.inject(renderer, context);
}
public void init(PartRenderingEngine partRenderingEngine,
IEclipseContext context, IContributionFactory contributionFactory) {
renderingEngine = partRenderingEngine;
this.context = context;
this.contributionFactory = contributionFactory;
}
}