package com.netifera.platform.ui.spaces.actions.options;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.forms.widgets.FormToolkit;
import com.netifera.platform.api.model.IEntity;
import com.netifera.platform.api.model.IShadowEntity;
import com.netifera.platform.api.model.ISpace;
import com.netifera.platform.tools.options.GenericOption;
import com.netifera.platform.ui.internal.spaces.Activator;
public class GenericOptionWidget extends OptionWidget {
private final CCombo combo;
private final List<IEntity> entities;
public GenericOptionWidget(Composite parent, FormToolkit toolkit, GenericOption option, ISpace space) {
super(parent, toolkit, option);
Composite area = toolkit.createComposite(parent);
area.setLayout(new GridLayout(2,false));
area.setToolTipText(option.getDescription());
Label label = toolkit.createLabel(area, option.getLabel());
label.setToolTipText(option.getDescription());
combo = new CCombo(area, SWT.READ_ONLY);
combo.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);
GridData gd = new GridData(SWT.BEGINNING, SWT.FILL, true, false);
gd.widthHint = 200;
combo.setLayoutData(gd);
combo.setEditable(false);
combo.setToolTipText(option.getDescription());
combo.setText("Default");
combo.add("Default"); // at index 0
entities = new ArrayList<IEntity>();
for (IEntity entity: space.getEntities()) {
if (entity.getAdapter(getOption().getType()) != null)
entities.add(entity);
}
for (IEntity e: entities) {
combo.add(Activator.getDefault().getLabelProvider().getFullText((IShadowEntity)e));
}
toolkit.paintBordersFor(area);
combo.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
modified();
}
});
combo.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
getOption().setToDefault();
modified();
}
public void widgetSelected(SelectionEvent e) {
setOptionValue();
modified();
}
});
if (option.isFixed())
combo.setEnabled(false);
}
public GenericOption getOption() {
return (GenericOption) super.getOption();
}
public boolean isValid() {
return true;
}
public void setOptionValue() {
int index = combo.getSelectionIndex();
if (index <= 0) {
getOption().setToDefault();
} else {
getOption().setValue((Serializable)entities.get(index-1).getAdapter(getOption().getType()));
}
}
}