package com.github.mikephil.charting.highlight;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarLineScatterCandleBubbleData;
import com.github.mikephil.charting.data.ChartData;
import com.github.mikephil.charting.data.DataSet;
import com.github.mikephil.charting.interfaces.dataprovider.BarDataProvider;
import com.github.mikephil.charting.interfaces.dataprovider.CombinedDataProvider;
import com.github.mikephil.charting.interfaces.datasets.IDataSet;
import java.util.List;
/**
* Created by Philipp Jahoda on 12/09/15.
*/
public class CombinedHighlighter extends ChartHighlighter<CombinedDataProvider> implements IHighlighter
{
/**
* bar highlighter for supporting stacked highlighting
*/
protected BarHighlighter barHighlighter;
public CombinedHighlighter(CombinedDataProvider chart, BarDataProvider barChart) {
super(chart);
// if there is BarData, create a BarHighlighter
barHighlighter = barChart.getBarData() == null ? null : new BarHighlighter(barChart);
}
@Override
protected List<Highlight> getHighlightsAtXValue(float xVal, float x, float y) {
mHighlightBuffer.clear();
List<BarLineScatterCandleBubbleData> dataObjects = mChart.getCombinedData().getAllData();
for (int i = 0; i < dataObjects.size(); i++) {
ChartData dataObject = dataObjects.get(i);
// in case of BarData, let the BarHighlighter take over
if (barHighlighter != null && dataObject instanceof BarData) {
Highlight high = barHighlighter.getHighlight(x, y);
if (high != null) {
high.setDataIndex(i);
mHighlightBuffer.add(high);
}
} else {
for (int j = 0, dataSetCount = dataObject.getDataSetCount(); j < dataSetCount; j++) {
IDataSet dataSet = dataObjects.get(i).getDataSetByIndex(j);
// don't include datasets that cannot be highlighted
if (!dataSet.isHighlightEnabled())
continue;
List<Highlight> highs = buildHighlights(dataSet, j, xVal, DataSet.Rounding.CLOSEST);
for (Highlight high : highs)
{
high.setDataIndex(i);
mHighlightBuffer.add(high);
}
}
}
}
return mHighlightBuffer;
}
// protected Highlight getClosest(float x, float y, Highlight... highs) {
//
// Highlight closest = null;
// float minDistance = Float.MAX_VALUE;
//
// for (Highlight high : highs) {
//
// if (high == null)
// continue;
//
// float tempDistance = getDistance(x, y, high.getXPx(), high.getYPx());
//
// if (tempDistance < minDistance) {
// minDistance = tempDistance;
// closest = high;
// }
// }
//
// return closest;
// }
}