
package com.github.mikephil.charting.charts;

import android.content.Context;
import android.util.AttributeSet;

import com.github.mikephil.charting.data.ScatterData;
import com.github.mikephil.charting.interfaces.ScatterDataProvider;
import com.github.mikephil.charting.renderer.ScatterChartRenderer;

/**
 * The ScatterChart. Draws dots, triangles, squares and custom shapes into the
 * Chart-View. CIRCLE and SCQUARE offer the best performance, TRIANGLE has the
 * worst performance.
 * 
 * @author Philipp Jahoda
 */
public class ScatterChart extends BarLineChartBase<ScatterData> implements ScatterDataProvider {

    /**
     * enum that defines the shape that is drawn where the values are, CIRCLE
     * and SCQUARE offer the best performance, TRIANGLE has the worst
     * performance.
     */
    public enum ScatterShape {
        CROSS, TRIANGLE, CIRCLE, SQUARE
    }

    public ScatterChart(Context context) {
        super(context);
    }

    public ScatterChart(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ScatterChart(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void init() {
        super.init();

        mRenderer = new ScatterChartRenderer(this, mAnimator, mViewPortHandler);
        mXChartMin = -0.5f;
    }

    // @Override
    // protected void calculateOffsets() {
    // super.calculateOffsets();
    //
    // float offset = mData.getGreatestShapeSize() / 2f;
    // mViewPortHandler.restrainViewPort(mViewPortHandler.offsetLeft() - offset,
    // mViewPortHandler.offsetTop(), mViewPortHandler.offsetRight() - offset,
    // mViewPortHandler.offsetBottom());
    //
    // prepareOffsetMatrix();
    // }

    @Override
    protected void calcMinMax() {
        super.calcMinMax();

        if (mDeltaX == 0 && mData.getYValCount() > 0)
            mDeltaX = 1;

        mXChartMax += 0.5f;
        mDeltaX = Math.abs(mXChartMax - mXChartMin);
    }

    /**
     * Returns all possible predefined ScatterShapes.
     * 
     * @return
     */
    public static ScatterShape[] getAllPossibleShapes() {
        return new ScatterShape[] {
                ScatterShape.SQUARE, ScatterShape.CIRCLE, ScatterShape.TRIANGLE, ScatterShape.CROSS
        };
    }

    public ScatterData getScatterData() {
        return mData;
    };
}
