001 /*
002 * Created by IntelliJ IDEA.
003 * User: Wei Wang
004 * Date: 2002-9-12
005 * Time: 13:58:40
006 * To change template for new class use
007 * Code Style | Class Templates options (Tools | IDE Options).
008 */
009 package EVolve.util;
010
011 import EVolve.visualization.*;
012 import EVolve.Scene;
013 import javax.swing.*;
014 import javax.swing.event.InternalFrameAdapter;
015 import javax.swing.event.InternalFrameEvent;
016 import java.awt.*;
017 import java.awt.image.BufferedImage;
018
019
020 public class Magnifier {
021 private JInternalFrame window;
022 private JDesktopPane desktop;
023 private AxesPanel magnifiedPanel;
024 private ReferenceDimension xAxis, yAxis;
025
026 public Magnifier() {
027 window = null;
028 desktop = Scene.getUIManager().getDesktop();
029 xAxis = null;
030 yAxis = null;
031 }
032
033 public void setAxises(ReferenceDimension xAxis, ReferenceDimension yAxis) {
034 this.xAxis = xAxis;
035 this.yAxis = yAxis;
036 }
037
038 public void showWindow(AutoImage image, int[][] value,int x, int y) {
039 AutoImage enlargedImage = new AutoImage();
040
041 Rectangle rect = new Rectangle(x-10,y-10,20,20);
042
043 enlargedImage = new AutoImage();
044 for (int i = -1*rect.width/2; i<rect.width/2; i++) {
045 for (int j = -1*rect.height/2; j<rect.height/2; j++) {
046 enlargedImage.setColor(i+rect.width/2,j+rect.height/2,image.getSortedColor(xAxis,yAxis,x+i,y+j));
047 }
048 }
049
050 if (window == null) {
051 window = new JInternalFrame("Zoomed View");
052 window.addInternalFrameListener(new InternalFrameAdapter() {
053 public void internalFrameClosing(InternalFrameEvent e) {
054 window = null;
055 }
056 });
057 /*window.addInternalFrameListener(new InternalFrameAdapter() {
058 public void internalFrameDeactivated(InternalFrameEvent e) {
059 cleanup();
060 }
061 });*/
062 window.setClosable(true);
063 magnifiedPanel = new AxesPanel(false);
064 magnifiedPanel.drawPointer(true);
065 window.setBounds(desktop.getSize().width - 400, 0, 300, 300);
066 window.setResizable(true);
067 desktop.add(window);
068 }
069 window.moveToFront();
070 window.setVisible(true);
071 window.getContentPane().add(magnifiedPanel);
072 BufferedImage bufferedImage = enlargedImage.getImage();
073 magnifiedPanel.setImage(bufferedImage);
074 // calculate the position for pointer in the magnifier window
075 int w = magnifiedPanel.getWidth();
076 int h = magnifiedPanel.getHeight();
077 int guessedPointerX = (rect.width/2)*w/bufferedImage.getWidth();
078 int guessedPointerY = h-(rect.height/2)*h/bufferedImage.getHeight();
079
080 for (int i = guessedPointerX-20; i< guessedPointerX+20; i++) {
081 if (magnifiedPanel.getImageX(i) == rect.width/2) {
082 guessedPointerX = i;
083 break;
084 }
085 }
086
087 for (int i = guessedPointerY-20; i< guessedPointerY+20; i++) {
088 if (magnifiedPanel.getImageY(i) == rect.height/2) {
089 guessedPointerY = i;
090 break;
091 }
092 }
093 magnifiedPanel.setPointerPosition(guessedPointerX+2, guessedPointerY);
094 magnifiedPanel.repaint();
095 if (!window.isVisible()) {
096 try {
097 window.show();
098 window.setVisible(true);
099 } catch (Exception e) {}
100 }
101
102 }
103
104 public void cleanup() {
105 try {
106 window.dispose();
107 window.setVisible(false);
108 window = null;
109 } catch (Exception e) {}
110 }
111 }