Browse Source

PageBreak

reports
Peter Forstmeier 13 years ago
parent
commit
61ab0d7ba0
  1. 76
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs
  2. 12
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs
  3. 4
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs
  4. 8
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/DataContainerConverter.cs
  5. 57
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs
  6. 20
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs
  7. 5
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs
  8. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/PageBuilder/FormBuilderFixture.cs
  9. 4
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Reportingfactory/PushModelFixture.cs

76
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/WpfExporter.cs

@ -11,6 +11,7 @@ using System.Collections.ObjectModel;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Documents; using System.Windows.Documents;
using System.Windows.Markup;
using ICSharpCode.Reporting.Exporter.Visitors; using ICSharpCode.Reporting.Exporter.Visitors;
using ICSharpCode.Reporting.Interfaces.Export; using ICSharpCode.Reporting.Interfaces.Export;
@ -35,31 +36,21 @@ namespace ICSharpCode.Reporting.Exporter
visitor = new WpfVisitor(reportSettings); visitor = new WpfVisitor(reportSettings);
} }
public override void Run () { public override void Run () {
InitFixedPage(); Document = new FixedDocument();
foreach (var page in Pages) { foreach (var page in Pages) {
InternalRun(page); var fixedPage = InternalRun(page);
AddPageToDocument(Document,fixedPage);
} }
} }
void InitFixedPage()
{ FixedPage InternalRun(IExportContainer container)
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 fixedPage = CreateFixedPage();
Canvas canvas = null ; Canvas canvas = null ;
foreach (var item in container.ExportedItems) { foreach (var item in container.ExportedItems) {
var exportContainer = item as IExportContainer; var exportContainer = item as IExportContainer;
@ -76,28 +67,39 @@ namespace ICSharpCode.Reporting.Exporter
Canvas.SetTop(ui, ((IExportColumn)element).Location.Y); Canvas.SetTop(ui, ((IExportColumn)element).Location.Y);
canvas.Children.Add(ui); canvas.Children.Add(ui);
} }
// var size = new Size(exportContainer.DesiredSize.Width,exportContainer.DesiredSize.Height); } else {
// canvas.Measure(size); if (acceptor != null) {
// canvas.Arrange(new Rect(new System.Windows.Point(exportContainer.Location.X,exportContainer.Location.Y),size )); acceptor.Accept(visitor);
// canvas.UpdateLayout(); var uiElement = visitor.UIElement;
// var exportArrange = exportContainer.GetArrangeStrategy(); if (canvas != null) {
// exportArrange.Arrange(exportContainer); Canvas.SetLeft(uiElement, item.Location.X - exportContainer.Location.X);
} Canvas.SetTop(uiElement, item.Location.Y - exportContainer.Location.Y);
// InternalRun(item as IExportContainer); canvas.Children.Add(uiElement);
} else { }
if (acceptor != null) { fixedPage.Children.Add(uiElement);
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);
} }
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;}
} }
} }

12
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs

