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.SetVariable;
12  import hep.wired.interaction.DefaultInteractionHandler;
13  import hep.wired.services.GraphicsPanel;
14  import hep.wired.services.RecordPlot;
15  import hep.wired.image.WiredBaseImage;
16  
17  /***
18   * Drag/click mouse to scale plot.
19   *
20   * @author Mark Donszelmann
21   * @version $Id: DragToChangeClock.java 1929 2005-06-19 05:04:46Z duns $
22   */
23  public class DragToChangeClock extends DefaultInteractionHandler {
24  
25      private static final String phi0String = "phi0";
26      private double phi0;
27      private static final String dString = "d";
28  
29      /***
30       * Create a drag handler to generate scale edits.
31       */
32      public DragToChangeClock() {
33          super("Drag to Change Opening Angle of Clock");
34      }
35  
36      public boolean isSupportedBy(GraphicsPanel panel) {
37          return new SetVariable(phi0String).isSupportedBy(panel) && new SetVariable(dString).isSupportedBy(panel);
38      }
39  
40      public Icon getIcon(int size) {
41          // FIXME, WIRED-318, other icon...
42          return WiredBaseImage.getIcon("Scale%w", size);
43      }    
44  
45      public void changeCursor(RecordPlot plot, InputEvent event) {
46          // FIXME, WIRED-318, 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 to open clock angle.");
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          phi0 = Math.atan2(event.getComponent().getHeight()/2.0 - event.getY(),
64                            event.getX() - event.getComponent().getWidth()/2.0);
65          changeCursor(plot, event);
66          plot.beginUpdate();
67          plot.getGraphicsPanel().setFastMode(true);
68          plot.postEdit(new SetVariable(phi0String, phi0));
69      }
70  
71      public void mouseButton1Dragged(RecordPlot plot, MouseEvent event) {
72          double d = Math.abs(Math.atan2(event.getComponent().getHeight()/2.0 - event.getY(),
73                                         event.getX() - event.getComponent().getWidth()/2.0) - phi0);
74                                         
75  // D incorrect for dragging over the -PI or +PI boundary...                                       
76          plot.postEdit(new SetVariable(dString, d/Math.PI));        
77          defineShape(plot, event);
78      }
79  
80      public void mouseButton1DragEnded(RecordPlot plot, MouseEvent event) {
81          plot.endUpdate();
82          reset(plot, event);
83      }
84  
85      public void mouseButton1Released(RecordPlot plot, MouseEvent event) {
86          changeCursor(plot, event);
87      }
88  
89      private void defineShape(RecordPlot plot, MouseEvent event) {
90  //        double x = event.getComponent().getWidth()/2.0;
91  //        double y = event.getComponent().getHeight()/2.0;
92  //        double d = Point2D.distance(event.getX(), event.getY(), x, y);
93  //        plot.drawShape(new Ellipse2D.Double(x - d, y - d, d*2, d*2));
94      }
95  
96      public String toString() {
97          return "Drag to change Clock";
98      }
99  }