package org.csstudio.sds.ui.internal.editor.newproperties;
import org.csstudio.sds.internal.model.OptionProperty;
import org.csstudio.sds.model.IOption;
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 of {@link OptionProperty}.
*
* @author Sven Wende
*
*/
public final class OptionSection extends AbstractBaseSection<OptionProperty> {
private ComboViewer optionViewer;
private ISelectionChangedListener _changeListener;
public OptionSection(final String propertyId) {
super(propertyId);
}
/**
*{@inheritDoc}
*/
@Override
protected void doCreateControls(final Composite parent, final TabbedPropertySheetPage tabbedPropertySheetPage) {
parent.setLayout(new FormLayout());
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(final Object element) {
return ((IOption) element).getIdentifier();
}
});
optionViewer.setContentProvider(new ArrayContentProvider());
// .. listen to changes
_changeListener = new ISelectionChangedListener() {
@Override
public void selectionChanged(final SelectionChangedEvent event) {
IOption[] options = (IOption[]) optionViewer.getInput();
Object tmp = ((IStructuredSelection) optionViewer.getSelection()).getFirstElement();
for (IOption option : options) {
if (option.equals(tmp)) {
applyPropertyChange(option);
return;
}
}
}
};
optionViewer.addSelectionChangedListener(_changeListener);
}
/**
*{@inheritDoc}
*/
@Override
protected void doRefreshControls(final OptionProperty widgetProperty) {
String value = widgetProperty.getPropertyValue();
IOption[] options = widgetProperty.getOptions();
optionViewer.setInput(options);
IOption sel = null;
for (IOption option : options) {
if (value.equals(option.getIdentifier())) {
sel = option;
}
}
optionViewer.removeSelectionChangedListener(_changeListener);
optionViewer.setSelection(sel != null ? new StructuredSelection(sel) : null);
optionViewer.addSelectionChangedListener(_changeListener);
}
}