@ -56,7 +56,6 @@ namespace ICSharpCode.Reporting.PageBuilder
protected void BuildPageHeader() protected void BuildPageHeader()
{ {
var pageHeader = CreateSection(ReportModel.PageHeader,CurrentLocation); var pageHeader = CreateSection(ReportModel.PageHeader,CurrentLocation);
DetailStart = new Point(ReportModel.ReportSettings.LeftMargin,pageHeader.Location.Y + pageHeader.Size.Height +1); DetailStart = new Point(ReportModel.ReportSettings.LeftMargin,pageHeader.Location.Y + pageHeader.Size.Height +1);
AddSectionToPage(pageHeader); AddSectionToPage(pageHeader);
@ -70,7 +69,6 @@ namespace ICSharpCode.Reporting.PageBuilder
ReportModel.ReportSettings.PageSize.Height - ReportModel.ReportSettings.BottomMargin - ReportModel.PageFooter.Size.Height); ReportModel.ReportSettings.PageSize.Height - ReportModel.ReportSettings.BottomMargin - ReportModel.PageFooter.Size.Height);
var pageFooter = CreateSection(ReportModel.PageFooter,CurrentLocation); var pageFooter = CreateSection(ReportModel.PageFooter,CurrentLocation);
Console.WriteLine("pageFooterStartAt {0}",pageFooter.Location);
DetailEnds = new Point(pageFooter.Location.X,pageFooter.Location.Y -1); DetailEnds = new Point(pageFooter.Location.X,pageFooter.Location.Y -1);
AddSectionToPage(pageFooter); AddSectionToPage(pageFooter);
} }
@ -89,18 +87,20 @@ namespace ICSharpCode.Reporting.PageBuilder
#endregion #endregion
protected virtual void WritePages() protected virtual IPage CreateNewPage()
{ {
CurrentPage = InitNewPage(); var page = InitNewPage();
CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.TopMargin); CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,ReportModel.ReportSettings.TopMargin);
return page;
}
protected void WriteStandardSections() {
this.BuildReportHeader(); this.BuildReportHeader();
BuildPageHeader(); BuildPageHeader();
BuildPageFooter(); BuildPageFooter();
BuildReportFooter(); BuildReportFooter();
} }
protected IExportContainer CreateSection(IReportContainer section,Point location) protected IExportContainer CreateSection(IReportContainer section,Point location)
{ {
var containerConverter = new ContainerConverter(Graphics, section, location); var containerConverter = new ContainerConverter(Graphics, section, location);

4
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.Location = new Point(element.Location.X,element.Location.Y + position.Y);
exportColumn.DesiredSize = Measure(element); exportColumn.DesiredSize = Measure(element);
itemsList.Add(exportColumn); 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; return itemsList;
} }
@ -86,7 +86,7 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter
protected void ArrangeContainer(ExportContainer exportContainer) protected void ArrangeContainer(ExportContainer exportContainer)
{ {
Console.WriteLine("calling Container-Arrange"); // Console.WriteLine("calling Container-Arrange");
var exportArrange = exportContainer.GetArrangeStrategy(); var exportArrange = exportContainer.GetArrangeStrategy();
exportArrange.Arrange(exportContainer); exportArrange.Arrange(exportContainer);
} }

8
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/DataContainerConverter.cs

@ -79,11 +79,11 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter
*/ */
public List<IExportColumn> Convert(ExportContainer container,Point position){ public List<IExportColumn> Convert(ExportContainer container,Point position){
Console.WriteLine(""); // Console.WriteLine("");
Console.WriteLine("start CurrentLocation {0}",CurrentLocation); // Console.WriteLine("start CurrentLocation {0}",CurrentLocation);
var itemsList = CreateConvertedList(container,position); var itemsList = CreateConvertedList(container,position);
Console.WriteLine("end CurrentLocation {0}",CurrentLocation); // Console.WriteLine("end CurrentLocation {0}",CurrentLocation);
Console.WriteLine(""); // Console.WriteLine("");
return itemsList; return itemsList;
} }
} }

57
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs

