package com.onaro.util.chart; import ilog.views.chart.*; import ilog.views.chart.action.*; import ilog.views.chart.event.*; import javax.swing.*; import java.awt.event.*; public class AutoYChartZoomAction extends IlvChartZoomAction implements AxisListener { private static final long serialVersionUID = 1L; public AutoYChartZoomAction(Icon icon, char keyChar, String tooltip, double factor) { super(null, icon, KeyStroke.getKeyStroke(keyChar), tooltip, null, factor); setEnabled(false); } protected void computeEnabled() { // do nothing. enabled calculation will be done upon axisRangeChanged } protected void attach() { super.attach(); getChart().getXAxis().addAxisListener(this); } protected void detach() { getChart().getXAxis().removeAxisListener(this); super.detach(); } public void actionPerformed(ActionEvent actionEvent) { if (isEnabled() && getChart() != null){ IlvDataWindow window = calcWindowToZoom(); if (AutoYZoomInteractor.moreThanMinPointInRange(window, getChart())) { AutoYZoomInteractor.performAnimatedZoom(getChart(),getYAxisIndex(),window, 10); } } } private IlvDataWindow calcWindowToZoom() { IlvDataInterval xVisibleRange = getXAxis().getVisibleRange(); double part = xVisibleRange.getLength() / getZoomFactor(); double start = xVisibleRange.getMiddle() - part / 2D; double end = xVisibleRange.getMiddle() + part / 2D; IlvDataInterval xRange = new IlvDataInterval(start, end); IlvDataInterval autoCalculatedYRange = AutoYZoomInteractor.getYDataRange(getChart(), 0, xRange); return new IlvDataWindow(xRange, autoCalculatedYRange); } public void axisRangeChanged(AxisRangeEvent axisRangeEvent) { if (!axisRangeEvent.isAboutToChangeEvent()){ if (getZoomFactor() > 1.0) { IlvDataWindow windowToZoom = calcWindowToZoom(); setEnabled(AutoYZoomInteractor.moreThanMinPointInRange(windowToZoom, getChart())); }else{ super.computeEnabled(); } } } public void axisChanged(AxisChangeEvent axisChangeEvent) { //nothing } }