From 6a08d8f096d41a9ba6bf8fbdac287213bc326f8e Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Fri, 7 Jun 2013 20:12:20 +0200 Subject: [PATCH] DataPageBuilder.cs --- .../ICSharpCode.Reporting.csproj | 1 + .../Src/PageBuilder/BasePageBuilder.cs | 63 +++++++++++++++++++ .../Src/PageBuilder/DataPageBuilder.cs | 56 +++++++++++++++++ .../Src/PageBuilder/FormPageBuilder.cs | 57 ++--------------- .../Src/ReportingFactory.cs | 3 + .../ICSharpCode.Reporting.Test.csproj | 1 + .../src/PageBuilder/DataPageBuilderFixture.cs | 61 ++++++++++++++++++ .../src/PageBuilder/PageLayoutFixture.cs | 17 +++-- 8 files changed, 203 insertions(+), 56 deletions(-) create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/DataPageBuilderFixture.cs diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj index 7b1f15e1bf..0351c2a900 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj @@ -124,6 +124,7 @@ + diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs index 45890030e4..deeb9bd393 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs @@ -10,6 +10,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing; +using System.Linq; using ICSharpCode.Reporting.BaseClasses; using ICSharpCode.Reporting.Globals; @@ -42,6 +43,66 @@ namespace ICSharpCode.Reporting.PageBuilder return new Page(pi,ReportModel.ReportSettings.PageSize); } + #region create Sections + + protected void BuildReportHeader() + { + if (Pages.Count == 0) { + var header = CreateSection(ReportModel.ReportHeader,CurrentLocation); + var r = new Rectangle(header.Location.X,header.Location.Y,header.Size.Width,header.Size.Height); + CurrentLocation = new Point (ReportModel.ReportSettings.LeftMargin,r.Bottom + 1); + AddSectionToPage(header); + } + } + + + protected void BuildPageHeader() + { + + var pageHeader = CreateSection(ReportModel.PageHeader,CurrentLocation); + DetailStart = new Point(ReportModel.ReportSettings.LeftMargin,pageHeader.Location.Y + pageHeader.Size.Height +1); + AddSectionToPage(pageHeader); + } + + + protected void BuildPageFooter() + { + Console.WriteLine("FormPageBuilder - Build PageFooter {0} - {1}",ReportModel.ReportSettings.PageSize.Height,ReportModel.ReportSettings.BottomMargin); + CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin, + ReportModel.ReportSettings.PageSize.Height - ReportModel.ReportSettings.BottomMargin - ReportModel.PageFooter.Size.Height); + + var pageFooter = CreateSection(ReportModel.PageFooter,CurrentLocation); + AddSectionToPage(pageFooter); + } + + + protected void BuildReportFooter() + { + Console.WriteLine("FormPageBuilder - Build ReportFooter {0} - {1}",ReportModel.ReportSettings.PageSize.Height,ReportModel.ReportSettings.BottomMargin); + var lastSection = CurrentPage.ExportedItems.Last(); + CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin, + lastSection.Location.Y - lastSection.Size.Height - 1); + + var reportFooter = CreateSection(ReportModel.ReportFooter,CurrentLocation); + AddSectionToPage(reportFooter); + } + + #endregion + + protected virtual void WritePages() + { + CurrentPage = InitNewPage(); + CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.TopMargin); + this.BuildReportHeader(); + BuildPageHeader(); + BuildPageFooter(); +// BuilDetail(); + BuildReportFooter(); +// base.AddPage(CurrentPage); +// Console.WriteLine("------{0}---------",ReportModel.ReportSettings.PageSize); + } + + protected IExportContainer CreateSection(IReportContainer section,Point location) { var containerConverter = new ContainerConverter(graphics, section, location); @@ -86,6 +147,8 @@ namespace ICSharpCode.Reporting.PageBuilder protected IPage CurrentPage {get; set;} + protected Point DetailStart {get;private set;} + public Collection Pages {get; private set;} } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs new file mode 100644 index 0000000000..ef69d3666f --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs @@ -0,0 +1,56 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 06.06.2013 + * Time: 20:27 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Collections.Generic; +using ICSharpCode.Reporting.Items; + +namespace ICSharpCode.Reporting.PageBuilder +{ + /// + /// Description of DataPageBuilder. + /// + public class DataPageBuilder:BasePageBuilder + { + public DataPageBuilder(ReportModel reportModel, IEnumerable list):base(reportModel) + { + List = list; + } + + + public override void BuildExportList() + { + base.BuildExportList(); + WritePages (); + } + + + void BuilDetail() + { + Console.WriteLine("FormPageBuilder - Build DetailSection {0} - {1} - {2}",ReportModel.ReportSettings.PageSize.Width,ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.RightMargin); + CurrentLocation = DetailStart; + + var detail = CreateSection(ReportModel.DetailSection,CurrentLocation); + detail.Parent = CurrentPage; + CurrentPage.ExportedItems.Insert(2,detail); + } + + + protected override void WritePages() + { + base.WritePages(); + BuilDetail(); + base.AddPage(CurrentPage); + Console.WriteLine("------{0}---------",ReportModel.ReportSettings.PageSize); + } + + + + public IEnumerable List {get; private set;} + } +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs index b8331e69fa..7e95719007 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs @@ -22,8 +22,6 @@ namespace ICSharpCode.Reporting.PageBuilder public class FormPageBuilder:BasePageBuilder { - Point detailStart; - public FormPageBuilder(IReportModel reportModel):base(reportModel) { @@ -37,65 +35,22 @@ namespace ICSharpCode.Reporting.PageBuilder } - void BuildReportHeader() - { - if (Pages.Count == 0) { - IExportContainer header = CreateSection(ReportModel.ReportHeader,CurrentLocation); - var r = new Rectangle(header.Location.X,header.Location.Y,header.Size.Width,header.Size.Height); - CurrentLocation = new Point (ReportModel.ReportSettings.LeftMargin,r.Bottom + 1); - AddSectionToPage(header); - } - } - - void BuildPageHeader() - { - IExportContainer header = CreateSection(ReportModel.PageHeader,CurrentLocation); - detailStart = new Point(ReportModel.ReportSettings.LeftMargin,header.Location.Y + header.Size.Height +1); - AddSectionToPage(header); - } void BuilDetail() { Console.WriteLine("FormPageBuilder - Build DetailSection {0} - {1} - {2}",ReportModel.ReportSettings.PageSize.Width,ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.RightMargin); - CurrentLocation = detailStart; - IExportContainer header = CreateSection(ReportModel.DetailSection,CurrentLocation); - header.Parent = CurrentPage; - CurrentPage.ExportedItems.Insert(2,header); - } - - - void BuildPageFooter() - { - Console.WriteLine("FormPageBuilder - Build PageFooter {0} - {1}",ReportModel.ReportSettings.PageSize.Height,ReportModel.ReportSettings.BottomMargin); - CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin, - ReportModel.ReportSettings.PageSize.Height - ReportModel.ReportSettings.BottomMargin - ReportModel.PageFooter.Size.Height); + CurrentLocation = DetailStart; - IExportContainer header = CreateSection(ReportModel.PageFooter,CurrentLocation); - AddSectionToPage(header); - } - - - void BuildReportFooter() - { - Console.WriteLine("FormPageBuilder - Build ReportFooter {0} - {1}",ReportModel.ReportSettings.PageSize.Height,ReportModel.ReportSettings.BottomMargin); - var lastSection = CurrentPage.ExportedItems.Last(); - CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin, - lastSection.Location.Y - lastSection.Size.Height - 1); - - IExportContainer header = CreateSection(ReportModel.ReportFooter,CurrentLocation); - AddSectionToPage(header); + var detail = CreateSection(ReportModel.DetailSection,CurrentLocation); + detail.Parent = CurrentPage; + CurrentPage.ExportedItems.Insert(2,detail); } - void WritePages() + protected override void WritePages() { - CurrentPage = base.InitNewPage(); - CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.TopMargin); - this.BuildReportHeader(); - BuildPageHeader(); - BuildPageFooter(); + base.WritePages(); BuilDetail(); - BuildReportFooter(); base.AddPage(CurrentPage); Console.WriteLine("------{0}---------",ReportModel.ReportSettings.PageSize); } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs index 578cb7fdbe..c952d36bc8 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/ReportingFactory.cs @@ -40,6 +40,9 @@ namespace ICSharpCode.Reporting return builder; } + + + internal IReportCreator ReportCreator (Stream stream) { IReportModel reportModel = LoadReportModel (stream); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/ICSharpCode.Reporting.Test.csproj b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/ICSharpCode.Reporting.Test.csproj index 05ee4ca4ff..4dbb3adcf2 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/ICSharpCode.Reporting.Test.csproj +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/ICSharpCode.Reporting.Test.csproj @@ -67,6 +67,7 @@ + diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/DataPageBuilderFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/DataPageBuilderFixture.cs new file mode 100644 index 0000000000..5dc23ab3a2 --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/DataPageBuilderFixture.cs @@ -0,0 +1,61 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 06.06.2013 + * Time: 20:29 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Linq; +using System.Reflection; +using ICSharpCode.Reporting.Exporter; +using ICSharpCode.Reporting.Interfaces; +using ICSharpCode.Reporting.Items; +using ICSharpCode.Reporting.PageBuilder; +using ICSharpCode.Reporting.PageBuilder.ExportColumns; +using NUnit.Framework; + +namespace ICSharpCode.Reporting.Test.PageBuilder +{ + [TestFixture] + public class DataPageBuilderFixture + { + private IReportCreator reportCreator; + + [Test] + public void CanInitDataPageBuilder() + { + var dpb = new DataPageBuilder (new ReportModel(),new System.Collections.Generic.List()); +// dpb.DataSource(new ReportModel(),new System.Collections.Generic.List()); + Assert.That(dpb,Is.Not.Null); + } + + + [Test] + public void PageContainsFiveSections() + { + reportCreator.BuildExportList(); + var x = reportCreator.Pages[0].ExportedItems; + var y = from s in x + where s.GetType() == typeof(ExportContainer) + select s; + Assert.That(y.ToList().Count,Is.EqualTo(5)); + Console.WriteLine("-------ShowDebug---------"); + var ex = new DebugExporter(reportCreator.Pages); + ex.Run(); + } + + + [SetUp] + public void LoadFromStream() + { + System.Reflection.Assembly asm = Assembly.GetExecutingAssembly(); + var stream = asm.GetManifestResourceStream(TestHelper.RepWithTwoItems); + var reportingFactory = new ReportingFactory(); +// reportCreator = reportingFactory.ReportCreator(stream); + var model = reportingFactory.LoadReportModel (stream); + reportCreator = new DataPageBuilder(model,new System.Collections.Generic.List()); + } + } +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs index 6a4b8a8d02..9e8889ffab 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/PageLayoutFixture.cs @@ -25,7 +25,7 @@ namespace ICSharpCode.Reporting.Test.PageBuilder private IReportCreator reportCreator; [Test] - public void PageContainsFourExportContainer() + public void PageContainsFiveSections() { reportCreator.BuildExportList(); var x = reportCreator.Pages[0].ExportedItems; @@ -38,18 +38,25 @@ namespace ICSharpCode.Reporting.Test.PageBuilder ex.Run(); } + [Test] public void SectionsInPageDoNotOverlap() { - Point p = Point.Empty; + Point referencePoint = Point.Empty; + var referenceRect = Rectangle.Empty; + reportCreator.BuildExportList(); foreach (var item in reportCreator.Pages[0].ExportedItems) { var p2 = new Point(item.Location.X,item.Location.Y); - Console.WriteLine("{0} - {1} - {2}- {3}",p2,item.Size.Height,item.Name,item.DisplayRectangle); + + Console.WriteLine("{0} - {1} - {2}- <{3}>",p2,item.Size.Height,item.Name,item.DisplayRectangle); if (item.Name != "ReportFooter") { - Assert.That(p2.Y,Is.GreaterThan(p.Y),item.Name); + Assert.That(p2.Y,Is.GreaterThan(referencePoint.Y),item.Name); + var t = referenceRect.IntersectsWith(item.DisplayRectangle); + Assert.That(referenceRect.IntersectsWith(item.DisplayRectangle),Is.False); } - p = new Point(item.Location.X,item.Location.Y + item.Size.Height); + referencePoint = new Point(item.Location.X,item.Location.Y + item.Size.Height); + referenceRect = item.DisplayRectangle; } }