Browse Source

CanGrow in PageHeader

pull/15/head^2
peterforstmeier 15 years ago
parent
commit
a59bb8ecea
  1. 7
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SectionBounds.cs
  2. 7
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/NewPageEventArgs.cs
  3. 24
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs
  4. 7
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs
  5. 25
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs
  6. 22
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs

7
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SectionBounds.cs

@ -23,6 +23,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses
Rectangle DetailArea {get;} Rectangle DetailArea {get;}
Size PageSize {get;set;} Size PageSize {get;set;}
bool Landscape{get;} bool Landscape{get;}
Point Offset {get;set;}
} }
@ -121,7 +122,6 @@ namespace ICSharpCode.Reports.Core.BaseClasses
section.SectionOffset, section.SectionOffset,
this.marginBounds.Width, this.marginBounds.Width,
s.Height); s.Height);
Console.WriteLine("\tSectionBounds pageheader {0} - loca {1}",pageHeaderRectangle,pageHeaderRectangle.Location);
} }
@ -206,9 +206,6 @@ namespace ICSharpCode.Reports.Core.BaseClasses
public Rectangle DetailArea public Rectangle DetailArea
{ {
get { get {
Console.WriteLine("\tSectionBound Detailarea location {0}",new Rectangle (new Point (pageHeaderRectangle.X,pageHeaderRectangle.Bottom + GlobalValues.GapBetweenContainer),
new Size(pageFooterRectangle.Location.X,pageFooterRectangle.Top - GlobalValues.GapBetweenContainer)).Location);
return new Rectangle (new Point (pageHeaderRectangle.X,pageHeaderRectangle.Bottom + GlobalValues.GapBetweenContainer), return new Rectangle (new Point (pageHeaderRectangle.X,pageHeaderRectangle.Bottom + GlobalValues.GapBetweenContainer),
new Size(pageFooterRectangle.Location.X,pageFooterRectangle.Top - GlobalValues.GapBetweenContainer)); new Size(pageFooterRectangle.Location.X,pageFooterRectangle.Top - GlobalValues.GapBetweenContainer));
} }
@ -223,6 +220,8 @@ namespace ICSharpCode.Reports.Core.BaseClasses
public Size PageSize {get;set;} public Size PageSize {get;set;}
public Point Offset {get;set;}
#endregion #endregion
} }
} }

7
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Events/NewPageEventArgs.cs

@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using ICSharpCode.Reports.Core.BaseClasses;
namespace ICSharpCode.Reports.Core.Events namespace ICSharpCode.Reports.Core.Events
{ {
@ -10,13 +11,17 @@ namespace ICSharpCode.Reports.Core.Events
private ExporterCollection itemsList; private ExporterCollection itemsList;
public NewPageEventArgs(ExporterCollection itemsList) public NewPageEventArgs(ExporterCollection itemsList,SectionBounds sectionBounds)
{ {
this.itemsList = itemsList; this.itemsList = itemsList;
SectionBounds = sectionBounds;
} }
public ExporterCollection ItemsList { public ExporterCollection ItemsList {
get { return itemsList; } get { return itemsList; }
} }
public SectionBounds SectionBounds {get;set;}
} }
} }

24
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/BasePager.cs

@ -81,10 +81,10 @@ namespace ICSharpCode.Reports.Core.Exporter
FireSectionRenderEvent (section ,dataRow); FireSectionRenderEvent (section ,dataRow);
PrintHelper.AdjustParent(section,section.Items); PrintHelper.AdjustParent(section,section.Items);
PrintHelper.AdjustSectionLocation(section); PrintHelper.AdjustSectionLocation(section);
var convertedSection = new ExporterCollection(); var convertedSection = new ExporterCollection();
Offset = new Point(section.Location.X,section.SectionOffset); Offset = SectionBounds.Offset;
Point startOffset = Offset; Point startOffset = Offset;
Console.WriteLine ("start ConvertSection {0}- {1}",section.Name,section.Size);
if (section.Items.Count > 0) if (section.Items.Count > 0)
{ {
@ -101,41 +101,35 @@ namespace ICSharpCode.Reports.Core.Exporter
gapCalculator.CalculateGapList(section); gapCalculator.CalculateGapList(section);
int i = 0; int i = 0;
foreach (BaseReportItem item in section.Items) foreach (BaseReportItem item in section.Items)
{ {
ISimpleContainer simpleContainer = item as ISimpleContainer; ISimpleContainer simpleContainer = item as ISimpleContainer;
Offset = new Point(Offset.X,Offset.Y + gapCalculator.GapBetweenItems[i] ); Offset = new Point(Offset.X,Offset.Y + gapCalculator.GapBetweenItems[i] );
if (simpleContainer != null) if (simpleContainer != null)
{ {
var containerSize = simpleContainer.Size;
EvaluationHelper.EvaluateReportItems(evaluator,simpleContainer.Items); EvaluationHelper.EvaluateReportItems(evaluator,simpleContainer.Items);
var layouter = (ILayouter)ServiceContainer.GetService(typeof(ILayouter)); var layouter = (ILayouter)ServiceContainer.GetService(typeof(ILayouter));
LayoutHelper.SetLayoutForRow(Graphics,layouter, simpleContainer); LayoutHelper.SetLayoutForRow(Graphics,layouter, simpleContainer);
Offset = BaseConverter.ConvertContainer(convertedSection,simpleContainer,Offset.X,Offset); Offset = BaseConverter.ConvertContainer(convertedSection,simpleContainer,Offset.X,Offset);
simpleContainer.Size = containerSize;
Rectangle rsec = new Rectangle(section.Location,section.Size);
Rectangle ro = new Rectangle(section.Location,simpleContainer.Size);
if (!rsec.Contains(ro)) {
Console.WriteLine ("Update Size");
section.Size = new Size(section.Size.Width,Offset.Y - startOffset.Y );
}
} }
else else
{ {
var converteditem = ExportHelper.ConvertLineItem(item,Offset); var converteditem = ExportHelper.ConvertLineItem(item,Offset);
// Offset = new Point (Offset.X,Offset.Y + item.Size.Height);
convertedSection.Add(converteditem ); convertedSection.Add(converteditem );
} }
i ++; i ++;
} }
Offset = new Point (Offset.X,Offset.Y + gapCalculator.LastGap); Offset = new Point (Offset.X,Offset.Y + gapCalculator.LastGap);
// section.Size = sectionSize;
} }
Console.WriteLine ("leave ConvertSection {0}",section.Size); SectionBounds.Offset = Offset;
Console.WriteLine();
return convertedSection; return convertedSection;
} }

