package rtt.ui.dialogs;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import rtt.core.archive.testsuite.Testcase;
import rtt.ui.content.testsuite.TestcaseContent;
import rtt.ui.viewer.ViewerUtils;
public class ParametersDialog extends TitleAreaDialog {
private ListViewer listViewer;
private String title;
private String message;
private List<String> parameterList;
/**
* Create the dialog.
* @param parentShell
*/
public ParametersDialog(Shell parentShell, TestcaseContent testcaseContent) {
super(parentShell);
setHelpAvailable(false);
setShellStyle(SWT.DIALOG_TRIM | SWT.MAX | SWT.RESIZE);
parameterList = new ArrayList<String>();
Testcase testcase = testcaseContent.getTestcase();
if (testcase != null && testcase.getParameter() != null) {
parameterList.addAll(testcase.getParameter());
}
}
@Override
public void setTitle(String newTitle) {
this.title = newTitle;
}
@Override
public void setMessage(String newMessage) {
this.message = newMessage;
}
/**
* Create contents of the dialog.
* @param parent
*/
@Override
protected Control createDialogArea(Composite parent) {
super.setMessage(message, IMessageProvider.INFORMATION);
super.setTitle(title);
Composite area = (Composite) super.createDialogArea(parent);
Composite container = new Composite(area, SWT.NONE);
container.setLayout(new GridLayout(3, false));
container.setLayoutData(new GridData(GridData.FILL_BOTH));
Label parameterLabel = new Label(container, SWT.NONE);
parameterLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
parameterLabel.setText("Parameters:");
listViewer = new ListViewer(container, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
listViewer.getList().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
listViewer.setContentProvider(new ArrayContentProvider());
listViewer.setLabelProvider(new LabelProvider());
listViewer.setInput(parameterList);
Composite classpathComposite = new Composite(container, SWT.NONE);
classpathComposite.setLayout(new GridLayout(1, true));
Button addParameterButton = new Button(classpathComposite, SWT.NONE);
addParameterButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
addParameterButton.setText("Add Parameter ...");
addParameterButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
InputDialog inputDialog = new InputDialog(getParentShell(), "New parameter", "Enter new parameter ...", "", null);
if (inputDialog.open() == Dialog.OK) {
String value = inputDialog.getValue().trim();
if (value != null && !value.equals("")) {
parameterList.add(value);
listViewer.setInput(parameterList);
setOkButtonEnabled(true);
}
}
}
});
Composite composite = new Composite(classpathComposite, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
final Button removeButton = new Button(classpathComposite, SWT.NONE);
removeButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
removeButton.setText("Remove");
removeButton.setEnabled(false);
removeButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
String selectedParameter = ViewerUtils.getSelection(
listViewer.getSelection(), String.class);
if (selectedParameter != null && !selectedParameter.isEmpty()) {
parameterList.remove(selectedParameter);
listViewer.setInput(parameterList);
setOkButtonEnabled(true);
}
removeButton.setEnabled(false);
}
});
Composite spacer = new Composite(container, SWT.NONE);
GridData gd_spacer = new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1);
gd_spacer.heightHint = 30;
spacer.setLayoutData(gd_spacer);
listViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
boolean enable = false;
if (!selection.isEmpty() && selection.getFirstElement() instanceof String) {
String selectionText = (String) selection.getFirstElement();
if (!selectionText.equals("")) {
enable = true;
}
}
removeButton.setEnabled(enable);
}
});
return area;
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
Button okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
true);
okButton.setEnabled(false);
createButton(parent, IDialogConstants.CANCEL_ID,
IDialogConstants.CANCEL_LABEL, false);
}
public void setOkButtonEnabled(boolean enable) {
Button okButton = this.getButton(OK);
if (okButton != null) {
// if name is empty, disable ok button. When not empty, disable only if lexer AND parser is empty
getButton(OK).setEnabled(enable);
}
}
/**
* Return the initial size of the dialog.
*/
@Override
protected Point getInitialSize() {
return new Point(500, 450);
}
public ListViewer getViewer() {
return listViewer;
}
public List<String> getParameters() {
return parameterList;
}
}