Browse Source

* Free Notification for ParentGroupHeader, and persist to stream

git-svn-id: trunk@38429 -
michael 7 years ago
parent
commit
354067d108
1 changed files with 33 additions and 2 deletions
  1. 33 2
      packages/fcl-report/src/fpreport.pp

+ 33 - 2
packages/fcl-report/src/fpreport.pp

@@ -1144,6 +1144,7 @@ type
     function    GetReportBandName: string; override;
     procedure   DoWriteLocalProperties(AWriter: TFPReportStreamer; AOriginal: TFPReportElement = nil); override;
     procedure   Notification(AComponent: TComponent; Operation: TOperation); override;
+    Procedure FixupReference(PN, PV: String; C: TFPReportElement); override;
     procedure   BeforePrintWithChilds; override;
     procedure   MovedToNextPageWithChilds; override;
     procedure   AfterPrintWithChilds; override;
@@ -5356,13 +5357,29 @@ begin
   AWriter.WriteString('IntermediateFooter', ReportSectionsToString(FIntermediateFooter));
   AWriter.WriteString('OverflowedFooterNeedsReprintedHeader', ReportSectionsToString(FOverflowedFooterNeedsReprintedHeader));
   AWriter.WriteString('OverflowWithFirstDataBand', ReportSectionsToString(FOverflowWithFirstDataBand));
+  If Assigned(ParentGroupHeader) then
+    AWriter.WriteString('ParentGroupHeader', ParentGroupHeader.Name);
 end;
 
 procedure TFPReportCustomGroupHeaderBand.Notification(AComponent: TComponent; Operation: TOperation);
 begin
-  if (Operation = opRemove) and (AComponent = FChildGroupHeader) then
-    FChildGroupHeader := nil;
   inherited Notification(AComponent, Operation);
+  if (Operation = opRemove) then
+    begin
+    if (AComponent = FChildGroupHeader) then
+      FChildGroupHeader := nil
+    else (AComponent = FParentGroupHeader) then
+      FParentGroupHeader := nil;
+    end;
+
+end;
+
+procedure TFPReportCustomGroupHeaderBand.FixupReference(PN, PV: String; C: TFPReportElement);
+begin
+  if SameText(PN,'ParentGroupHeader') then
+    ParentGroupHeader:=TFPReportCustomGroupHeaderBand(C)
+  else
+    inherited FixupReference(PN, PV, C);
 end;
 
 procedure TFPReportCustomGroupHeaderBand.BeforePrintWithChilds;
@@ -5473,6 +5490,11 @@ begin
 end;
 
 procedure TFPReportCustomGroupHeaderBand.ReadElement(AReader: TFPReportStreamer);
+
+Var
+  S : String;
+  C : TFPReportElement;
+
 begin
   inherited ReadElement(AReader);
   FGroupCondition := AReader.ReadString('GroupCondition', '');
@@ -5481,6 +5503,15 @@ begin
   FIntermediateFooter := StringToReportSections(AReader.ReadString('IntermediateFooter', ''));
   FOverflowedFooterNeedsReprintedHeader := StringToReportSections(AReader.ReadString('OverflowedFooterNeedsReprintedHeader', ''));
   FOverflowWithFirstDataBand := StringToReportSections(AReader.ReadString('OverflowWithFirstDataBand', 'rsPage,rsColumn'));
+  S:=AReader.ReadString('ParentGroupHeader','');
+  if (S<>'') then
+    begin
+    C:=Report.FindRecursive(S);
+    if C is TFPReportCustomGroupHeaderBand then
+      ParentGroupHeader:=TFPReportCustomGroupHeaderBand(C)
+    else
+      Report.AddReference(Self,'ParentGroupHeader',S);
+    end;
 end;
 
 procedure TFPReportCustomGroupHeaderBand.EvaluateGroupCondition;