package LinGUIne.wizards;
import org.eclipse.jface.dialogs.IPageChangeProvider;
import org.eclipse.jface.dialogs.IPageChangedListener;
import org.eclipse.jface.dialogs.PageChangedEvent;
import org.eclipse.jface.wizard.IWizardContainer;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import LinGUIne.extensions.IVisualization;
import LinGUIne.model.VisualizationPluginManager;
/**
* This page is used to select a visualization from the visualization plugins
* currently loaded into the application. Visualizations will only be listed if
* they meet the user's selected result types.
*
* @author Peter Dimou
*/
public class VisualizationWizardSelectVisualizationPage extends WizardPage
implements IPageChangedListener {
private VisualizationPluginManager visualizationPluginMan;
private VisualizationData wizardData;
private Label lblVisualizations;
private List lstVisualizations;
private Label lblDescription;
/**
* Constructs the page with the correct title and description. This is
* currently the second page of the VisualizationWizard and the description
* reflects that.
*
* @param data
* The data to be carried to/from each page in the wizard.
* @param visualizationPluginMan
* Where to get the listing of all visualizations currently in
* the application.
*/
public VisualizationWizardSelectVisualizationPage(
VisualizationData wizardData,
VisualizationPluginManager visualizationPluginMan) {
super("Visualization Wizard");
setTitle("Visualization Wizard - Step 2");
setDescription("Select the Visualization you wish to run.");
this.wizardData = wizardData;
this.visualizationPluginMan = visualizationPluginMan;
}
/**
* Populates the wizard page with content.
*
* @param parent
* The current content pane.
*/
@Override
public void createControl(Composite parent) {
final IWizardContainer wizContainer = this.getContainer();
if (wizContainer instanceof IPageChangeProvider) {
((IPageChangeProvider) wizContainer).addPageChangedListener(this);
}
Composite container = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(2, true);
container.setLayout(layout);
// Create the visualization section
Group grpVisualizations = new Group(container, SWT.NONE);
grpVisualizations.setLayout(new GridLayout(1, false));
grpVisualizations.setLayoutData(new GridData(GridData.FILL_BOTH));
grpVisualizations.setText("Visualizations");
lblVisualizations = new Label(grpVisualizations, SWT.NONE);
lblVisualizations.setText("Select a Visualization for your data:");
lstVisualizations = new List(grpVisualizations, SWT.BORDER
| SWT.V_SCROLL);
lstVisualizations.setLayoutData(new GridData(GridData.FILL_BOTH));
// Populate the list of visualizations based on result types
for (IVisualization visualization : visualizationPluginMan
.getVisualizationsBySupportedResultTypeSet(wizardData
.getChosenResultTypes())) {
lstVisualizations.add(visualization.getName());
}
// Add the listener to change the description label upon click of a
// visualization
lstVisualizations.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
if (lstVisualizations.getSelectionCount() > 0) {
String selectedVisualizationName = lstVisualizations
.getSelection()[0];
IVisualization visualization = visualizationPluginMan
.getVisualizationByName(selectedVisualizationName);
String description = visualizationPluginMan
.getVisualizationDescriptionByName(visualization
.getName());
if (visualization != null) {
wizardData.setChosenVisualization(visualization);
lblDescription.setText(description);
lblDescription.update();
setPageComplete(true);
}
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
// Create the group that displays a visualization's description.
Group grpDescription = new Group(container, SWT.None);
grpDescription.setLayout(new GridLayout(1, false));
grpDescription.setLayoutData(new GridData(GridData.FILL_BOTH));
grpDescription.setText("Description");
GridData layoutData = new GridData(GridData.FILL_BOTH);
layoutData.horizontalSpan = 2;
lblDescription = new Label(grpDescription, SWT.NONE);
lblDescription.setLayoutData(layoutData);
lblDescription.setText("");
lblDescription.setLayoutData(new GridData(GridData.FILL_BOTH));
setControl(container);
setPageComplete(false);
}
/**
* Called whenever a page in the wizard is changed. Since all wizard pages
* are constructed and added to the wizard on launch, this page won't know
* about result types selected by the user. This listener will update the
* list of result types once this page is shown to the user.
*/
@Override
public void pageChanged(PageChangedEvent event) {
lstVisualizations.removeAll();
// Populate the list of visualizations based on result types
for (IVisualization visualization : visualizationPluginMan
.getVisualizationsBySupportedResultTypeSet(wizardData
.getChosenResultTypes())) {
lstVisualizations.add(visualization.getName());
}
}
}