/*******************************************************************************
* Copyright (c) 2006, 2009 University of Edinburgh.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the BSD Licence, which
* accompanies this feature and can be downloaded from
* http://groups.inf.ed.ac.uk/pepa/update/licence.txt
*******************************************************************************/
package uk.ac.ed.inf.common.ui.plotview.views.actions;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* @author mtribast
*
*/
public class SaveChartDialog extends TitleAreaDialog {
private Point originalValues = null;
private Point result = null;
private Text widthText;
private Text heightText;
public SaveChartDialog(Shell parentShell, int width, int height) {
super(parentShell);
originalValues = new Point(width, height);
result = new Point(width, height);
}
/**
* Returns the selected size, or null if the dialog is canceled
* @return
*/
public Point getPoint() {
return result;
}
protected Control createContents(Composite parent) {
Control contents = super.createContents(parent);
setTitle("Export Options");
setMessage("Select size and resolution");
return contents;
}
protected Control createDialogArea(Composite parent) {
// top level composite
Composite parentComposite = (Composite) super.createDialogArea(parent);
Composite main = new Composite(parentComposite, SWT.NULL);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
main.setLayout(layout);
main.setLayoutData(new GridData(GridData.FILL_BOTH));
main.setFont(parentComposite.getFont());
Group group = new Group(main, SWT.NULL);
GridData data = new GridData(GridData.FILL_BOTH);
data.horizontalSpan = 2;
group.setLayoutData(data);
group.setText("Select Size");
GridLayout groupLayout = GridLayoutFactory.copyLayout(layout);
group.setLayout(groupLayout);
ModifyListener listener = new ModifyListener() {
public void modifyText(ModifyEvent e) {
setDialogComplete(validatePage());
}
};
widthText = createRow(group, "Width", originalValues.x);
widthText.addModifyListener(listener);
heightText = createRow(group, "Height", originalValues.y);
heightText.addModifyListener(listener);
Button restoreOriginal = new Button(group, SWT.PUSH);
restoreOriginal.setText("Reset");
restoreOriginal.setToolTipText("Restore current size");
restoreOriginal.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
}
public void widgetSelected(SelectionEvent e) {
widthText.setText(Integer.toString((originalValues.x)));
heightText.setText(Integer.toString((originalValues.y)));
setDialogComplete(validatePage());
}
});
GridData buttonData = new GridData();
buttonData.horizontalSpan = 2;
buttonData.horizontalAlignment = SWT.RIGHT;
restoreOriginal.setLayoutData(buttonData);
return parentComposite;
}
private void setDialogComplete(boolean complete) {
getButton(IDialogConstants.OK_ID).setEnabled(complete);
}
private boolean validatePage() {
setErrorMessage(null);
result = null;
int currentWidth = 0, currentHeight = 0;
try {
currentWidth = Integer.parseInt(widthText.getText());
if (currentWidth <=0 ) {
setErrorMessage("Width must be a positive integer");
return false;
}
} catch (NumberFormatException e) {
setErrorMessage("Invalid width");
return false;
}
try {
currentHeight = Integer.parseInt(heightText.getText());
if (currentHeight <=0 ) {
setErrorMessage("Height must be a positive integer");
return false;
}
} catch (NumberFormatException e) {
setErrorMessage("Invalid height");
return false;
}
result = new Point(currentWidth,currentHeight);
return true;
}
protected void cancelPressed() {
result = null;
super.cancelPressed();
}
private Text createRow(Composite main, String label, int value) {
Label rowLabel = new Label(main, SWT.NULL);
rowLabel.setText(label);
rowLabel.setLayoutData(new GridData());
Text rowText = new Text(main, SWT.BORDER);
rowText.setText(Integer.toString(value));
rowText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
return rowText;
}
}