package au.gov.ga.earthsci.model.ui.raster.wizard;
import java.util.List;
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.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import au.gov.ga.earthsci.common.color.ColorMap;
import au.gov.ga.earthsci.common.color.ColorMaps;
import au.gov.ga.earthsci.common.ui.color.ColorMapEditor;
import au.gov.ga.earthsci.common.ui.util.SWTUtil;
import au.gov.ga.earthsci.common.ui.viewers.NamedLabelProvider;
import au.gov.ga.earthsci.model.core.parameters.IColorMapParameters;
import au.gov.ga.earthsci.model.core.raster.GDALRasterModel;
/**
* A wizard page that allows configuration of colour options for a
* {@link GDALRasterModel}
*
* @author James Navin (james.navin@ga.gov.au)
*
*/
public class ColorMapPage extends AbstractWizardPage<IColorMapParameters>
{
private final boolean required;
private final String[] properties;
private Button useDefaultButton;
private Button useColorMapButton;
private ComboViewer propertySelector;
private ComboViewer colorMapSelector;
private ColorMapEditor editor;
public ColorMapPage(IColorMapParameters params)
{
this(params, true, null);
}
public ColorMapPage(IColorMapParameters params, boolean required, String[] properties)
{
super(params, "Colour", "Configure how the model is coloured");
this.required = required;
this.properties = properties;
}
@Override
void addContents(Composite container)
{
if (!required)
{
useDefaultButton = new Button(container, SWT.RADIO);
useDefaultButton.setText("Use default colour(s)");
GridData radiogd = new GridData(GridData.FILL_HORIZONTAL);
radiogd.verticalIndent = 0;
useDefaultButton.setLayoutData(radiogd);
useDefaultButton.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
enableColorMap(false);
}
});
useColorMapButton = new Button(container, SWT.RADIO);
useColorMapButton.setText("Choose a colour map:");
radiogd = new GridData(GridData.FILL_HORIZONTAL);
radiogd.verticalIndent = 5;
useColorMapButton.setLayoutData(radiogd);
useColorMapButton.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
enableColorMap(true);
}
});
}
else
{
Label mapSelectorLabel = new Label(container, SWT.NONE);
mapSelectorLabel.setText("Choose a colour map to start from:");
}
colorMapSelector = new ComboViewer(container, SWT.DROP_DOWN | SWT.READ_ONLY);
colorMapSelector.setContentProvider(ArrayContentProvider.getInstance());
List<ColorMap> maps = ColorMaps.get();
colorMapSelector.setInput(maps);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
colorMapSelector.getCombo().setLayoutData(gd);
colorMapSelector.setSelection(new StructuredSelection(maps.get(0)));
colorMapSelector.setLabelProvider(new NamedLabelProvider());
colorMapSelector.addSelectionChangedListener(new ISelectionChangedListener()
{
@Override
public void selectionChanged(SelectionChangedEvent event)
{
ColorMap selectedMap = (ColorMap) ((IStructuredSelection) event.getSelection()).getFirstElement();
editor.setSeed(selectedMap);
}
});
editor = new ColorMapEditor(maps.get(0), container, SWT.NONE);
gd = new GridData(GridData.FILL_BOTH);
gd.widthHint = 100;
gd.heightHint = 100;
editor.setLayoutData(gd);
if (properties != null)
{
Label propertiesLabel = new Label(container, SWT.NONE);
propertiesLabel.setText("Coloured property (painted variable):");
propertySelector = new ComboViewer(container, SWT.DROP_DOWN);
propertySelector.setContentProvider(ArrayContentProvider.getInstance());
propertySelector.setInput(properties);
gd = new GridData(GridData.FILL_HORIZONTAL);
propertySelector.getCombo().setLayoutData(gd);
propertySelector.setLabelProvider(new LabelProvider());
}
if (!required)
{
useDefaultButton.setSelection(true);
enableColorMap(false);
}
}
protected void enableColorMap(boolean enabled)
{
SWTUtil.setEnabled(editor, enabled);
SWTUtil.setEnabled(colorMapSelector.getControl(), enabled);
if (propertySelector != null)
{
SWTUtil.setEnabled(propertySelector.getControl(), enabled);
}
}
@Override
void validate()
{
// Do nothing
}
@Override
public void bind()
{
params.setColorMap(useDefaultButton != null && useDefaultButton.getSelection() ? null : editor.createColorMap());
if (propertySelector != null)
{
params.setPaintedVariable(propertySelector.getCombo().getText());
}
}
}