* Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef LEGEND_CHART_AXIS_H
#define LEGEND_CHART_AXIS_H
#include <ObjectList.h>
#include "chart/ChartAxis.h"
#include "chart/ChartDataRange.h"
class ChartAxisLegendSource;
class ChartLegendRenderer;
class LegendChartAxis : public ChartAxis {
public:
LegendChartAxis(
ChartAxisLegendSource* legendSource,
ChartLegendRenderer* legendRenderer);
virtual ~LegendChartAxis();
virtual void SetLocation(ChartAxisLocation location);
virtual void SetRange(const ChartDataRange& range);
virtual void SetFrame(BRect frame);
virtual BSize PreferredSize(BView* view, BSize maxSize);
virtual void Render(BView* view, BRect updateRect);
private:
struct LegendInfo;
typedef BObjectList<LegendInfo, true> LegendList;
private:
void _InvalidateLayout();
bool _ValidateLayout(BView* view);
int32 _EstimateMaxLegendCount(BView* view, BSize size,
float* _hSpacing, float* _vSpacing);
inline float _LegendPosition(double value, float legendSize,
float totalSize, double scale);
inline void _FilterLegends(int32 totalSize, int32 spacing,
float BSize::* sizeField);
private:
ChartAxisLegendSource* fLegendSource;
ChartLegendRenderer* fLegendRenderer;
ChartAxisLocation fLocation;
ChartDataRange fRange;
BRect fFrame;
LegendList fLegends;
float fHorizontalSpacing;
float fVerticalSpacing;
bool fLayoutValid;
};
#endif