/*******************************************************************************
* Copyright (c) 2011, 2013 Formal Mind GmbH and University of Dusseldorf.
* 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:
* Michael Jastram - initial API and implementation
* Lukas Ladenberger - ProR GUI
******************************************************************************/
package org.eclipse.rmf.reqif10.pror.editor.propertiesview;
import java.util.List;
import org.agilemore.agilegrid.AgileGrid;
import org.agilemore.agilegrid.editors.ComboBoxCellEditor;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.ui.celleditor.ExtendedComboBoxCellEditor;
import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
import org.eclipse.rmf.reqif10.pror.editor.util.ProrEditorUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Control;
public class ExtendedAgileComboBoxCellEditor extends ComboBoxCellEditor implements SelectionListener {
protected List<?> originalList;
protected List<?> list;
protected boolean sorted;
protected CCombo combo;
private EditingDomain editingDomain;
private Object affectedObject;
private IItemPropertyDescriptor itemPropertyDescriptor;
public ExtendedAgileComboBoxCellEditor(AgileGrid agileGrid,
EditingDomain editingDomain, List<?> list,
IItemPropertyDescriptor itemPropertyDescriptor, Object object,
boolean sorted) {
super(agileGrid, ExtendedComboBoxCellEditor.createItems(list,
ProrPropertyCellEditorProvider.getLabelProvider(
itemPropertyDescriptor, object),
sorted), SWT.NONE);
this.itemPropertyDescriptor = itemPropertyDescriptor;
this.editingDomain = editingDomain;
this.affectedObject = object;
this.list = list;
this.sorted = sorted;
}
@Override
protected Object doGetValue() {
// Get the index into the list via this call to super.
//
int index = ((CCombo) getControl()).getSelectionIndex();
Object val = index < list.size() && index >= 0 ? list
.get(((CCombo) getControl()).getSelectionIndex()) : null;
Command setCmd = SetCommand.create(editingDomain, affectedObject,
itemPropertyDescriptor.getFeature(affectedObject), val);
Command affectedObjectCommand = ProrEditorUtil
.getAffectedObjectCommand(affectedObject, setCmd);
editingDomain.getCommandStack().execute(affectedObjectCommand);
return val;
}
@Override
protected void doSetValue(Object value) {
if (value == null)
return;
super.doSetValue(itemPropertyDescriptor.getLabelProvider(value)
.getText(value));
}
public void widgetDefaultSelected(SelectionEvent e) {
// No action required.
}
// when value is selected from drop down apply value directly
public void widgetSelected(SelectionEvent e) {
selection = combo.getSelectionIndex();
}
protected Control createControl(AgileGrid agileGrid) {
combo = (CCombo) super.createControl(agileGrid);
combo.addSelectionListener(this);
return combo;
}
}