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 }