1
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
42 return WiredBaseImage.getIcon("Scale%w", size);
43 }
44
45 public void changeCursor(RecordPlot plot, InputEvent event) {
46
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
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
91
92
93
94 }
95
96 public String toString() {
97 return "Drag to change Clock";
98 }
99 }