/******************************************************************************* * <copyright> * * Copyright (c) 2005, 2010 SAP AG. * 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: * SAP AG - initial API, implementation and documentation * * </copyright> * *******************************************************************************/ package org.eclipse.graphiti.ui.internal.parts.directedit; import org.eclipse.graphiti.features.IDirectEditingFeature; import org.eclipse.graphiti.features.context.IDirectEditingContext; import org.eclipse.graphiti.func.IProposal; import org.eclipse.graphiti.func.IProposalSupport; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ComboBoxCellEditor; import org.eclipse.jface.viewers.ICellEditorValidator; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.widgets.Control; /** * @noinstantiate This class is not intended to be instantiated by clients. * @noextend This class is not intended to be subclassed by clients. */ public class GFCellEditorValidator implements ICellEditorValidator { private IDirectEditHolder directEditHolder; private CellEditor cellEditor; public GFCellEditorValidator(IDirectEditHolder directEditHolder, CellEditor cellEditor) { this.directEditHolder = directEditHolder; setCellEditor(cellEditor); } public String isValid(Object value) { if (!directEditHolder.isSimpleMode()) { return isValidProposal(value); } String ret = null; if (value instanceof String) { ret = directEditHolder.getDirectEditingFeature().checkValueValid((String) value, directEditHolder.getDirectEditingContext()); } else if (value instanceof Integer && getCellEditor() instanceof ComboBoxCellEditor) { ComboBoxCellEditor cb = (ComboBoxCellEditor) getCellEditor(); String sValue = null; int index = (Integer) value; if (index < 0) { // -1 if user inserted a new value Control control = cb.getControl(); if (control instanceof CCombo) { CCombo cc = (CCombo) control; sValue = cc.getText(); } } else { String[] items = cb.getItems(); if (items != null && index < items.length) { sValue = items[index]; } } if (sValue != null) { ret = directEditHolder.getDirectEditingFeature().checkValueValid(sValue, directEditHolder.getDirectEditingContext()); } } return ret; } public String isValidProposal(Object value) { IProposal proposal = null; String text = null; IDirectEditingFeature directEditingFeature = directEditHolder.getDirectEditingFeature(); IDirectEditingContext directEditingContext = directEditHolder.getDirectEditingContext(); IProposalSupport proposalSupport = directEditingFeature.getProposalSupport(); if (value instanceof String && getCellEditor() instanceof TextCellEditor) { text = (String) value; TextCellEditor tce = (TextCellEditor) getCellEditor(); proposal = tce.getAcceptedProposal(); } else if (value instanceof Integer && getCellEditor() instanceof ComboBoxCellEditor) { ComboBoxCellEditor cb = (ComboBoxCellEditor) getCellEditor(); int index = (Integer) value; if (index < 0) { // -1 if user inserted a new value Control control = cb.getControl(); if (control instanceof CCombo) { CCombo cc = (CCombo) control; text = cc.getText(); } } else { IProposal[] possibleValues = proposalSupport.getPossibleValues(directEditingContext); if (possibleValues.length > index) { proposal = possibleValues[index]; } } } return proposalSupport.checkValueValid(text, proposal, directEditingContext); } private CellEditor getCellEditor() { return cellEditor; } private void setCellEditor(CellEditor cellEditor) { this.cellEditor = cellEditor; } }