| /******************************************************************************* |
| * Copyright (c) 2012 Rushan R. Gilmullin and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Rushan R. Gilmullin - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.osbp.vaaclipse.presentation.renderers; |
| |
| import javax.inject.Inject; |
| |
| import org.eclipse.e4.core.contexts.EclipseContextFactory; |
| import org.eclipse.e4.core.contexts.IEclipseContext; |
| import org.eclipse.e4.core.services.contributions.IContributionFactory; |
| import org.eclipse.e4.ui.model.application.ui.MElementContainer; |
| import org.eclipse.e4.ui.model.application.ui.MUIElement; |
| import org.eclipse.e4.ui.model.application.ui.SideValue; |
| import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar; |
| import org.eclipse.e4.ui.model.application.ui.menu.MToolControl; |
| import org.eclipse.e4.ui.workbench.modeling.EModelService; |
| import org.eclipse.osbp.vaaclipse.presentation.utils.GuiUtils; |
| |
| import com.vaadin.ui.Component; |
| import com.vaadin.ui.ComponentContainer; |
| import com.vaadin.ui.HorizontalLayout; |
| import com.vaadin.ui.VerticalLayout; |
| |
| /** |
| * Create a contribute part. |
| */ |
| public class ToolControlRenderer extends VaadinRenderer { |
| |
| @Inject |
| EModelService modelService; |
| |
| public void createWidget(MUIElement element, |
| MElementContainer<MUIElement> parent) { |
| if (!(element instanceof MToolControl)) |
| return; |
| |
| MToolControl toolControl = (MToolControl) element; |
| |
| ComponentContainer toolControlContainer; |
| if ((MElementContainer<?>) element.getParent() instanceof MTrimBar) { |
| MTrimBar trimBar = (MTrimBar) (MElementContainer<?>) element |
| .getParent(); |
| if (trimBar.getSide() == SideValue.LEFT |
| || trimBar.getSide() == SideValue.RIGHT) |
| toolControlContainer = new VerticalLayout(); |
| else |
| toolControlContainer = new HorizontalLayout(); |
| // add the drag handler (separator) |
| toolControlContainer.addComponent(GuiUtils |
| .createSeparator(toolControl)); |
| } else |
| toolControlContainer = new VerticalLayout(); |
| |
| IEclipseContext parentContext = modelService |
| .getContainingContext(element); |
| |
| // Create a context just to contain the parameters for injection |
| IContributionFactory contributionFactory = parentContext |
| .get(IContributionFactory.class); |
| |
| IEclipseContext localContext = EclipseContextFactory.create(); |
| |
| localContext.set(Component.class, toolControlContainer); |
| localContext.set(ComponentContainer.class, toolControlContainer); |
| localContext.set(MToolControl.class, toolControl); |
| |
| Object tcImpl = contributionFactory.create( |
| toolControl.getContributionURI(), parentContext, localContext); |
| toolControl.setObject(tcImpl); |
| |
| for (String css : toolControl.getTags()) { |
| toolControlContainer.addStyleName(css); |
| } |
| |
| toolControl.setWidget(toolControlContainer); |
| } |
| |
| } |