/** * Copyright (C) 2009, 2010 SC 4ViewSoft SRL * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.achartengine.renderer; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import android.graphics.Color; import android.graphics.Typeface; /** * An abstract renderer to be extended by the multiple series classes. */ public class DefaultRenderer implements Serializable { /** The chart title. */ private String mChartTitle = ""; /** The chart title text size. */ private float mChartTitleTextSize = 15; /** A no color constant. */ public static final int NO_COLOR = 0; /** The default background color. */ public static final int BACKGROUND_COLOR = Color.BLACK; /** The default color for text. */ public static final int TEXT_COLOR = Color.LTGRAY; /** A text font for regular text, like the chart labels. */ private static final Typeface REGULAR_TEXT_FONT = Typeface .create(Typeface.SERIF, Typeface.NORMAL); /** The typeface name for the texts. */ private String mTextTypefaceName = REGULAR_TEXT_FONT.toString(); /** The typeface style for the texts. */ private int mTextTypefaceStyle = Typeface.NORMAL; /** The chart background color. */ private int mBackgroundColor; /** If the background color is applied. */ private boolean mApplyBackgroundColor; /** If the axes are visible. */ private boolean mShowAxes = true; /** The axes color. */ private int mAxesColor = TEXT_COLOR; /** If the labels are visible. */ private boolean mShowLabels = true; /** The labels color. */ private int mLabelsColor = TEXT_COLOR; /** The labels text size. */ private float mLabelsTextSize = 10; /** If the legend is visible. */ private boolean mShowLegend = true; /** The legend text size. */ private float mLegendTextSize = 12; /** If the legend should size to fit. */ private boolean mFitLegend = false; /** If the grid should be displayed. */ private boolean mShowGrid = false; /** If the custom text grid should be displayed. */ private boolean mShowCustomTextGrid = false; /** The simple renderers that are included in this multiple series renderer. */ private List<SimpleSeriesRenderer> mRenderers = new ArrayList<SimpleSeriesRenderer>(); /** The antialiasing flag. */ private boolean mAntialiasing = true; /** The legend height. */ private int mLegendHeight = 0; /** The margins size. */ private int[] mMargins = new int[] { 20, 30, 10, 20 }; /** A value to be used for scaling the chart. */ private float mScale = 1; /** A flag for enabling the pan. */ private boolean mPanEnabled = true; /** A flag for enabling the zoom. */ private boolean mZoomEnabled = true; /** A flag for enabling the visibility of the zoom buttons. */ private boolean mZoomButtonsVisible = false; /** The zoom rate. */ private float mZoomRate = 1.5f; /** A flag for enabling the external zoom. */ private boolean mExternalZoomEnabled = false; /** The original chart scale. */ private float mOriginalScale = mScale; /** A flag for enabling the click on elements. */ private boolean mClickEnabled = false; /** The selectable radius around a clickable point. */ private int selectableBuffer = 15; /** * A flag to be set if the chart is inside a scroll and doesn't need to shrink * when not enough space. */ private boolean mInScroll; /** The start angle for circular charts such as pie, doughnut, etc. */ private float mStartAngle = 0; /** True if the legend should be shown in grayscale*/ private boolean mLegendGrayscale; /** * Returns the chart title. * * @return the chart title */ public String getChartTitle() { return mChartTitle; } /** * Sets the chart title. * * @param title the chart title */ public void setChartTitle(String title) { mChartTitle = title; } /** * Returns the chart title text size. * * @return the chart title text size */ public float getChartTitleTextSize() { return mChartTitleTextSize; } /** * Sets the chart title text size. * * @param textSize the chart title text size */ public void setChartTitleTextSize(float textSize) { mChartTitleTextSize = textSize; } /** * Adds a simple renderer to the multiple renderer. * * @param renderer the renderer to be added */ public void addSeriesRenderer(SimpleSeriesRenderer renderer) { mRenderers.add(renderer); } /** * Adds a simple renderer to the multiple renderer. * * @param index the index in the renderers list * @param renderer the renderer to be added */ public void addSeriesRenderer(int index, SimpleSeriesRenderer renderer) { mRenderers.add(index, renderer); } /** * Removes a simple renderer from the multiple renderer. * * @param renderer the renderer to be removed */ public void removeSeriesRenderer(SimpleSeriesRenderer renderer) { mRenderers.remove(renderer); } /** * Clears all renderers */ public void clearSeriesRenderers() { mRenderers.clear(); } /** * Returns the simple renderer from the multiple renderer list. * * @param index the index in the simple renderers list * @return the simple renderer at the specified index */ public SimpleSeriesRenderer getSeriesRendererAt(int index) { return mRenderers.get(index); } /** * Returns the simple renderers count in the multiple renderer list. * * @return the simple renderers count */ public int getSeriesRendererCount() { return mRenderers.size(); } /** * Returns an array of the simple renderers in the multiple renderer list. * * @return the simple renderers array */ public SimpleSeriesRenderer[] getSeriesRenderers() { return mRenderers.toArray(new SimpleSeriesRenderer[0]); } /** * Returns the background color. * * @return the background color */ public int getBackgroundColor() { return mBackgroundColor; } /** * Sets the background color. * * @param color the background color */ public void setBackgroundColor(int color) { mBackgroundColor = color; } /** * Returns if the background color should be applied. * * @return the apply flag for the background color. */ public boolean isApplyBackgroundColor() { return mApplyBackgroundColor; } /** * Sets if the background color should be applied. * * @param apply the apply flag for the background color */ public void setApplyBackgroundColor(boolean apply) { mApplyBackgroundColor = apply; } /** * Returns the axes color. * * @return the axes color */ public int getAxesColor() { return mAxesColor; } /** * Sets the axes color. * * @param color the axes color */ public void setAxesColor(int color) { mAxesColor = color; } /** * Returns the labels color. * * @return the labels color */ public int getLabelsColor() { return mLabelsColor; } /** * Sets the labels color. * * @param color the labels color */ public void setLabelsColor(int color) { mLabelsColor = color; } /** * Returns the labels text size. * * @return the labels text size */ public float getLabelsTextSize() { return mLabelsTextSize; } /** * Sets the labels text size. * * @param textSize the labels text size */ public void setLabelsTextSize(float textSize) { mLabelsTextSize = textSize; } /** * Returns if the axes should be visible. * * @return the visibility flag for the axes */ public boolean isShowAxes() { return mShowAxes; } /** * Sets if the axes should be visible. * * @param showAxes the visibility flag for the axes */ public void setShowAxes(boolean showAxes) { mShowAxes = showAxes; } /** * Returns if the labels should be visible. * * @return the visibility flag for the labels */ public boolean isShowLabels() { return mShowLabels; } /** * Sets if the labels should be visible. * * @param showLabels the visibility flag for the labels */ public void setShowLabels(boolean showLabels) { mShowLabels = showLabels; } /** * Returns if the grid should be visible. * * @return the visibility flag for the grid */ public boolean isShowGrid() { return mShowGrid; } /** * Sets if the grid should be visible. * * @param showGrid the visibility flag for the grid */ public void setShowGrid(boolean showGrid) { mShowGrid = showGrid; } /** * Returns if the grid should be visible for custom X or Y labels. * * @return the visibility flag for the custom text grid */ public boolean isShowCustomTextGrid() { return mShowCustomTextGrid; } /** * Sets if the grid for custom X or Y labels should be visible. * * @param showGrid the visibility flag for the custom text grid */ public void setShowCustomTextGrid(boolean showGrid) { mShowCustomTextGrid = showGrid; } /** * Returns if the legend should be visible. * * @return the visibility flag for the legend */ public boolean isShowLegend() { return mShowLegend; } /** * Sets if the legend should be visible. * * @param showLegend the visibility flag for the legend */ public void setShowLegend(boolean showLegend) { mShowLegend = showLegend; } /** * Returns if the legend should size to fit. * * @return the fit behavior */ public boolean isFitLegend() { return mFitLegend; } /** * Sets if the legend should size to fit. * * @param fit the fit behavior */ public void setFitLegend(boolean fit) { mFitLegend = fit; } /** * Returns the text typeface name. * * @return the text typeface name */ public String getTextTypefaceName() { return mTextTypefaceName; } /** * Returns the text typeface style. * * @return the text typeface style */ public int getTextTypefaceStyle() { return mTextTypefaceStyle; } /** * Returns the legend text size. * * @return the legend text size */ public float getLegendTextSize() { return mLegendTextSize; } /** * Sets the legend text size. * * @param textSize the legend text size */ public void setLegendTextSize(float textSize) { mLegendTextSize = textSize; } /** * Sets the text typeface name and style. * * @param typefaceName the text typeface name * @param style the text typeface style */ public void setTextTypeface(String typefaceName, int style) { mTextTypefaceName = typefaceName; mTextTypefaceStyle = style; } /** * Returns the antialiasing flag value. * * @return the antialiasing value */ public boolean isAntialiasing() { return mAntialiasing; } /** * Sets the antialiasing value. * * @param antialiasing the antialiasing */ public void setAntialiasing(boolean antialiasing) { mAntialiasing = antialiasing; } /** * Returns the value to be used for scaling the chart. * * @return the scale value */ public float getScale() { return mScale; } /** * Returns the original value to be used for scaling the chart. * * @return the original scale value */ public float getOriginalScale() { return mOriginalScale; } /** * Sets the value to be used for scaling the chart. It works on some charts * like pie, doughnut, dial. * * @param scale the scale value */ public void setScale(float scale) { mScale = scale; } /** * Returns the enabled state of the zoom. * * @return if zoom is enabled */ public boolean isZoomEnabled() { return mZoomEnabled; } /** * Sets the enabled state of the zoom. * * @param enabled zoom enabled */ public void setZoomEnabled(boolean enabled) { mZoomEnabled = enabled; } /** * Returns the visible state of the zoom buttons. * * @return if zoom buttons are visible */ public boolean isZoomButtonsVisible() { return mZoomButtonsVisible; } /** * Sets the visible state of the zoom buttons. * * @param visible if the zoom buttons are visible */ public void setZoomButtonsVisible(boolean visible) { mZoomButtonsVisible = visible; } /** * Returns the enabled state of the external (application implemented) zoom. * * @return if external zoom is enabled */ public boolean isExternalZoomEnabled() { return mExternalZoomEnabled; } /** * Sets the enabled state of the external (application implemented) zoom. * * @param enabled external zoom enabled */ public void setExternalZoomEnabled(boolean enabled) { mExternalZoomEnabled = enabled; } /** * Returns the zoom rate. * * @return the zoom rate */ public float getZoomRate() { return mZoomRate; } /** * Returns the enabled state of the pan. * * @return if pan is enabled */ public boolean isPanEnabled() { return mPanEnabled; } /** * Sets the enabled state of the pan. * * @param enabled pan enabled */ public void setPanEnabled(boolean enabled) { mPanEnabled = enabled; } /** * Sets the zoom rate. * * @param rate the zoom rate */ public void setZoomRate(float rate) { mZoomRate = rate; } /** * Returns the enabled state of the click. * * @return if click is enabled */ public boolean isClickEnabled() { return mClickEnabled; } /** * Sets the enabled state of the click. * * @param enabled click enabled */ public void setClickEnabled(boolean enabled) { mClickEnabled = enabled; } /** * Returns the selectable radius value around clickable points. * * @return the selectable radius */ public int getSelectableBuffer() { return selectableBuffer; } /** * Sets the selectable radius value around clickable points. * * @param buffer the selectable radius */ public void setSelectableBuffer(int buffer) { selectableBuffer = buffer; } /** * Returns the legend height. * * @return the legend height */ public int getLegendHeight() { return mLegendHeight; } /** * Sets the legend height, in pixels. * * @param height the legend height */ public void setLegendHeight(int height) { mLegendHeight = height; } /** * Returns the margin sizes. An array containing the margins in this order: * top, left, bottom, right * * @return the margin sizes */ public int[] getMargins() { return mMargins; } /** * Sets the margins, in pixels. * * @param margins an array containing the margin size values, in this order: * top, left, bottom, right */ public void setMargins(int[] margins) { mMargins = margins; } /** * Returns if the chart is inside a scroll view and doesn't need to shrink. * * @return if it is inside a scroll view */ public boolean isInScroll() { return mInScroll; } /** * To be set if the chart is inside a scroll view and doesn't need to shrink * when not enough space. * * @param inScroll if it is inside a scroll view */ public void setInScroll(boolean inScroll) { mInScroll = inScroll; } /** * Returns the start angle for circular charts such as pie, doughnut. An * angle of 0 degrees correspond to the geometric angle of 0 degrees (3 * o'clock on a watch.) * * @return the start angle */ public float getStartAngle() { return mStartAngle; } /** * Sets the start angle for circular charts such as pie, doughnut, etc. An * angle of 0 degrees correspond to the geometric angle of 0 degrees (3 * o'clock on a watch.) * * @param startAngle the start angle */ public void setStartAngle(float startAngle) { mStartAngle = startAngle; } public boolean isLegendGrayscale() { return mLegendGrayscale; } public void setLegendGrayscale(boolean grayscale) { mLegendGrayscale = grayscale; } }