blob: 79b9279b76d3a87edf10f46ad03f03b39d5bd178 [file] [log] [blame]
package org.eclipse.e4.workbench.ui.renderers.swt;
import javax.annotation.PostConstruct;
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.model.application.ui.MUIElement;
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspectiveStack;
import org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainer;
import org.eclipse.e4.ui.model.application.ui.basic.MPartStack;
import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar;
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuSeparator;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBarSeparator;
import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
import org.eclipse.e4.ui.model.application.ui.menu.MToolItem;
import org.eclipse.e4.ui.workbench.swt.factories.IRendererFactory;
import org.eclipse.e4.ui.workbench.swt.internal.AbstractPartRenderer;
public class WorkbenchRendererFactory implements IRendererFactory {
private MenuRenderer menuRenderer;
private MenuItemRenderer menuItemRenderer;
private ToolBarRenderer toolbarRenderer;
private ToolItemRenderer toolItemRenderer;
private SeparatorRenderer separatorRenderer;
private ContributedPartRenderer contributedPartRenderer;
private ElementReferenceRenderer elementRefRenderer;
private PerspectiveStackRenderer perspStackRenderer;
private PerspectiveRenderer perspRenderer;
private SashRenderer partSashRenderer;
private StackRenderer stackRenderer;
private TrimBarRenderer trimBarRenderer;
private ToolControlRenderer toolControlRenderer;
private WBWRenderer wbwRenderer;
private IEclipseContext context;
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 MToolBar) {
if (toolbarRenderer == null) {
toolbarRenderer = new ToolBarRenderer();
initRenderer(toolbarRenderer);
}
return toolbarRenderer;
} else if (uiElement instanceof MToolItem) {
if (toolItemRenderer == null) {
toolItemRenderer = new ToolItemRenderer();
initRenderer(toolItemRenderer);
}
return toolItemRenderer;
} else if (uiElement instanceof MMenuSeparator
|| uiElement instanceof MToolBarSeparator) {
if (separatorRenderer == null) {
separatorRenderer = new SeparatorRenderer();
initRenderer(separatorRenderer);
}
return separatorRenderer;
} else if (uiElement instanceof MPlaceholder) {
if (elementRefRenderer == null) {
elementRefRenderer = new ElementReferenceRenderer();
initRenderer(elementRefRenderer);
}
return elementRefRenderer;
} else if (uiElement instanceof MPerspective) {
if (perspRenderer == null) {
perspRenderer = new PerspectiveRenderer();
initRenderer(perspRenderer);
}
return perspRenderer;
} else if (uiElement instanceof MPerspectiveStack) {
if (perspStackRenderer == null) {
perspStackRenderer = new PerspectiveStackRenderer();
initRenderer(perspStackRenderer);
}
return perspStackRenderer;
} 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 MTrimBar) {
if (trimBarRenderer == null) {
trimBarRenderer = new TrimBarRenderer();
initRenderer(trimBarRenderer);
}
return trimBarRenderer;
} else if (uiElement instanceof MToolControl) {
if (toolControlRenderer == null) {
toolControlRenderer = new ToolControlRenderer();
initRenderer(toolControlRenderer);
}
return toolControlRenderer;
} 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(context);
ContextInjectionFactory.inject(renderer, context);
}
@PostConstruct
public void init(IEclipseContext context) {
this.context = context;
}
}