TAChart: Extract DrawIfActive and AfterAdd procedures. Minor style fixes.

patch by: Alexander Klenin
part 1 of issue #13163

git-svn-id: trunk@18670 -
This commit is contained in:
vincents 2009-02-13 20:45:43 +00:00
parent 84bfb63537
commit eb20e8d8cd
2 changed files with 45 additions and 32 deletions

View File

@ -184,8 +184,10 @@ type
procedure UpdateBounds(
var ANumPoints: Integer; var AXMin, AYMin, AXMax, AYMax: Double);
virtual; abstract;
procedure AfterAdd; virtual;
public
function Count: Integer; virtual; abstract;
procedure DrawIfActive(ACanvas: TCanvas); virtual; abstract;
property SeriesColor: TColor read FSeriesColor write FSeriesColor default clTAColor;
end;
@ -297,7 +299,7 @@ type
procedure DrawAxis(ACanvas: TCanvas; ARect: TRect);
procedure DrawLegend(ACanvas: TCanvas; ARect: TRect);
procedure AddSerie(Serie: TComponent);
procedure AddSerie(ASerie: TBasicChartSeries);
procedure DeleteSerie(Serie: TComponent);
function GetSerie(AIndex: Integer): TComponent;
procedure SetAutoXMin(Auto: Boolean);
@ -395,6 +397,8 @@ const
MinDouble = -1.7e308;
MaxDouble = 1.7e308;
{ TChartPen }
procedure TChartPen.SetVisible(Value: Boolean);
begin
FVisible := Value;
@ -409,7 +413,7 @@ begin
inherited Assign( Source );
end;
///////////////////////////////////////////////////////////////////////////////
{ TChartAxis }
constructor TChartAxis.Create(AOwner: TCustomChart);
begin
@ -467,7 +471,7 @@ begin
FOwner.invalidate;
end;
///////////////////////////////////////////////////////////////////////////////
{ TChartAxisTitle }
constructor TChartAxisTitle.Create(AOwner: TCustomChart);
begin
@ -517,7 +521,7 @@ begin
inherited Assign(Source);
end;
///////////////////////////////////////////////////////////////////////////////
{ TChartLegend }
constructor TChartLegend.Create(AOwner: TCustomChart);
begin
@ -580,7 +584,7 @@ begin
FOwner.Invalidate;
end;
////////////////////////////////////////////////////////////////////////////////
{ TChartTitle }
constructor TChartTitle.Create(AOwner: TCustomChart);
begin
@ -665,6 +669,7 @@ begin
FOwner.Invalidate;
end;
{ TChart }
constructor TChart.Create(AOwner: TComponent);
begin
@ -1234,29 +1239,22 @@ begin
FGraphBrush.Assign(Value);
end;
procedure TChart.AddSerie(Serie: TComponent);
procedure TChart.AddSerie(ASerie: TBasicChartSeries);
begin
if FShowVerticalReticule then DrawVerticalReticule(Canvas, XVMarkOld);
if FShowReticule then DrawReticule(Canvas, XMarkOld, YMarkOld);
//disable axis when we have TPie series
if Serie is TPieSeries then begin
LeftAxis.Visible := false;
BottomAxis.Visible := false;
end;
Series.Add(Serie);
TBasicChartSeries(Serie).ParentChart := Self;
Series.Add(ASerie);
ASerie.ParentChart := Self;
ASerie.AfterAdd;
end;
procedure TChart.DeleteSerie(Serie: TComponent);
var
i: Integer;
MySerie: TComponent;
begin
i := 0;
while i < SeriesCount do begin
MySerie := Series[i];
if Serie = MySerie then begin
if Serie = Series[i] then begin
Series.Delete(i);
Invalidate;
end
@ -1560,12 +1558,9 @@ begin
PaintOnCanvas(ACanvas, Rect);
end;
procedure TChart.DisplaySeries(ACanvas: TCanvas);
var
i: Integer;
Serie: TChartSeries;
begin
if FSeries.Count = 0 then exit;
@ -1573,11 +1568,8 @@ begin
IntersectClipRect(ACanvas.Handle, XImageMin, YImageMax, XImageMax, YImageMin);
// Update all series
for i := 0 to FSeries.Count-1 do begin
Serie:= TChartSeries( Series[i] );
if Serie.Active then
Serie.Draw(ACanvas);
end;
for i := 0 to FSeries.Count - 1 do
TBasicChartSeries(Series[i]).DrawIfActive(ACanvas);
//now disable clipping
SelectClipRgn(ACanvas.Handle, 0);
@ -1712,7 +1704,7 @@ begin
end;
end;
procedure TChart.DrawReticule(ACanvas : TCanvas; X, Y: Integer);
procedure TChart.DrawReticule(ACanvas: TCanvas; X, Y: Integer);
begin
ACanvas.Pen.Style := psSolid;
ACanvas.Pen.Mode := pmXor;
@ -1936,12 +1928,19 @@ begin
Invalidate;
end;
{ TBasicChartSeries }
procedure TBasicChartSeries.AfterAdd;
begin
end;
procedure Register;
begin
RegisterComponents('Additional', [TChart]);
end;
{$IFDEF fpc}
initialization
{$I tagraph.lrs}
{$ENDIF}

