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