diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs index 6fc66e5a82..754c26c470 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/PrintHelper.cs @@ -12,8 +12,9 @@ using System.Drawing; using System.Globalization; using System.Linq; -using ICSharpCode.Reports.Core.Interfaces; +using ICSharpCode.Reports.Core.Events; using ICSharpCode.Reports.Core.Exporter; +using ICSharpCode.Reports.Core.Interfaces; using ICSharpCode.Reports.Expressions.ReportingLanguage; namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -148,6 +149,14 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing container; } + #region PageBreak + + public static Rectangle CalculatePageBreakRectangle(BaseReportItem simpleContainer,Point curPos) + { + return new Rectangle(new Point (simpleContainer.Location.X,curPos.Y), simpleContainer.Size); + } + + public static bool IsPageFull (Rectangle rectangle,SectionBounds bounds) { if (rectangle.Bottom > bounds.PageFooterRectangle.Top) { @@ -157,6 +166,8 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing } + #endregion + public static IExpressionEvaluatorFacade CreateEvaluator (ISinglePage singlePage,IDataNavigator dataNavigator) { if (singlePage == null) { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs index 5b84cdf667..919a23873b 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/BaseConverter.cs @@ -8,7 +8,6 @@ */ using System; using System.Drawing; -using System.Linq; using ICSharpCode.Reports.Core.BaseClasses.Printing; using ICSharpCode.Reports.Core.Events; using ICSharpCode.Reports.Core.Interfaces; @@ -58,12 +57,25 @@ namespace ICSharpCode.Reports.Core.Exporter } + + #region PageBreak + + protected void BuildNewPage(ExporterCollection myList,BaseSection section) + { + FirePageFull(myList); + section.SectionOffset = SinglePage.SectionBounds.PageHeaderRectangle.Location.Y; + myList.Clear(); + } + + protected void FirePageFull (ExporterCollection items) { EventHelper.Raise(PageFull,this,new NewPageEventArgs(items)); } - + #endregion + + protected void FireSectionRendering (BaseSection section) { SectionRenderEventArgs srea = new SectionRenderEventArgs(section, @@ -143,11 +155,13 @@ namespace ICSharpCode.Reports.Core.Exporter get {return this.saveSize;} } + protected IExpressionEvaluatorFacade Evaluator { get {return this.evaluator;} } + protected void FillRow (ISimpleContainer row) { DataNavigator.Fill(row.Items); @@ -169,7 +183,6 @@ namespace ICSharpCode.Reports.Core.Exporter PrintHelper.SetLayoutForRow(Graphics,Layouter,row); } - protected static Point BaseConvert(ExporterCollection myList,ISimpleContainer container,int leftPos,Point curPos) { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs index c93c003832..bb14db5746 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/GroupedRowConverter.cs @@ -40,6 +40,7 @@ namespace ICSharpCode.Reports.Core.Exporter if (item == null) { throw new ArgumentNullException("item"); } + ISimpleContainer simpleContainer = item as ISimpleContainer; this.parent = parent; @@ -67,7 +68,7 @@ namespace ICSharpCode.Reports.Core.Exporter int defaultLeftPos = parent.Location.X; - Rectangle curRect = Rectangle.Empty; + Rectangle pageBreakRect = Rectangle.Empty; do { @@ -90,27 +91,26 @@ namespace ICSharpCode.Reports.Core.Exporter do { currentPosition = ConvertGroupChilds (exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition); - curRect = PageBreakRectangle((BaseReportItem)section.Items[1],currentPosition,section); + pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[1],currentPosition); - if (PrintHelper.IsPageFull(curRect,base.SectionBounds )) { - BuildNewPage(exporterCollection,section); + if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds )) { + base.BuildNewPage(exporterCollection,section); currentPosition = CalculateStartPosition (); } } while ( base.DataNavigator.ChildMoveNext()); } - } else { - // No Grouping + // No Grouping at all currentPosition = ConvertStandardRow (exporterCollection,section,simpleContainer,defaultLeftPos,currentPosition); } - curRect = PageBreakRectangle((BaseReportItem)section.Items[0],currentPosition,section); - //PageBreakNeeded(exporterCollection,section,curRect,currentPosition); - if (PrintHelper.IsPageFull(curRect,base.SectionBounds)) { - BuildNewPage(exporterCollection,section); - currentPosition = CalculateStartPosition (); + + pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)section.Items[0],currentPosition); + if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) { + base.BuildNewPage(exporterCollection,section); + currentPosition = CalculateStartPosition(); } ShouldDrawBorder (section,exporterCollection); @@ -125,29 +125,19 @@ namespace ICSharpCode.Reports.Core.Exporter return exporterCollection; } - - Rectangle PageBreakRectangle(BaseReportItem simpleContainer,Point curPos,BaseSection section) - { - return new Rectangle(new Point (simpleContainer.Location.X,curPos.Y), simpleContainer.Size); - } - - - + +// private Point PerformPageBreak (ExporterCollection exporterCollection,BaseSection section) +// { +// BuildNewPage(exporterCollection,section); +// return CalculateStartPosition(); +// } +// private Point CalculateStartPosition() { return new Point(base.SectionBounds.PageHeaderRectangle.X,base.SectionBounds.PageHeaderRectangle.Y); } - - private void BuildNewPage(ExporterCollection myList,BaseSection section) - { - base.FirePageFull(myList); - section.SectionOffset = base.SinglePage.SectionBounds.PageHeaderRectangle.Location.Y; - myList.Clear(); - } - - private Point ConvertGroupHeader(ExporterCollection mylist,BaseSection section,ISimpleContainer simpleContainer,int leftPos,Point offset) { Point retVal = Point.Empty; diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs index d2d083d109..5cb8e3c9bc 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Exporter/Converters/TableConverter.cs @@ -23,7 +23,7 @@ namespace ICSharpCode.Reports.Core.Exporter public TableConverter(IDataNavigator dataNavigator, ExporterPage singlePage, - + ILayouter layouter ):base(dataNavigator,singlePage,layouter) { } @@ -50,7 +50,7 @@ namespace ICSharpCode.Reports.Core.Exporter { Point currentPosition = new Point(PrintHelper.DrawingAreaRelativeToParent(this.baseTable.Parent,this.baseTable).Location.X, - base.SectionBounds.DetailStart.Y); + base.SectionBounds.DetailStart.Y); int defaultLeftPos = currentPosition.X; @@ -69,13 +69,13 @@ namespace ICSharpCode.Reports.Core.Exporter simpleContainer.Parent = (BaseReportItem)this.baseTable; base.SaveSize( new Size (simpleContainer.Size.Width,simpleContainer.Size.Height)); // Header/FooterRow - + if (PrintHelper.IsTextOnlyRow(simpleContainer) ) { headerContainer = simpleContainer; currentPosition = BaseConverter.BaseConvert(mylist,headerContainer,defaultLeftPos,currentPosition); } - else + else { // DataRegion base.SaveSize(simpleContainer.Size); @@ -90,31 +90,34 @@ namespace ICSharpCode.Reports.Core.Exporter base.PrepareContainerForConverting(null,simpleContainer); - if (PrintHelper.IsPageFull(new Rectangle(new Point (simpleContainer.Location.X,currentPosition.Y),simpleContainer.Size),base.SectionBounds)) { - base.FirePageFull(mylist); - mylist.Clear(); + Rectangle pageBreakRect = PrintHelper.CalculatePageBreakRectangle((BaseReportItem)simpleContainer,currentPosition); + + if (PrintHelper.IsPageFull(pageBreakRect,base.SectionBounds)) + { + base.BuildNewPage(mylist,section); + + currentPosition = BaseConverter.BaseConvert(mylist,headerContainer, + defaultLeftPos, + base.SectionBounds.ReportHeaderRectangle.Location); - currentPosition = BaseConverter.BaseConvert(mylist,headerContainer, - defaultLeftPos, - base.SectionBounds.ReportHeaderRectangle.Location); + } + + currentPosition = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); + + simpleContainer.Size = base.RestoreSize; } - - currentPosition = BaseConverter.BaseConvert(mylist,simpleContainer,defaultLeftPos,currentPosition); - - simpleContainer.Size = base.RestoreSize; + while (base.DataNavigator.MoveNext()); + //Allway's reset the DataNavigator + base.DataNavigator.Reset(); + base.DataNavigator.MoveNext(); + SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left, + currentPosition.Y, + SectionBounds.ReportFooterRectangle.Width, + SectionBounds.ReportFooterRectangle.Height); } - while (base.DataNavigator.MoveNext()); - //Allway's reset the DataNavigator - base.DataNavigator.Reset(); - base.DataNavigator.MoveNext(); - SectionBounds.ReportFooterRectangle = new Rectangle(SectionBounds.ReportFooterRectangle.Left, - currentPosition.Y, - SectionBounds.ReportFooterRectangle.Width, - SectionBounds.ReportFooterRectangle.Height); } } + return mylist; } - return mylist; } } -}