/*
* This file is part of Caliph & Emir.
*
* Caliph & Emir is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Caliph & Emir is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Caliph & Emir; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Copyright statement:
* --------------------
* (c) 2002-2005 by Mathias Lux (mathias@juggle.at)
* http://www.juggle.at, http://caliph-emir.sourceforge.net
*/
package at.lux.components;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyAdapter;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
/**
* Description
*
* @author Mathias Lux, mathias@juggle.at
*/
public class ViewImageDialog extends JDialog {
private BufferedImage img;
private ImageViewPanel panel;
private JButton rotateCw, rotateCcw, reset;
private static final String rotateCwButtonText = "Rotate 90� CW";
private static final String rotateCcwButtonText = "Rotate 90� CCW";
private static final String resetButtonText = "Reset";
private double theta = 0d;
public ViewImageDialog(BufferedImage img) {
this.img = img;
this.setTitle("View Image: Zoom 100%");
rotateCw = new JButton(rotateCwButtonText);
rotateCw.setMnemonic(KeyEvent.VK_W);
rotateCw.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
rotateImage(-Math.PI / 2.0);
}
});
rotateCcw = new JButton(rotateCcwButtonText);
rotateCcw.setMnemonic(KeyEvent.VK_C);
rotateCcw.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
rotateImage(Math.PI / 2.0);
}
});
reset = new JButton(resetButtonText);
reset.setMnemonic(KeyEvent.VK_R);
reset.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
rotateImage(0);
}
});
CloseDialogListener closeDialogListener = new CloseDialogListener(this);
JPanel buttonPanel = new JPanel(new FlowLayout());
// buttonPanel.add(rotateCcw);
buttonPanel.add(reset);
buttonPanel.add(rotateCw);
panel = new ImageViewPanel(img);
addKeyListener(closeDialogListener);
buttonPanel.addKeyListener(closeDialogListener);
panel.addKeyListener(closeDialogListener);
rotateCw.addKeyListener(closeDialogListener);
// this.setSize(640, 480);
this.getContentPane().add(new JScrollPane(panel), BorderLayout.CENTER);
this.getContentPane().add(buttonPanel, BorderLayout.SOUTH);
this.pack();
}
private void rotateImage(double delta) {
if (delta == 0) {
panel.setOp(null);
rotateCw.setEnabled(true);
} else {
AffineTransform transform = AffineTransform.getRotateInstance(-Math.PI / 2.0);
AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR);
panel.setOp(op);
rotateCw.setEnabled(false);
// rotateCw.setText("Unrotate");
}
this.pack();
panel.repaint();
}
}
class CloseDialogListener extends KeyAdapter {
JDialog dialog;
public CloseDialogListener(JDialog dialog) {
this.dialog = dialog;
}
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
}
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
dialog.setVisible(false);
}
}
public void keyTyped(KeyEvent e) {
super.keyTyped(e);
}
}