/*
* 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.KeyEvent;
import java.awt.event.ActionEvent;
import java.util.Locale;
import ilog.views.chart.IlvChartInteractor;
import ilog.views.chart.action.IlvChartAction;
import ilog.views.chart.action.IlvChartFitAction;
import ilog.views.chart.action.IlvChartZoomAction;
import ilog.views.util.IlvResourceUtil;
/**
* An interactor to execute simple keyboard interactions implemented
* by {@link IlvChartAction} objects. By default, this class
* associates:
* <ul>
* <li>VK_Z keycode with a zoom in action (see {@link IlvChartZoomAction}),</li>
* <li>VK_U keycode with a zoom out action (see {@link IlvChartZoomAction}),</li>
* <li>VK_F keycode with a fit action (see {@link IlvChartFitAction}).</li>
* </ul>
* <p>
* You can modify the default behavior or use your own action classes by
* overriding the <code>getAction()</code> method.
* <p>The registered name for this interactor is "ChartAction".
*/
public class IlvChartActionInteractor extends IlvChartInteractor
{
// ============================ Metainformation ============================
static {
IlvChartInteractor.register("ChartAction", IlvChartActionInteractor.class);
}
/**
* Returns a localized name for this interactor class.
*/
public static String getLocalizedName(Locale locale)
{
return IlvResourceUtil.getBundle("messages",
IlvChartActionInteractor.class,
locale)
.getString("IlvChartActionInteractor");
}
// ===================== Customization, Bean Properties =====================
/**
* The <code>actionCommand</code> string for <code>ActionEvent</code> events
* coming from the interactor.
*/
public static final String ACTION_COMMAND = "ActionInteractor";
// ========================== Key event handling ==========================
/**
* Returns an <code>IlvChartAction</code> object corresponding to the
* given event. May returns <code>null</code> if no action matches the
* event.
* <p>By default, VK_Z is associated with an <code>IlvChartZoomAction</code>
* with a zoom factor of 2, VK_U is associated with an
* <code>IlvChartZoomAction</code> with a zoom factor of .5, and VK_F is
* associated with an <code>IlvChartFitAction</code>.
* @see ilog.views.chart.action.IlvChartAction
* @see ilog.views.chart.action.IlvChartZoomAction
* @see ilog.views.chart.action.IlvChartFitAction
*/
protected IlvChartAction getAction(KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.VK_Z)
return new IlvChartZoomAction("ZoomIn", 2.);
else if (event.getKeyCode() == KeyEvent.VK_U)
return new IlvChartZoomAction("ZoomOut", .5);
else if (event.getKeyCode() == KeyEvent.VK_F)
return new IlvChartFitAction("Fit");
return null;
}
/**
* Processes the key events. This method recovers the corresponding action
* (invoking <code>getAction()</code>) and calls its
* <code>actionPerformed</code> method.
*/
Override
public void processKeyEvent(KeyEvent event)
{
if (event.getID() == KeyEvent.KEY_PRESSED) {
IlvChartAction action = getAction(event);
if (action != null) {
action.setChart(getChart());
action.actionPerformed(new ActionEvent(this,
ActionEvent.ACTION_PERFORMED,
ACTION_COMMAND));
if (isConsumeEvents())
event.consume();
}
}
}
// ============================= Constructors =============================
/**
* Creates a new <code>IlvChartActionInteractor</code> object.
*/
public IlvChartActionInteractor()
{
enableEvents(KeyEvent.KEY_EVENT_MASK);
}
}