diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs index 173308e507..0934146250 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs @@ -11,6 +11,7 @@ using System.Collections.ObjectModel; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; +using System.Windows.Markup; using ICSharpCode.Reporting.Exporter.Visitors; using ICSharpCode.Reporting.Interfaces.Export; @@ -35,31 +36,21 @@ namespace ICSharpCode.Reporting.Exporter visitor = new WpfVisitor(reportSettings); } - + public override void Run () { - InitFixedPage(); + Document = new FixedDocument(); + foreach (var page in Pages) { - InternalRun(page); + var fixedPage = InternalRun(page); + AddPageToDocument(Document,fixedPage); } } - - void InitFixedPage() - { - fixedPage = new FixedPage(); - fixedPage.Width = reportSettings.PageSize.Width; - fixedPage.Height = reportSettings.PageSize.Height; - } - - FixedPage fixedPage; - - public FixedPage FixedPage { - get { return fixedPage; } - } - - - void InternalRun(IExportContainer container) + + FixedPage InternalRun(IExportContainer container) { + + FixedPage fixedPage = CreateFixedPage(); Canvas canvas = null ; foreach (var item in container.ExportedItems) { var exportContainer = item as IExportContainer; @@ -76,28 +67,39 @@ namespace ICSharpCode.Reporting.Exporter Canvas.SetTop(ui, ((IExportColumn)element).Location.Y); canvas.Children.Add(ui); } -// var size = new Size(exportContainer.DesiredSize.Width,exportContainer.DesiredSize.Height); -// canvas.Measure(size); -// canvas.Arrange(new Rect(new System.Windows.Point(exportContainer.Location.X,exportContainer.Location.Y),size )); -// canvas.UpdateLayout(); -// var exportArrange = exportContainer.GetArrangeStrategy(); -// exportArrange.Arrange(exportContainer); - } -// InternalRun(item as IExportContainer); - } else { - if (acceptor != null) { - Console.WriteLine("..Item..."); - acceptor.Accept(visitor); - var uiElement = visitor.UIElement; - if (canvas != null) { - Canvas.SetLeft(uiElement, item.Location.X - exportContainer.Location.X); - Canvas.SetTop(uiElement, item.Location.Y - exportContainer.Location.Y); - canvas.Children.Add(uiElement); + } else { + if (acceptor != null) { + acceptor.Accept(visitor); + var uiElement = visitor.UIElement; + if (canvas != null) { + Canvas.SetLeft(uiElement, item.Location.X - exportContainer.Location.X); + Canvas.SetTop(uiElement, item.Location.Y - exportContainer.Location.Y); + canvas.Children.Add(uiElement); + } + fixedPage.Children.Add(uiElement); } - fixedPage.Children.Add(uiElement); } } } + return fixedPage; } + + FixedPage CreateFixedPage() + { + var fixedPage = new FixedPage(); + fixedPage.Width = reportSettings.PageSize.Width; + fixedPage.Height = reportSettings.PageSize.Height; + return fixedPage; + } + + + static void AddPageToDocument(FixedDocument fixedDocument,FixedPage page) + { + PageContent pageContent = new PageContent(); + ((IAddChild)pageContent).AddChild(page); + fixedDocument.Pages.Add(pageContent); + } + + public FixedDocument Document {get;private set;} } } 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 38311ee905..f6fbe71c28 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs @@ -56,7 +56,6 @@ namespace ICSharpCode.Reporting.PageBuilder protected void BuildPageHeader() { - var pageHeader = CreateSection(ReportModel.PageHeader,CurrentLocation); DetailStart = new Point(ReportModel.ReportSettings.LeftMargin,pageHeader.Location.Y + pageHeader.Size.Height +1); AddSectionToPage(pageHeader); @@ -70,7 +69,6 @@ namespace ICSharpCode.Reporting.PageBuilder ReportModel.ReportSettings.PageSize.Height - ReportModel.ReportSettings.BottomMargin - ReportModel.PageFooter.Size.Height); var pageFooter = CreateSection(ReportModel.PageFooter,CurrentLocation); - Console.WriteLine("pageFooterStartAt {0}",pageFooter.Location); DetailEnds = new Point(pageFooter.Location.X,pageFooter.Location.Y -1); AddSectionToPage(pageFooter); } @@ -89,18 +87,20 @@ namespace ICSharpCode.Reporting.PageBuilder #endregion - protected virtual void WritePages() + protected virtual IPage CreateNewPage() { - CurrentPage = InitNewPage(); + var page = InitNewPage(); CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.TopMargin); - + return page; + } + + protected void WriteStandardSections() { this.BuildReportHeader(); BuildPageHeader(); BuildPageFooter(); BuildReportFooter(); } - protected IExportContainer CreateSection(IReportContainer section,Point location) { var containerConverter = new ContainerConverter(Graphics, section, location); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs index 8a5ea58b5d..bc88ff5f50 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs @@ -72,7 +72,7 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter exportColumn.Location = new Point(element.Location.X,element.Location.Y + position.Y); exportColumn.DesiredSize = Measure(element); itemsList.Add(exportColumn); - Console.WriteLine("Size {0} DesiredSize {1}", exportColumn.Size, exportColumn.DesiredSize); +// Console.WriteLine("Size {0} DesiredSize {1}", exportColumn.Size, exportColumn.DesiredSize); } return itemsList; } @@ -86,7 +86,7 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter protected void ArrangeContainer(ExportContainer exportContainer) { - Console.WriteLine("calling Container-Arrange"); +// Console.WriteLine("calling Container-Arrange"); var exportArrange = exportContainer.GetArrangeStrategy(); exportArrange.Arrange(exportContainer); } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/DataContainerConverter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/DataContainerConverter.cs index 8036b53ba8..57f6b31f1d 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/DataContainerConverter.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/DataContainerConverter.cs @@ -79,11 +79,11 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter */ public List Convert(ExportContainer container,Point position){ - Console.WriteLine(""); - Console.WriteLine("start CurrentLocation {0}",CurrentLocation); +// Console.WriteLine(""); +// Console.WriteLine("start CurrentLocation {0}",CurrentLocation); var itemsList = CreateConvertedList(container,position); - Console.WriteLine("end CurrentLocation {0}",CurrentLocation); - Console.WriteLine(""); +// Console.WriteLine("end CurrentLocation {0}",CurrentLocation); +// Console.WriteLine(""); return itemsList; } } 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 84105b826d..0d60fbd260 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs @@ -34,7 +34,10 @@ namespace ICSharpCode.Reporting.PageBuilder public override void BuildExportList() { base.BuildExportList(); - WritePages (); + CurrentPage = CreateNewPage (); + WriteStandardSections(); + BuildDetail(); + base.AddPage(CurrentPage); } @@ -51,33 +54,65 @@ namespace ICSharpCode.Reporting.PageBuilder var converter = new DataContainerConverter(base.Graphics,ReportModel.DetailSection, CurrentLocation, collectionSource); - detail = (ExportContainer)Container.CreateExportColumn(); - detail.Location = CurrentLocation; + + detail = CreateContainerForSection(); var position = Point.Empty; do { + collectionSource.Fill(Container.Items); var r = converter.Convert(Container as ExportContainer,position); - detail.ExportedItems.AddRange(r); - position = new Point(Container.Location.Y,position.Y + Container.Size.Height); + if (ExeedPage(r)) { + detail.ExportedItems.AddRange(r); + CurrentPage.ExportedItems.Insert(2,detail); + Pages.Add(CurrentPage); +// CurrentLocation = DetailStart; + position = Point.Empty; + CurrentPage = CreateNewPage(); + WriteStandardSections(); + CurrentLocation = DetailStart; + detail = CreateContainerForSection(); + } else { + detail.ExportedItems.AddRange(r); + position = new Point(Container.Location.Y,position.Y + Container.Size.Height); + } + + } while (collectionSource.MoveNext()); + if (Pages.Count == 0) { + CurrentPage.ExportedItems.Insert(2,detail); + } else { + CurrentPage.ExportedItems.Insert(1,detail); + } + var a = base.Pages; } else { detail = base.CreateSection(Container,CurrentLocation); - } - CurrentPage.ExportedItems.Insert(2,detail); + } + + IExportContainer CreateContainerForSection( ) + { + var detail = (ExportContainer)Container.CreateExportColumn(); + detail.Location = CurrentLocation; + return detail; } - protected override void WritePages() + bool ExeedPage(System.Collections.Generic.List r) { - base.WritePages(); - BuildDetail(); - base.AddPage(CurrentPage); + var rect = new Rectangle(r[0].Location,r[0].Size); + if (rect.Contains(new Point(100,500))) { + Console.WriteLine("PageBreak"); + return true; + } + Console.WriteLine("contains {0} - {1}",rect,DetailEnds); + return false; } + + internal IReportContainer Container { get; private set; } 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 f6e002ea98..2551cbf855 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs @@ -28,7 +28,10 @@ namespace ICSharpCode.Reporting.PageBuilder public override void BuildExportList() { base.BuildExportList(); - WritePages (); + CurrentPage = CreateNewPage (); + WriteStandardSections(); + BuilDetail(); + base.AddPage(CurrentPage); } @@ -42,12 +45,13 @@ namespace ICSharpCode.Reporting.PageBuilder } - protected override void WritePages() - { - base.WritePages(); - BuilDetail(); - base.AddPage(CurrentPage); - Console.WriteLine("------{0}---------",ReportModel.ReportSettings.PageSize); - } +// protected override void CreatePage() +// { +// CurrentPage = base.CreatePage(); +//// WriteStandardSections(); +//// BuilDetail(); +//// base.AddPage(CurrentPage); +// Console.WriteLine("------{0}---------",ReportModel.ReportSettings.PageSize); +// } } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs index 79ebd78f17..1ac578d872 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs @@ -39,8 +39,9 @@ namespace ICSharpCode.Reporting.WpfReportViewer Document.DocumentPaginator.PageSize = new System.Windows.Size(reportSettings.PageSize.Width,reportSettings.PageSize.Height); var wpfExporter = new WpfExporter(reportSettings,pages); wpfExporter.Run(); - var fixedPage = wpfExporter.FixedPage; - AddPageToDocument(Document,fixedPage); +// var fixedPage = wpfExporter.FixedPage; +// AddPageToDocument(Document,fixedPage); + this.Document = wpfExporter.Document; } static void AddPageToDocument(FixedDocument fixedDocument,FixedPage page) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/FormBuilderFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/FormBuilderFixture.cs index 4f1fb8fbbf..e3ff6d72b7 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/FormBuilderFixture.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/FormBuilderFixture.cs @@ -59,6 +59,7 @@ namespace ICSharpCode.Reporting.Test.PageBuilder formPageBuilder.BuildExportList(); var page = formPageBuilder.Pages[0]; var pageFooter = page.ExportedItems[3]; + var x = formPageBuilder.DetailEnds; Assert.That(formPageBuilder.DetailEnds, Is.EqualTo(new Point(pageFooter.Location.X, pageFooter.Location.Y - 1))); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Reportingfactory/PushModelFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Reportingfactory/PushModelFixture.cs index 06de060d65..d2e3a32c78 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Reportingfactory/PushModelFixture.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Reportingfactory/PushModelFixture.cs @@ -58,8 +58,8 @@ namespace ICSharpCode.Reporting.Test.Reportingfactory var result = section.ExportedItems[0]; Assert.That(result,Is.AssignableFrom(typeof(ExportText))); Console.WriteLine("-------PageLayoutFixture:ShowDebug---------"); - var ex = new DebugExporter(reportCreator.Pages); - ex.Run(); +// var ex = new DebugExporter(reportCreator.Pages); +// ex.Run(); }