| /******************************************************************************* |
| * Copyright (c) 2011-2015 EclipseSource Muenchen GmbH and others. |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Lucas Koehler - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.emf.ecp.view.model.internal.fx; |
| |
| import org.eclipse.emf.common.util.Diagnostic; |
| import org.eclipse.emf.ecp.view.spi.context.ViewModelContext; |
| import org.eclipse.emf.ecp.view.spi.model.LabelAlignment; |
| import org.eclipse.emf.ecp.view.spi.model.VControl; |
| import org.eclipse.emf.ecp.view.spi.model.VDiagnostic; |
| import org.eclipse.emf.ecp.view.spi.model.VElement; |
| import org.eclipse.emf.ecp.view.spi.renderer.NoPropertyDescriptorFoundExeption; |
| import org.eclipse.emf.ecp.view.spi.renderer.NoRendererFoundException; |
| import org.eclipse.emfforms.spi.common.report.ReportService; |
| |
| import javafx.scene.Node; |
| import javafx.scene.control.Label; |
| import javafx.scene.control.Tooltip; |
| import javafx.scene.image.ImageView; |
| |
| public abstract class SimpleControlRendererFX extends AbstractControlRendererFX { |
| |
| private GridDescriptionFX rendererGridDescription; |
| private Label validationIcon; |
| |
| /** |
| * Default constructor. |
| * |
| * @param vElement the {@link VElement} to be rendered |
| * @param viewContext the {@link ViewModelContext} to use |
| * @param reportService The {@link ReportService} to use |
| */ |
| public SimpleControlRendererFX(VControl vElement, ViewModelContext viewContext, ReportService reportService) { |
| super(vElement, viewContext, reportService); |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public final GridDescriptionFX getGridDescription() { |
| if (rendererGridDescription == null) { |
| rendererGridDescription = GridDescriptionFXFactory.INSTANCE.createSimpleGrid(1, |
| getVElement().getLabelAlignment() == LabelAlignment.NONE ? 2 : 3, this); |
| } |
| return rendererGridDescription; |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| protected final Node renderNode(GridCellFX gridCell) |
| throws NoRendererFoundException, NoPropertyDescriptorFoundExeption { |
| int controlIndex = gridCell.getColumn(); |
| if (getVElement().getLabelAlignment() == LabelAlignment.NONE) { |
| controlIndex++; |
| } |
| switch (controlIndex) { |
| case 0: |
| return createLabel(); |
| case 1: |
| validationIcon = (Label) createValidationIcon(); |
| return validationIcon; |
| case 2: |
| return createControl(); |
| default: |
| throw new IllegalArgumentException( |
| String |
| .format( |
| "The provided GridCellFX (%1$s) cannot be used by this (%2$s) renderer.", gridCell.toString(), //$NON-NLS-1$ |
| toString())); |
| } |
| } |
| |
| @Override |
| protected void applyValidation(VControl control, Node node) { |
| super.applyValidation(control, node); |
| if (control.getDiagnostic() == null) { |
| validationIcon.setGraphic(null); |
| return; |
| } |
| final VDiagnostic diagnostic = control.getDiagnostic(); |
| switch (diagnostic.getHighestSeverity()) { |
| case Diagnostic.ERROR: |
| validationIcon.setGraphic(new ImageView(Activator.getImage("icons/validation_error.png"))); //$NON-NLS-1$ |
| validationIcon.setTooltip(new Tooltip(diagnostic.getMessage())); |
| break; |
| case Diagnostic.OK: |
| validationIcon.setGraphic(null); |
| break; |
| } |
| } |
| |
| /** |
| * Creates the control itself (e.g. a checkbox for a boolean control) |
| * |
| * @return the control itself |
| */ |
| protected abstract Node createControl(); |
| } |