From 38164a5dd7a5cdfa0c3f7b2eab55045aa9b92f0f Mon Sep 17 00:00:00 2001 From: ask Date: Tue, 5 Jun 2012 08:47:48 +0000 Subject: [PATCH] TAChart: Add per-style legend items git-svn-id: trunk@37528 - --- components/tachart/tacustomseries.pas | 16 ++++++++++++++++ components/tachart/talegend.pas | 2 +- components/tachart/taseries.pas | 13 ++++++++++--- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/components/tachart/tacustomseries.pas b/components/tachart/tacustomseries.pas index 4422232c4b..c4da2410b4 100644 --- a/components/tachart/tacustomseries.pas +++ b/components/tachart/tacustomseries.pas @@ -77,6 +77,7 @@ type strict protected function GetIndex: Integer; override; function LegendTextSingle: String; + function LegendTextStyle(AStyle: TChartStyle): String; procedure SetIndex(AValue: Integer); override; function TitleIsStored: Boolean; virtual; @@ -446,6 +447,14 @@ begin Result := Format(Legend.Format, [Title, Index]); end; +function TCustomChartSeries.LegendTextStyle(AStyle: TChartStyle): String; +begin + if Legend.Format = '' then + Result := AStyle.Text + else + Result := Format(Legend.Format, [AStyle.Text, AStyle.Index]); +end; + procedure TCustomChartSeries.ReadState(Reader: TReader); begin inherited ReadState(Reader); @@ -964,6 +973,7 @@ procedure TBasicPointSeries.GetLegendItemsRect( var i: Integer; li: TLegendItemBrushRect; + s: TChartStyle; begin case Legend.Multiplicity of lmSingle: @@ -974,6 +984,12 @@ begin li.Color := GetColor(i); AItems.Add(li); end; + lmStyle: + if Styles <> nil then + for s in Styles.Styles do + AItems.Add(TLegendItemBrushRect.Create( + IfThen(s.UseBrush, s.Brush, ABrush) as TBrush, LegendTextStyle(s) + )); end; end; diff --git a/components/tachart/talegend.pas b/components/tachart/talegend.pas index 070f4cb7b9..c6abd5376c 100644 --- a/components/tachart/talegend.pas +++ b/components/tachart/talegend.pas @@ -226,7 +226,7 @@ type property Visible default false; end; - TLegendMultiplicity = (lmSingle, lmPoint); + TLegendMultiplicity = (lmSingle, lmPoint, lmStyle); TLegendItemCreateEvent = procedure ( AItem: TLegendItem; AIndex: Integer) of object; diff --git a/components/tachart/taseries.pas b/components/tachart/taseries.pas index c7c12c53e9..ad025540f3 100644 --- a/components/tachart/taseries.pas +++ b/components/tachart/taseries.pas @@ -322,7 +322,7 @@ implementation uses GraphMath, LResources, Math, PropEdits, SysUtils, - TADrawerCanvas, TAGeometry, TAGraph, TAMath; + TADrawerCanvas, TAGeometry, TAGraph, TAMath, TAStyles; { TLineSeries } @@ -538,6 +538,7 @@ var p: TSeriesPointer; i: Integer; li: TLegendItemLinePointer; + s: TChartStyle; begin if LineType = ltNone then lp := nil @@ -550,13 +551,19 @@ begin case Legend.Multiplicity of lmSingle: AItems.Add(TLegendItemLinePointer.Create(lp, p, LegendTextSingle)); - lmPoint: begin + lmPoint: for i := 0 to Count - 1 do begin li := TLegendItemLinePointer.Create(lp, p, LegendTextPoint(i)); li.Color := GetColor(i); AItems.Add(li); end; - end; + lmStyle: + if Styles <> nil then + for s in Styles.Styles do + AItems.Add(TLegendItemLinePointer.Create( + IfThen((lp <> nil) and s.UsePen, s.Pen, lp) as TPen, + p, LegendTextStyle(s) + )); end; end;