TAChart: Add Legend.Format property, implement it for single item per series multiplicity

git-svn-id: trunk@34009 -
This commit is contained in:
ask 2011-12-06 23:50:51 +00:00
parent 924256986a
commit 38f0b9b911
6 changed files with 35 additions and 16 deletions

View File

@ -76,6 +76,7 @@ type
strict protected
function GetIndex: Integer; override;
function LegendTextSingle: String;
procedure SetIndex(AValue: Integer); override;
function TitleIsStored: Boolean; virtual;
@ -353,7 +354,7 @@ begin
oldCount := AItems.Count;
if Assigned(Legend.OnDraw) then
for i := 0 to Legend.UserItemsCount - 1 do
AItems.Add(TLegendItemUserDrawn.Create(i, Legend.OnDraw, Title))
AItems.Add(TLegendItemUserDrawn.Create(i, Legend.OnDraw, LegendTextSingle))
else
GetLegendItems(AItems);
for i := oldCount to AItems.Count - 1 do begin
@ -428,6 +429,14 @@ begin
(AxisIndexY >= 0) and not FChart.AxisList[AxisIndexY].IsVertical;
end;
function TCustomChartSeries.LegendTextSingle: String;
begin
if Legend.Format = '' then
Result := Title
else
Result := Format(Legend.Format, [Title, Index]);
end;
procedure TCustomChartSeries.ReadState(Reader: TReader);
begin
inherited ReadState(Reader);
@ -918,7 +927,7 @@ var
begin
case Legend.Multiplicity of
lmSingle:
AItems.Add(TLegendItemBrushRect.Create(ABrush, Title));
AItems.Add(TLegendItemBrushRect.Create(ABrush, LegendTextSingle));
lmPoint:
for i := 0 to Count - 1 do begin
li := TLegendItemBrushRect.Create(ABrush, FormattedMark(i));

View File

@ -677,7 +677,7 @@ end;
procedure TFuncSeries.GetLegendItems(AItems: TChartLegendItems);
begin
AItems.Add(TLegendItemLine.Create(Pen, Title));
AItems.Add(TLegendItemLine.Create(Pen, LegendTextSingle));
end;
function TFuncSeries.GetNearestPoint(
@ -828,7 +828,7 @@ end;
procedure TBSplineSeries.GetLegendItems(AItems: TChartLegendItems);
begin
AItems.Add(TLegendItemLine.Create(Pen, Title));
AItems.Add(TLegendItemLine.Create(Pen, LegendTextSingle));
end;
procedure TBSplineSeries.SetDegree(AValue: TSplineDegree);
@ -973,7 +973,7 @@ end;
procedure TCubicSplineSeries.GetLegendItems(AItems: TChartLegendItems);
begin
AItems.Add(TLegendItemLine.Create(Pen, Title));
AItems.Add(TLegendItemLine.Create(Pen, LegendTextSingle));
end;
function TCubicSplineSeries.GetNearestPoint(
@ -1496,7 +1496,7 @@ var
li: TLegendItemBrushRect;
begin
case Legend.Multiplicity of
lmSingle: AItems.Add(TLegendItemBrushRect.Create(Brush, Title));
lmSingle: AItems.Add(TLegendItemBrushRect.Create(Brush, LegendTextSingle));
lmPoint:
if ColorSource <> nil then begin
prev := 0.0;

View File

@ -70,7 +70,7 @@ type
{ TLegendItemUserDrawn }
TLegendItemUserDrawn = class(TLegendItem)
private
strict private
FIndex: Integer;
FOnDraw: TLegendItemDrawEvent;
public
@ -83,7 +83,7 @@ type
{ TLegendItemLine }
TLegendItemLine = class(TLegendItem)
private
strict private
FPen: TFPCustomPen;
public
constructor Create(APen: TFPCustomPen; const AText: String);
@ -93,7 +93,7 @@ type
{ TLegendItemLinePointer }
TLegendItemLinePointer = class(TLegendItemLine)
protected
strict protected
FPointer: TSeriesPointer;
public
constructor Create(
@ -104,7 +104,7 @@ type
{ TLegendItemBrushRect }
TLegendItemBrushRect = class(TLegendItem)
private
strict private
FBrush: TFPCustomBrush;
public
constructor Create(ABrush: TFPCustomBrush; const AText: String);
@ -120,7 +120,7 @@ type
{ TChartLegendItems }
TChartLegendItems = class(TObjectList)
private
strict private
function GetItem(AIndex: Integer): TLegendItem;
procedure SetItem(AIndex: Integer; AValue: TLegendItem);
public
@ -234,13 +234,15 @@ type
{ TChartSeriesLegend }
TChartSeriesLegend = class(TChartElement)
private
strict private
FFormat: String;
FGroupIndex: Integer;
FMultiplicity: TLegendMultiplicity;
FOnCreate: TLegendItemCreateEvent;
FOnDraw: TLegendItemDrawEvent;
FOrder: Integer;
FUserItemsCount: Integer;
procedure SetFormat(AValue: String);
procedure SetGroupIndex(AValue: Integer);
procedure SetMultiplicity(AValue: TLegendMultiplicity);
procedure SetOnCreate(AValue: TLegendItemCreateEvent);
@ -254,6 +256,7 @@ type
procedure InitItem(
AItem: TLegendItem; AIndex: Integer; ALegend: TChartLegend);
published
property Format: String read FFormat write SetFormat;
property GroupIndex: Integer
read FGroupIndex write SetGroupIndex default LEGEND_ITEM_NO_GROUP;
property Multiplicity: TLegendMultiplicity
@ -763,6 +766,13 @@ begin
AItem.Order := Order;
end;
procedure TChartSeriesLegend.SetFormat(AValue: String);
begin
if FFormat = AValue then exit;
FFormat := AValue;
StyleChanged(Self);
end;
procedure TChartSeriesLegend.SetGroupIndex(AValue: Integer);
begin
if FGroupIndex = AValue then exit;

View File

@ -551,7 +551,7 @@ end;
procedure TOpenHighLowCloseSeries.GetLegendItems(AItems: TChartLegendItems);
begin
AItems.Add(TLegendItemOHLCLine.Create(LinePen, Title));
AItems.Add(TLegendItemOHLCLine.Create(LinePen, LegendTextSingle));
end;
function TOpenHighLowCloseSeries.GetSeriesColor: TColor;

View File

@ -261,7 +261,7 @@ var
begin
case Legend.Multiplicity of
lmSingle: begin
p := TLegendItemPie.Create(Title);
p := TLegendItemPie.Create(LegendTextSingle);
for i := 0 to 2 do
p.Colors[i] := SliceColor(i);
AItems.Add(p);

View File

@ -542,7 +542,7 @@ begin
p := nil;
case Legend.Multiplicity of
lmSingle:
AItems.Add(TLegendItemLinePointer.Create(lp, p, Title));
AItems.Add(TLegendItemLinePointer.Create(lp, p, LegendTextSingle));
lmPoint: begin
for i := 0 to Count - 1 do begin
li := TLegendItemLinePointer.Create(lp, p, FormattedMark(i));
@ -667,7 +667,7 @@ end;
procedure TConstantLine.GetLegendItems(AItems: TChartLegendItems);
begin
AItems.Add(TLegendItemLine.Create(Pen, Title));
AItems.Add(TLegendItemLine.Create(Pen, LegendTextSingle));
end;
function TConstantLine.GetNearestPoint(