@ -34,7 +34,10 @@ namespace ICSharpCode.Reporting.PageBuilder
public override void BuildExportList() public override void BuildExportList()
{ {
base.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, var converter = new DataContainerConverter(base.Graphics,ReportModel.DetailSection,
CurrentLocation, CurrentLocation,
collectionSource); collectionSource);
detail = (ExportContainer)Container.CreateExportColumn();
detail.Location = CurrentLocation; detail = CreateContainerForSection();
var position = Point.Empty; var position = Point.Empty;
do { do {
collectionSource.Fill(Container.Items); collectionSource.Fill(Container.Items);
var r = converter.Convert(Container as ExportContainer,position); var r = converter.Convert(Container as ExportContainer,position);
detail.ExportedItems.AddRange(r); if (ExeedPage(r)) {
position = new Point(Container.Location.Y,position.Y + Container.Size.Height); 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()); while (collectionSource.MoveNext());
if (Pages.Count == 0) {
CurrentPage.ExportedItems.Insert(2,detail);
} else {
CurrentPage.ExportedItems.Insert(1,detail);
}
var a = base.Pages;
} else { } else {
detail = base.CreateSection(Container,CurrentLocation); 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<IExportColumn> r)
{ {
base.WritePages(); var rect = new Rectangle(r[0].Location,r[0].Size);
BuildDetail(); if (rect.Contains(new Point(100,500))) {
base.AddPage(CurrentPage); Console.WriteLine("PageBreak");
return true;
}
Console.WriteLine("contains {0} - {1}",rect,DetailEnds);
return false;
} }
internal IReportContainer Container { get; private set; } internal IReportContainer Container { get; private set; }
public IEnumerable List {get; private set;} public IEnumerable List {get; private set;}

20
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/FormPageBuilder.cs

@ -28,7 +28,10 @@ namespace ICSharpCode.Reporting.PageBuilder
public override void BuildExportList() public override void BuildExportList()
{ {
base.BuildExportList(); base.BuildExportList();
WritePages (); CurrentPage = CreateNewPage ();
WriteStandardSections();
BuilDetail();
base.AddPage(CurrentPage);
} }
@ -42,12 +45,13 @@ namespace ICSharpCode.Reporting.PageBuilder
} }
protected override void WritePages() // protected override void CreatePage()
{ // {
base.WritePages(); // CurrentPage = base.CreatePage();
BuilDetail(); //// WriteStandardSections();
base.AddPage(CurrentPage); //// BuilDetail();
Console.WriteLine("------{0}---------",ReportModel.ReportSettings.PageSize); //// base.AddPage(CurrentPage);
} // Console.WriteLine("------{0}---------",ReportModel.ReportSettings.PageSize);
// }
} }
} }

5
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); Document.DocumentPaginator.PageSize = new System.Windows.Size(reportSettings.PageSize.Width,reportSettings.PageSize.Height);
var wpfExporter = new WpfExporter(reportSettings,pages); var wpfExporter = new WpfExporter(reportSettings,pages);
wpfExporter.Run(); wpfExporter.Run();
var fixedPage = wpfExporter.FixedPage; // var fixedPage = wpfExporter.FixedPage;
AddPageToDocument(Document,fixedPage); // AddPageToDocument(Document,fixedPage);
this.Document = wpfExporter.Document;
} }
static void AddPageToDocument(FixedDocument fixedDocument,FixedPage page) static void AddPageToDocument(FixedDocument fixedDocument,FixedPage page)

1
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(); formPageBuilder.BuildExportList();
var page = formPageBuilder.Pages[0]; var page = formPageBuilder.Pages[0];
var pageFooter = page.ExportedItems[3]; var pageFooter = page.ExportedItems[3];
var x = formPageBuilder.DetailEnds;
Assert.That(formPageBuilder.DetailEnds, Assert.That(formPageBuilder.DetailEnds,
Is.EqualTo(new Point(pageFooter.Location.X, Is.EqualTo(new Point(pageFooter.Location.X,
pageFooter.Location.Y - 1))); pageFooter.Location.Y - 1)));

4
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]; var result = section.ExportedItems[0];
Assert.That(result,Is.AssignableFrom(typeof(ExportText))); Assert.That(result,Is.AssignableFrom(typeof(ExportText)));
Console.WriteLine("-------PageLayoutFixture:ShowDebug---------"); Console.WriteLine("-------PageLayoutFixture:ShowDebug---------");
var ex = new DebugExporter(reportCreator.Pages); // var ex = new DebugExporter(reportCreator.Pages);
ex.Run(); // ex.Run();
} }

Loading…
Cancel
Save