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    }