package org.csstudio.sds.ui.internal.editor.newproperties;
import org.csstudio.sds.internal.model.ArrayOptionProperty;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
/**
* Section implementation for {@link ArrayOptionProperty}.
*
* @author Sven Wende
*
*/
public class ArrayOptionSection extends AbstractBaseSection<ArrayOptionProperty> {
private ComboViewer optionViewer;
private ISelectionChangedListener changeListener;
public ArrayOptionSection(String propertyId) {
super(propertyId);
}
/**
*{@inheritDoc}
*/
@Override
protected void doCreateControls(Composite parent, TabbedPropertySheetPage tabbedPropertySheetPage) {
parent.setLayout(new FormLayout());
// .. create a combo and the corresponding viewer
CCombo combo = getWidgetFactory().createCCombo(parent, SWT.BORDER | SWT.READ_ONLY);
FormData fd = new FormData();
fd.left = new FormAttachment(0,0);
fd.right = new FormAttachment(50,0);
combo.setLayoutData(fd);
optionViewer = new ComboViewer(combo);
optionViewer.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
return element.toString();
}
});
optionViewer.setContentProvider(new ArrayContentProvider());
// .. listen to changes
changeListener = new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
String[] options = (String[]) optionViewer.getInput();
Object tmp = ((IStructuredSelection) optionViewer.getSelection()).getFirstElement();
for (int i = 0; i < options.length; i++) {
if (options[i].equals(tmp)) {
// .. the selection index is the needed value, not the
// String itself!
applyPropertyChange(i);
return;
}
}
}
};
optionViewer.addSelectionChangedListener(changeListener);
}
@Override
protected void doRefreshControls(ArrayOptionProperty widgetProperty) {
if (!optionViewer.getControl().isDisposed()) {
if (widgetProperty != null) {
int index = widgetProperty.getPropertyValue();
String[] options = widgetProperty.getOptions();
optionViewer.setInput(options);
optionViewer.removeSelectionChangedListener(changeListener);
optionViewer.setSelection(new StructuredSelection(options[index]));
optionViewer.addSelectionChangedListener(changeListener);
}
}
}
}