Added right-click & drag zoom control contributed by Richard.
This commit is contained in:
parent
14ae26dda8
commit
e6fe93c2ac
@ -2,6 +2,7 @@ package net.sf.openrocket.gui.plot;
|
|||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
|
import java.awt.Point;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.awt.event.MouseWheelEvent;
|
import java.awt.event.MouseWheelEvent;
|
||||||
import java.awt.event.MouseWheelListener;
|
import java.awt.event.MouseWheelListener;
|
||||||
@ -36,9 +37,13 @@ import com.jogamp.newt.event.InputEvent;
|
|||||||
public class SimulationChart extends ChartPanel {
|
public class SimulationChart extends ChartPanel {
|
||||||
|
|
||||||
private Point2D panLast;
|
private Point2D panLast;
|
||||||
|
private Point startPoint;
|
||||||
private double panW;
|
private double panW;
|
||||||
private double panH;
|
private double panH;
|
||||||
|
|
||||||
|
private enum Interaction {ZOOM, PAN};
|
||||||
|
private Interaction interaction = Interaction.PAN;
|
||||||
|
|
||||||
private MouseWheelHandler mouseWheelHandler = null;
|
private MouseWheelHandler mouseWheelHandler = null;
|
||||||
|
|
||||||
public SimulationChart(JFreeChart chart) {
|
public SimulationChart(JFreeChart chart) {
|
||||||
@ -72,7 +77,7 @@ public class SimulationChart extends ChartPanel {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mousePressed(MouseEvent e) {
|
public void mousePressed(MouseEvent e) {
|
||||||
if ( e.getButton() == MouseEvent.BUTTON1 ) {
|
if ( e.getButton() == MouseEvent.BUTTON1 || e.getButton() == MouseEvent.BUTTON3) {
|
||||||
// if no modifiers, use pan
|
// if no modifiers, use pan
|
||||||
Rectangle2D screenDataArea = getScreenDataArea(e.getX(), e.getY());
|
Rectangle2D screenDataArea = getScreenDataArea(e.getX(), e.getY());
|
||||||
|
|
||||||
@ -80,10 +85,18 @@ public class SimulationChart extends ChartPanel {
|
|||||||
this.panW = screenDataArea.getWidth();
|
this.panW = screenDataArea.getWidth();
|
||||||
this.panH = screenDataArea.getHeight();
|
this.panH = screenDataArea.getHeight();
|
||||||
this.panLast = e.getPoint();
|
this.panLast = e.getPoint();
|
||||||
setCursor( Cursor.getPredefinedCursor( Cursor.MOVE_CURSOR));
|
this.startPoint = e.getPoint();
|
||||||
}
|
}
|
||||||
} else if ( e.getButton() == MouseEvent.BUTTON2 ) {
|
}
|
||||||
|
|
||||||
|
if ( e.getButton() == MouseEvent.BUTTON2 ) {
|
||||||
|
// middle/scroll button
|
||||||
|
} else if ( e.getButton() == MouseEvent.BUTTON3 ) { // right button
|
||||||
|
interaction = Interaction.ZOOM;
|
||||||
|
setCursor (Cursor.getPredefinedCursor(Cursor.NE_RESIZE_CURSOR));
|
||||||
|
} else if ( e.getButton() == MouseEvent.BUTTON1 ) { // left button
|
||||||
|
interaction = Interaction.PAN;
|
||||||
|
setCursor( Cursor.getPredefinedCursor( Cursor.MOVE_CURSOR));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,15 +115,39 @@ public class SimulationChart extends ChartPanel {
|
|||||||
double hPercent = dy / this.panH;
|
double hPercent = dy / this.panH;
|
||||||
boolean old = this.getChart().getPlot().isNotify();
|
boolean old = this.getChart().getPlot().isNotify();
|
||||||
this.getChart().getPlot().setNotify(false);
|
this.getChart().getPlot().setNotify(false);
|
||||||
Pannable p = (Pannable) this.getChart().getPlot();
|
|
||||||
if ( p.getOrientation() == PlotOrientation.VERTICAL){
|
switch (interaction) {
|
||||||
p.panDomainAxes( wPercent, this.getChartRenderingInfo().getPlotInfo(),panLast);
|
case PAN:
|
||||||
p.panRangeAxes( hPercent, this.getChartRenderingInfo().getPlotInfo(),panLast);
|
Pannable p = (Pannable) this.getChart().getPlot();
|
||||||
} else {
|
if ( p.getOrientation() == PlotOrientation.VERTICAL){
|
||||||
p.panDomainAxes( hPercent, this.getChartRenderingInfo().getPlotInfo(),panLast);
|
p.panDomainAxes( wPercent, this.getChartRenderingInfo().getPlotInfo(),panLast);
|
||||||
p.panRangeAxes( wPercent, this.getChartRenderingInfo().getPlotInfo(),panLast);
|
p.panRangeAxes( hPercent, this.getChartRenderingInfo().getPlotInfo(),panLast);
|
||||||
|
} else {
|
||||||
|
p.panDomainAxes( hPercent, this.getChartRenderingInfo().getPlotInfo(),panLast);
|
||||||
|
p.panRangeAxes( wPercent, this.getChartRenderingInfo().getPlotInfo(),panLast);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case ZOOM:
|
||||||
|
Zoomable pz = (Zoomable) this.getChart().getPlot();
|
||||||
|
|
||||||
|
double zoomx = 1 + 2*wPercent;
|
||||||
|
double zoomy = 1 + 2*hPercent;
|
||||||
|
|
||||||
|
Point2D anchor = SimulationChart.this.translateScreenToJava2D(startPoint);
|
||||||
|
|
||||||
|
if ( pz.getOrientation() == PlotOrientation.VERTICAL) {
|
||||||
|
pz.zoomDomainAxes(zoomx, this.getChartRenderingInfo().getPlotInfo(), anchor, true);
|
||||||
|
pz.zoomRangeAxes(zoomy, this.getChartRenderingInfo().getPlotInfo(), anchor, true);
|
||||||
|
} else {
|
||||||
|
pz.zoomRangeAxes(zoomx, this.getChartRenderingInfo().getPlotInfo(), anchor, true);
|
||||||
|
pz.zoomDomainAxes(zoomy, this.getChartRenderingInfo().getPlotInfo(), anchor, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
this.panLast = e.getPoint();
|
this.panLast = e.getPoint();
|
||||||
this.getChart().getPlot().setNotify(old);
|
this.getChart().getPlot().setNotify(old);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user