package name.abuchen.portfolio.ui.util.chart; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.swtchart.Chart; import org.swtchart.IAxis; public class MovePlotKeyListener implements Listener { private final Chart chart; private MovePlotKeyListener(Chart chart) { this.chart = chart; } public static void attachTo(Chart chart) { Listener listener = new MovePlotKeyListener(chart); chart.getPlotArea().addListener(SWT.KeyDown, listener); } @Override public void handleEvent(Event event) { if (event.keyCode == SWT.ARROW_DOWN) arrowDown(event); else if (event.keyCode == SWT.ARROW_UP) arrowUp(event); else if (event.keyCode == SWT.ARROW_RIGHT) arrowRight(event); else if (event.keyCode == SWT.ARROW_LEFT) arrowLeft(event); else if (event.character == '0') adjustRange(); } private void arrowDown(Event event) { if (event.stateMask == SWT.MOD1) for (IAxis axis : chart.getAxisSet().getYAxes()) axis.zoomOut(); else for (IAxis axis : chart.getAxisSet().getYAxes()) axis.scrollDown(); chart.redraw(); } private void arrowUp(Event event) { if (event.stateMask == SWT.MOD1) for (IAxis axis : chart.getAxisSet().getYAxes()) axis.zoomIn(); else for (IAxis axis : chart.getAxisSet().getYAxes()) axis.scrollUp(); chart.redraw(); } private void arrowRight(Event event) { if (event.stateMask == SWT.MOD1) for (IAxis axis : chart.getAxisSet().getXAxes()) axis.zoomOut(); else for (IAxis axis : chart.getAxisSet().getXAxes()) axis.scrollUp(); chart.redraw(); } private void arrowLeft(Event event) { if (event.stateMask == SWT.MOD1) for (IAxis axis : chart.getAxisSet().getXAxes()) axis.zoomIn(); else for (IAxis axis : chart.getAxisSet().getXAxes()) axis.scrollDown(); chart.redraw(); } private void adjustRange() { if (chart instanceof ScatterChart) ((ScatterChart) chart).adjustRange(); else if (chart instanceof TimelineChart) ((TimelineChart) chart).adjustRange(); else chart.getAxisSet().adjustRange(); chart.redraw(); } }