View File

@ -92,8 +92,6 @@ type
var ANumPoints: Integer; var AXMin, AYMin, AXMax, AYMax: Double); override;
procedure UpdateParentChart;
public
procedure Draw(ACanvas: TCanvas); virtual; abstract;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@ -104,6 +102,8 @@ type
property Title: String read FTitle write FTitle;
function Count: Integer; override;
procedure Draw(ACanvas: TCanvas); virtual; abstract;
procedure DrawIfActive(ACanvas: TCanvas); override;
function AddXY(X, Y: Double; XLabel: String; Color: TColor): Longint; virtual;
function Add(AValue: Double; XLabel: String; Color: TColor): Longint; virtual;
procedure Delete(Index: Integer); virtual;
@ -195,6 +195,7 @@ type
procedure DrawLegend(ACanvas: TCanvas; const ARect: TRect); override;
function GetLegendCount: Integer; override;
function GetLegendWidth(ACanvas: TCanvas): Integer; override;
procedure AfterAdd; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@ -363,6 +364,12 @@ begin
inherited Destroy;
end;
procedure TChartSeries.DrawIfActive(ACanvas: TCanvas);
begin
if Active then
Draw(ACanvas);
end;
procedure TChartSeries.DrawLegend(ACanvas: TCanvas; const ARect: TRect);
begin
ACanvas.TextOut(ARect.Right + 3, ARect.Top, Title);
@ -497,7 +504,7 @@ begin
UpdateParentChart;
end;
////////////////////////////////////////////////////////////////////////////////
{ TSeriesPointer }
procedure TSeriesPointer.SetVisible(Value: Boolean);
begin
@ -626,7 +633,7 @@ begin
inherited Assign(Source);
end;
////////////////////////////////////////////////////////////////////////////////
{ TSerie }
constructor TSerie.Create(AOwner: TComponent);
begin
@ -1188,9 +1195,9 @@ begin
bx2 := topX+(barWidth div 2);
by2 := bottomY;
}
bx1 := topX - (TotalbarWidth div 2) + myPos * barWidth;
bx1 := topX - (totalbarWidth div 2) + myPos * barWidth;
by1 := topY;
bx2 := topX - (TotalbarWidth div 2) + myPos * barWidth + barWidth;
bx2 := topX - (totalbarWidth div 2) + myPos * barWidth + barWidth;
by2 := bottomY;
//FIXME only draw if bar inside image coord (get a better way of doing this)
@ -1270,6 +1277,13 @@ begin
UpdateParentChart;
end;
procedure TPieSeries.AfterAdd;
begin
// disable axis when we have TPie series
ParentChart.LeftAxis.Visible := false;
ParentChart.BottomAxis.Visible := false;
end;
function TPieSeries.AddPie(Value: Double; Text: String; Color: TColor): Longint;
begin
Result := AddXY(getXMinVal + 1, Value, Text, Color);