From 82eb2f6eb4d5ef96ee96a3ffee62330d9f709c66 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Mon, 21 Oct 2013 20:16:41 +0200 Subject: [PATCH] Cleanup DataPageBuilder.cs --- .../Src/PageBuilder/BasePageBuilder.cs | 96 +++---- .../Src/PageBuilder/DataPageBuilder.cs | 237 ++---------------- 2 files changed, 61 insertions(+), 272 deletions(-) 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 80efae4007..fc66fd307a 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs @@ -42,15 +42,9 @@ namespace ICSharpCode.Reporting.PageBuilder ExpressionVisitor = new ExpressionVisitor(ReportModel.ReportSettings); } + #region create Report Sections - protected ExportPage InitNewPage(){ - var pi = CreatePageInfo(); - return new ExportPage(pi,ReportModel.ReportSettings.PageSize); - } - - #region create Sections - - protected void BuildReportHeader() + void BuildReportHeader() { if (Pages.Count == 0) { var header = CreateSection(ReportModel.ReportHeader,CurrentLocation); @@ -61,7 +55,7 @@ namespace ICSharpCode.Reporting.PageBuilder } - protected void BuildPageHeader() + void BuildPageHeader() { var pageHeader = CreateSection(ReportModel.PageHeader,CurrentLocation); DetailStart = new Point(ReportModel.ReportSettings.LeftMargin,pageHeader.Location.Y + pageHeader.DesiredSize.Height +1); @@ -69,7 +63,7 @@ namespace ICSharpCode.Reporting.PageBuilder } - protected void BuildPageFooter() + void BuildPageFooter() { CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin, ReportModel.ReportSettings.PageSize.Height - ReportModel.ReportSettings.BottomMargin - ReportModel.PageFooter.Size.Height); @@ -80,6 +74,13 @@ namespace ICSharpCode.Reporting.PageBuilder } + void AddSectionToPage(IExportContainer header) + { + header.Parent = CurrentPage; + CurrentPage.ExportedItems.Add(header); + } + + protected void BuildReportFooter() { var lastSection = CurrentPage.ExportedItems.Last(); @@ -90,15 +91,6 @@ namespace ICSharpCode.Reporting.PageBuilder AddSectionToPage(reportFooter); } - #endregion - - protected virtual ExportPage CreateNewPage() - { - var page = InitNewPage(); - CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.TopMargin); - return page; - } - protected void WriteStandardSections() { this.BuildReportHeader(); @@ -106,29 +98,6 @@ namespace ICSharpCode.Reporting.PageBuilder BuildPageFooter(); } - protected bool PageFull(IExportColumn column) - { - var rectToPrint = new Rectangle(column.Location,column.Size); - var rr = new Rectangle(new Point(column.Location.X + DetailsRectangle.Location.X,column.Location.Y + DetailsRectangle.Location.Y), - column.Size); - if (!DetailsRectangle.Contains(rr)) { - return true; - } - return false; - } - - - protected bool old_PageFull(List columns) - { - var rectToPrint = new Rectangle(columns[0].Location,columns[0].Size); - var rr = new Rectangle(new Point(columns[0].Location.X + DetailsRectangle.Location.X,columns[0].Location.Y + DetailsRectangle.Location.Y), - columns[0].Size); - if (!DetailsRectangle.Contains(rr)) { - return true; - } - return false; - } - protected bool PageFull(IExportContainer row) { if (row.DisplayRectangle.Bottom > DetailEnds.Y) { @@ -137,16 +106,9 @@ namespace ICSharpCode.Reporting.PageBuilder return false; } -// protected bool row_PageFull(IExportContainer row) { -// var rectToPrint = new Rectangle(new Point(row.Location.X,row.Location.Y + DetailsRectangle.Location.Y), -// row.DesiredSize); -// if (!DetailsRectangle.Contains(rectToPrint)) { -// return true; -// } -// return false; -// } - + #endregion + protected IExportContainer CreateSection(IReportContainer container,Point location) { var containerConverter = new ContainerConverter(Graphics, location); @@ -162,13 +124,7 @@ namespace ICSharpCode.Reporting.PageBuilder return convertedContainer; } - - protected void AddSectionToPage(IExportContainer header) - { - header.Parent = CurrentPage; - CurrentPage.ExportedItems.Add(header); - } - + #region Arrange and Measure protected Size MeasureElement (IExportColumn element) { var measureStrategy = element.MeasurementStrategy(); @@ -182,6 +138,9 @@ namespace ICSharpCode.Reporting.PageBuilder exportArrange.Arrange(exportContainer); } + #endregion + + #region Pagehandling IPageInfo CreatePageInfo() { @@ -192,7 +151,19 @@ namespace ICSharpCode.Reporting.PageBuilder return pi; } - + ExportPage InitNewPage(){ + var pi = CreatePageInfo(); + return new ExportPage(pi,ReportModel.ReportSettings.PageSize); + } + + + protected virtual ExportPage CreateNewPage() + { + var page = InitNewPage(); + CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.TopMargin); + return page; + } + protected virtual void AddPage(ExportPage page) { if (Pages.Count == 0) { page.IsFirstPage = true; @@ -203,7 +174,7 @@ namespace ICSharpCode.Reporting.PageBuilder public virtual void BuildExportList() { - this.Pages.Clear(); + Pages.Clear(); CurrentPage = CreateNewPage (); WriteStandardSections(); CurrentLocation = DetailStart; @@ -216,6 +187,10 @@ namespace ICSharpCode.Reporting.PageBuilder } } + #endregion + + #region Visitors + protected void RunExpressions(ReportSettings reportsettings) { var er = new ExpressionRunner(Pages,reportsettings); @@ -229,6 +204,7 @@ namespace ICSharpCode.Reporting.PageBuilder d.Run(); } + #endregion protected IReportModel ReportModel {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 index a403303d51..8113517586 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs @@ -35,6 +35,7 @@ namespace ICSharpCode.Reporting.PageBuilder public override void BuildExportList() { + CreateDataSource(); base.BuildExportList(); BuildDetail(); base.BuildReportFooter(); @@ -43,23 +44,23 @@ namespace ICSharpCode.Reporting.PageBuilder RunExpressions(ReportModel.ReportSettings); } + void BuildDetail() { - var rows = new List(); + var exportRows = new List(); var converter = new ContainerConverter(base.Graphics, CurrentLocation); var position = DetailStart; CurrentSection = ReportModel.DetailSection; - var collectionSource = new CollectionSource(List,ElementType,ReportModel.ReportSettings); - if(collectionSource.Count > 0) { - collectionSource.Bind(); + + if(DataSourceContainsData()) { CurrentLocation = DetailStart; do { var row = CreateContainerForSection(CurrentPage,position); - collectionSource.Fill(CurrentSection.Items); + DataSource.Fill(CurrentSection.Items); var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection.Items); converter.SetParent(row,convertedItems); @@ -67,13 +68,12 @@ namespace ICSharpCode.Reporting.PageBuilder MeasureAndArrangeContainer(row); if (PageFull(row)) { - InsertRange(rows); + InsertExportRows(exportRows); MeasureAndArrangeContainer(row); - rows.Clear(); + exportRows.Clear(); ExpressionVisitor.Visit(CurrentPage); CurrentPage.PageInfo.PageNumber = Pages.Count + 1; Pages.Add(CurrentPage); - MeasureAndArrangeContainer(row); position = ResetPosition(); CurrentPage = CreateNewPage(); @@ -86,210 +86,31 @@ namespace ICSharpCode.Reporting.PageBuilder row.ExportedItems.AddRange(convertedItems); ExpressionVisitor.Visit(row as ExportContainer); - rows.Add(row); + exportRows.Add(row); position = new Point(CurrentSection.Location.X,position.Y + row.DesiredSize.Height + 1); } - while (collectionSource.MoveNext()); - InsertRange(rows); + while (DataSource.MoveNext()); + InsertExportRows(exportRows); } } - - /* - void BuildDetail_2() - { - var converter = new ContainerConverter(base.Graphics, CurrentLocation); -// var position = ResetPosition(); - var position = DetailStart; - var collectionSource = new CollectionSource(List,ElementType,ReportModel.ReportSettings); - CurrentSection = ReportModel.DetailSection; - - IExportContainer detail = null; - - CurrentSection = ReportModel.DetailSection; - if(collectionSource.Count > 0) { - collectionSource.Bind(); - CurrentLocation = DetailStart; - -// detail = CreateContainerForSection(DetailStart); -// detail.DesiredSize = new Size(detail.Size.Width,DetailEnds.Y - DetailStart.Y); - -// detail.Parent = CurrentPage; - detail = CreateDetailSection(DetailStart); - detail.Parent = CurrentPage; - InsertDetailAtPosition(detail); - do { -// detail = CreateContainerForSection(position); - var row = CreateContainerForSection(position); - row.Parent = detail; - collectionSource.Fill(CurrentSection.Items); - var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection.Items,position); - converter.SetParent(row,convertedItems); - if (PageFull(convertedItems)) { -// detail.ExportedItems.AddRange(convertedItems); -// CurrentPage.ExportedItems.Insert(2,detail); - row.ExportedItems.AddRange(convertedItems); - MeasureAndArrangeContainer(row); - detail.ExportedItems.Add(row); - Pages.Add(CurrentPage); -// MeasureAndArrangeContainer(detail); - - position = ResetPosition(); - CurrentPage = CreateNewPage(); - WriteStandardSections(); - CurrentLocation = DetailStart; -// detail = CreateContainerForSection(DetailStart); - - } else { -// detail.ExportedItems.AddRange(convertedItems); - row.ExportedItems.AddRange(convertedItems); - MeasureAndArrangeContainer(row); - detail.ExportedItems.Add(row); -// InsertDetailAtPosition(detail); -// position = new Point(CurrentSection.Location.Y,position.Y + CurrentSection.Size.Height + 5); - position = new Point(CurrentSection.Location.X,position.Y + row.DesiredSize.Height + 5); - } - } - - while (collectionSource.MoveNext()); - InsertDetailAtPosition(detail); - - } else { - detail = CreateContainerForSection(DetailStart); - InsertDetailAtPosition(detail); - } - } - */ - - /* - void BuildDetail_1() + void CreateDataSource() { - var converter = new ContainerConverter(base.Graphics, CurrentLocation); - var position = ResetPosition(); - var collectionSource = new CollectionSource(List,ElementType,ReportModel.ReportSettings); - CurrentSection = ReportModel.DetailSection; - - IExportContainer detail = null; - - CurrentSection = ReportModel.DetailSection; - - if(collectionSource.Count > 0) { - collectionSource.Bind(); - CurrentLocation = DetailStart; - - detail = CreateContainerForSection(DetailStart); -// detail.DesiredSize = new Size(detail.Size.Width,DetailEnds.Y - DetailStart.Y); - - detail.Parent = CurrentPage; - - do { - collectionSource.Fill(CurrentSection.Items); - var convertedItems = converter.CreateConvertedList(ReportModel.DetailSection.Items,position); - converter.SetParent(detail,convertedItems); - if (PageFull(convertedItems)) { - detail.ExportedItems.AddRange(convertedItems); - CurrentPage.ExportedItems.Insert(2,detail); - Pages.Add(CurrentPage); - MeasureAndArrangeContainer(detail); - - position = ResetPosition(); - CurrentPage = CreateNewPage(); - WriteStandardSections(); - CurrentLocation = DetailStart; - detail = CreateContainerForSection(DetailStart); - - } else { - detail.ExportedItems.AddRange(convertedItems); - MeasureAndArrangeContainer(detail); -// position = new Point(CurrentSection.Location.Y,position.Y + CurrentSection.Size.Height + 5); - position = new Point(CurrentSection.Location.X,position.Y + detail.DesiredSize.Height + 5); - } - } - - while (collectionSource.MoveNext()); - InsertDetailAtPosition(detail); - - } else { - detail = CreateContainerForSection(DetailStart); - InsertDetailAtPosition(detail); + DataSource = new CollectionSource(List, ElementType, ReportModel.ReportSettings); + if (DataSourceContainsData()) { + DataSource.Bind(); } } - */ - - /* - void row_BuildDetail() - { - var converter = new ContainerConverter(base.Graphics, CurrentLocation); - var position = ResetPosition(); - var collectionSource = new CollectionSource(List,ElementType,ReportModel.ReportSettings); - CurrentSection = ReportModel.DetailSection; - - IExportContainer detail = null; - if(collectionSource.Count > 0) { - collectionSource.Bind(); - - detail = CreateDetail(DetailStart); - - do { - collectionSource.Fill(CurrentSection.Items); - - var row = CreateAndArrangeContainer(converter,position,detail); - Console.WriteLine("position {0}",position); - if (row_PageFull(row)) { - InsertDetailAtPosition(detail); - Pages.Add(CurrentPage); - CurrentPage = CreateNewPage(); - WriteStandardSections(); - position = ResetPosition(); - detail = CreateDetail(DetailStart); - CurrentLocation = DetailStart; - row = CreateAndArrangeContainer(converter,position,detail); - } - - detail.ExportedItems.Add(row); - position = new Point(CurrentSection.Location.Y,position.Y + CurrentSection.Size.Height); - } - while (collectionSource.MoveNext()); - - InsertDetailAtPosition(detail); - } else { - detail = CreateContainerForSection(DetailStart); - InsertDetailAtPosition(detail); - base.BuildReportFooter(); + bool DataSourceContainsData () { + if (DataSource.Count > 0) { + return true; } + return false; } - */ - - - /* - IExportContainer CreateContainerIfNotExist(IReportContainer container, IExportContainer parent, Point position) - { - var isContainer = container.Items[0] is IReportContainer; - if (!isContainer) { - var row = CreateContainerForSection(position); - row.Name = "Row"; - row.Parent = parent; - row.Location = new Point(50, position.Y); - row.Size = new Size(400, container.Items[0].Size.Height + 4); - row.BackColor = Color.Green; - return row; - } - return CreateContainerForSection(container.Items[0].Location); - } - - - IExportContainer CreateDetailSection(Point startLocation) - { - var detail = CreateContainerForSection(startLocation); - detail.Parent = CurrentPage; - detail.DesiredSize = new Size(detail.Size.Width,DetailEnds.Y - DetailStart.Y); - return detail; - } -*/ - + Point ResetPosition () { return new Point(DetailStart.X,1); } @@ -311,7 +132,7 @@ namespace ICSharpCode.Reporting.PageBuilder } - void InsertRange(List list) + void InsertExportRows(List list) { if (Pages.Count == 0) { CurrentPage.ExportedItems.InsertRange(2, list); @@ -321,20 +142,12 @@ namespace ICSharpCode.Reporting.PageBuilder } - void InsertDetailAtPosition(IExportContainer container) - { - if (Pages.Count == 0) { - CurrentPage.ExportedItems.Insert(2, container); - } else { - CurrentPage.ExportedItems.Insert(1, container); - } - } - + internal CollectionSource DataSource {get; private set;} - internal IReportContainer CurrentSection { get; private set; } + internal IEnumerable List {get; private set;} - public IEnumerable List {get; private set;} + protected IReportContainer CurrentSection { get; private set; } - public Type ElementType {get;private set;} + protected Type ElementType {get;private set;} } }