7
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs

@ -50,7 +50,7 @@ namespace ICSharpCode.Reports.Core.Exporter
#region PageBreak #region PageBreak
protected void BuildNewPage(ExporterCollection myList,BaseSection section) protected void BuildNewPage(ExporterCollection myList,BaseSection section)
{ {
FirePageFull(myList); FirePageFull(myList);
section.SectionOffset = SinglePage.SectionBounds.PageHeaderRectangle.Location.Y; section.SectionOffset = SinglePage.SectionBounds.PageHeaderRectangle.Location.Y;
myList.Clear(); myList.Clear();
@ -59,7 +59,10 @@ namespace ICSharpCode.Reports.Core.Exporter
protected void FirePageFull (ExporterCollection items) protected void FirePageFull (ExporterCollection items)
{ {
EventHelper.Raise<NewPageEventArgs>(PageFull,this,new NewPageEventArgs(items)); var newPage = new NewPageEventArgs (items,SinglePage.SectionBounds);
// EventHelper.Raise<NewPageEventArgs>(PageFull,this,new NewPageEventArgs(items,SinglePage.SectionBounds));
EventHelper.Raise<NewPageEventArgs>(PageFull,this,newPage);
SinglePage.SectionBounds = newPage.SectionBounds;
} }

25
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs

@ -57,9 +57,10 @@ namespace ICSharpCode.Reports.Core.Exporter
private ExporterCollection ConvertDataRow (ISimpleContainer simpleContainer) private ExporterCollection ConvertDataRow (ISimpleContainer simpleContainer)
{ {
ExporterCollection exporterCollection = new ExporterCollection(); ExporterCollection exporterCollection = new ExporterCollection();
base.CurrentPosition = base.SectionBounds.DetailArea.Location; // base.CurrentPosition = base.SectionBounds.DetailArea.Location;
// base.CurrentPosition = new Point (base.CurrentPosition.X,base.CurrentPosition.Y + 20);
Console.WriteLine("Convertdatarow start {0}",base.CurrentPosition); base.CurrentPosition = base.SectionBounds.Offset;
// Console.WriteLine("Convertdatarow start {0}",base.CurrentPosition);
BaseSection section = parent as BaseSection; BaseSection section = parent as BaseSection;
DefaultLeftPosition = parent.Location.X; DefaultLeftPosition = parent.Location.X;
@ -162,13 +163,17 @@ namespace ICSharpCode.Reports.Core.Exporter
private Point CalculateStartPosition(BaseSection section) private Point CalculateStartPosition(BaseSection section)
{ {
var r = base.ReportModel; // var r = base.ReportModel;
base.SectionBounds.CalculatePageBounds(r); // base.SectionBounds.CalculatePageBounds(r);
var rr = new Point(base.SectionBounds.DetailArea.X,base.SectionBounds.PageHeaderRectangle.Bottom + 1); // var rr = new Point(base.SectionBounds.DetailArea.X,base.SectionBounds.PageHeaderRectangle.Bottom + 1);
var p = base.SectionBounds.DetailArea.Location; // var p = base.SectionBounds.DetailArea.Location;
Console.WriteLine ("PageBreak {0} - detailareaa {1}",rr,p); // var pp = SectionBounds.Offset;
Console.WriteLine("-----------------"); // Console.WriteLine ("PageBreak {0} - detailareaa {1}",rr,p);
return base.SectionBounds.DetailArea.Location; // Console.WriteLine("-----------------");
// Console.WriteLine("");
//// return base.SectionBounds.DetailArea.Location;
// return pp;
return SectionBounds.Offset;
} }

22
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/DataPageBuilder.cs

@ -57,6 +57,7 @@ namespace ICSharpCode.Reports.Core.Exporter
{ {
this.SinglePage.Items.AddRange(e.ItemsList); this.SinglePage.Items.AddRange(e.ItemsList);
PageBreak(); PageBreak();
e.SectionBounds = SinglePage.SectionBounds;
} }
@ -64,6 +65,7 @@ namespace ICSharpCode.Reports.Core.Exporter
protected override void BuildReportHeader () protected override void BuildReportHeader ()
{ {
SectionBounds.Offset = new Point(base.SectionBounds.MarginBounds.Left,base.SectionBounds.MarginBounds.Top);
if ((base.Pages.Count == 0) && (base.ReportModel.ReportHeader.Items.Count > 0)) if ((base.Pages.Count == 0) && (base.ReportModel.ReportHeader.Items.Count > 0))
{ {
base.ReportModel.ReportHeader.SectionOffset = base.SinglePage.SectionBounds.ReportHeaderRectangle.Top; base.ReportModel.ReportHeader.SectionOffset = base.SinglePage.SectionBounds.ReportHeaderRectangle.Top;
@ -73,25 +75,18 @@ namespace ICSharpCode.Reports.Core.Exporter
base.ReportModel.ReportHeader.Size = Size.Empty; base.ReportModel.ReportHeader.Size = Size.Empty;
} }
base.SectionBounds.CalculatePageBounds(base.ReportModel); base.SectionBounds.CalculatePageBounds(base.ReportModel);
var p = base.SectionBounds.Offset;
} }
protected override void BuildPageHeader () protected override void BuildPageHeader ()
{ {
// base.DebugShowSections(); if (SectionBounds.Offset.Y < base.ReportModel.PageHeader.SectionOffset) {
Console.WriteLine(); SectionBounds.Offset = new Point(SectionBounds.Offset.X,base.ReportModel.PageHeader.SectionOffset);
Console.WriteLine ("start BuildPageHeader DetailArea.Location {0} - offset {1}",SectionBounds.DetailArea.Location,base.Offset); }
base.SectionBounds.CalculatePageBounds(base.ReportModel);
ConvertSectionInternal (base.ReportModel.PageHeader);
Size s = base.ReportModel.PageHeader.Size;
// base.ReportModel.PageHeader.Size = new Size(base.ReportModel.PageHeader.Size.Width,base.Offset.Y - base.ReportModel.PageHeader.SectionOffset);
s = base.ReportModel.PageHeader.Size;
base.SectionBounds.CalculatePageBounds(base.ReportModel); base.SectionBounds.CalculatePageBounds(base.ReportModel);
Console.WriteLine ("end BuildPageHeader DetailArea.Location {0} - offset {1}",SectionBounds.DetailArea.Location,base.Offset); ConvertSectionInternal (base.ReportModel.PageHeader);
// base.DebugShowSections();
Console.WriteLine();
} }
@ -100,7 +95,7 @@ namespace ICSharpCode.Reports.Core.Exporter
bool pageBreak = false; bool pageBreak = false;
base.ReportModel.ReportFooter.SectionOffset = footerRectangle.Top + GlobalValues.GapBetweenContainer; base.ReportModel.ReportFooter.SectionOffset = footerRectangle.Top + GlobalValues.GapBetweenContainer;
SectionBounds.Offset = new Point(SectionBounds.Offset.X,footerRectangle.Top + GlobalValues.GapBetweenContainer );
if (!PrintHelper.IsRoomForFooter(base.SectionBounds,base.ReportModel.ReportFooter.Location)) { if (!PrintHelper.IsRoomForFooter(base.SectionBounds,base.ReportModel.ReportFooter.Location)) {
PageBreak(); PageBreak();
base.ReportModel.ReportFooter.SectionOffset = SectionBounds.DetailArea.Top; base.ReportModel.ReportFooter.SectionOffset = SectionBounds.DetailArea.Top;
@ -128,6 +123,7 @@ namespace ICSharpCode.Reports.Core.Exporter
protected override void BuildPageFooter () protected override void BuildPageFooter ()
{ {
base.ReportModel.PageFooter.SectionOffset = base.SinglePage.SectionBounds.PageFooterRectangle.Top; base.ReportModel.PageFooter.SectionOffset = base.SinglePage.SectionBounds.PageFooterRectangle.Top;
SectionBounds.Offset = new Point(SectionBounds.Offset.X, base.SinglePage.SectionBounds.PageFooterRectangle.Top);
ConvertSectionInternal(base.ReportModel.PageFooter); ConvertSectionInternal(base.ReportModel.PageFooter);
} }

Loading…
Cancel
Save