/*
openaltimeter -- an open-source altimeter for RC aircraft
Copyright (C) 2010-2011 Jan Steidl, Jony Hudson
http://openaltimeter.org
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.openaltimeter.desktopapp.annotations;
import java.awt.event.InputEvent;
import javax.swing.SwingUtilities;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartMouseListener;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.plot.XYPlot;
// Listens for mouse events on an altimeter chart. It is installed by an
// AltimeterAnnotationManager, and calls back up to its manager to add
// the annotations.
public final class AltimeterChartMouseListener implements ChartMouseListener
{
private final ChartPanel cp;
private final AltimeterAnnotationManager am;
private double lastAnnotationX = 0d;
private double lastAnnotationY = 0d;
public AltimeterChartMouseListener(ChartPanel cp, AltimeterAnnotationManager am) {
this.cp = cp;
this.am = am;
}
@Override
public void chartMouseMoved(ChartMouseEvent arg0) {
return;
}
@Override
public void chartMouseClicked(final ChartMouseEvent event) {
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
XYPlot xyplot = (XYPlot) cp.getChart().getPlot();
double x, y;
x = xyplot.getDomainCrosshairValue();
y = xyplot.getRangeCrosshairValue();
am.addUserHeightAnnotation(x, y);
int onmask = InputEvent.SHIFT_DOWN_MASK;
if ((event.getTrigger().getModifiersEx() & (onmask)) == onmask)
am.addUserVarioAnnotation(lastAnnotationX, lastAnnotationY, x, y);
lastAnnotationX = x;
lastAnnotationY = y;
}
});
}
}