/*******************************************************************************
* Copyright (c) 2008, 2012
* 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:
* Javier Canovas (javier.canovas@inria.fr)
*******************************************************************************/
package fr.inria.atlanmod.collaboro.ui.views;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
import org.eclipse.emf.edit.provider.ItemPropertyDescriptor.PropertyValueWrapper;
import org.eclipse.emf.edit.ui.provider.PropertyDescriptor;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.widgets.Composite;
public class SyntaxElementPropertyDescriptor extends PropertyDescriptor {
public static class MyEDataTypeCellEditor extends TextCellEditor {
protected EDataType eDataType;
protected EDataTypeValueHandler valueHandler;
public MyEDataTypeCellEditor(EDataType eDataType, Composite parent) {
super(parent);
this.eDataType = eDataType;
valueHandler = new EDataTypeValueHandler(eDataType);
setValidator(valueHandler);
}
@Override
public Object doGetValue() {
return valueHandler.toValue((String)super.doGetValue());
}
@Override
public void doSetValue(Object value) {
value = valueHandler.toString(getRealValue(value));
super.doSetValue(value);
}
protected boolean validateAsValue = true;
@Override
protected void editOccured(ModifyEvent e) {
validateAsValue = false;
super.editOccured(e);
validateAsValue = true;
}
@Override
protected boolean isCorrect(Object value) {
if (validateAsValue) {
value = valueHandler.toString(getRealValue(value));
}
return super.isCorrect(getRealValue(value));
}
private String getRealValue(Object value) {
if (value instanceof PropertyValueWrapper) {
PropertyValueWrapper wrapper = (PropertyValueWrapper) value;
return wrapper.getText(wrapper);
}
return "";
}
}
public SyntaxElementPropertyDescriptor(Object object, IItemPropertyDescriptor itemPropertyDescriptor) {
super(object, itemPropertyDescriptor);
}
protected CellEditor createEDataTypeCellEditor(final EDataType eDataType, Composite composite)
{
if (itemPropertyDescriptor.isMultiLine(object))
return super.createEDataTypeCellEditor(eDataType, composite);
return new MyEDataTypeCellEditor(eDataType, composite);
}
}