/*******************************************************************************
* Copyright (c) 2010, 2017 Oak Ridge National Laboratory and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
******************************************************************************/
package org.eclipse.nebula.visualization.internal.xygraph.toolbar;
import java.util.Arrays;
import org.eclipse.jface.preference.ColorSelector;
import org.eclipse.nebula.visualization.xygraph.figures.Axis;
import org.eclipse.nebula.visualization.xygraph.figures.IXYGraph;
import org.eclipse.nebula.visualization.xygraph.figures.Trace;
import org.eclipse.nebula.visualization.xygraph.figures.Trace.BaseLine;
import org.eclipse.nebula.visualization.xygraph.figures.Trace.ErrorBarType;
import org.eclipse.nebula.visualization.xygraph.figures.Trace.PointStyle;
import org.eclipse.nebula.visualization.xygraph.figures.Trace.TraceType;
import org.eclipse.nebula.visualization.xygraph.figures.XYGraph;
import org.eclipse.nebula.visualization.xygraph.util.XYGraphMediaFactory;
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.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Text;
/**
* This will help to create the necessary widgets to configure an axis's
* properties.
*
* @author Xihui Chen
*
*/
public class TraceConfigPage {
private XYGraph xyGraph;
private Trace trace;
private Text nameText;
private Combo xAxisCombo;
private Combo yAxisCombo;
private ColorSelector traceColorSelector;
private Combo traceTypeCombo;
private Spinner lineWidthSpinner;
private Combo pointStyleCombo;
private Spinner pointSizeSpinner;
private Combo baseLineCombo;
private Spinner areaAlphaSpinner;
private Button antiAliasing;
private Button errorBarEnabledButton;
private Combo xErrorBarTypeCombo;
private Combo yErrorBarTypeCombo;
private ColorSelector errorBarColorSelector;
private Spinner errorBarCapWidthSpinner;
private Button drawYErrorInAreaButton;
private Button visible;
private Composite composite;
public TraceConfigPage(IXYGraph xyGraph, Trace trace) {
this((XYGraph) xyGraph, trace);
}
/**
* Use {@link #TraceConfigPage(IXYGraph, Trace)} instead
*
* @param xyGraph
* @param trace
*/
@Deprecated
public TraceConfigPage(XYGraph xyGraph, Trace trace) {
this.xyGraph = xyGraph;
this.trace = trace;
}
public void createPage(final Composite composite) {
this.composite = composite;
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
composite.setLayout(new GridLayout(2, false));
Composite traceCompo = new Composite(composite, SWT.NONE);
traceCompo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
traceCompo.setLayout(new GridLayout(3, false));
final Group errorBarGroup = new Group(composite, SWT.NONE);
errorBarGroup.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false, 1, 1));
errorBarGroup.setLayout(new GridLayout(2, false));
errorBarGroup.setText("Error Bar");
GridData gd;
GridData labelGd = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
visible = new Button(traceCompo, SWT.CHECK);
visible.setText("Visible");
visible.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false, 3, 1));
final Label nameLabel = new Label(traceCompo, 0);
nameLabel.setText("Name: ");
nameLabel.setLayoutData(labelGd);
nameText = new Text(traceCompo, SWT.BORDER | SWT.SINGLE);
gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
nameText.setLayoutData(gd);
final Label xAxisLabel = new Label(traceCompo, 0);
xAxisLabel.setText("X-Axis: ");
labelGd = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
xAxisLabel.setLayoutData(labelGd);
xAxisCombo = new Combo(traceCompo, SWT.DROP_DOWN);
for (Axis axis : xyGraph.getXAxisList())
xAxisCombo.add(axis.getTitle());
gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
xAxisCombo.setLayoutData(gd);
final Label yAxisLabel = new Label(traceCompo, 0);
yAxisLabel.setText("Y-Axis: ");
labelGd = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
yAxisLabel.setLayoutData(labelGd);
yAxisCombo = new Combo(traceCompo, SWT.DROP_DOWN);
for (Axis axis : xyGraph.getYAxisList())
yAxisCombo.add(axis.getTitle());
gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
yAxisCombo.setLayoutData(gd);
final Label traceColorLabel = new Label(traceCompo, 0);
traceColorLabel.setText("Trace Color: ");
labelGd = new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1);
traceColorLabel.setLayoutData(labelGd);
traceColorSelector = new ColorSelector(traceCompo);
gd = new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 1, 1);
traceColorSelector.getButton().setLayoutData(gd);
final Label traceTypeLabel = new Label(traceCompo, 0);
traceTypeLabel.setText("Trace Type: ");
labelGd = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
traceTypeLabel.setLayoutData(labelGd);
traceTypeCombo = new Combo(traceCompo, SWT.DROP_DOWN);
traceTypeCombo.setItems(TraceType.stringValues());
gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
traceTypeCombo.setLayoutData(gd);
traceTypeCombo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateBaseLineComboEnable();
}
});
final Label lineWidthLabel = new Label(traceCompo, 0);
lineWidthLabel.setText("Line Width (pixels): ");
labelGd = new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1);
lineWidthLabel.setLayoutData(labelGd);
lineWidthSpinner = new Spinner(traceCompo, SWT.BORDER);
lineWidthSpinner.setMaximum(100);
lineWidthSpinner.setMinimum(0);
gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
lineWidthSpinner.setLayoutData(gd);
final Label pointStyleLabel = new Label(traceCompo, 0);
pointStyleLabel.setText("Point Style: ");
labelGd = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
pointStyleLabel.setLayoutData(labelGd);
pointStyleCombo = new Combo(traceCompo, SWT.DROP_DOWN);
pointStyleCombo.setItems(PointStyle.stringValues());
gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
pointStyleCombo.setLayoutData(gd);
final Label pointSizeLabel = new Label(traceCompo, 0);
pointSizeLabel.setText("Point Size (pixels): ");
labelGd = new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1);
pointSizeLabel.setLayoutData(labelGd);
pointSizeSpinner = new Spinner(traceCompo, SWT.BORDER);
pointSizeSpinner.setMaximum(100);
pointSizeSpinner.setMinimum(0);
gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
pointSizeSpinner.setLayoutData(gd);
final Label baseLineLabel = new Label(traceCompo, 0);
baseLineLabel.setText("Base Line: ");
labelGd = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
baseLineLabel.setLayoutData(labelGd);
baseLineLabel.setToolTipText("The baseline for BAR or AREA trace type");
baseLineCombo = new Combo(traceCompo, SWT.DROP_DOWN);
baseLineCombo.setItems(BaseLine.stringValues());
gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
baseLineCombo.setLayoutData(gd);
final Label alphaLabel = new Label(traceCompo, 0);
alphaLabel.setText("Area Alpha: ");
labelGd = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
alphaLabel.setLayoutData(labelGd);
areaAlphaSpinner = new Spinner(traceCompo, SWT.BORDER);
areaAlphaSpinner.setMaximum(255);
areaAlphaSpinner.setMinimum(0);
gd = new GridData(SWT.BEGINNING, SWT.CENTER, true, false, 2, 1);
areaAlphaSpinner.setLayoutData(gd);
areaAlphaSpinner.setToolTipText("0 for transparent, 255 for opaque");
antiAliasing = new Button(traceCompo, SWT.CHECK);
antiAliasing.setText("Anti Aliasing Enabled");
antiAliasing.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false, 3, 1));
// error bar settings...
errorBarEnabledButton = new Button(errorBarGroup, SWT.CHECK);
errorBarEnabledButton.setText("Error Bar Enabled");
errorBarEnabledButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false, 2, 1));
errorBarEnabledButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
boolean enabled = errorBarEnabledButton.getSelection();
xErrorBarTypeCombo.setEnabled(enabled);
yErrorBarTypeCombo.setEnabled(enabled);
errorBarColorSelector.setEnabled(enabled);
errorBarCapWidthSpinner.setEnabled(enabled);
drawYErrorInAreaButton.setEnabled(enabled);
}
});
final Label xErrorBarTypeLabel = new Label(errorBarGroup, 0);
xErrorBarTypeLabel.setText("X Error Bar Type: ");
labelGd = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
xErrorBarTypeLabel.setLayoutData(labelGd);
xErrorBarTypeCombo = new Combo(errorBarGroup, SWT.DROP_DOWN);
xErrorBarTypeCombo.setItems(ErrorBarType.stringValues());
gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
xErrorBarTypeCombo.setLayoutData(gd);
final Label yErrorBarTypeLabel = new Label(errorBarGroup, 0);
yErrorBarTypeLabel.setText("Y Error Bar Type: ");
labelGd = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
yErrorBarTypeLabel.setLayoutData(labelGd);
yErrorBarTypeCombo = new Combo(errorBarGroup, SWT.DROP_DOWN);
yErrorBarTypeCombo.setItems(ErrorBarType.stringValues());
gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
yErrorBarTypeCombo.setLayoutData(gd);
final Label errorBarColorLabel = new Label(errorBarGroup, 0);
errorBarColorLabel.setText("Error Bar Color: ");
labelGd = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
errorBarColorLabel.setLayoutData(labelGd);
errorBarColorSelector = new ColorSelector(errorBarGroup);
gd = new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 1, 1);
errorBarColorSelector.getButton().setLayoutData(gd);
final Label errorBarCapWidthLabel = new Label(errorBarGroup, 0);
errorBarCapWidthLabel.setText("Error Bar Cap Width \n(pixels): ");
labelGd = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
errorBarCapWidthLabel.setLayoutData(labelGd);
errorBarCapWidthSpinner = new Spinner(errorBarGroup, SWT.BORDER);
errorBarCapWidthSpinner.setMaximum(100);
errorBarCapWidthSpinner.setMinimum(0);
gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
errorBarCapWidthSpinner.setLayoutData(gd);
drawYErrorInAreaButton = new Button(errorBarGroup, SWT.CHECK);
drawYErrorInAreaButton.setText("Draw Y Error In Area");
drawYErrorInAreaButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false, 2, 1));
initialize();
}
/**
* @return the composite
*/
public Composite getComposite() {
return composite;
}
public void applyChanges() {
trace.setName(nameText.getText());
trace.setXAxis(xyGraph.getXAxisList().get(xAxisCombo.getSelectionIndex()));
trace.setYAxis(xyGraph.getYAxisList().get(yAxisCombo.getSelectionIndex()));
trace.setTraceColor(XYGraphMediaFactory.getInstance().getColor(traceColorSelector.getColorValue()));
trace.setTraceType(TraceType.values()[traceTypeCombo.getSelectionIndex()]);
trace.setLineWidth(lineWidthSpinner.getSelection());
trace.setPointStyle(PointStyle.values()[pointStyleCombo.getSelectionIndex()]);
trace.setPointSize(pointSizeSpinner.getSelection());
trace.setBaseLine(BaseLine.values()[baseLineCombo.getSelectionIndex()]);
trace.setAreaAlpha(areaAlphaSpinner.getSelection());
trace.setAntiAliasing(antiAliasing.getSelection());
trace.setErrorBarEnabled(errorBarEnabledButton.getSelection());
trace.setXErrorBarType(ErrorBarType.values()[xErrorBarTypeCombo.getSelectionIndex()]);
trace.setYErrorBarType(ErrorBarType.values()[yErrorBarTypeCombo.getSelectionIndex()]);
trace.setErrorBarColor(XYGraphMediaFactory.getInstance().getColor(errorBarColorSelector.getColorValue()));
trace.setErrorBarCapWidth(errorBarCapWidthSpinner.getSelection());
trace.setDrawYErrorInArea(drawYErrorInAreaButton.getSelection());
boolean vis = visible.getSelection();
if (vis != trace.isVisible())
trace.setVisible(vis);
}
private void initialize() {
nameText.setText(trace.getName());
xAxisCombo.select(xyGraph.getXAxisList().indexOf(trace.getXAxis()));
yAxisCombo.select(xyGraph.getYAxisList().indexOf(trace.getYAxis()));
traceColorSelector.setColorValue(trace.getTraceColor().getRGB());
traceTypeCombo.select(Arrays.asList(TraceType.values()).indexOf(trace.getTraceType()));
lineWidthSpinner.setSelection(trace.getLineWidth());
pointStyleCombo.select(Arrays.asList(PointStyle.values()).indexOf(trace.getPointStyle()));
pointSizeSpinner.setSelection(trace.getPointSize());
baseLineCombo.select(Arrays.asList(BaseLine.values()).indexOf(trace.getBaseLine()));
areaAlphaSpinner.setSelection(trace.getAreaAlpha());
antiAliasing.setSelection(trace.isAntiAliasing());
errorBarEnabledButton.setSelection(trace.isErrorBarEnabled());
xErrorBarTypeCombo.select(Arrays.asList(ErrorBarType.values()).indexOf(trace.getXErrorBarType()));
yErrorBarTypeCombo.select(Arrays.asList(ErrorBarType.values()).indexOf(trace.getYErrorBarType()));
errorBarColorSelector.setColorValue(trace.getErrorBarColor().getRGB());
errorBarCapWidthSpinner.setSelection(trace.getErrorBarCapWidth());
drawYErrorInAreaButton.setSelection(trace.isDrawYErrorInArea());
boolean enabled = errorBarEnabledButton.getSelection();
xErrorBarTypeCombo.setEnabled(enabled);
yErrorBarTypeCombo.setEnabled(enabled);
errorBarColorSelector.setEnabled(enabled);
errorBarCapWidthSpinner.setEnabled(enabled);
drawYErrorInAreaButton.setEnabled(enabled);
visible.setSelection(trace.isVisible());
updateBaseLineComboEnable();
}
private void updateBaseLineComboEnable() {
baseLineCombo.setEnabled(traceTypeCombo.getSelectionIndex() == TraceType.BAR.ordinal()
|| traceTypeCombo.getSelectionIndex() == TraceType.AREA.ordinal()
|| traceTypeCombo.getSelectionIndex() == TraceType.LINE_AREA.ordinal());
}
}