Browse Source

* Stream variable definitions (bug ID 33341)

git-svn-id: trunk@38437 -
michael 7 years ago
parent
commit
33d76f596a
1 changed files with 80 additions and 0 deletions
  1. 80 0
      packages/fcl-report/src/fpreport.pp

+ 80 - 0
packages/fcl-report/src/fpreport.pp

@@ -1419,6 +1419,8 @@ type
     destructor Destroy; override;
     Procedure Assign(Source : TPersistent); override;
     procedure PrepareExpressionValue;
+    Procedure WriteElement(aWriter : TFPReportStreamer); virtual;
+    Procedure ReadElement(aWriter : TFPReportStreamer); virtual;
     Property AsExpressionResult : TFPExpressionResult Read GetER Write SetER;
     Property AsString : String Read GetAsString Write SetAsString;
     Property AsInteger : Int64 Read GetAsInteger Write SetAsInteger;
@@ -3200,6 +3202,52 @@ begin
   end;
 end;
 
+procedure TFPReportVariable.WriteElement(aWriter: TFPReportStreamer);
+begin
+  With AWriter do
+    begin
+    WriteString('Name',Self.Name);
+    WriteString('DataType',ResultTypeName(DataType));
+    WriteString('Value',Value);
+    WriteString('Expression',Expression);
+    WriteString('ResetValueExpression',ResetValueExpression);
+    WriteString('ResetType',GetEnumName(TypeInfo(TFPReportResetType),Ord(ResetType)));
+    end;
+end;
+
+procedure TFPReportVariable.ReadElement(aWriter: TFPReportStreamer);
+
+Var
+  S : String;
+  I : integer;
+begin
+  With AWriter do
+    begin
+    Self.Name:=ReadString('Name','');
+    S:=ReadString('DataType','string');
+    if S<>'' then
+      I:=GetEnumValue(TypeInfo(TResultType),S)
+    else
+      I:=-1;
+    if I=-1 then
+      DataType:=rtString
+    else
+      DataType:=TResultType(I);
+    Value:=ReadString('Value','');
+    Expression:=ReadString('Expression','');
+    ResetValueExpression:=ReadString('ResetValueExpression','');
+    S:=ReadString('ResetType','');
+    if S<>'' then
+      I:=GetEnumValue(TypeInfo(TFPReportResetType),S)
+    else
+      I:=-1;
+    if I=-1 then
+      ResetType:=rtNone
+    else
+      ResetType:=TFPReportResetType(I);
+    end;
+end;
+
 function TFPReportBandFactory.getBandClass(aIndex : TFPReportBandType
   ): TFPReportCustomBandClass;
 begin
@@ -7792,6 +7840,20 @@ begin
     finally
       AWriter.PopElement;
     end;
+    AWriter.PushElement('Variables');
+    try
+      for i := 0 to Variables.Count - 1 do
+        begin
+          AWriter.PushElement(IntToStr(i)); // use variable index as identifier
+          try
+            Variables[i].WriteElement(AWriter);
+          finally
+            AWriter.PopElement;
+          end;
+        end;
+    finally
+      AWriter.PopElement;
+    end;
   finally
     AWriter.PopElement;
   end;
@@ -7803,6 +7865,7 @@ var
   E: TObject;
   i: integer;
   p: TFPReportPage;
+  v : TFPReportVariable;
   lImgItem: TFPReportImageItem;
 begin
   ClearReferenceList;
@@ -7852,6 +7915,23 @@ begin
         end;  { for i }
         AReader.PopElement;
       end; { pages }
+      E := AReader.FindChild('Variables');
+      if Assigned(E) then
+      begin
+        AReader.PushElement(E);
+        for i := 0 to AReader.ChildCount-1 do
+        begin
+          E := AReader.GetChild(i);
+          AReader.PushElement(E); // child index is the identifier
+          try
+            v := Variables.Add as TFPReportVariable;
+            v.ReadElement(AReader);
+          finally
+            AReader.PopElement;
+          end;
+        end;  { for I }
+        AReader.PopElement;
+      end; { Variables }
 
       // TODO: Implement reading OnRenderReport, OnBeginReport, OnEndReport
     finally