blob: 99abd1f47257b599110344f2d8579c8a32f68ddd [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2013, 2019 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Bernd Hufmann - Initial API and implementation
**********************************************************************/
package org.eclipse.tracecompass.tmf.ui.viewers.xycharts;
import org.eclipse.tracecompass.internal.tmf.ui.viewers.xycharts.TmfXyUiUtils;
import org.swtchart.Chart;
import org.swtchart.IAxis;
/**
* Base class for any provider such as tool tip, zoom and selection providers.
*
* @author Bernd Hufmann
*/
public abstract class TmfBaseProvider {
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
/** Reference to the chart viewer */
private final ITmfChartTimeProvider fChartViewer;
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Standard constructor.
*
* @param tmfChartViewer
* The parent histogram object
*/
public TmfBaseProvider(ITmfChartTimeProvider tmfChartViewer) {
fChartViewer = tmfChartViewer;
}
// ------------------------------------------------------------------------
// Accessors
// ------------------------------------------------------------------------
/**
* Returns the chart viewer reference.
* @return the chart viewer reference
*/
public ITmfChartTimeProvider getChartViewer() {
return fChartViewer;
}
/**
* Returns the SWT chart reference
*
* @return SWT chart reference.
*/
protected Chart getChart() {
return (Chart) fChartViewer.getControl();
}
/**
* Limits x data coordinate to window start and window end range
*
* @param x
* x to limit
* @return x if x >= begin && x <= end
* begin if x < begin
* end if x > end
*/
protected long limitXDataCoordinate(double x) {
return TmfXyUiUtils.limitXDataCoordinate(getChartViewer(), x);
}
/**
* Limits x pixel coordinate to window start and window end range
*
* @param axisIndex
* index of x-axis
* @param x
* x to limit
* @return x if x >= begin && x <= end
* begin if x < begin
* end if x > end
*/
protected int limitXPixelCoordinate(int axisIndex, int x) {
ITmfChartTimeProvider viewer = getChartViewer();
long windowStartTime = viewer.getWindowStartTime() - viewer.getTimeOffset();
long windowEndTime = viewer.getWindowEndTime() - viewer.getTimeOffset();
IAxis xAxis = getChart().getAxisSet().getXAxis(0);
int startX = xAxis.getPixelCoordinate(windowStartTime);
if (x < startX) {
return startX;
}
int endX = xAxis.getPixelCoordinate(windowEndTime);
if (x > endX) {
return endX;
}
return x;
}
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
/**
* Method deregisters provider from chart viewer. Subclasses may override this method
* to dispose any resources.
*/
public void dispose() {
deregister();
}
/**
* Method to refresh the viewer. It will redraw the viewer.
*/
public void refresh() {
if (!TmfXYChartViewer.getDisplay().isDisposed()) {
TmfXYChartViewer.getDisplay().asyncExec(() -> {
if (!getChart().isDisposed()) {
getChart().redraw();
}
});
}
}
/**
* Method to register the provider to chart viewer.
*/
protected abstract void register();
/**
* Method to deregister the provider from chart viewer.
*/
protected abstract void deregister();
}