All Downloads are FREE. Search and download functionalities are using the official Maven repository.

lecho.lib.hellocharts.model.BubbleChartData Maven / Gradle / Ivy

The newest version!
package lecho.lib.hellocharts.model;

import java.util.ArrayList;
import java.util.List;

import lecho.lib.hellocharts.formatter.BubbleChartValueFormatter;
import lecho.lib.hellocharts.formatter.SimpleBubbleChartValueFormatter;
import lecho.lib.hellocharts.view.Chart;

/**
 * Data for BubbleChart.
 */
public class BubbleChartData extends AbstractChartData {
    public static final int DEFAULT_MIN_BUBBLE_RADIUS_DP = 6;
    public static final float DEFAULT_BUBBLE_SCALE = 1f;
    private BubbleChartValueFormatter formatter = new SimpleBubbleChartValueFormatter();
    private boolean hasLabels = false;
    private boolean hasLabelsOnlyForSelected = false;
    private int minBubbleRadius = DEFAULT_MIN_BUBBLE_RADIUS_DP;
    private float bubbleScale = DEFAULT_BUBBLE_SCALE;
    // TODO: consider Collections.emptyList()
    private List values = new ArrayList();

    public BubbleChartData() {
    }

    public BubbleChartData(List values) {
        setValues(values);
    }

    /**
     * Copy constructor for deep copy.
     */
    public BubbleChartData(BubbleChartData data) {
        super(data);
        this.formatter = data.formatter;
        this.hasLabels = data.hasLabels;
        this.hasLabelsOnlyForSelected = data.hasLabelsOnlyForSelected;
        this.minBubbleRadius = data.minBubbleRadius;
        this.bubbleScale = data.bubbleScale;

        for (BubbleValue bubbleValue : data.getValues()) {
            this.values.add(new BubbleValue(bubbleValue));
        }
    }

    public static BubbleChartData generateDummyData() {
        final int numValues = 4;
        BubbleChartData data = new BubbleChartData();
        List values = new ArrayList(numValues);
        values.add(new BubbleValue(0, 20, 15000));
        values.add(new BubbleValue(3, 22, 20000));
        values.add(new BubbleValue(5, 25, 5000));
        values.add(new BubbleValue(7, 30, 30000));
        values.add(new BubbleValue(11, 22, 10));
        data.setValues(values);
        return data;
    }

    @Override
    public void update(float scale) {
        for (BubbleValue value : values) {
            value.update(scale);
        }
    }

    @Override
    public void finish() {
        for (BubbleValue value : values) {
            value.finish();
        }
    }

    public List getValues() {
        return values;
    }

    public BubbleChartData setValues(List values) {
        if (null == values) {
            this.values = new ArrayList();
        } else {
            this.values = values;
        }
        return this;
    }

    public boolean hasLabels() {
        return hasLabels;
    }

    public BubbleChartData setHasLabels(boolean hasLabels) {
        this.hasLabels = hasLabels;
        if (hasLabels) {
            hasLabelsOnlyForSelected = false;
        }
        return this;
    }

    /**
     * @see #setHasLabelsOnlyForSelected(boolean)
     */
    public boolean hasLabelsOnlyForSelected() {
        return hasLabelsOnlyForSelected;
    }

    /**
     * Set true if you want to show value labels only for selected value, works best when chart has
     * isValueSelectionEnabled set to true {@link Chart#setValueSelectionEnabled(boolean)}.
     */
    public BubbleChartData setHasLabelsOnlyForSelected(boolean hasLabelsOnlyForSelected) {
        this.hasLabelsOnlyForSelected = hasLabelsOnlyForSelected;
        if (hasLabelsOnlyForSelected) {
            this.hasLabels = false;
        }
        return this;
    }

    /**
     * Returns minimal bubble radius in dp.
     *
     * @see #setMinBubbleRadius(int)
     */
    public int getMinBubbleRadius() {
        return minBubbleRadius;
    }

    /**
     * Set minimal bubble radius in dp, helpful when you want small bubbles(bubbles with very small z values compared to
     * other bubbles) to be visible on chart, default 6dp
     */
    public void setMinBubbleRadius(int minBubbleRadius) {
        this.minBubbleRadius = minBubbleRadius;
    }

    /**
     * Returns bubble scale which is used to adjust bubble size.
     *
     * @see #setBubbleScale(float)
     */
    public float getBubbleScale() {
        return bubbleScale;
    }

    /**
     * Set bubble scale which is used to adjust bubble size. If you want smaller bubbles set scale {@code <0, 1>},
     * if you want bigger bubbles set scale greater than 1, default is 1.0f.
     */
    public void setBubbleScale(float bubbleScale) {
        this.bubbleScale = bubbleScale;
    }

    public BubbleChartValueFormatter getFormatter() {
        return formatter;
    }

    public BubbleChartData setFormatter(BubbleChartValueFormatter formatter) {
        if (null != formatter) {
            this.formatter = formatter;
        }
        return this;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy