001 /** 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * Date: Apr 27, 2003 005 * Time: 1:14:55 PM 006 */ 007 008 package EVolve.util.phasedetectors; 009 010 import java.awt.Cursor; 011 import java.awt.Point; 012 013 import javax.swing.JPanel; 014 import javax.swing.JScrollPane; 015 016 import EVolve.Scene; 017 import EVolve.util.HelperFuncs; 018 import EVolve.visualization.AxesPanel; 019 import EVolve.visualization.XYViz.XYVisualization; 020 021 public class PhaseAddRemover extends Thread{ 022 private XYVisualization workingViz; 023 private boolean bAdding; 024 025 public void beginAdd() { 026 this.bAdding = true; 027 start(); 028 } 029 030 public void beginRemove() { 031 this.bAdding = false; 032 start(); 033 } 034 035 public void run() { 036 workingViz = HelperFuncs.getActiveXYViz(); 037 038 if (workingViz == null) return; 039 040 Scene.getUIManager().enablePhaseDetectorButton(false); 041 042 workingViz.freeze(true); 043 AxesPanel canvas = (AxesPanel)((JScrollPane)workingViz.getPanel()).getViewport().getView(); 044 setCursor(canvas, false); 045 046 while (workingViz.isFreezed()) { 047 try { 048 sleep(100); 049 } catch (InterruptedException e) { 050 break; 051 } 052 } 053 054 setCursor(canvas, true); 055 int newPhase = getPhaseUnderMouse(); 056 057 if (newPhase >= 0) { 058 if (bAdding) 059 workingViz.getPhaseDetector().addPhaseManually(newPhase+1); 060 else 061 workingViz.getPhaseDetector().removePhaseManually(newPhase+1); 062 } 063 064 Scene.getUIManager().enablePhaseDetectorButton(true); 065 } 066 067 private void setCursor(JPanel panel, boolean reset) { 068 if (reset) 069 panel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 070 else 071 panel.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); 072 } 073 074 private int getPhaseUnderMouse() { 075 XYVisualization visual = HelperFuncs.getActiveXYViz(); 076 077 if (visual == null) { 078 return -1; 079 } 080 081 Point pt = visual.getMousePosition(); 082 AxesPanel canvas = (AxesPanel)((JScrollPane)visual.getPanel()).getViewport().getView(); 083 084 return canvas.getImageX(pt.x); 085 } 086 }