View Javadoc

1   // Copyright 2004-2005, FreeHEP.
2   package hep.wired.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.edit.Translate;
12  import hep.wired.feature.Translateable;
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 translate plot.
19   *
20   * @author Mark Donszelmann
21   * @version $Id: DragToTranslate.java 682 2005-03-14 02:24:52Z duns $
22   */
23  public class DragToTranslate extends DefaultInteractionHandler {
24  
25      private int xp, yp;
26      private final static int cursorSize = 32;
27  
28      /***
29       * Create a drag handler to generate translate edits.
30       */
31      public DragToTranslate() {
32          super("Drag to Translate");
33      }
34  
35      public Icon getIcon(int size) {
36          return WiredBaseImage.getIcon("Translate%w", size);
37      }    
38  
39      public String getDescription() {
40          return "Click to center point, Alt-Click to move center to point, Drag to instant translate.";
41      }
42  
43      public boolean isSupportedBy(GraphicsPanel panel) {
44          return new Translate().isSupportedBy(panel);
45      }
46  
47      public void reset(RecordPlot plot, InputEvent event) {
48          Application.getApplication().setStatusMessage(getDescription());
49      }
50  
51      public void changeCursor(RecordPlot plot, InputEvent event) {
52          plot.setCursor(WiredBaseImage.getBestCursor("TranslateCursor%w", cursorSize, cursorSize));
53      }
54  
55      public void mouseEntered(RecordPlot plot, MouseEvent event) {
56          plot.requestFocusInWindow();
57          changeCursor(plot, event);
58      }
59      
60      public void mouseButton1DragStarted(RecordPlot plot, MouseEvent event) {
61          xp = event.getX();
62          yp = event.getY();
63          plot.beginUpdate();
64          plot.getGraphicsPanel().setFastMode(true);
65      }
66  
67      public void mouseButton1DragEnded(RecordPlot plot, MouseEvent event) {
68          plot.getGraphicsPanel().setFastMode(false);
69          plot.endUpdate();
70          plot.repaint();
71      }
72  
73      public void mouseButton1Dragged(RecordPlot plot, MouseEvent event) {
74          int xd = event.getX();
75          int yd = event.getY();
76          Translateable translateable = (Translateable)plot.getGraphicsPanel().getFeature(Translateable.class);
77          double t[] = translateable.getModelTranslation(new double[] { xd-xp, -yd+yp, 0 }, plot.getGraphicsPanel().getViewPort());
78          plot.postEdit(new Translate(t[0], t[1], t[2]));
79          xp = xd;
80          yp = yd;
81      }
82  
83      /***
84       * Centers the point you clicked on.
85       */
86      public void mouseButton1Clicked(RecordPlot plot, MouseEvent event) {
87          plot.beginUpdate();
88          int w2 = plot.getWidth()/2;
89          int h2 = plot.getHeight()/2;
90          int dx = event.getX()-w2;
91          int dy = event.getY()-h2;
92          Translateable translateable = (Translateable)plot.getGraphicsPanel().getFeature(Translateable.class);
93          if (event.isAltDown()) {
94              // center to click
95              Shape shape = new Rectangle2D.Double(w2-cursorSize,
96                                                   h2-cursorSize,
97                                                   cursorSize*2, cursorSize*2);
98              double t[] = translateable.getModelTranslation(new double[] { dx, -dy, 0 },  plot.getGraphicsPanel().getViewPort());
99              plot.postEdit(new Translate(t[0], t[1], t[2], shape, 5));
100         } else {
101             // click to center
102             Shape shape = new Rectangle2D.Double(event.getX()-cursorSize,
103                                                  event.getY()-cursorSize,
104                                                  cursorSize*2, cursorSize*2);
105             double t[] = translateable.getModelTranslation(new double[] { -dx, dy, 0 }, plot.getGraphicsPanel().getViewPort());
106             plot.postEdit(new Translate(t[0], t[1], t[2], shape, 5));
107         }
108         plot.endUpdate();
109     }
110 
111     public String toString() {
112         return "Drag to Translate";
113     }
114 }