View Javadoc

1   // Copyright 2004-2005, FreeHEP.
2   package hep.wired.heprep.interaction;
3   
4   import java.awt.*;
5   import java.awt.event.*;
6   import java.awt.geom.*;
7   import javax.swing.*;
8   
9   import org.freehep.application.Application;
10  
11  import hep.wired.heprep.edit.MultiplyVariable;
12  import hep.wired.heprep.edit.SetVariable;
13  import hep.wired.interaction.DefaultInteractionHandler;
14  import hep.wired.services.GraphicsPanel;
15  import hep.wired.services.RecordPlot;
16  import hep.wired.image.WiredBaseImage;
17  
18  /***
19   * Drag/click mouse to scale plot.
20   *
21   * @author Mark Donszelmann
22   * @version $Id: DragToChangeFishEye.java 681 2005-03-14 02:09:54Z duns $
23   */
24  public class DragToChangeFishEye extends DefaultInteractionHandler {
25  
26      private static final String variable = "alpha";
27      private double dpsq;
28  
29      /***
30       * Create a drag handler to generate scale edits.
31       */
32      public DragToChangeFishEye() {
33          super("Drag to Change Deformation of Fish-Eye");
34      }
35  
36      public boolean isSupportedBy(GraphicsPanel panel) {
37          return new SetVariable(variable).isSupportedBy(panel);
38      }
39  
40      public Icon getIcon(int size) {
41          // FIXME, WIRED-378, other icon.
42          return WiredBaseImage.getIcon("Scale%w", size);
43      }    
44  
45      public void changeCursor(RecordPlot plot, InputEvent event) {
46          // FIXME, WIRED-378, other icon.
47          plot.setCursor(WiredBaseImage.getBestCursor("ScaleCursor%w", 32, 32));
48      }
49  
50      public void reset(RecordPlot plot, InputEvent event) {
51          plot.getGraphicsPanel().setFastMode(false);
52          plot.drawShape(null);
53          plot.repaint();
54          Application.getApplication().setStatusMessage("Drag inward or outward to change blow-up factor.");
55      }
56  
57      public void mouseEntered(RecordPlot plot, MouseEvent event) {
58          plot.requestFocusInWindow();
59          changeCursor(plot, event);
60      }
61      
62      public void mouseButton1DragStarted(RecordPlot plot, MouseEvent event) {
63          dpsq = Point2D.distanceSq(event.getComponent().getWidth()/2.0,
64                                    event.getComponent().getHeight()/2.0,
65                                    event.getX(),
66                                    event.getY());
67          changeCursor(plot, event);
68          plot.beginUpdate();
69          plot.getGraphicsPanel().setFastMode(true);
70      }
71  
72      public void mouseButton1Dragged(RecordPlot plot, MouseEvent event) {
73          double ddsq = Point2D.distanceSq(event.getComponent().getWidth()/2.0,
74                                           event.getComponent().getHeight()/2.0,
75                                           event.getX(),
76                                           event.getY());
77          double s = Math.sqrt(ddsq / dpsq);
78  //        double s = Math.sqrt(ddsq)/2000;
79  
80          plot.postEdit(new MultiplyVariable(variable, s));
81          dpsq = ddsq;
82          defineShape(plot, event);
83      }
84  
85      public void mouseButton1DragEnded(RecordPlot plot, MouseEvent event) {
86          plot.endUpdate();
87          reset(plot, event);
88      }
89  
90      public void mouseButton1Released(RecordPlot plot, MouseEvent event) {
91          changeCursor(plot, event);
92      }
93  
94      private void defineShape(RecordPlot plot, MouseEvent event) {
95          double x = event.getComponent().getWidth()/2.0;
96          double y = event.getComponent().getHeight()/2.0;
97          double d = Point2D.distance(event.getX(), event.getY(), x, y);
98          plot.drawShape(new Ellipse2D.Double(x - d, y - d, d*2, d*2));
99      }
100 
101     public String toString() {
102         return "Drag to change Fish Eye";
103     }
104 }