1
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
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
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 }