1 package org.opentrafficsim.graphs;
2
3 import java.awt.event.MouseEvent;
4 import java.awt.event.MouseListener;
5 import java.awt.event.MouseMotionListener;
6 import java.awt.geom.Point2D;
7
8 import org.jfree.chart.ChartPanel;
9 import org.jfree.chart.event.PlotChangeEvent;
10 import org.jfree.chart.plot.PlotRenderingInfo;
11 import org.jfree.chart.plot.XYPlot;
12
13
14
15
16
17
18
19
20
21
22 abstract class PointerHandler implements MouseListener, MouseMotionListener
23 {
24
25 @Override
26 public void mouseDragged(final MouseEvent e)
27 {
28
29 }
30
31
32 @Override
33 public void mouseMoved(final MouseEvent mouseEvent)
34 {
35 final ChartPanel cp = (ChartPanel) mouseEvent.getSource();
36 final XYPlot plot = (XYPlot) cp.getChart().getPlot();
37
38 final boolean showCrossHair = cp.getScreenDataArea().contains(mouseEvent.getPoint());
39 if (cp.getHorizontalAxisTrace() != showCrossHair)
40 {
41 cp.setHorizontalAxisTrace(showCrossHair);
42 cp.setVerticalAxisTrace(showCrossHair);
43 plot.notifyListeners(new PlotChangeEvent(plot));
44 }
45 if (showCrossHair)
46 {
47 Point2D p = cp.translateScreenToJava2D(mouseEvent.getPoint());
48 PlotRenderingInfo pi = cp.getChartRenderingInfo().getPlotInfo();
49 updateHint(plot.getDomainAxis().java2DToValue(p.getX(), pi.getDataArea(), plot.getDomainAxisEdge()), plot
50 .getRangeAxis().java2DToValue(p.getY(), pi.getDataArea(), plot.getRangeAxisEdge()));
51 }
52 else
53 {
54 updateHint(Double.NaN, Double.NaN);
55 }
56 }
57
58
59
60
61
62
63
64 abstract void updateHint(double domainValue, double rangeValue);
65
66
67 @Override
68 public void mouseClicked(final MouseEvent e)
69 {
70
71 }
72
73
74 @Override
75 public void mousePressed(final MouseEvent e)
76 {
77
78 }
79
80
81 @Override
82 public void mouseReleased(final MouseEvent e)
83 {
84
85 }
86
87
88 @Override
89 public void mouseEntered(final MouseEvent e)
90 {
91
92 }
93
94
95 @Override
96 public void mouseExited(final MouseEvent mouseEvent)
97 {
98 final ChartPanel cp = (ChartPanel) mouseEvent.getSource();
99 final XYPlot plot = (XYPlot) cp.getChart().getPlot();
100
101 if (cp.getHorizontalAxisTrace())
102 {
103 cp.setHorizontalAxisTrace(false);
104 cp.setVerticalAxisTrace(false);
105 plot.notifyListeners(new PlotChangeEvent(plot));
106 }
107 updateHint(Double.NaN, Double.NaN);
108 }
109 }