1 /* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef LEGEND_CHART_AXIS_H 6 #define LEGEND_CHART_AXIS_H 7 8 #include <ObjectList.h> 9 10 #include "chart/ChartAxis.h" 11 #include "chart/ChartDataRange.h" 12 13 14 class ChartAxisLegendSource; 15 class ChartLegendRenderer; 16 17 18 class LegendChartAxis : public ChartAxis { 19 public: 20 LegendChartAxis( 21 ChartAxisLegendSource* legendSource, 22 ChartLegendRenderer* legendRenderer); 23 virtual ~LegendChartAxis(); 24 25 virtual void SetLocation(ChartAxisLocation location); 26 virtual void SetRange(const ChartDataRange& range); 27 virtual void SetFrame(BRect frame); 28 virtual BSize PreferredSize(BView* view, BSize maxSize); 29 virtual void Render(BView* view, BRect updateRect); 30 31 private: 32 struct LegendInfo; 33 typedef BObjectList<LegendInfo> LegendList; 34 private: 35 void _InvalidateLayout(); 36 bool _ValidateLayout(BView* view); 37 int32 _EstimateMaxLegendCount(BView* view, BSize size, 38 float* _hSpacing, float* _vSpacing); 39 inline float _LegendPosition(double value, float legendSize, 40 float totalSize, double scale); 41 inline void _FilterLegends(int32 totalSize, int32 spacing, 42 float BSize::* sizeField); 43 44 private: 45 ChartAxisLegendSource* fLegendSource; 46 ChartLegendRenderer* fLegendRenderer; 47 ChartAxisLocation fLocation; 48 ChartDataRange fRange; 49 BRect fFrame; 50 LegendList fLegends; 51 float fHorizontalSpacing; 52 float fVerticalSpacing; 53 bool fLayoutValid; 54 }; 55 56 57 #endif // LEGEND_CHART_AXIS_H 58