blob: 71a86b538889fa810ee0f8eae0f672bad118aedf [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008-2011 Chair for Applied Software Engineering,
* Technische Universitaet Muenchen.
* 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:
******************************************************************************/
package org.eclipse.emf.ecp.editor.mecontrols;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.databinding.EMFDataBindingContext;
import org.eclipse.emf.databinding.edit.EMFEditObservables;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
import org.eclipse.jface.databinding.viewers.ViewersObservables;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
/**
* This is the standard Control to enum values.
*
* @author shterev
* @author Nikolay Kasyanov
*/
public class MEEnumControl extends AbstractMEControl implements IValidatableControl {
private EAttribute attribute;
private ComboViewer combo;
private Composite composite;
private Label labelWidgetImage; //Label for diagnostic image
private static final int PRIORITY = 1;
/**
* returns a Combo created by ComboViewer. {@inheritDoc}
*
* @return Control
*/
@Override
public Control createControl(Composite parent, int style) {
Object feature = getItemPropertyDescriptor().getFeature(getModelElement());
this.attribute = (EAttribute) feature;
composite = getToolkit().createComposite(parent, style);
GridLayoutFactory.fillDefaults().numColumns(2).spacing(2, 0).applyTo(composite);
GridDataFactory.fillDefaults().grab(true, false).applyTo(composite);
labelWidgetImage = getToolkit().createLabel(composite, " ");
labelWidgetImage.setBackground(parent.getBackground());
final IItemLabelProvider labelProvider = getItemPropertyDescriptor().getLabelProvider(getModelElement());
combo = new ComboViewer(composite);
combo.setContentProvider(new ArrayContentProvider());
combo.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
return labelProvider.getText(element);
}
});
combo.setInput(attribute.getEType().getInstanceClass().getEnumConstants());
EMFDataBindingContext dbc = new EMFDataBindingContext();
IObservableValue model = EMFEditObservables.observeValue(getEditingDomain(), getModelElement(), attribute);
IObservableValue comboObservable = ViewersObservables.observeSingleSelection(combo);
dbc.bindValue(comboObservable, model);
return composite;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.ecp.editor.mecontrols.AbstractMEControl#canRender(org.eclipse.emf.edit.provider.IItemPropertyDescriptor,
* org.eclipse.emf.ecore.EObject)
*/
@Override
public int canRender(IItemPropertyDescriptor itemPropertyDescriptor, EObject modelElement) {
Object feature = itemPropertyDescriptor.getFeature(modelElement);
if (feature instanceof EAttribute
&& (EEnum.class).isAssignableFrom(((EAttribute) feature).getEType().getClass())) {
return PRIORITY;
}
return AbstractMEControl.DO_NOT_RENDER;
}
/**.
* {@inheritDoc}}
* */
public void handleValidation(Diagnostic diagnostic) {
if (diagnostic.getSeverity() == Diagnostic.ERROR || diagnostic.getSeverity() == Diagnostic.WARNING) {
Image image = org.eclipse.emf.ecp.editor.Activator.getImageDescriptor("icons/validation_error.png").createImage();
this.labelWidgetImage.setImage(image);
this.labelWidgetImage.setToolTipText(diagnostic.getMessage());
}
}
/**.
* {@inheritDoc}}
* */
public void resetValidation() {
this.labelWidgetImage.setImage(null);
this.labelWidgetImage.setToolTipText("");
}
}