/* * Licensed Materials - Property of Perforce Software, Inc. * © Copyright Perforce Software, Inc. 2014, 2021 * © Copyright IBM Corp. 2009, 2014 * © Copyright ILOG 1996, 2009 * All Rights Reserved. * * Note to U.S. Government Users Restricted Rights: * The Software and Documentation were developed at private expense and * are "Commercial Items" as that term is defined at 48 CFR 2.101, * consisting of "Commercial Computer Software" and * "Commercial Computer Software Documentation", as such terms are * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4, * as applicable. */ package interactor; import java.awt.event.MouseEvent; import ilog.views.chart.IlvChartDataPicker; import ilog.views.chart.IlvChartInteractor; import ilog.views.chart.IlvChartRenderer; import ilog.views.chart.IlvDefaultChartDataPicker; import ilog.views.chart.IlvDisplayPoint; /** * The abstract base class for chart data manipulation. * This class provides an interface for querying information about the data in * a chart according to a given {@link IlvChartDataPicker}. * @see ilog.views.chart.IlvChartInteractor */ public abstract class IlvChartDataInteractor extends IlvChartInteractor { // ===================== Customization, Bean Properties ===================== /** * The sensitivity used by the default data picker. */ static final int EPSILON = 5; // ------------------------------------------------------------------------- /** * The constant describing the precise item picking mode. * @see #setPickingMode * @see ilog.views.chart.IlvChart#getDisplayItem * */ public static final int ITEM_PICKING = 1; /** * The constant describing the nearest item picking mode. * @see #setPickingMode * @see ilog.views.chart.IlvChart#getNearestItem * */ public static final int NEARESTITEM_PICKING = 3; /** * The constant describing the nearest point picking mode. * @see #setPickingMode * @see ilog.views.chart.IlvChart#getNearestPoint */ public static final int NEARESTPOINT_PICKING = 2; private int _pickingMode = NEARESTPOINT_PICKING; /** * Returns the picking mode. * @see #setPickingMode */ public final int getPickingMode() { return _pickingMode; } /** * Sets the interactor picking mode. The picking mode defines how a * point is retrieved by the <code>pickData()</code> method. * If the mode is <code>ITEM_PICKING</code>, the display point is retrieved * by calling {@link ilog.views.chart.IlvChart#getDisplayItem}. * If the mode is <code>NEARESTITEM_PICKING</code>, the display point is * retrieved by calling {@link ilog.views.chart.IlvChart#getNearestItem}. * If the mode is <code>NEARESTPOINT_PICKING</code>, the display point is * retrieved by calling {@link ilog.views.chart.IlvChart#getNearestPoint}. * The default value is <code>NEARESTPOINT_PICKING</code>. * @see #ITEM_PICKING * @see #NEARESTITEM_PICKING * @see #NEARESTPOINT_PICKING * @see #pickData * */ public void setPickingMode(int mode) { switch (mode) { case ITEM_PICKING: case NEARESTITEM_PICKING: case NEARESTPOINT_PICKING: break; default: throw new IllegalArgumentException("invalid mode: "+mode); } _pickingMode = mode; } // ========================== Overridable behavior ========================== /** * An <code>IlvDefaultChartDataPicker</code> subclass which filters the * renderers according to the interactor y-axis index. */ public class DataPicker extends IlvDefaultChartDataPicker { /** * Creates a new <code>IlvChartDataInteractor.DataPicker</code> object. */ public DataPicker(int pickX, int pickY, int pickDist) { super(pickX, pickY, pickDist); } /** * Tells whether the specified renderer must be considered, when * searching among several renderers. The default implementation * returns <code>true</code> if the specified renderer and this * interactor are associated with the same y-axis. */ Override public boolean accept(IlvChartRenderer r) { return IlvChartDataInteractor.this.getYAxisIndex() == r.getYAxisIdx(); } } /** * Creates a new <code>IlvChartDataPicker</code> object. By default returns * an instance of <code>IlvChartDataInteractor.DataPicker</code>. This * method is called by {@link #pickData(MouseEvent)}. * @see ilog.views.chart.IlvDefaultChartDataPicker */ protected IlvChartDataPicker createDataPicker(MouseEvent event) { return new DataPicker(event.getX(), event.getY(), EPSILON); } /** * Returns a display point corresponding to this picking event * that fulfills the default data picker criteria. This method * calls {@link #pickData(IlvChartDataPicker)}. */ protected final IlvDisplayPoint pickData(MouseEvent event) { return pickData(createDataPicker(event)); } /** * Returns a display point depending on the given data picker and the * current picking mode. * @see ilog.views.chart.IlvChartDataPicker * @see #setPickingMode */ protected IlvDisplayPoint pickData(IlvChartDataPicker picker) { switch (getPickingMode()) { case ITEM_PICKING: return getChart().getDisplayItem(picker); case NEARESTITEM_PICKING: return getChart().getNearestItem(picker, null); case NEARESTPOINT_PICKING: return getChart().getNearestPoint(picker); default: return null; } } // ============================= Constructors ============================= /** * Creates a new <code>IlvChartDataInteractor</code> object associated * with the given axis with the given action key event mask. */ public IlvChartDataInteractor(int yAxisIndex, int eventMask) { super(yAxisIndex, eventMask); } }