TAChart: Include Item.Y in reordered list of TCalculatedChartSource. Update test.

git-svn-id: trunk@37588 -
This commit is contained in:
ask 2012-06-08 08:57:14 +00:00
parent fe7b460ed5
commit dcf6e40f02
2 changed files with 29 additions and 17 deletions

View File

@ -1082,14 +1082,24 @@ begin
end; end;
procedure TCalculatedChartSource.ExtractItem(AIndex: Integer); procedure TCalculatedChartSource.ExtractItem(AIndex: Integer);
function YByOrder(AOrderIndex: Integer): Double;
begin
if AOrderIndex = 0 then
Result := FItem.Y
else
Result := FItem.YList[AOrderIndex - 1];
end;
var var
t: TDoubleDynArray; t: TDoubleDynArray;
i: Integer; i: Integer;
begin begin
FItem := Origin[AIndex]^; FItem := Origin[AIndex]^;
SetLength(t, Length(FYOrder)); SetLength(t, High(FYOrder));
for i := 0 to High(FYOrder) do for i := 1 to High(FYOrder) do
t[i] := FItem.YList[FYOrder[i]]; t[i - 1] := YByOrder(FYOrder[i]);
FItem.Y := YByOrder(FYOrder[0]);
FItem.YList := t; FItem.YList := t;
end; end;
@ -1211,8 +1221,7 @@ begin
FOriginYCount := FOrigin.YCount; FOriginYCount := FOrigin.YCount;
if ReorderYList = '' then begin if ReorderYList = '' then begin
FYCount := FOrigin.YCount; SetLength(FYOrder, FOriginYCount);
SetLength(FYOrder, Max(FYCount - 1, 0));
for i := 0 to High(FYOrder) do for i := 0 to High(FYOrder) do
FYOrder[i] := i; FYOrder[i] := i;
end end
@ -1222,15 +1231,14 @@ begin
order.CommaText := ReorderYList; order.CommaText := ReorderYList;
SetLength(FYOrder, order.Count); SetLength(FYOrder, order.Count);
for i := 0 to High(FYOrder) do for i := 0 to High(FYOrder) do
FYOrder[i] := FYOrder[i] := EnsureRange(StrToIntDef(order[i], 0), 0, FOriginYCount - 1);
EnsureRange(StrToIntDef(order[i], 0), 0, FOrigin.YCount - 2);
FYCount := Length(FYOrder) + 1;
finally finally
order.Free; order.Free;
end; end;
end; end;
FYCount := Length(FYOrder);
SetLength(FItem.YList, Length(FYOrder)); SetLength(FItem.YList, Max(High(FYOrder), 0));
Changed(nil); Changed(nil);
end; end;

View File

@ -200,23 +200,27 @@ end;
procedure TCalculatedSourceTest.Reorder; procedure TCalculatedSourceTest.Reorder;
var var
i, j: Integer; i: Integer;
begin begin
AssertEquals(3, FSource.YCount); AssertEquals(3, FSource.YCount);
FSource.ReorderYList := '2'; FSource.ReorderYList := '2';
AssertEquals(1, FSource.YCount);
AssertEquals(104, FSource[0]^.Y);
AssertEquals(204, FSource[1]^.Y);
FSource.ReorderYList := '0,2';
AssertEquals(2, FSource.YCount); AssertEquals(2, FSource.YCount);
AssertEquals(102, FSource[0]^.Y);
AssertEquals(104, FSource[0]^.YList[0]); AssertEquals(104, FSource[0]^.YList[0]);
AssertEquals(202, FSource[1]^.Y);
AssertEquals(204, FSource[1]^.YList[0]); AssertEquals(204, FSource[1]^.YList[0]);
FSource.ReorderYList := '0,0,0'; FSource.ReorderYList := '1,1,1';
AssertEquals(4, FSource.YCount); AssertEquals(3, FSource.YCount);
AssertEquals(103, FSource[0]^.YList[0]); AssertEquals(103, FSource[0]^.Y);
AssertEquals(103, FSource[0]^.YList[1]); AssertEquals([103, 103], FSource[0]^.YList);
AssertEquals(103, FSource[0]^.YList[2]);
FSource.ReorderYList := ''; FSource.ReorderYList := '';
for i := 0 to FSource.Count - 1 do begin for i := 0 to FSource.Count - 1 do begin
AssertEquals(FOrigin[i]^.Y, FSource[i]^.Y); AssertEquals(FOrigin[i]^.Y, FSource[i]^.Y);
for j := 0 to FSource.YCount - 2 do AssertEquals(FOrigin[i]^.YList, FSource[i]^.YList);
AssertEquals(FOrigin[i]^.YList[j], FSource[i]^.YList[j]);
end; end;
end; end;