package de.ovgu.cide.fm.guidsl;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import de.ovgu.cide.configuration.AbstractConfigurationPage;
import de.ovgu.cide.features.IFeature;
import featureide.fm.core.Feature;
import featureide.fm.core.configuration.Configuration;
import featureide.fm.core.configuration.SelectableFeature;
import featureide.fm.core.configuration.Selection;
import featureide.fm.ui.editors.configuration.ConfigurationContentProvider;
import featureide.fm.ui.editors.configuration.ConfigurationLabelProvider;
public class EquationEditorPage extends AbstractConfigurationPage {
private TreeViewer viewer;
private final Configuration configuration;
private GuidslFeatureModelWrapper model;
public EquationEditorPage(String pageName,
GuidslFeatureModelWrapper featureModel) {
super(pageName, featureModel);
this.model = featureModel;
configuration = new Configuration(featureModel.model, true);
setPageComplete(configuration.valid());
setTitle("Feature selection");
this.setDescription("Select features for a variant (double-click on feature to select or deselect)");
}
@Override
protected Control createMainControl(Composite composite) {
viewer = new TreeViewer(composite);
viewer.addDoubleClickListener(listener);
viewer.setContentProvider(new ConfigurationContentProvider());
try {
Class<?> c = Class
.forName("featureide.fm.ui.editors.configuration.ConfigurationLabelProvider");
System.out.println(c);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
IBaseLabelProvider lp = new ConfigurationLabelProvider();
viewer.setLabelProvider(lp);
viewer.setInput(configuration);
viewer.expandAll();
return viewer.getControl();
}
private IDoubleClickListener listener = new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
Object object = ((ITreeSelection) event.getSelection())
.getFirstElement();
if (object instanceof SelectableFeature) {
final SelectableFeature feature = (SelectableFeature) object;
if (feature.getAutomatic() == Selection.UNDEFINED) {
// set to the next value
if (feature.getManual() == Selection.UNDEFINED)
set(feature, Selection.SELECTED);
else if (feature.getManual() == Selection.SELECTED)
set(feature, Selection.UNSELECTED);
else
// case: unselected
set(feature, Selection.UNDEFINED);
configChanged();
viewer.refresh();
}
}
}
private void set(SelectableFeature feature, Selection selection) {
configuration.setManual(feature, selection);
}
};
@Override
public Set<IFeature> getNotSelectedFeatures() {
// TODO Auto-generated method stub
return null;
}
protected void configChanged() {
boolean isValid = configuration.valid();
setPageComplete(isValid);
setErrorMessage(isValid ? null : "Invalid selection");
}
@Override
public Set<IFeature> getSelectedFeatures() {
Set<Feature> selection = configuration.getSelectedFeatures();
Set<IFeature> result = new HashSet<IFeature>();
for (Feature s : selection)
result.add(new FeatureAdapter(s, model));
return result;
}
}