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;
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
t: TDoubleDynArray;
i: Integer;
begin
FItem := Origin[AIndex]^;
SetLength(t, Length(FYOrder));
for i := 0 to High(FYOrder) do
t[i] := FItem.YList[FYOrder[i]];
SetLength(t, High(FYOrder));
for i := 1 to High(FYOrder) do
t[i - 1] := YByOrder(FYOrder[i]);
FItem.Y := YByOrder(FYOrder[0]);
FItem.YList := t;
end;
@ -1211,8 +1221,7 @@ begin
FOriginYCount := FOrigin.YCount;
if ReorderYList = '' then begin
FYCount := FOrigin.YCount;
SetLength(FYOrder, Max(FYCount - 1, 0));
SetLength(FYOrder, FOriginYCount);
for i := 0 to High(FYOrder) do
FYOrder[i] := i;
end
@ -1222,15 +1231,14 @@ begin
order.CommaText := ReorderYList;
SetLength(FYOrder, order.Count);
for i := 0 to High(FYOrder) do
FYOrder[i] :=
EnsureRange(StrToIntDef(order[i], 0), 0, FOrigin.YCount - 2);
FYCount := Length(FYOrder) + 1;
FYOrder[i] := EnsureRange(StrToIntDef(order[i], 0), 0, FOriginYCount - 1);
finally
order.Free;
end;
end;
FYCount := Length(FYOrder);
SetLength(FItem.YList, Length(FYOrder));
SetLength(FItem.YList, Max(High(FYOrder), 0));
Changed(nil);
end;

View File

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