package com.github.mikephil.charting.data;
import com.github.mikephil.charting.interfaces.datasets.IPieDataSet;
import com.github.mikephil.charting.utils.Utils;
import java.util.ArrayList;
import java.util.List;
public class PieDataSet extends DataSet<PieEntry> implements IPieDataSet {
/** the space in pixels between the chart-slices, default 0f */
private float mSliceSpace = 0f;
private boolean mAutomaticallyDisableSliceSpacing;
/** indicates the selection distance of a pie slice */
private float mShift = 18f;
private ValuePosition mXValuePosition = ValuePosition.INSIDE_SLICE;
private ValuePosition mYValuePosition = ValuePosition.INSIDE_SLICE;
private int mValueLineColor = 0xff000000;
private float mValueLineWidth = 1.0f;
private float mValueLinePart1OffsetPercentage = 75.f;
private float mValueLinePart1Length = 0.3f;
private float mValueLinePart2Length = 0.4f;
private boolean mValueLineVariableLength = true;
public PieDataSet(List<PieEntry> yVals, String label) {
super(yVals, label);
// mShift = Utils.convertDpToPixel(12f);
}
@Override
public DataSet<PieEntry> copy() {
List<PieEntry> yVals = new ArrayList<>();
for (int i = 0; i < mValues.size(); i++) {
yVals.add(mValues.get(i).copy());
}
PieDataSet copied = new PieDataSet(yVals, getLabel());
copied.mColors = mColors;
copied.mSliceSpace = mSliceSpace;
copied.mShift = mShift;
return copied;
}
@Override
protected void calcMinMax(PieEntry e) {
if (e == null)
return;
calcMinMaxY(e);
}
/**
* Sets the space that is left out between the piechart-slices in dp.
* Default: 0 --> no space, maximum 20f
*
* @param spaceDp
*/
public void setSliceSpace(float spaceDp) {
if (spaceDp > 20)
spaceDp = 20f;
if (spaceDp < 0)
spaceDp = 0f;
mSliceSpace = Utils.convertDpToPixel(spaceDp);
}
@Override
public float getSliceSpace() {
return mSliceSpace;
}
/**
* When enabled, slice spacing will be 0.0 when the smallest value is going to be
* smaller than the slice spacing itself.
*
* @param autoDisable
*/
public void setAutomaticallyDisableSliceSpacing(boolean autoDisable) {
mAutomaticallyDisableSliceSpacing = autoDisable;
}
/**
* When enabled, slice spacing will be 0.0 when the smallest value is going to be
* smaller than the slice spacing itself.
*
* @return
*/
@Override
public boolean isAutomaticallyDisableSliceSpacingEnabled() {
return mAutomaticallyDisableSliceSpacing;
}
/**
* sets the distance the highlighted piechart-slice of this DataSet is
* "shifted" away from the center of the chart, default 12f
*
* @param shift
*/
public void setSelectionShift(float shift) {
mShift = Utils.convertDpToPixel(shift);
}
@Override
public float getSelectionShift() {
return mShift;
}
@Override
public ValuePosition getXValuePosition()
{
return mXValuePosition;
}
public void setXValuePosition(ValuePosition xValuePosition)
{
this.mXValuePosition = xValuePosition;
}
@Override
public ValuePosition getYValuePosition()
{
return mYValuePosition;
}
public void setYValuePosition(ValuePosition yValuePosition)
{
this.mYValuePosition = yValuePosition;
}
/** When valuePosition is OutsideSlice, indicates line color */
@Override
public int getValueLineColor()
{
return mValueLineColor;
}
public void setValueLineColor(int valueLineColor)
{
this.mValueLineColor = valueLineColor;
}
/** When valuePosition is OutsideSlice, indicates line width */
@Override
public float getValueLineWidth()
{
return mValueLineWidth;
}
public void setValueLineWidth(float valueLineWidth)
{
this.mValueLineWidth = valueLineWidth;
}
/** When valuePosition is OutsideSlice, indicates offset as percentage out of the slice size */
@Override
public float getValueLinePart1OffsetPercentage()
{
return mValueLinePart1OffsetPercentage;
}
public void setValueLinePart1OffsetPercentage(float valueLinePart1OffsetPercentage)
{
this.mValueLinePart1OffsetPercentage = valueLinePart1OffsetPercentage;
}
/** When valuePosition is OutsideSlice, indicates length of first half of the line */
@Override
public float getValueLinePart1Length()
{
return mValueLinePart1Length;
}
public void setValueLinePart1Length(float valueLinePart1Length)
{
this.mValueLinePart1Length = valueLinePart1Length;
}
/** When valuePosition is OutsideSlice, indicates length of second half of the line */
@Override
public float getValueLinePart2Length()
{
return mValueLinePart2Length;
}
public void setValueLinePart2Length(float valueLinePart2Length)
{
this.mValueLinePart2Length = valueLinePart2Length;
}
/** When valuePosition is OutsideSlice, this allows variable line length */
@Override
public boolean isValueLineVariableLength()
{
return mValueLineVariableLength;
}
public void setValueLineVariableLength(boolean valueLineVariableLength)
{
this.mValueLineVariableLength = valueLineVariableLength;
}
public enum ValuePosition {
INSIDE_SLICE,
OUTSIDE_SLICE
}
}