Project: Bio-PEPA
/*******************************************************************************
 * 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; 
 
 
}