Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'gcov/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/dialogs/ChartDialog.java')
-rwxr-xr-xgcov/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/dialogs/ChartDialog.java427
1 files changed, 427 insertions, 0 deletions
diff --git a/gcov/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/dialogs/ChartDialog.java b/gcov/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/dialogs/ChartDialog.java
new file mode 100755
index 0000000000..76be33ee42
--- /dev/null
+++ b/gcov/org.eclipse.linuxtools.dataviewers.charts/src/org/eclipse/linuxtools/dataviewers/charts/dialogs/ChartDialog.java
@@ -0,0 +1,427 @@
+/*******************************************************************************
+ * Copyright (c) 2009 STMicroelectronics.
+ * 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
+ *
+ * Contributors:
+ * Marzia Maugeri <marzia.maugeri@st.com> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.linuxtools.dataviewers.charts.dialogs;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.birt.chart.model.Chart;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.linuxtools.dataviewers.abstractviewers.AbstractSTViewer;
+import org.eclipse.linuxtools.dataviewers.abstractviewers.ISTDataViewersField;
+import org.eclipse.linuxtools.dataviewers.charts.Activator;
+import org.eclipse.linuxtools.dataviewers.charts.ChartConstants;
+import org.eclipse.linuxtools.dataviewers.charts.provider.ChartFactory;
+import org.eclipse.linuxtools.dataviewers.charts.provider.IChartField;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * The dialog used to customize the chart before cerating it.
+ */
+public class ChartDialog extends Dialog {
+
+ private final AbstractSTViewer stViewer;
+ private Chart chart;
+
+ private Text errorMessageText;
+ private Button verticalBarsButton;
+ private Button pieChartButton;
+ private Button barGraphButton;
+ private Button okButton;
+ private List<Button> columnButtons;
+
+ /**
+ * The constructor
+ *
+ * @param shell
+ * @param stViewer
+ */
+ public ChartDialog(Shell shell, AbstractSTViewer stViewer)
+ {
+ super(shell);
+ this.stViewer = stViewer;
+ }
+
+ /**
+ * Restores the state of this dialog
+ */
+ public void restoreState() {
+ try {
+ IDialogSettings settings =
+ stViewer.getViewerSettings().getSection(ChartConstants.TAG_SECTION_BIRTCHARTS_STATE);
+ if (settings == null) {
+ settings = stViewer.getViewerSettings().addNewSection(ChartConstants.TAG_SECTION_BIRTCHARTS_STATE);
+ return;
+ }
+
+ for (int i=0; i<columnButtons.size(); i++) {
+ boolean selected = Boolean.parseBoolean(settings.get(ChartConstants.TAG_COLUMN_BUTTON_+i));
+ columnButtons.get(i).setSelection(selected);
+ }
+
+ boolean barGraph = Boolean.parseBoolean(settings.get(ChartConstants.TAG_BAR_GRAPH_BUTTON));
+ barGraphButton.setSelection(barGraph);
+ pieChartButton.setSelection(!barGraph);
+
+ boolean vBars = Boolean.parseBoolean(settings.get(ChartConstants.TAG_VERTICAL_BARS_BUTTON));
+ verticalBarsButton.setSelection(vBars);
+ verticalBarsButton.setEnabled(barGraph);
+ }
+ catch (Exception e) {}
+ }
+
+ /**
+ * Saves the state of this dialog
+ */
+ public void saveState() {
+ try {
+ IDialogSettings settings =
+ stViewer.getViewerSettings().getSection(ChartConstants.TAG_SECTION_BIRTCHARTS_STATE);
+ if (settings == null) {
+ settings = stViewer.getViewerSettings().addNewSection(ChartConstants.TAG_SECTION_BIRTCHARTS_STATE);
+ }
+
+ for (int i=0; i<columnButtons.size(); i++) {
+ boolean selected = columnButtons.get(i).getSelection();
+ settings.put(ChartConstants.TAG_COLUMN_BUTTON_+i, selected);
+ }
+
+ boolean barGraph = barGraphButton.getSelection();
+ settings.put(ChartConstants.TAG_BAR_GRAPH_BUTTON, barGraph);
+
+ boolean vBars = verticalBarsButton.getSelection();
+ settings.put(ChartConstants.TAG_VERTICAL_BARS_BUTTON, vBars);
+ }
+ catch (Exception e) {}
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
+ */
+ @Override
+ protected void configureShell(Shell newShell) {
+ super.configureShell(newShell);
+ newShell.setText("Create chart from selection...");
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
+ */
+ @Override
+ protected void buttonPressed(int buttonId) {
+ if (buttonId == IDialogConstants.OK_ID) {
+ chart = produceChart();
+ saveState();
+ } else {
+ chart = null;
+ }
+ super.buttonPressed(buttonId);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected void createButtonsForButtonBar(Composite parent) {
+ // create OK and Cancel buttons by default
+ okButton = createButton(parent, IDialogConstants.OK_ID,
+ IDialogConstants.OK_LABEL, true);
+ createButton(parent, IDialogConstants.CANCEL_ID,
+ IDialogConstants.CANCEL_LABEL, false);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#createContents(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createContents(Composite parent) {
+ Control c = super.createContents(parent);
+ this.validateInput();
+ return c;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ Composite composite = (Composite)super.createDialogArea(parent);
+
+ Composite titleComp = new Composite(composite, SWT.NONE);
+ titleComp.setLayout(new RowLayout(SWT.HORIZONTAL));
+
+ Label icon = new Label(titleComp, SWT.NONE);
+ icon.setImage(Activator.getImage("icons/chart_icon.png"));
+
+ Label label = new Label(titleComp, SWT.WRAP);
+ label.setText("Chart builder");
+ GridData data = new GridData(GridData.GRAB_HORIZONTAL
+ | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL
+ | GridData.VERTICAL_ALIGN_CENTER);
+ data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
+ titleComp.setLayoutData(data);
+
+ Group chartTypeGroup = new Group(composite, SWT.NONE);
+ data = new GridData(GridData.GRAB_HORIZONTAL
+ | GridData.HORIZONTAL_ALIGN_FILL);
+ chartTypeGroup.setLayoutData(data);
+ chartTypeGroup.setLayout(new GridLayout(2, false));
+ chartTypeGroup.setText("Select your chart type");
+
+ ValidateSelectionListener listener = new ValidateSelectionListener();
+
+ barGraphButton = new Button(chartTypeGroup, SWT.RADIO);
+ barGraphButton.setText("Bar graph");
+ barGraphButton.addSelectionListener(listener);
+ barGraphButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ verticalBarsButton.setEnabled(barGraphButton.getSelection());
+ }
+ });
+ data = new GridData();
+ barGraphButton.setLayoutData(data);
+
+ verticalBarsButton = new Button(chartTypeGroup, SWT.CHECK);
+ verticalBarsButton.setText("Vertical bars");
+ data = new GridData();
+ verticalBarsButton.setLayoutData(data);
+
+ pieChartButton = new Button(chartTypeGroup, SWT.RADIO);
+ pieChartButton.setText("Pie chart");
+ pieChartButton.addSelectionListener(listener);
+ data = new GridData();
+ data.horizontalSpan = 2;
+ pieChartButton.setLayoutData(data);
+
+ Group chartColumnGroup = new Group(composite, SWT.NONE);
+ chartColumnGroup.setLayout(new GridLayout(1,true));
+ data = new GridData(GridData.GRAB_HORIZONTAL
+ | GridData.HORIZONTAL_ALIGN_FILL);
+ chartColumnGroup.setLayoutData(data);
+ chartColumnGroup.setText("Select the columns(s) to show");
+
+ addColumnButtons(chartColumnGroup, listener);
+
+ errorMessageText = new Text(composite, SWT.READ_ONLY);
+ errorMessageText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
+ | GridData.HORIZONTAL_ALIGN_FILL));
+ errorMessageText.setBackground(errorMessageText.getDisplay()
+ .getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
+
+ applyDialogFont(composite);
+
+ setWidgetsValues();
+
+ return composite;
+ }
+
+ /**
+ * Sets the widgets values
+ */
+ private void setWidgetsValues() {
+ // set default values
+ barGraphButton.setSelection(ChartConstants.DEFAULT_BAR_GRAPH_BUTTON);
+ verticalBarsButton.setEnabled(barGraphButton.getSelection());
+ verticalBarsButton.setSelection(ChartConstants.DEFAULT_VERTICAL_BARS_BUTTON);
+ for (Button button : columnButtons) {
+ button.setSelection(ChartConstants.DEFAULT_COLUMN_BUTTON);
+ }
+
+ // restore state if there is one saved
+ restoreState();
+ }
+
+ /**
+ * Adds one check button for each column implementing the IChartField interface.
+ *
+ * @see IChartField
+ * @param comp
+ * @param listener
+ */
+ private void addColumnButtons(Composite comp, SelectionListener listener)
+ {
+ columnButtons = new LinkedList<Button>();
+ for (ISTDataViewersField field : stViewer.getAllFields())
+ {
+ if (field instanceof IChartField) {
+ IChartField cField = (IChartField)field;
+ Button b = new Button(comp,SWT.CHECK);
+ b.setText(cField.getColumnHeaderText());
+ b.setData(cField);
+ b.addSelectionListener(listener);
+ GridData dt = new GridData();
+ b.setLayoutData(dt);
+ columnButtons.add(b);
+ }
+ }
+
+ Label sep = new Label(comp, SWT.SEPARATOR|SWT.HORIZONTAL);
+ GridData data = new GridData(GridData.GRAB_HORIZONTAL
+ | GridData.HORIZONTAL_ALIGN_FILL);
+ sep.setLayoutData(data);
+ Composite buttonComposite = new Composite(comp,SWT.NONE);
+ data = new GridData();
+ buttonComposite.setLayoutData(data);
+ FillLayout l = new FillLayout();
+ l.spacing = 5;
+ buttonComposite.setLayout(l);
+
+ final Button b1 = new Button(buttonComposite, SWT.PUSH);
+ b1.setText("Select all");
+ final Button b2 = new Button(buttonComposite, SWT.PUSH);
+ b2.setText("Deselect all");
+ SelectionListener sl = new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e)
+ {
+ widgetSelected(e);
+ }
+
+ public void widgetSelected(SelectionEvent e)
+ {
+ boolean b = (e.getSource() == b1);
+ for (Button button : columnButtons) {
+ button.setSelection(b);
+ }
+ validateInput();
+ }
+ };
+ b1.addSelectionListener(sl);
+ b2.addSelectionListener(sl);
+ }
+
+ /**
+ * Returns the Chart built by this dialog
+ *
+ * @return the chart
+ */
+ public Chart getValue() {
+ return chart;
+ }
+
+ /**
+ * Validates the input.
+ * <p>
+ * The default implementation of this framework method delegates the request
+ * to the supplied input validator object; if it finds the input invalid,
+ * the error message is displayed in the dialog's message line. This hook
+ * method is called whenever the text changes in the input field.
+ * </p>
+ */
+ protected void validateInput() {
+ String errorMessage = null;
+
+ int selectedNum = 0;
+ for (Button button : columnButtons) {
+ if (button.getSelection()) selectedNum++;
+ }
+
+ if (selectedNum == 0)
+ {
+ errorMessage = "No column selected";
+ }
+ /*else if (pieChartButton.getSelection() && selectedNum != 1)
+ {
+ errorMessage = "PieChart: Please select only one column";
+ }*/
+
+ // Bug 16256: important not to treat "" (blank error) the same as null
+ // (no error)
+ setErrorMessage(errorMessage);
+ }
+
+ /**
+ * Sets or clears the error message.
+ * If not <code>null</code>, the OK button is disabled.
+ *
+ * @param errorMessage
+ * the error message, or <code>null</code> to clear
+ * @since 3.0
+ */
+ public void setErrorMessage(String errorMessage) {
+ errorMessageText.setText(errorMessage == null ? "" : errorMessage); //$NON-NLS-1$
+ okButton.setEnabled(errorMessage == null);
+ errorMessageText.getParent().update();
+ }
+
+ /**
+ * Build the chart from configuration
+ *
+ * @return a new chart
+ */
+ private Chart produceChart()
+ {
+ IStructuredSelection selection = (IStructuredSelection)stViewer.getViewer().getSelection();
+ if (selection == StructuredSelection.EMPTY) return null;
+ Object[] objects = selection.toArray();
+
+ ISTDataViewersField labelField = getLabelField(stViewer);
+
+
+ List<IChartField> selectedFields = new ArrayList<IChartField>();
+ for (Button button : columnButtons) {
+ if (button.getSelection()) {
+ selectedFields.add((IChartField)button.getData());
+ }
+ }
+ boolean barChartType = barGraphButton.getSelection();
+ boolean horizontalBars = !verticalBarsButton.getSelection();
+
+ if (barChartType) {
+ return ChartFactory.produceBarChart(objects, labelField, selectedFields, getBarChartTitle(),horizontalBars);
+ }
+ else {
+ return ChartFactory.producePieChart(objects, labelField, selectedFields);
+ }
+ }
+
+ private class ValidateSelectionListener extends SelectionAdapter
+ {
+ public void widgetSelected(SelectionEvent e) {
+ validateInput();
+ }
+ };
+
+ /**
+ * @param viewer
+ * @return the field used to provide the labels to the series
+ */
+ protected ISTDataViewersField getLabelField(AbstractSTViewer viewer) {
+ return viewer.getAllFields()[0];
+ }
+
+ protected String getBarChartTitle(){
+ return "Bar Chart";
+ }
+} \ No newline at end of file

Back to the top