blob: a8436f9c9e13e5b18043bc7deb58d973be07560c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2018 Red Hat, Inc.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Red Hat - Initial API and implementation.
*******************************************************************************/
package org.eclipse.linuxtools.systemtap.graphing.ui.charts.listeners;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.events.MouseTrackAdapter;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swtchart.Chart;
/**
* An abstract listener class for displaying data values of a chart as it
* is hovered over by the mouse.
*
* Clients must override this class to specify how the listener should react
* to different kinds of mouse behaviour.
* @since 3.0
*/
public abstract class AbstractChartMouseMoveListener implements MouseMoveListener {
protected final Chart chart;
protected MouseEvent lastMouseEvent = null;
/**
* Create a listener to react to mouse movements made in the provided chart region.
* @param chart The chart that this listener is watching.
* @param hoverArea The plot area of the chart in which this listener will react
* to mouse movement.
*/
public AbstractChartMouseMoveListener(Chart chart, final Control hoverArea) {
this.chart = chart;
final MouseMoveListener thisListener = this;
hoverArea.addMouseTrackListener(new MouseTrackAdapter() {
@Override
public void mouseExit(MouseEvent e) {
hoverArea.removeMouseMoveListener(thisListener);
exit();
}
@Override
public void mouseEnter(MouseEvent e) {
hoverArea.addMouseMoveListener(thisListener);
}
});
}
/**
* This method is called whenever the mouse exits the plot area of the chart.
* It may be overridden to add extra functionality (but always include a super call).
*/
public void exit() {
lastMouseEvent = null;
}
/**
* Call this method whenever the chart gets updated, so that another mouse event can be
* fired with the new chart contents without having to explicitly move the mouse.
*/
public final void update() {
if (lastMouseEvent != null) {
mouseMove(lastMouseEvent);
}
}
/**
* Clients must override this method to perform appropriate actions whenever the
* mouse is moved while inside the chart's plot area (but always include a super call).
*/
@Override
public void mouseMove(MouseEvent e) {
lastMouseEvent = e;
}
/**
* Returns a message with details on the mouse's current position on the chart.
* This method is primarily used for testing purposes.
* @return A default String message. Clients should override this message to describe the
* data point the mouse is hovering over, or whatever other kind of information is appropriate.
* @since 3.2
*/
public String getMouseMessage() {
return ""; //$NON-NLS-1$
}
}