/******************************************************************************* * Copyright (c) 2006, 2010 Soyatec (http://www.soyatec.com) 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: * Soyatec - initial API and implementation *******************************************************************************/ package org.eclipse.papyrus.xwt.jface; import org.eclipse.core.databinding.conversion.IConverter; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.papyrus.xwt.IIndexedElement; import org.eclipse.papyrus.xwt.XWT; import org.eclipse.papyrus.xwt.XWTException; import org.eclipse.swt.widgets.Composite; public class ComboBoxCellEditor extends org.eclipse.jface.viewers.ComboBoxCellEditor implements IIndexedElement { protected CellEditorHelper cellEditorHelper; public ComboBoxCellEditor() { super(); } public ComboBoxCellEditor(Composite parent, String[] items, int style) { super(parent, items, style); } public ComboBoxCellEditor(Composite parent, String[] items) { super(parent, items); } @Override protected void doSetValue(Object value) { if(value != null) { Class<?> targetType = getTargetType(); if(targetType != String.class) { IConverter converter = XWT.findConvertor(targetType, String.class); if(converter != null) { value = converter.convert(value); } } String[] items = getItems(); for(int i = 0; i < items.length; i++) { if(items[i].equals(value)) { super.doSetValue(i); return; } } } super.doSetValue(-1); } @Override protected Object doGetValue() { Object value = super.doGetValue(); String[] items = getItems(); int selected = (Integer)value; if(selected < 0) { return null; } String selectedString = items[selected]; Class<?> targetType = getTargetType(); if(targetType != String.class) { IConverter converter = XWT.findConvertor(String.class, targetType); if(converter != null) { return converter.convert(value); } } return selectedString; } protected Class<?> getTargetType() { if(cellEditorHelper != null) { return cellEditorHelper.getTargetType(); } return Object.class; } public void setIndex(Object parent, int index) { if(!(parent instanceof TableViewer)) { throw new XWTException("TableView is expected, not \"" + parent.getClass().getName() + "\""); } cellEditorHelper = new CellEditorHelper((TableViewer)parent, index); } }