⛏️ index : haiku.git

/*
 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
 * Distributed under the terms of the MIT License.
 */
#ifndef LINE_CHART_RENDERER_H
#define LINE_CHART_RENDERER_H

#include <InterfaceDefs.h>
#include <Rect.h>

#include <ObjectList.h>

#include "chart/ChartDataRange.h"
#include "chart/ChartRenderer.h"


class BView;


class LineChartRenderer : public ChartRenderer {
public:
	class DataSourceConfig;

public:
								LineChartRenderer();
	virtual						~LineChartRenderer();

	virtual	bool				AddDataSource(ChartDataSource* dataSource,
									int32 index,
									ChartRendererDataSourceConfig* config);
	virtual	void				RemoveDataSource(ChartDataSource* dataSource);

	virtual	void				SetFrame(const BRect& frame);
	virtual	void				SetDomain(const ChartDataRange& domain);
	virtual	void				SetRange(const ChartDataRange& range);

	virtual	void				Render(BView* view, BRect updateRect);

private:
			struct DataSourceInfo;

			typedef BObjectList<DataSourceInfo> DataSourceList;

private:
			void				_InvalidateSamples();
			bool				_UpdateSamples();

private:
			DataSourceList		fDataSources;
			BRect				fFrame;
			ChartDataRange		fDomain;
			ChartDataRange		fRange;
};


class LineChartRendererDataSourceConfig : public ChartRendererDataSourceConfig {
public:
								LineChartRendererDataSourceConfig();
								LineChartRendererDataSourceConfig(
									const rgb_color& color);
	virtual						~LineChartRendererDataSourceConfig();

			const rgb_color&	Color() const;
			void				SetColor(const rgb_color& color);

private:
			rgb_color			fColor;
};


#endif	// LINE_CHART_RENDERER_H