TAChart: Use enumerators in utils, tools and transformations

git-svn-id: trunk@31700 -
This commit is contained in:
ask 2011-07-14 11:23:17 +00:00
parent d73181cc5c
commit 14fabdf99b
3 changed files with 63 additions and 39 deletions

View File

@ -130,6 +130,15 @@ type
TShowMessageProc = procedure (const AMsg: String); TShowMessageProc = procedure (const AMsg: String);
{$IFNDEF fpdoc} // Workaround for issue #18549.
generic TTypedFPListEnumerator<T> = class(TFPListEnumerator)
{$ELSE}
TTypedFPListEnumerator = class(TFPListEnumerator)
{$ENDIF}
function GetCurrent: T;
property Current: T read GetCurrent;
end;
{ TIndexedComponentList } { TIndexedComponentList }
TIndexedComponentList = class(TFPList) TIndexedComponentList = class(TFPList)
@ -427,6 +436,13 @@ begin
Result := (A.Code = B.Code) and (A.Data = B.Data); Result := (A.Code = B.Code) and (A.Data = B.Data);
end; end;
{ TTypedFPListEnumerator }
function TTypedFPListEnumerator.GetCurrent: T;
begin
Result := T(inherited GetCurrent);
end;
{ TIndexedComponentList } { TIndexedComponentList }
procedure TIndexedComponentList.ChangeNamePrefix( procedure TIndexedComponentList.ChangeNamePrefix(
@ -607,19 +623,19 @@ end;
procedure TBroadcaster.Broadcast(ASender: TObject); procedure TBroadcaster.Broadcast(ASender: TObject);
var var
i: Integer; p: Pointer;
begin begin
if Locked then exit; if Locked then exit;
for i := 0 to Count - 1 do for p in Self do
TListener(Items[i]).Notify(ASender); TListener(p).Notify(ASender);
end; end;
destructor TBroadcaster.Destroy; destructor TBroadcaster.Destroy;
var var
i: Integer; p: Pointer;
begin begin
for i := 0 to Count - 1 do for p in Self do
TListener(Items[i]).Forget; TListener(p).Forget;
inherited; inherited;
end; end;

View File

@ -1180,25 +1180,24 @@ end;
function TDataPointTool.ParseAffectedSeries: TBooleanDynArray; function TDataPointTool.ParseAffectedSeries: TBooleanDynArray;
var var
s: TStringList; sl: TStringList;
i, p: Integer; p: Integer;
s: String;
begin begin
SetLength(Result, FChart.SeriesCount); SetLength(Result, FChart.SeriesCount);
if AffectedSeries = '' then begin if AffectedSeries = '' then begin
FillChar(Result[0], Length(Result), true); FillChar(Result[0], Length(Result), true);
exit; exit;
end; end;
s := TStringList.Create; sl := TStringList.Create;
try try
s.CommaText := AffectedSeries; sl.CommaText := AffectedSeries;
FillChar(Result[0], Length(Result), false); FillChar(Result[0], Length(Result), false);
for i := 0 to s.Count - 1 do begin for s in sl do
p := StrToIntDef(s[i], -1); if TryStrToInt(s, p) and InRange(p, 0, High(Result)) then
if InRange(p, 0, High(Result)) then
Result[p] := true; Result[p] := true;
end;
finally finally
s.Free; sl.Free;
end; end;
end; end;

View File

@ -70,7 +70,13 @@ type
TAxisTransformClass = class of TAxisTransform; TAxisTransformClass = class of TAxisTransform;
{$IFNDEF fpdoc} // Workaround for issue #18549.
TAxisTransformEnumerator = specialize TTypedFPListEnumerator<TAxisTransform>;
{$ENDIF}
TAxisTransformList = class(TIndexedComponentList) TAxisTransformList = class(TIndexedComponentList)
public
function GetEnumerator: TAxisTransformEnumerator;
end; end;
{ TChartAxisTransformations } { TChartAxisTransformations }
@ -258,6 +264,13 @@ begin
AxisTransformsClassRegistry.AddObject(ACaption, TObject(AAxisTransformClass)); AxisTransformsClassRegistry.AddObject(ACaption, TObject(AAxisTransformClass));
end; end;
{ TAxisTransformList }
function TAxisTransformList.GetEnumerator: TAxisTransformEnumerator;
begin
Result := TAxisTransformEnumerator.Create(Self);
end;
{ TAxisTransformsComponentEditor } { TAxisTransformsComponentEditor }
function TAxisTransformsComponentEditor.GetVerb(Index: Integer): string; function TAxisTransformsComponentEditor.GetVerb(Index: Integer): string;
@ -450,23 +463,21 @@ end;
function TChartAxisTransformations.AxisToGraph(AX: Double): Double; function TChartAxisTransformations.AxisToGraph(AX: Double): Double;
var var
i: Integer; t: TAxisTransform;
begin begin
Result := AX; Result := AX;
for i := 0 to List.Count - 1 do for t in List do
with TAxisTransform(List[i]) do if t.Enabled then
if Enabled then Result := t.AxisToGraph(Result);
Result := AxisToGraph(Result);
end; end;
procedure TChartAxisTransformations.ClearBounds; procedure TChartAxisTransformations.ClearBounds;
var var
i: Integer; t: TAxisTransform;
begin begin
for i := List.Count - 1 downto 0 do for t in List do
with TAxisTransform(List[i]) do if t.Enabled then
if Enabled then t.ClearBounds;
ClearBounds;
end; end;
constructor TChartAxisTransformations.Create(AOwner: TComponent); constructor TChartAxisTransformations.Create(AOwner: TComponent);
@ -488,11 +499,11 @@ end;
procedure TChartAxisTransformations.GetChildren( procedure TChartAxisTransformations.GetChildren(
Proc: TGetChildProc; Root: TComponent); Proc: TGetChildProc; Root: TComponent);
var var
i: Integer; t: TAxisTransform;
begin begin
for i := 0 to List.Count - 1 do for t in List do
if TAxisTransform(List[i]).Owner = Root then if t.Owner = Root then
Proc(TAxisTransform(List[i])); Proc(t);
end; end;
function TChartAxisTransformations.GraphToAxis(AX: Double): Double; function TChartAxisTransformations.GraphToAxis(AX: Double): Double;
@ -508,12 +519,11 @@ end;
procedure TChartAxisTransformations.SetChart(AChart: TObject); procedure TChartAxisTransformations.SetChart(AChart: TObject);
var var
i: Integer; t: TAxisTransform;
begin begin
for i := 0 to List.Count - 1 do for t in List do
with TAxisTransform(List[i]) do if t.Enabled then
if Enabled then t.SetChart(AChart);
TAxisTransform(List[i]).SetChart(AChart);
end; end;
procedure TChartAxisTransformations.SetChildOrder( procedure TChartAxisTransformations.SetChildOrder(
@ -539,12 +549,11 @@ end;
procedure TChartAxisTransformations.UpdateBounds(var AMin, AMax: Double); procedure TChartAxisTransformations.UpdateBounds(var AMin, AMax: Double);
var var
i: Integer; t: TAxisTransform;
begin begin
for i := 0 to List.Count - 1 do for t in List do
with TAxisTransform(List[i]) do if t.Enabled then
if Enabled then t.UpdateBounds(AMin, AMax);
UpdateBounds(AMin, AMax);
end; end;
{ TLinearAxisTransform } { TLinearAxisTransform }