Package net.sourceforge.jiu.gui.awt.dialogs

Source Code of net.sourceforge.jiu.gui.awt.dialogs.ShearDialog

/*
* ShearDialog
*
* Copyright (c) 2001, 2002, 2003 Marco Schmidt.
* All rights reserved.
*/

package net.sourceforge.jiu.gui.awt.dialogs;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import net.sourceforge.jiu.apps.Strings;
import net.sourceforge.jiu.geometry.Shear;

/**
* An AWT dialog to enter the angle for a shearing operation.
* @author Marco Schmidt
*/
public class ShearDialog extends Dialog implements ActionListener, KeyListener
{
  private Button ok;
  private Button cancel;
  private TextField angleTextField;
  private boolean pressedOk;
  private Double result;
  private Label newWidthLabel;
  private int imageWidth;
  private int imageHeight;

  /**
   * Creates a ShearDialog.
   * @param owner the Frame this dialog will belong to
   */
  public ShearDialog(Frame owner, Strings strings, double initialValue, int imageWidth, int imageHeight)
  {
    super(owner, strings.get(Strings.SHEAR_IMAGE) + " (" + imageWidth + " x " + imageHeight + ")", true);
    this.imageWidth = imageWidth;
    this.imageHeight = imageHeight;

    Panel panel = new Panel(new GridLayout(0, 2));

    panel.add(new Label(strings.get(Strings.SHEAR_ENTER_ANGLE)));
    angleTextField = new TextField(Double.toString(initialValue));
    angleTextField.addKeyListener(this);
    panel.add(angleTextField);

    panel.add(new Label(strings.get(Strings.NEW_WIDTH)));
    newWidthLabel = new Label("");
    panel.add(newWidthLabel);

    add(panel, BorderLayout.CENTER);

    panel = new Panel();
    ok = new Button(strings.get(Strings.OK));
    ok.addActionListener(this);
    cancel = new Button(strings.get(Strings.CANCEL));
    cancel.addActionListener(this);
    panel.add(ok);
    panel.add(cancel);
    add(panel, BorderLayout.SOUTH);

    handleKeys(null);
    pack();
    Dialogs.center(this);
  }

  /**
   * Hides (closes) this dialog if the OK button was source of the action event
   * (e.g. if the button was pressed).
   */
  public void actionPerformed(ActionEvent e)
  {
    if (e.getSource() == ok)
    {
      pressedOk = true;
      result = getValue(angleTextField);
      setVisible(false);
    }
    else
    if (e.getSource() == cancel)
    {
      setVisible(false);
    }
  }

  private Double getValue(TextField tf)
  {
    if (tf == null)
    {
      return null;
    }
    double d;
    try
    {
      d = (Double.valueOf(tf.getText())).doubleValue();
    }
    catch(NumberFormatException nfe)
    {
      return null;
    }
    if (d <= -90.0 || d >= 90.0)
    {
      return null;
    }
    return new Double(d);
  }

  public Double getValue()
  {
    return result;
  }

  public boolean hasPressedOk()
  {
    return pressedOk;
  }

  public void handleKeys(KeyEvent e)
  {
    Double d = getValue(angleTextField);
    double angle = -90.0;
    if (d != null)
    {
      angle = d.doubleValue();
    }
    String labelText;
    if (angle > -90.0 && angle < 90.0)
    {
      ok.setEnabled(true);
      int newWidth = Shear.computeNewImageWidth(imageWidth, imageHeight, angle);
      labelText = Integer.toString(newWidth);
    }
    else
    {
      ok.setEnabled(false);
      labelText = "-";
    }
    newWidthLabel.setText(labelText);
  }

  public void keyPressed(KeyEvent e)
  {
    handleKeys(e);
  }

  public void keyReleased(KeyEvent e)
  {
    handleKeys(e);
  }

  public void keyTyped(KeyEvent e)
  {
    handleKeys(e);
  }
}
TOP

Related Classes of net.sourceforge.jiu.gui.awt.dialogs.ShearDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.